absence_thelab

annotate src/demosystem/demosys.h @ 0:1cffe3409164

initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Thu, 23 Oct 2014 01:46:07 +0300
parents
children
rev   line source
nuclear@0 1 #ifndef _DEMOSYS_H_
nuclear@0 2 #define _DEMOSYS_H_
nuclear@0 3
nuclear@0 4 #include <list>
nuclear@0 5 #include "typedefs.h"
nuclear@0 6 #include "timing.h"
nuclear@0 7
nuclear@0 8 #ifdef NUC3D_API_OPENGL
nuclear@0 9 #include "n3dgl/nuc3dhw.h"
nuclear@0 10 #else
nuclear@0 11 #include "3deng/3deng.h"
nuclear@0 12 #endif
nuclear@0 13
nuclear@0 14 enum {TIMETYPE_ABSOLUTE, TIMETYPE_RELATIVE};
nuclear@0 15 enum RenderMode {RenderModeNormal, RenderModeTexture};
nuclear@0 16
nuclear@0 17 // ----- Abstract Base Class Part -----
nuclear@0 18 class Part {
nuclear@0 19 protected:
nuclear@0 20 GraphicsContext *gc;
nuclear@0 21 Scene *scene; // REMOVE
nuclear@0 22
nuclear@0 23 dword StartTime, EndTime, Duration; // in milliseconds
nuclear@0 24 Timer timer; // local part timer
nuclear@0 25
nuclear@0 26 Texture *RenderTexture;
nuclear@0 27 RenderMode rmode;
nuclear@0 28
nuclear@0 29 bool paused;
nuclear@0 30
nuclear@0 31 public:
nuclear@0 32
nuclear@0 33 Part();
nuclear@0 34
nuclear@0 35 virtual void SetGraphicsContext(GraphicsContext *gc);
nuclear@0 36 virtual GraphicsContext *GetGraphicsContext();
nuclear@0 37
nuclear@0 38 virtual void SetTimingAbs(dword start, dword end);
nuclear@0 39 virtual void SetTimingRel(dword start, dword dur);
nuclear@0 40 virtual void Pause();
nuclear@0 41 virtual void Resume();
nuclear@0 42
nuclear@0 43 virtual dword GetStartTime() const;
nuclear@0 44 virtual dword GetEndTime() const;
nuclear@0 45 virtual dword GetDuration() const;
nuclear@0 46 virtual dword GetTimePosition() const;
nuclear@0 47 virtual float GetParametricPosition() const;
nuclear@0 48
nuclear@0 49 virtual void SetRenderMode(RenderMode rmode);
nuclear@0 50 virtual void SetRenderTexture(Texture *tex);
nuclear@0 51
nuclear@0 52 virtual RenderMode GetRenderMode() const;
nuclear@0 53 virtual Texture *GetRenderTexture() const;
nuclear@0 54
nuclear@0 55 virtual void Launch();
nuclear@0 56 virtual void ShutDown();
nuclear@0 57 virtual void MainLoop() = 0;
nuclear@0 58
nuclear@0 59 virtual Scene *GetScene();
nuclear@0 60 };
nuclear@0 61
nuclear@0 62 enum DemoState {DemoStateRunning, DemoStateStopped, DemoStatePaused};
nuclear@0 63
nuclear@0 64 class DemoSystem {
nuclear@0 65 private:
nuclear@0 66 GraphicsContext *gc;
nuclear@0 67
nuclear@0 68 std::list<Part*> parts; // list of all parts
nuclear@0 69 std::list<Part*> active; // currently running
nuclear@0 70 std::list<Part*> inactive; // waiting to run
nuclear@0 71
nuclear@0 72 Timer timer; // global demo timer
nuclear@0 73 DemoState state;
nuclear@0 74
nuclear@0 75 public:
nuclear@0 76
nuclear@0 77 DemoSystem(GraphicsContext *gc);
nuclear@0 78
nuclear@0 79 void AddPart(Part *part);
nuclear@0 80 Part *GetActivePart();
nuclear@0 81
nuclear@0 82 void Run();
nuclear@0 83 void Pause();
nuclear@0 84 void Resume();
nuclear@0 85 void Stop();
nuclear@0 86
nuclear@0 87 void Update();
nuclear@0 88
nuclear@0 89 int LoadTiming(const char *filename);
nuclear@0 90 };
nuclear@0 91
nuclear@0 92
nuclear@0 93 /////////////// exceptions //////////////
nuclear@0 94 class InvalidParam{};
nuclear@0 95
nuclear@0 96
nuclear@0 97 #endif //_DEMOSYS_H_