nuclear@67: #include "pstrack.h" nuclear@67: nuclear@67: int psys_init_track(struct psys_track *track) nuclear@67: { nuclear@67: track->cache_tm = ANM_TIME_INVAL; nuclear@67: nuclear@67: if(anm_init_track(&track->trk) == -1) { nuclear@67: return -1; nuclear@67: } nuclear@67: return 0; nuclear@67: } nuclear@67: nuclear@67: void psys_destroy_track(struct psys_track *track) nuclear@67: { nuclear@67: anm_destroy_track(&track->trk); nuclear@67: } nuclear@67: nuclear@67: int psys_init_track3(struct psys_track3 *track) nuclear@67: { nuclear@67: track->cache_tm = ANM_TIME_INVAL; nuclear@67: nuclear@67: if(anm_init_track(&track->x) == -1) { nuclear@67: return -1; nuclear@67: } nuclear@67: if(anm_init_track(&track->y) == -1) { nuclear@67: anm_destroy_track(&track->x); nuclear@67: return -1; nuclear@67: } nuclear@67: if(anm_init_track(&track->z) == -1) { nuclear@67: anm_destroy_track(&track->x); nuclear@67: anm_destroy_track(&track->z); nuclear@67: return -1; nuclear@67: } nuclear@67: return 0; nuclear@67: } nuclear@67: nuclear@67: void psys_destroy_track3(struct psys_track3 *track) nuclear@67: { nuclear@67: anm_destroy_track(&track->x); nuclear@67: anm_destroy_track(&track->y); nuclear@67: anm_destroy_track(&track->z); nuclear@67: } nuclear@67: nuclear@67: void psys_eval_track(struct psys_track *track, anm_time_t tm) nuclear@67: { nuclear@67: if(track->cache_tm != tm) { nuclear@67: track->cache_tm = tm; nuclear@67: track->cache_val = anm_get_value(&track->trk, tm); nuclear@67: } nuclear@67: } nuclear@67: nuclear@67: void psys_set_value(struct psys_track *track, anm_time_t tm, float v) nuclear@67: { nuclear@67: anm_set_value(&track->trk, tm, v); nuclear@67: track->cache_tm = ANM_TIME_INVAL; nuclear@67: } nuclear@67: nuclear@67: float psys_get_value(struct psys_track *track, anm_time_t tm) nuclear@67: { nuclear@67: psys_eval_track(track, tm); nuclear@67: return track->cache_val; nuclear@67: } nuclear@67: nuclear@67: float psys_get_cur_value(struct psys_track *track) nuclear@67: { nuclear@67: return track->cache_val; nuclear@67: } nuclear@67: nuclear@67: nuclear@67: void psys_eval_track3(struct psys_track3 *track, anm_time_t tm) nuclear@67: { nuclear@67: if(track->cache_tm != tm) { nuclear@67: track->cache_tm = tm; nuclear@67: track->cache_vec.x = anm_get_value(&track->x, tm); nuclear@67: track->cache_vec.y = anm_get_value(&track->y, tm); nuclear@67: track->cache_vec.z = anm_get_value(&track->z, tm); nuclear@67: } nuclear@67: } nuclear@67: nuclear@67: void psys_set_value3(struct psys_track3 *track, anm_time_t tm, vec3_t v) nuclear@67: { nuclear@67: anm_set_value(&track->x, tm, v.x); nuclear@67: anm_set_value(&track->y, tm, v.y); nuclear@67: anm_set_value(&track->z, tm, v.z); nuclear@67: track->cache_tm = ANM_TIME_INVAL; nuclear@67: } nuclear@67: nuclear@67: vec3_t psys_get_value3(struct psys_track3 *track, anm_time_t tm) nuclear@67: { nuclear@67: psys_eval_track3(track, tm); nuclear@67: return track->cache_vec; nuclear@67: } nuclear@67: nuclear@67: vec3_t psys_get_cur_value3(struct psys_track3 *track) nuclear@67: { nuclear@67: return track->cache_vec; nuclear@67: }