libpsys

annotate src/rndval.c @ 5:613d2bf3ea1f

almost finished with the reorg
author John Tsiombikas <nuclear@mutantstargoat.com>
date Tue, 27 Sep 2011 07:42:32 +0300
parents 133094e2f5a5
children a10f19674147
rev   line source
nuclear@3 1 #include <stdlib.h>
nuclear@3 2 #include "rndval.h"
nuclear@3 3
nuclear@3 4 int psys_init_anm_rnd(struct psys_anm_rnd *r)
nuclear@3 5 {
nuclear@5 6 if(psys_init_track(&r->value) == -1) {
nuclear@3 7 return -1;
nuclear@3 8 }
nuclear@5 9 if(psys_init_track(&r->range) == -1) {
nuclear@5 10 psys_destroy_track(&r->value);
nuclear@3 11 return -1;
nuclear@3 12 }
nuclear@3 13 return 0;
nuclear@3 14 }
nuclear@3 15
nuclear@3 16 void psys_destroy_anm_rnd(struct psys_anm_rnd *r)
nuclear@3 17 {
nuclear@5 18 psys_destroy_track(&r->value);
nuclear@5 19 psys_destroy_track(&r->range);
nuclear@3 20 }
nuclear@3 21
nuclear@3 22 int psys_init_anm_rnd3(struct psys_anm_rnd3 *r)
nuclear@3 23 {
nuclear@5 24 if(psys_init_track3(&r->value) == -1) {
nuclear@3 25 return -1;
nuclear@3 26 }
nuclear@5 27 if(psys_init_track3(&r->range) == -1) {
nuclear@5 28 psys_destroy_track3(&r->value);
nuclear@3 29 return -1;
nuclear@3 30 }
nuclear@3 31 return 0;
nuclear@3 32 }
nuclear@3 33
nuclear@3 34 void psys_destroy_anm_rnd3(struct psys_anm_rnd3 *r)
nuclear@3 35 {
nuclear@5 36 psys_destroy_track3(&r->value);
nuclear@5 37 psys_destroy_track3(&r->range);
nuclear@3 38 }
nuclear@3 39
nuclear@3 40
nuclear@3 41 float psys_eval_rnd(struct psys_rnd *r)
nuclear@3 42 {
nuclear@3 43 return r->value + r->range * (float)rand() / (float)RAND_MAX - 0.5 * r->range;
nuclear@3 44 }
nuclear@3 45
nuclear@3 46 vec3_t psys_eval_rnd3(struct psys_rnd3 *r)
nuclear@3 47 {
nuclear@3 48 vec3_t res;
nuclear@3 49 res.x = r->value.x + r->range.x * (float)rand() / (float)RAND_MAX - 0.5 * r->range.x;
nuclear@3 50 res.y = r->value.y + r->range.y * (float)rand() / (float)RAND_MAX - 0.5 * r->range.y;
nuclear@3 51 res.z = r->value.z + r->range.z * (float)rand() / (float)RAND_MAX - 0.5 * r->range.z;
nuclear@3 52 return res;
nuclear@3 53 }
nuclear@3 54
nuclear@3 55
nuclear@3 56 float psys_eval_anm_rnd(struct psys_anm_rnd *r, anm_time_t tm)
nuclear@3 57 {
nuclear@5 58 struct psys_rnd tmp;
nuclear@5 59 if(tm == ANM_TIME_INVAL) {
nuclear@5 60 tmp.value = psys_get_cur_value(&r->value);
nuclear@5 61 tmp.range = psys_get_cur_value(&r->range);
nuclear@5 62 } else {
nuclear@5 63 tmp.value = psys_get_value(&r->value, tm);
nuclear@5 64 tmp.range = psys_get_value(&r->range, tm);
nuclear@3 65 }
nuclear@5 66 return psys_eval_rnd(&tmp);
nuclear@3 67 }
nuclear@3 68
nuclear@3 69 vec3_t psys_eval_anm_rnd3(struct psys_anm_rnd3 *r, anm_time_t tm)
nuclear@3 70 {
nuclear@5 71 struct psys_rnd3 tmp;
nuclear@5 72 if(tm == ANM_TIME_INVAL) {
nuclear@5 73 tmp.value = psys_get_cur_value3(&r->value);
nuclear@5 74 tmp.range = psys_get_cur_value3(&r->range);
nuclear@5 75 } else {
nuclear@5 76 tmp.value = psys_get_value3(&r->value, tm);
nuclear@5 77 tmp.range = psys_get_value3(&r->range, tm);
nuclear@3 78 }
nuclear@5 79 return psys_eval_rnd3(&tmp);
nuclear@3 80 }