]> git.tdb.fi Git - libs/demoscene.git/blob - source/action.h
Allow stages to define actions
[libs/demoscene.git] / source / action.h
1 #ifndef MSP_DEMOSCENE_ACTION_H_
2 #define MSP_DEMOSCENE_ACTION_H_
3
4 #include <msp/datafile/objectloader.h>
5
6 namespace Msp {
7 namespace DemoScene {
8
9 class Demo;
10
11 class Action
12 {
13 public:
14         class Loader: public Msp::DataFile::ObjectLoader<Action>
15         {
16         protected:
17                 Demo &demo;
18
19                 Loader(Action &, Demo &);
20         };
21
22 protected:
23         Action() { }
24 public:
25         virtual ~Action() { }
26
27         virtual void validate() const = 0;
28
29         virtual void start(float, float) { }
30         virtual void beat(int) { }
31         virtual void tick(float, float) { }
32         virtual void end(float) { }
33 };
34
35 class InterpolationAction: public Action
36 {
37 protected:
38         enum Mode
39         {
40                 LINEAR,
41                 HERMITE
42         };
43
44         Mode mode;
45         float start_beat;
46         float duration;
47
48         InterpolationAction(Mode = LINEAR);
49
50 public:
51         virtual void start(float, float);
52         virtual void tick(float, float);
53         virtual void end(float);
54         virtual void interpolate(float, float) { }
55 };
56
57 } // namespace DemoScene
58 } // namespace Msp
59
60 #endif