libpsys
diff src/psys.c @ 9:9c24273f211b
first test is done
author | John Tsiombikas <nuclear@mutantstargoat.com> |
---|---|
date | Wed, 28 Sep 2011 03:42:01 +0300 |
parents | a10f19674147 |
children | fbccc3c0d43e |
line diff
1.1 --- a/src/psys.c Tue Sep 27 21:47:27 2011 +0300 1.2 +++ b/src/psys.c Wed Sep 28 03:42:01 2011 +0300 1.3 @@ -204,6 +204,7 @@ 1.4 struct psys_particle *tmp = p->next; 1.5 p->next = p->next->next; 1.6 pfree(tmp); 1.7 + em->pcount--; 1.8 } else { 1.9 p = p->next; 1.10 } 1.11 @@ -211,6 +212,8 @@ 1.12 em->plist = pdummy.next; 1.13 1.14 em->last_update = tm; 1.15 + 1.16 + printf("particles: %5d\r", em->pcount); 1.17 } 1.18 1.19 void psys_draw(struct psys_emitter *em) 1.20 @@ -240,8 +243,10 @@ 1.21 1.22 p->pos = psys_eval_rnd3(&rpos); 1.23 p->vel = psys_eval_anm_rnd3(&em->attr.dir, PSYS_EVAL_CUR); 1.24 - p->size = psys_eval_anm_rnd(&em->attr.size, PSYS_EVAL_CUR); 1.25 - p->life = psys_eval_anm_rnd(&em->attr.life, PSYS_EVAL_CUR); 1.26 + p->base_size = psys_eval_anm_rnd(&em->attr.size, PSYS_EVAL_CUR); 1.27 + p->max_life = p->life = psys_eval_anm_rnd(&em->attr.life, PSYS_EVAL_CUR); 1.28 + 1.29 + p->pattr = &em->attr.part_attr; 1.30 1.31 psys_add_particle(em, p); 1.32 return 0; 1.33 @@ -250,6 +255,7 @@ 1.34 static void update_particle(struct psys_emitter *em, struct psys_particle *p, float tm, float dt, void *cls) 1.35 { 1.36 vec3_t accel, grav; 1.37 + anm_time_t t; 1.38 1.39 grav = psys_get_cur_value3(&em->attr.grav); 1.40 1.41 @@ -265,6 +271,13 @@ 1.42 p->pos.y += p->vel.y * dt; 1.43 p->pos.z += p->vel.z * dt; 1.44 1.45 + /* update particle attributes */ 1.46 + t = (anm_time_t)(1000.0 * (p->max_life - p->life) / p->max_life); 1.47 + 1.48 + p->color = psys_get_value3(&p->pattr->color, t); 1.49 + p->alpha = psys_get_value(&p->pattr->alpha, t); 1.50 + p->size = p->base_size * psys_get_value(&p->pattr->size, t); 1.51 + 1.52 p->life -= dt; 1.53 } 1.54