1 #ifndef _object_h
2 #define _object_h
3 
4 //
5 // Object ist die Oberklasse der Objekte, die von sich bewegenden Objekten
6 // ber�hrt werden k�nnen.
7 //
8 // Funktionaltit�t:
9 //
10 //	- Verwaltung aller Objekte (durch statische Liste)
11 // - Identifikation der Objekte (durch spezielle ID's im member dyn_id)
12 // - Vorgeschriebene virtuelle Funktionen f�r die Collisionsberechnung:
13 //		- Real HitFromBall( Ball *b )
14 //						Kollisionszeitpunkt des Objektes mit Ball b bestimmen.
15 //		- void CollideWithBall( Ball *b )
16 // 					Ausf�hrung der Kollision mit �nderung der
17 // 					Richtungsvektorn an sich selbst und dem beteiligten Ball.
18 //		- void WasHit( Object *o )
19 //						Nach CollideWithBall wird auch der beteiligte Ball �ber
20 //						die stattgefundene Kollision informiert.
21 //
22 
23 #ifndef _global_h
24 #	include "global.h"
25 #endif
26 #ifndef _real_h
27 #	include "real.h"
28 #endif
29 
30 //
31 // -------------------------------------------------------------------------
32 //   class Object:  Oberklasse
33 // -------------------------------------------------------------------------
34 //
35 class Ball;		// forward-declaration, da Object einen Klassenzeiger braucht
36 
37 class Object {
38 	public:
39 		Object();
40 		virtual ~Object();
41 
42 		virtual Real	Collision();
43 
44 typedef	void (Object::*ObjFun)();
45 		static void ForAll( ObjFun fun );
46 
47 		virtual void Info();
48 
49 		static Real min_time;
50 
51 		virtual void Draw();
52 
53 		typedef enum {
54 			StaticArcObj,
55 			StaticBallObj,
56 			WallObj,
57 			BallObj,
58 			HandObj,		// f�r Hockey, um von B�llen zu unterscheiden
59 			PocketObj,
60 			GoalObj,
61 			UnknownObj
62 		} ObjType;
63 
64 		int	id;
65 
66 	protected:
67 		virtual Real HitFromBall( Ball *b )	= 0;
68 		virtual void CollideWithBall( Ball *b ) = 0;
69 		virtual void WasHit(Object*);
70 
71 		static int		id_count;		// aktueller Objektz�hler
72 		int	dyn_id;						// Id des DynObj (bei Object auf -1 gesetzt)
73 		static class Object *stat_queue;
74 		class Object *next;
75 
76 		ObjType type;
77 
78 private:
79 
80 friend class DynObj;
81 friend class Ball;
82 friend class PBallTop;
83 friend class Game;
84 friend class Hockey;
85 };
86 
87 #endif
88