]> git.tdb.fi Git - libs/demoscene.git/blob - source/action.h
Framework for loading sequences from files
[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 class Demo;
7
8 class Action
9 {
10 public:
11         class Loader: public Msp::DataFile::ObjectLoader<Action>
12         {
13         protected:
14                 Demo &demo;
15
16                 Loader(Action &, Demo &);
17         };
18
19 protected:
20         Action() { }
21 public:
22         virtual ~Action() { }
23
24         virtual void validate() const = 0;
25
26         virtual void start(float, float) { }
27         virtual void beat(int) { }
28         virtual void tick(float, float) { }
29         virtual void end(float) { }
30 };
31
32 class InterpolationAction: public Action
33 {
34 protected:
35         enum Mode
36         {
37                 LINEAR,
38                 HERMITE
39         };
40
41         Mode mode;
42         float start_beat;
43         float duration;
44
45         InterpolationAction(Mode = LINEAR);
46
47 public:
48         virtual void start(float, float);
49         virtual void tick(float, float);
50         virtual void end(float);
51         virtual void interpolate(float, float) { }
52 };
53
54 #endif