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 ReadyToSleep = 263 // Unlocked|Moving|Aiming|PullMoving 54 } Mode; 55 Mode mode; 56 friend class PBallNorm; // for WaitForEvents-Implementation 57 58 PBallType pball_type; 59 60 Ball *cue; 61 Ball *default_cue; 62 Real FindPressed( Ball **best ); // sucht n�chste Kugel 63 Ball *FindCueBall(); // sucht n�chstgelegene Kugel 64 65 void StartAiming( Ball *cueball=0L ); // Zielen mit gew�hlter Kugel 66 void StartCharging( int old ); // Aufladen 67 void RestartCharging(); 68 void StartShooting( int old ); // Animation des Sto�es starten 69 void Shoot(); // Sto� ausl�sen, Kugel loslassen 70 71 void StartPullMoving( Ball *cueball=0L );// Kugel auf Tisch bewegen 72 73 void StartMoving( Ball *cueball=0L ); // Kugel direkt bewegen 74 public: 75 void StopMoving(); // bewegte Kugel loslassen 76 protected: 77 void ReleaseBall(); // Kugel loslassen 78 void GoUnlocked(); // �bergang in Unlock-Zustand 79 80 // Pointerbewegung 81 Vec2 dest; // aktuelle Position der Maus 82 // union { 83 Real target_time; // abs. Zeit, wann Ziel erreicht sein soll 84 Real lock_time; // lock-Zeit nach Schu� 85 // }; 86 Vec2 q_end; // Spitze des Queue's (w�hrend lock-Zeit) 87 88 public: 89 static Real WarpTime; // Zeitspanne f�r einen Maussprung 90 static Real LockedQueueDelay; // Nachlauf des gelock'ten Queues 91 92 protected: 93 void WarpRecalc(); 94 void PointerMoveTo( const Vec2 &pointer_position ); 95 96 virtual void RedrawPointer() = 0; // Mausanzeige 97 virtual void SetPointer( int x, int y ) = 0; // Mausanzeige 98 99 // Aiming Tool 100 int tool_is_visible; 101 virtual void StartAimingTool(); 102 virtual void MoveAimingTool(); 103 virtual void EndAimingTool(); 104 virtual void DrawAimingTool(int charge_only=0); 105 void SaveAimingState(); 106 107 int valid_queue_position; 108 Vec2 q_end_s, q_s1_s, q_s2_s; 109 virtual void StartQueue(const Vec2 &end, const Vec2 &s1, const Vec2 &s2); 110 virtual void MoveQueue(const Vec2 &end, const Vec2 &s1, const Vec2 &s2); 111 virtual void EndQueue(); 112 virtual void DrawQueue(); 113 114 #define MAX_PREPOS 3 115 void PreCalc(); 116 int ncalc_pos; 117 Vec2 calc_pos[MAX_PREPOS]; 118 Vec2 balls_dir; // Richtung zur Zielkugel 119 Vec2 my_dir; // Richtung der Sto�kugel 120 121 // Charger 122 Real next_chargestep; // Zeit des n�chsten Aufladens 123 Real last_chargestep; // Zeit des letzten Aufladens 124 Real charge; // Aktuelle Ladung 125 Real charge_increment; // Aktuelle Einheiten pro Sekunde 126 Real save_charge; // Ladung beim Abschu� 127 128 int id; 129 130 int aim_hint; // Spezialhilfe zum Zielen 131 int aim_mode; // Pointer-Mode beim letzten Zeichnen 132 Vec2 aim_p; // Kugelposition beim letzten Zeichnen 133 Real aim_r; // Kugelradius 134 // int aim_x, aim_y; // alte Pointerposition 135 Vec2 old_dest; // alte Pointerposition 136 Real aim_charge; 137 int int_charge; 138 char hint_valid; 139 140 int x_old, y_old; // alte Pointerposition (von SetPointer) 141 142 protected: 143 static int id_count; 144 static class PBallTop *pball_queue; 145 class PBallTop *next; 146 }; 147 148 #ifndef __TURBOC__ 149 # include "xpball.h" 150 #else 151 # include "dospball.h" 152 #endif 153 154 #endif 155