screen override
[andemo] / src / demosys.h
1 #ifndef DEMOSYS_H_
2 #define DEMOSYS_H_
3
4 #include "anim/track.h"
5
6 struct demoscreen {
7         char *name;
8
9         int (*init)(void);
10         void (*destroy)(void);
11         void (*reshape)(int x, int y);
12
13         void (*start)(void);
14         void (*stop)(void);
15
16         void (*update)(long tmsec);
17         void (*draw)(void);
18
19         void (*keyboard)(int key, int pressed);
20         void (*mouse)(int bn, int pressed, int x, int y);
21         void (*motion)(int x, int y);
22
23         struct anm_track track;
24         int active, prio;
25         float vis;
26 };
27
28 #define MAX_DSYS_SCREENS        64
29 struct demosystem {
30         int running;                    /* run/stop state */
31         int eof;                                /* end of demo flag, seek back to reset */
32         long tmsec;
33
34         struct demoscreen *screens[MAX_DSYS_SCREENS];
35         int num_screens;
36         struct demoscreen *act[MAX_DSYS_SCREENS];
37         int num_act;
38
39         struct demoscreen *scr_override;
40
41         void *trackmap;
42         struct anm_track *track;
43         float *value;                           /* values for each track, stored on update */
44         int num_tracks;
45 };
46
47 struct demosystem dsys;
48
49
50 int dsys_init(const char *fname);
51 void dsys_destroy(void);
52
53 void dsys_update(void);
54 void dsys_draw(void);
55
56 void dsys_run(void);
57 void dsys_stop(void);
58 void dsys_seek_abs(long tm);
59 void dsys_seek_rel(long dt);
60 void dsys_seek_norm(float t);
61
62 /* overrides the demo sequence, and runs a single screen */
63 struct demoscreen *dsys_find_screen(const char *name);
64 void dsys_run_screen(struct demoscreen *scr);
65
66 int dsys_add_screen(struct demoscreen *scr);
67
68 /* demo event tracks */
69 int dsys_add_track(const char *name);
70 int dsys_find_track(const char *name);
71 float dsys_value(const char *name);
72
73 #endif  /* DEMOSYS_H_ */