nuclear@0: #ifndef _DEMOSYS_H_ nuclear@0: #define _DEMOSYS_H_ nuclear@0: nuclear@0: #include nuclear@0: #include "typedefs.h" nuclear@0: #include "timing.h" nuclear@0: nuclear@0: #ifdef NUC3D_API_OPENGL nuclear@0: #include "n3dgl/nuc3dhw.h" nuclear@0: #else nuclear@0: #include "3deng/3deng.h" nuclear@0: #endif nuclear@0: nuclear@0: enum {TIMETYPE_ABSOLUTE, TIMETYPE_RELATIVE}; nuclear@0: enum RenderMode {RenderModeNormal, RenderModeTexture}; nuclear@0: nuclear@0: // ----- Abstract Base Class Part ----- nuclear@0: class Part { nuclear@0: protected: nuclear@0: GraphicsContext *gc; nuclear@0: Scene *scene; // REMOVE nuclear@0: nuclear@0: dword StartTime, EndTime, Duration; // in milliseconds nuclear@0: Timer timer; // local part timer nuclear@0: nuclear@0: Texture *RenderTexture; nuclear@0: RenderMode rmode; nuclear@0: nuclear@0: bool paused; nuclear@0: nuclear@0: public: nuclear@0: nuclear@0: Part(); nuclear@0: nuclear@0: virtual void SetGraphicsContext(GraphicsContext *gc); nuclear@0: virtual GraphicsContext *GetGraphicsContext(); nuclear@0: nuclear@0: virtual void SetTimingAbs(dword start, dword end); nuclear@0: virtual void SetTimingRel(dword start, dword dur); nuclear@0: virtual void Pause(); nuclear@0: virtual void Resume(); nuclear@0: nuclear@0: virtual dword GetStartTime() const; nuclear@0: virtual dword GetEndTime() const; nuclear@0: virtual dword GetDuration() const; nuclear@0: virtual dword GetTimePosition() const; nuclear@0: virtual float GetParametricPosition() const; nuclear@0: nuclear@0: virtual void SetRenderMode(RenderMode rmode); nuclear@0: virtual void SetRenderTexture(Texture *tex); nuclear@0: nuclear@0: virtual RenderMode GetRenderMode() const; nuclear@0: virtual Texture *GetRenderTexture() const; nuclear@0: nuclear@0: virtual void Launch(); nuclear@0: virtual void ShutDown(); nuclear@0: virtual void MainLoop() = 0; nuclear@0: nuclear@0: virtual Scene *GetScene(); nuclear@0: }; nuclear@0: nuclear@0: enum DemoState {DemoStateRunning, DemoStateStopped, DemoStatePaused}; nuclear@0: nuclear@0: class DemoSystem { nuclear@0: private: nuclear@0: GraphicsContext *gc; nuclear@0: nuclear@0: std::list parts; // list of all parts nuclear@0: std::list active; // currently running nuclear@0: std::list inactive; // waiting to run nuclear@0: nuclear@0: Timer timer; // global demo timer nuclear@0: DemoState state; nuclear@0: nuclear@0: public: nuclear@0: nuclear@0: DemoSystem(GraphicsContext *gc); nuclear@0: nuclear@0: void AddPart(Part *part); nuclear@0: Part *GetActivePart(); nuclear@0: nuclear@0: void Run(); nuclear@0: void Pause(); nuclear@0: void Resume(); nuclear@0: void Stop(); nuclear@0: nuclear@0: void Update(); nuclear@0: nuclear@0: int LoadTiming(const char *filename); nuclear@0: }; nuclear@0: nuclear@0: nuclear@0: /////////////// exceptions ////////////// nuclear@0: class InvalidParam{}; nuclear@0: nuclear@0: nuclear@0: #endif //_DEMOSYS_H_