screen-relative events
[andemo] / src / demosys.h
index e369771..11ec714 100644 (file)
@@ -6,8 +6,6 @@
 struct demoscreen {
        char *name;
 
-       struct anm_track track;
-
        int (*init)(void);
        void (*destroy)(void);
        void (*reshape)(int x, int y);
@@ -22,26 +20,45 @@ struct demoscreen {
        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);
@@ -49,6 +66,15 @@ void dsys_seek_abs(long tm);
 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_ */