struct demoscreen {
char *name;
- struct anm_track track;
-
int (*init)(void);
void (*destroy)(void);
void (*reshape)(int x, int y);
void (*mouse)(int bn, int pressed, int x, int y);
void (*motion)(int x, int y);
- struct demoscreen *next;
+ struct anm_track track;
+ long start_time;
+ int prio;
+ float vis;
};
-/* global demo state */
-int dsys_running; /* run/stop state */
-int dsys_eof; /* end of demo flag, seek back to reset */
-long dsys_time; /* demo time in milliseconds */
+struct demoevent {
+ char *name;
+ struct anm_track track;
+ float value;
+ struct demoscreen *scr;
+};
#define MAX_DSYS_SCREENS 64
-struct demoscreen *dsys_screens[MAX_DSYS_SCREENS];
-int dsys_num_screens;
-struct demoscreen *dsys_act_scr; /* linked list of active screens */
+struct demosystem {
+ int running; /* run/stop state */
+ int eof; /* end of demo flag, seek back to reset */
+ long tmsec;
+
+ struct demoscreen *screens[MAX_DSYS_SCREENS];
+ int num_screens;
+ struct demoscreen *act[MAX_DSYS_SCREENS];
+ int num_act;
+
+ struct demoscreen *scr_override;
+
+ void *trackmap;
+ struct demoevent *ev;
+ int num_ev;
+};
+
+struct demosystem dsys;
int dsys_init(const char *fname);
void dsys_destroy(void);
-/* overrides the demo sequence, and runs a single screen */
-struct demoscreen *dsys_find_screen(const char *name);
-void dsys_run_screen(struct demoscreen *scr);
+void dsys_update(void);
+void dsys_draw(void);
void dsys_run(void);
void dsys_stop(void);
void dsys_seek_rel(long dt);
void dsys_seek_norm(float t);
+/* overrides the demo sequence, and runs a single screen */
+struct demoscreen *dsys_find_screen(const char *name);
+void dsys_run_screen(struct demoscreen *scr);
+
int dsys_add_screen(struct demoscreen *scr);
+/* demo event tracks */
+int dsys_add_event(const char *name);
+int dsys_find_event(const char *name);
+float dsys_value(const char *name);
+
#endif /* DEMOSYS_H_ */