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

  1. #ifndef _dynobj_h
  2. #define _dynobj_h
  3.  
  4. //
  5. // DynObj ist die Oberklasse fⁿr die beweglichen Objekte (zur Zeit nur BΣlle)
  6. //
  7. // FunktionaltitΣt:
  8. //
  9. //    - Verwaltung aller dynamischen Objekte (durch statische Liste)
  10. // - statische Funktionen Steuerung der Kollisionsberechnung:
  11. //        - void CollisionCalcAll()
  12. //        - void Collide()
  13. //                        Aktuelle Kollision ausfⁿhren
  14. //
  15. // - Vorgeschriebene virtuelle Funktionen:
  16. //        - Real NextCollision()
  17. //                        Abfrage des Zeitpunktes der nΣchsten Kollision
  18. //        - void CollisionCalc()                                (bei TIME-CACHE)
  19. //                        Ansto▀ der Kollisionsberechnung des Objektes, welches
  20. //                        alle Object's mit HitFromBall() nach der nΣchsten Kollision
  21. //                        befragt und das Ergebnis im TIME-CACHE festhΣlt.
  22. //        - void HitYouAt(Object *obj, Real time)        (bei TIME-CACHE)
  23. //                        Wenn im CollisionCalc beide Objekte BΣlle sind, wird der
  24. //                        Wert dem anderen Ball mitgeteilt, damit auch dessen
  25. //                        TIME-CACHE auf dem aktuellsten Stand ist.
  26. //
  27.  
  28. #ifndef _real_h_
  29. #    include "real.h"
  30. #endif
  31.  
  32. #if (TIME_CACHE)
  33. #    ifndef _objtab_h
  34. #        include "objtab.h"
  35. #    endif
  36. #endif
  37.  
  38. class Ball;
  39. class Object;
  40.  
  41. class DynObj {
  42.     public:
  43.         DynObj();
  44.         virtual ~DynObj();
  45.  
  46.         static Real CollisionAll();                // Kollisionsbefragung
  47.         static void Collide();                        // aktuelle Kollision ausfⁿhren
  48.         virtual Real NextCollision() = 0;        // nΣchste Berⁿhrung mit Ball
  49.         virtual void CollisionCalc() = 0;
  50.  
  51. typedef void (DynObj::*DynObjFun)();
  52.         static void ForAllDyn( DynObjFun fun );
  53. typedef void (DynObj::*DynObjFunD)(Real);
  54.         static void ForAllDyn( DynObjFunD fun, Real param );
  55.  
  56.         virtual void    Move( Real );    // Verschiebung des Objektes
  57.         virtual void    Reset();            // Initialisierung des Slowsteps
  58.         virtual void    Redraw();        // Initiales Zeichnes des Objekts
  59.  
  60.         static void DynInitAll();        // alle Initialisierungsroutinen aufrufen
  61.         static void DynEndAll();
  62.  
  63.         int IsIdle()    { return idle; }
  64.  
  65.     protected:
  66.         static Ball        *hit_ball;        // an Kollision beteiligter Ball
  67.         static Object    *hit_object;    // weiteres an Kollision beteiligtes Objekt
  68.         int                id;
  69.  
  70.         virtual void DynInit();              // z.B. Erzeugung des TIME-CACHE
  71. #if (TIME_CACHE)
  72.         virtual void HitYouAt( Object *obj, Real time ) =0;
  73.         int                col_objects;
  74.         ObjTab            obj_list;        // legt Berechnungsreihenfolge fest
  75. #endif
  76.  
  77.     private:
  78.         static int                id_count;        // aktueller ObjektzΣhler
  79.         static class DynObj    *dyn_queue;
  80.         class DynObj             *next;
  81.  
  82.         char                        idle;                // keine Kollisionsberechnung mehr
  83.  
  84. friend class Ball;
  85. friend class PBallTop;
  86. };
  87.  
  88. #endif
  89.