nuclear@67: #include nuclear@67: #include "rndval.h" nuclear@67: nuclear@67: int psys_init_anm_rnd(struct psys_anm_rnd *r) nuclear@67: { nuclear@67: if(psys_init_track(&r->value) == -1) { nuclear@67: return -1; nuclear@67: } nuclear@67: if(psys_init_track(&r->range) == -1) { nuclear@67: psys_destroy_track(&r->value); nuclear@67: return -1; nuclear@67: } nuclear@67: return 0; nuclear@67: } nuclear@67: nuclear@67: void psys_destroy_anm_rnd(struct psys_anm_rnd *r) nuclear@67: { nuclear@67: psys_destroy_track(&r->value); nuclear@67: psys_destroy_track(&r->range); nuclear@67: } nuclear@67: nuclear@67: int psys_init_anm_rnd3(struct psys_anm_rnd3 *r) nuclear@67: { nuclear@67: if(psys_init_track3(&r->value) == -1) { nuclear@67: return -1; nuclear@67: } nuclear@67: if(psys_init_track3(&r->range) == -1) { nuclear@67: psys_destroy_track3(&r->value); nuclear@67: return -1; nuclear@67: } nuclear@67: return 0; nuclear@67: } nuclear@67: nuclear@67: void psys_destroy_anm_rnd3(struct psys_anm_rnd3 *r) nuclear@67: { nuclear@67: psys_destroy_track3(&r->value); nuclear@67: psys_destroy_track3(&r->range); nuclear@67: } nuclear@67: nuclear@67: nuclear@67: void psys_set_rnd(struct psys_rnd *r, float val, float range) nuclear@67: { nuclear@67: r->value = val; nuclear@67: r->range = range; nuclear@67: } nuclear@67: nuclear@67: void psys_set_rnd3(struct psys_rnd3 *r, vec3_t val, vec3_t range) nuclear@67: { nuclear@67: r->value = val; nuclear@67: r->range = range; nuclear@67: } nuclear@67: nuclear@67: void psys_set_anm_rnd(struct psys_anm_rnd *r, anm_time_t tm, float val, float range) nuclear@67: { nuclear@67: psys_set_value(&r->value, tm, val); nuclear@67: psys_set_value(&r->range, tm, range); nuclear@67: } nuclear@67: nuclear@67: void psys_set_anm_rnd3(struct psys_anm_rnd3 *r, anm_time_t tm, vec3_t val, vec3_t range) nuclear@67: { nuclear@67: psys_set_value3(&r->value, tm, val); nuclear@67: psys_set_value3(&r->range, tm, range); nuclear@67: } nuclear@67: nuclear@67: nuclear@67: float psys_eval_rnd(struct psys_rnd *r) nuclear@67: { nuclear@67: return r->value + r->range * (float)rand() / (float)RAND_MAX - 0.5 * r->range; nuclear@67: } nuclear@67: nuclear@67: vec3_t psys_eval_rnd3(struct psys_rnd3 *r) nuclear@67: { nuclear@67: vec3_t res; nuclear@67: res.x = r->value.x + r->range.x * (float)rand() / (float)RAND_MAX - 0.5 * r->range.x; nuclear@67: res.y = r->value.y + r->range.y * (float)rand() / (float)RAND_MAX - 0.5 * r->range.y; nuclear@67: res.z = r->value.z + r->range.z * (float)rand() / (float)RAND_MAX - 0.5 * r->range.z; nuclear@67: return res; nuclear@67: } nuclear@67: nuclear@67: nuclear@67: float psys_eval_anm_rnd(struct psys_anm_rnd *r, anm_time_t tm) nuclear@67: { nuclear@67: struct psys_rnd tmp; nuclear@67: if(tm == ANM_TIME_INVAL) { nuclear@67: tmp.value = psys_get_cur_value(&r->value); nuclear@67: tmp.range = psys_get_cur_value(&r->range); nuclear@67: } else { nuclear@67: tmp.value = psys_get_value(&r->value, tm); nuclear@67: tmp.range = psys_get_value(&r->range, tm); nuclear@67: } nuclear@67: return psys_eval_rnd(&tmp); nuclear@67: } nuclear@67: nuclear@67: vec3_t psys_eval_anm_rnd3(struct psys_anm_rnd3 *r, anm_time_t tm) nuclear@67: { nuclear@67: struct psys_rnd3 tmp; nuclear@67: if(tm == ANM_TIME_INVAL) { nuclear@67: tmp.value = psys_get_cur_value3(&r->value); nuclear@67: tmp.range = psys_get_cur_value3(&r->range); nuclear@67: } else { nuclear@67: tmp.value = psys_get_value3(&r->value, tm); nuclear@67: tmp.range = psys_get_value3(&r->range, tm); nuclear@67: } nuclear@67: return psys_eval_rnd3(&tmp); nuclear@67: }