vrshoot
diff libs/psys/pstrack.c @ 0:b2f14e535253
initial commit
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sat, 01 Feb 2014 19:58:19 +0200 |
parents | |
children |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/libs/psys/pstrack.c Sat Feb 01 19:58:19 2014 +0200 1.3 @@ -0,0 +1,112 @@ 1.4 +#include "pstrack.h" 1.5 + 1.6 +int psys_init_track(struct psys_track *track) 1.7 +{ 1.8 + track->cache_tm = ANM_TIME_INVAL; 1.9 + 1.10 + if(anm_init_track(&track->trk) == -1) { 1.11 + return -1; 1.12 + } 1.13 + return 0; 1.14 +} 1.15 + 1.16 +void psys_destroy_track(struct psys_track *track) 1.17 +{ 1.18 + anm_destroy_track(&track->trk); 1.19 +} 1.20 + 1.21 +int psys_init_track3(struct psys_track3 *track) 1.22 +{ 1.23 + track->cache_tm = ANM_TIME_INVAL; 1.24 + 1.25 + if(anm_init_track(&track->x) == -1) { 1.26 + return -1; 1.27 + } 1.28 + if(anm_init_track(&track->y) == -1) { 1.29 + anm_destroy_track(&track->x); 1.30 + return -1; 1.31 + } 1.32 + if(anm_init_track(&track->z) == -1) { 1.33 + anm_destroy_track(&track->x); 1.34 + anm_destroy_track(&track->z); 1.35 + return -1; 1.36 + } 1.37 + return 0; 1.38 +} 1.39 + 1.40 +void psys_destroy_track3(struct psys_track3 *track) 1.41 +{ 1.42 + anm_destroy_track(&track->x); 1.43 + anm_destroy_track(&track->y); 1.44 + anm_destroy_track(&track->z); 1.45 +} 1.46 + 1.47 +void psys_copy_track(struct psys_track *dest, const struct psys_track *src) 1.48 +{ 1.49 + anm_copy_track(&dest->trk, &src->trk); 1.50 + dest->cache_tm = ANM_TIME_INVAL; 1.51 +} 1.52 + 1.53 +void psys_copy_track3(struct psys_track3 *dest, const struct psys_track3 *src) 1.54 +{ 1.55 + anm_copy_track(&dest->x, &src->x); 1.56 + anm_copy_track(&dest->y, &src->y); 1.57 + anm_copy_track(&dest->z, &src->z); 1.58 + 1.59 + dest->cache_tm = ANM_TIME_INVAL; 1.60 +} 1.61 + 1.62 +void psys_eval_track(struct psys_track *track, anm_time_t tm) 1.63 +{ 1.64 + if(track->cache_tm != tm) { 1.65 + track->cache_tm = tm; 1.66 + track->cache_val = anm_get_value(&track->trk, tm); 1.67 + } 1.68 +} 1.69 + 1.70 +void psys_set_value(struct psys_track *track, anm_time_t tm, float v) 1.71 +{ 1.72 + anm_set_value(&track->trk, tm, v); 1.73 + track->cache_tm = ANM_TIME_INVAL; 1.74 +} 1.75 + 1.76 +float psys_get_value(struct psys_track *track, anm_time_t tm) 1.77 +{ 1.78 + psys_eval_track(track, tm); 1.79 + return track->cache_val; 1.80 +} 1.81 + 1.82 +float psys_get_cur_value(struct psys_track *track) 1.83 +{ 1.84 + return track->cache_val; 1.85 +} 1.86 + 1.87 + 1.88 +void psys_eval_track3(struct psys_track3 *track, anm_time_t tm) 1.89 +{ 1.90 + if(track->cache_tm != tm) { 1.91 + track->cache_tm = tm; 1.92 + track->cache_vec.x = anm_get_value(&track->x, tm); 1.93 + track->cache_vec.y = anm_get_value(&track->y, tm); 1.94 + track->cache_vec.z = anm_get_value(&track->z, tm); 1.95 + } 1.96 +} 1.97 + 1.98 +void psys_set_value3(struct psys_track3 *track, anm_time_t tm, vec3_t v) 1.99 +{ 1.100 + anm_set_value(&track->x, tm, v.x); 1.101 + anm_set_value(&track->y, tm, v.y); 1.102 + anm_set_value(&track->z, tm, v.z); 1.103 + track->cache_tm = ANM_TIME_INVAL; 1.104 +} 1.105 + 1.106 +vec3_t psys_get_value3(struct psys_track3 *track, anm_time_t tm) 1.107 +{ 1.108 + psys_eval_track3(track, tm); 1.109 + return track->cache_vec; 1.110 +} 1.111 + 1.112 +vec3_t psys_get_cur_value3(struct psys_track3 *track) 1.113 +{ 1.114 + return track->cache_vec; 1.115 +}