nuclear@12: /* nuclear@12: New demosystem by Nuclear / Mindlapse nuclear@12: Copyright (C) 2011-2013 John Tsiombikas nuclear@12: nuclear@12: This program is free software: you can redistribute it and/or modify nuclear@12: it under the terms of the GNU General Public License as published by nuclear@12: the Free Software Foundation, either version 3 of the License, or nuclear@12: (at your option) any later version. nuclear@12: nuclear@12: This program is distributed in the hope that it will be useful, nuclear@12: but WITHOUT ANY WARRANTY; without even the implied warranty of nuclear@12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nuclear@12: GNU General Public License for more details. nuclear@12: nuclear@12: You should have received a copy of the GNU General Public License nuclear@12: along with this program. If not, see . nuclear@12: */ nuclear@9: #ifndef DSYS2_H_ nuclear@9: #define DSYS2_H_ nuclear@9: nuclear@9: #include nuclear@9: nuclear@9: struct dsys_demo; nuclear@9: struct dsys_event; nuclear@9: nuclear@9: typedef float demotime_t; nuclear@9: nuclear@9: enum dsys_evtype { nuclear@9: DSYS_SINGLE, nuclear@9: DSYS_PERIODIC nuclear@9: }; nuclear@9: nuclear@9: #ifdef __cplusplus nuclear@9: extern "C" { nuclear@9: #endif nuclear@9: nuclear@9: struct dsys_demo *dsys_open(const char *fname); nuclear@9: struct dsys_demo *dsys_open_stream(FILE *fp); nuclear@9: void dsys_close(struct dsys_demo *demo); nuclear@9: nuclear@9: void dsys_update(struct dsys_demo *demo, demotime_t tm); nuclear@9: nuclear@9: nuclear@9: void dsys_start(struct dsys_demo *demo); nuclear@9: void dsys_stop(struct dsys_demo *demo); nuclear@9: int dsys_is_running(struct dsys_demo *demo); nuclear@9: nuclear@9: nuclear@9: demotime_t dsys_duration(struct dsys_demo *demo); nuclear@9: demotime_t dsys_time(struct dsys_demo *demo); nuclear@9: float dsys_progress(struct dsys_demo *demo); nuclear@9: nuclear@9: /* seek without continuity */ nuclear@9: void dsys_seek(struct dsys_demo *demo, demotime_t tm); nuclear@9: void dsys_seek_norm(struct dsys_demo *demo, float t); nuclear@9: nuclear@9: /* seek by accelerating time */ nuclear@9: void dsys_warp(struct dsys_demo *demo, demotime_t tm); nuclear@9: void dsys_warp_norm(struct dsys_demo *demo, float t); nuclear@9: nuclear@9: nuclear@9: /* events */ nuclear@9: struct dsys_event *dsys_event(struct dsys_demo *demo, const char *name); nuclear@9: nuclear@11: void dsys_set_event_eval(struct dsys_event *ev, float (*eval)(struct dsys_event*, demotime_t)); nuclear@11: nuclear@9: enum dsys_evtype dsys_event_type(struct dsys_event *ev); nuclear@9: float dsys_event_value(struct dsys_event *ev); nuclear@9: nuclear@9: int dsys_event_callback(struct dsys_event *ev, void (*func)(struct dsys_event*, void*), void *cls); nuclear@9: int dsys_event_link(struct dsys_event *ev, float *link); nuclear@9: nuclear@9: /* event evaluators */ nuclear@9: float dsys_eval_step(struct dsys_event *ev, demotime_t t); nuclear@9: float dsys_eval_lerp(struct dsys_event *ev, demotime_t t); nuclear@9: float dsys_eval_sigmoid(struct dsys_event *ev, demotime_t t); nuclear@9: nuclear@9: /* time conversion */ nuclear@9: demotime_t dsys_sec_to_dtime(float sec); nuclear@9: demotime_t dsys_msec_to_dtime(unsigned long msec); nuclear@9: nuclear@9: float dsys_dtime_to_sec(demotime_t tm); nuclear@9: unsigned long dsys_dtime_to_msec(demotime_t tm); nuclear@9: nuclear@9: #ifdef __cplusplus nuclear@9: } nuclear@9: #endif nuclear@9: nuclear@9: nuclear@9: #endif /* DSYS2_H_ */