File: dynobj.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 (88 lines) | stat: -rw-r--r-- 2,492 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
#ifndef _dynobj_h
#define _dynobj_h

//
// DynObj ist die Oberklasse f�r die beweglichen Objekte (zur Zeit nur B�lle)
//
// Funktionaltit�t:
//
//	- Verwaltung aller dynamischen Objekte (durch statische Liste)
// - statische Funktionen Steuerung der Kollisionsberechnung:
//		- void CollisionCalcAll()
//		- void Collide()
//						Aktuelle Kollision ausf�hren
//
// - Vorgeschriebene virtuelle Funktionen:
//		- Real NextCollision()
//						Abfrage des Zeitpunktes der n�chsten Kollision
//		- void CollisionCalc()								(bei TIME-CACHE)
//						Ansto� der Kollisionsberechnung des Objektes, welches
//						alle Object's mit HitFromBall() nach der n�chsten Kollision
//						befragt und das Ergebnis im TIME-CACHE festh�lt.
//		- void HitYouAt(Object *obj, Real time)		(bei TIME-CACHE)
//						Wenn im CollisionCalc beide Objekte B�lle sind, wird der
//						Wert dem anderen Ball mitgeteilt, damit auch dessen
//						TIME-CACHE auf dem aktuellsten Stand ist.
//

#ifndef _real_h
#	include "real.h"
#endif

#if (TIME_CACHE)
#	ifndef _objtab_h
#		include "objtab.h"
#	endif
#endif

class Ball;
class Object;

class DynObj {
	public:
		DynObj();
		virtual ~DynObj();

		static Real CollisionAll();				// Kollisionsbefragung
		static void Collide();						// aktuelle Kollision ausf�hren
		virtual Real NextCollision() = 0;		// n�chste Ber�hrung mit Ball
		virtual void CollisionCalc() = 0;

typedef void (DynObj::*DynObjFun)();
		static void ForAllDyn( DynObjFun fun );
typedef void (DynObj::*DynObjFunD)(Real);
		static void ForAllDyn( DynObjFunD fun, Real param );

		virtual void	Move( Real );	// Verschiebung des Objektes
		virtual void	Reset();			// Initialisierung des Slowsteps
		virtual void	Redraw();		// Initiales Zeichnes des Objekts

		static void DynInitAll();		// alle Initialisierungsroutinen aufrufen
		static void DynEndAll();

		int IsIdle()	{ return idle; }

	protected:
		static Ball		*hit_ball;		// an Kollision beteiligter Ball
		static Object	*hit_object;	// weiteres an Kollision beteiligtes Objekt
		int				id;

		virtual void DynInit();		  	// z.B. Erzeugung des TIME-CACHE
#if (TIME_CACHE)
		virtual void HitYouAt( Object *obj, Real time ) =0;
		int				col_objects;
		ObjTab			obj_list;		// legt Berechnungsreihenfolge fest
#endif

	private:
		static int				id_count;		// aktueller Objektz�hler
		static class DynObj	*dyn_queue;
		class DynObj		 	*next;

		char						idle;				// keine Kollisionsberechnung mehr

friend class Ball;
friend class PBallTop;
};

#endif