File: pball.h

package info (click to toggle)
flying 6.20-6
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, lenny
  • size: 752 kB
  • ctags: 1,873
  • sloc: cpp: 10,966; makefile: 189
file content (154 lines) | stat: -rw-r--r-- 4,168 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#ifndef _pball_h
#define _pball_h

//
// In diesem Modul wird die Klasse PBallTop deklariert, die der
// rechnerspezifischen Klasse PBall als Oberklasse dient.
//
#ifndef _vec2_h
#	include "vec2.h"
#endif

class Ball;

typedef enum {
	BillardQueue,
	DiscSlider,
	DiscThrower
} PBallType;

class PBallTop {
	public:
		PBallTop(PBallType type=BillardQueue);
		virtual ~PBallTop();

		virtual void Warp( const Vec2 &dest ) = 0;

typedef void (PBallTop::*PBallFun)();
		static void ForAll( PBallFun fun );

		void CueMoved();								// Callback an der Kugel
		void CueWasHit();								// Callback an der Kugel

		virtual void Redraw();
		virtual void Update();

	protected:
		virtual void Press(int button);
		virtual void Release(int button);

		typedef enum {
			Unlocked		=   1,
			Moving		=   2,
			Aiming		=   4,
			Charging		=   8,
			OldCharging =  16,
			Shooting		=  32,
			OldShooting =  64,
			ChargeOrShoot	= 120,	// Charging|Shooting
			Locked			= 124,	// Aiming|Charging|Shooting
			LockedQueue = 128,
			UsingTool		= 252,	// Aiming|Charging|Shooting|LockedQueue
			PullMoving	= 256,
			ReadyToSleep	= 263		// Unlocked|Moving|Aiming|PullMoving
		} Mode;
		Mode					mode;
friend class PBallNorm;				// for WaitForEvents-Implementation

		PBallType			pball_type;

		Ball *cue;
		Ball *default_cue;
		Real FindPressed( Ball **best );			// sucht n�chste Kugel
		Ball *FindCueBall();							// sucht n�chstgelegene Kugel

		void StartAiming( Ball *cueball=0L );	// Zielen mit gew�hlter Kugel
		void StartCharging( int old );			// Aufladen
		void RestartCharging();
		void StartShooting( int old );			// Animation des Sto�es starten
		void Shoot();									// Sto� ausl�sen, Kugel loslassen

		void StartPullMoving( Ball *cueball=0L );// Kugel auf Tisch bewegen

		void StartMoving( Ball *cueball=0L );	// Kugel direkt bewegen
	public:
		void StopMoving();							// bewegte Kugel loslassen
	protected:
		void ReleaseBall();							// Kugel loslassen
		void GoUnlocked();							// �bergang in Unlock-Zustand

	// Pointerbewegung
		Vec2	dest;				  	  	// aktuelle Position der Maus
//		union {
			Real		target_time;		// abs. Zeit, wann Ziel erreicht sein soll
			Real		lock_time;			// lock-Zeit nach Schu�
//		};
		Vec2	q_end;					// Spitze des Queue's (w�hrend lock-Zeit)

	public:
		static Real WarpTime;			// Zeitspanne f�r einen Maussprung
		static Real LockedQueueDelay;	// Nachlauf des gelock'ten Queues

	protected:
		void WarpRecalc();
		void PointerMoveTo( const Vec2 &pointer_position );

		virtual void RedrawPointer() = 0;				// Mausanzeige
		virtual void SetPointer( int x, int y ) = 0;	// Mausanzeige

	// Aiming Tool
		int	tool_is_visible;
		virtual void StartAimingTool();
		virtual void MoveAimingTool();
		virtual void EndAimingTool();
		virtual void DrawAimingTool(int charge_only=0);
		void		SaveAimingState();

		int	valid_queue_position;
		Vec2	q_end_s, q_s1_s, q_s2_s;
		virtual void StartQueue(const Vec2 &end, const Vec2 &s1, const Vec2 &s2);
		virtual void MoveQueue(const Vec2 &end, const Vec2 &s1, const Vec2 &s2);
		virtual void EndQueue();
		virtual void DrawQueue();

#define MAX_PREPOS	3
		void 		PreCalc();
		int		ncalc_pos;
		Vec2		calc_pos[MAX_PREPOS];
		Vec2		balls_dir;					// Richtung zur Zielkugel
		Vec2		my_dir;						// Richtung der Sto�kugel

	// Charger
		Real		next_chargestep;			// Zeit des n�chsten Aufladens
		Real		last_chargestep;			// Zeit des letzten Aufladens
		Real		charge;						// Aktuelle Ladung
		Real		charge_increment;			// Aktuelle Einheiten pro Sekunde
		Real		save_charge;				// Ladung beim Abschu�

		int		id;

		int		aim_hint;		// Spezialhilfe zum Zielen
		int		aim_mode;		// Pointer-Mode beim letzten Zeichnen
		Vec2		aim_p;			// Kugelposition beim letzten Zeichnen
		Real		aim_r;			// Kugelradius
	//	int		aim_x, aim_y;	// alte Pointerposition
		Vec2		old_dest;		// alte Pointerposition
		Real		aim_charge;
		int		int_charge;
		char		hint_valid;

		int		x_old, y_old;	// alte Pointerposition (von SetPointer)

	protected:
		static int					id_count;
		static class PBallTop	*pball_queue;
		class PBallTop				*next;
};

#ifndef __TURBOC__
#	include "xpball.h"
#else
#	include "dospball.h"
#endif

#endif