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