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