home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / Games / flying-6.11 / pball.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-06-30  |  3.9 KB  |  151 lines

  1. #ifndef _pball_h
  2. #define _pball_h
  3.  
  4. //
  5. // In diesem Modul wird die Klasse PBallTop deklariert, die der
  6. // rechnerspezifischen Klasse PBall als Oberklasse dient.
  7. //
  8. #ifndef _vec2_h
  9. #    include "vec2.h"
  10. #endif
  11.  
  12. class Ball;
  13.  
  14. typedef enum {
  15.     BillardQueue,
  16.     DiscSlider,
  17.     DiscThrower
  18. } PBallType;
  19.  
  20. class PBallTop {
  21.     public:
  22.         PBallTop(PBallType type=BillardQueue);
  23.         virtual ~PBallTop();
  24.  
  25.         virtual void Warp( const Vec2 &dest ) = 0;
  26.  
  27. typedef void (PBallTop::*PBallFun)();
  28.         static void ForAll( PBallFun fun );
  29.  
  30.         void CueMoved();                                // Callback an der Kugel
  31.         void CueWasHit();                                // Callback an der Kugel
  32.  
  33.         virtual void Redraw();
  34.         virtual void Update();
  35.  
  36.     protected:
  37.         virtual void Press(int button);
  38.         virtual void Release(int button);
  39.  
  40.         typedef enum {
  41.             Unlocked        =   1,
  42.             Moving        =   2,
  43.             Aiming        =   4,
  44.             Charging        =   8,
  45.             OldCharging =  16,
  46.             Shooting        =  32,
  47.             OldShooting =  64,
  48.             ChargeOrShoot    = 120,    // Charging|Shooting
  49.             Locked            = 124,    // Aiming|Charging|Shooting
  50.             LockedQueue = 128,
  51.             UsingTool        = 252,    // Aiming|Charging|Shooting|LockedQueue
  52.             PullMoving        = 256
  53.         } Mode;
  54.         Mode                    mode;
  55.         PBallType            pball_type;
  56.  
  57.         Ball *cue;
  58.         Ball *default_cue;
  59.         Real FindPressed( Ball **best );            // sucht nΣchste Kugel
  60.         Ball *FindCueBall();                            // sucht nΣchstgelegene Kugel
  61.  
  62.         void StartAiming( Ball *cueball=0l );    // Zielen mit gewΣhlter Kugel
  63.         void StartCharging( int old );            // Aufladen
  64.         void RestartCharging();
  65.         void StartShooting( int old );            // Animation des Sto▀es starten
  66.         void Shoot();                                    // Sto▀ ausl÷sen, Kugel loslassen
  67.  
  68.         void StartPullMoving( Ball *cueball=0l );// Kugel auf Tisch bewegen
  69.  
  70.         void StartMoving( Ball *cueball=0l );    // Kugel direkt bewegen
  71.     public:
  72.         void StopMoving();                            // bewegte Kugel loslassen
  73.     protected:
  74.         void ReleaseBall();                            // Kugel loslassen
  75.         void GoUnlocked();                            // ▄bergang in Unlock-Zustand
  76.  
  77.     // Pointerbewegung
  78.         Vec2    dest;                            // aktuelle Position der Maus
  79. //        union {
  80.             Real        target_time;        // abs. Zeit, wann Ziel erreicht sein soll
  81.             Real        lock_time;            // lock-Zeit nach Schu▀
  82. //        };
  83.         Vec2    q_end;                    // Spitze des Queue's (wΣhrend lock-Zeit)
  84.  
  85.     public:
  86.         static Real WarpTime;            // Zeitspanne fⁿr einen Maussprung
  87.         static Real LockedQueueDelay;    // Nachlauf des gelock'ten Queues
  88.  
  89.     protected:
  90.         void WarpRecalc();
  91.         void PointerMoveTo( const Vec2 &pointer_position );
  92.  
  93.         virtual void RedrawPointer() = 0;                // Mausanzeige
  94.         virtual void SetPointer( int x, int y ) = 0;    // Mausanzeige
  95.  
  96.     // Aiming Tool
  97.         int    tool_is_visible;
  98.         virtual void StartAimingTool();
  99.         virtual void MoveAimingTool();
  100.         virtual void EndAimingTool();
  101.         virtual void DrawAimingTool(int charge_only=0);
  102.         void        SaveAimingState();
  103.  
  104.         int    valid_queue_position;
  105.         Vec2    q_end_s, q_s1_s, q_s2_s;
  106.         virtual void StartQueue(const Vec2 &end, const Vec2 &s1, const Vec2 &s2);
  107.         virtual void MoveQueue(const Vec2 &end, const Vec2 &s1, const Vec2 &s2);
  108.         virtual void EndQueue();
  109.         virtual void DrawQueue();
  110.  
  111. #define MAX_PREPOS    3
  112.         void         PreCalc();
  113.         int        ncalc_pos;
  114.         Vec2        calc_pos[MAX_PREPOS];
  115.         Vec2        balls_dir;                    // Richtung zur Zielkugel
  116.         Vec2        my_dir;                        // Richtung der Sto▀kugel
  117.  
  118.     // Charger
  119.         Real        next_chargestep;            // Zeit des nΣchsten Aufladens
  120.         Real        last_chargestep;            // Zeit des letzten Aufladens
  121.         Real        charge;                        // Aktuelle Ladung
  122.         Real        charge_increment;            // Aktuelle Einheiten pro Sekunde
  123.         Real        save_charge;                // Ladung beim Abschu▀
  124.  
  125.         int        id;
  126.  
  127.         int        aim_hint;        // Spezialhilfe zum Zielen
  128.         int        aim_mode;        // Pointer-Mode beim letzten Zeichnen
  129.         Vec2        aim_p;            // Kugelposition beim letzten Zeichnen
  130.         Real        aim_r;            // Kugelradius
  131.         int        aim_x, aim_y;    // alte Pointerposition
  132.         Real        aim_charge;
  133.         int        int_charge;
  134.         char        hint_valid;
  135.  
  136.         int        x_old, y_old;    // alte Pointerposition (von SetPointer)
  137.  
  138.     private:
  139.         static int                    id_count;
  140.         static class PBallTop    *pball_queue;
  141.         class PBallTop                *next;
  142. };
  143.  
  144. #ifndef __TURBOC__
  145. #    include "xpball.h"
  146. #else
  147. #    include "dospball.h"
  148. #endif
  149.  
  150. #endif
  151.