# HG changeset patch # User John Tsiombikas # Date 1317149247 -10800 # Node ID a10f1967414793a593bda82d071fbe6ee955d6af # Parent 3c0a306c5f01b09537084de793163c1cf4df3491 ha! diff -r 3c0a306c5f01 -r a10f19674147 examples/simple/simple.c --- a/examples/simple/simple.c Tue Sep 27 07:52:01 2011 +0300 +++ b/examples/simple/simple.c Tue Sep 27 21:47:27 2011 +0300 @@ -12,6 +12,7 @@ #include #include "psys.h" +void cleanup(void); void disp(void); void idle(void); void reshape(int x, int y); @@ -41,21 +42,30 @@ glClearColor(0.05, 0.05, 0.05, 1); if(!(tex = load_texture("pimg.png"))) { - fprintf(stderr, "failed to load the FUCKING TEXTURE GOD DAMN IT\n"); + fprintf(stderr, "failed to load the texture\n"); return 1; } if(!(ps = psys_create())) { return 1; } - psys_set_grav(ps, v3_cons(0, -9, 0), 0); - psys_set_life(ps, 2, 0); - psys_set_texture(ps, tex); + psys_set_value3(&ps->attr.grav, 0, v3_cons(0, -9, 0)); + psys_set_anm_rnd(&ps->attr.life, 0, 2, 0); + psys_set_value3(&ps->attr.spawn_range, 0, v3_cons(0.2, 0.2, 0.2)); + psys_set_anm_rnd3(&ps->attr.dir, 0, v3_cons(0, 0, 0), v3_cons(2, 2, 2)); + ps->attr.tex = tex; + + atexit(cleanup); glutMainLoop(); return 0; } +void cleanup(void) +{ + psys_free(ps); +} + void disp(void) { static unsigned int prev_msec; @@ -101,7 +111,7 @@ { bnstate[bn - GLUT_LEFT_BUTTON] = state == GLUT_DOWN; if(bn == GLUT_LEFT_BUTTON) { - psys_set_rate(ps, state == GLUT_DOWN ? 30.0 : 0.0, 0); + psys_set_value(&ps->attr.rate, 0, state == GLUT_DOWN ? 30.0 : 0.0); psys_set_pos(ps, get_mouse_hit(x, y), 0); } } diff -r 3c0a306c5f01 -r a10f19674147 src/pattr.c --- a/src/pattr.c Tue Sep 27 07:52:01 2011 +0300 +++ b/src/pattr.c Tue Sep 27 21:47:27 2011 +0300 @@ -34,6 +34,10 @@ goto err; attr->max_particles = -1; + + anm_set_track_default(&attr->size.value.trk, 1.0); + anm_set_track_default(&attr->life.value.trk, 1.0); + return 0; err: diff -r 3c0a306c5f01 -r a10f19674147 src/psys.c --- a/src/psys.c Tue Sep 27 07:52:01 2011 +0300 +++ b/src/psys.c Tue Sep 27 21:47:27 2011 +0300 @@ -173,7 +173,7 @@ spawn_dt = dt / (float)spawn_count; spawn_tm = em->last_update; for(i=0; ipcount >= em->attr.max_particles) { + if(em->attr.max_particles >= 0 && em->pcount >= em->attr.max_particles) { break; } diff -r 3c0a306c5f01 -r a10f19674147 src/rndval.c --- a/src/rndval.c Tue Sep 27 07:52:01 2011 +0300 +++ b/src/rndval.c Tue Sep 27 21:47:27 2011 +0300 @@ -38,6 +38,31 @@ } +void psys_set_rnd(struct psys_rnd *r, float val, float range) +{ + r->value = val; + r->range = range; +} + +void psys_set_rnd3(struct psys_rnd3 *r, vec3_t val, vec3_t range) +{ + r->value = val; + r->range = range; +} + +void psys_set_anm_rnd(struct psys_anm_rnd *r, anm_time_t tm, float val, float range) +{ + psys_set_value(&r->value, tm, val); + psys_set_value(&r->range, tm, range); +} + +void psys_set_anm_rnd3(struct psys_anm_rnd3 *r, anm_time_t tm, vec3_t val, vec3_t range) +{ + psys_set_value3(&r->value, tm, val); + psys_set_value3(&r->range, tm, range); +} + + float psys_eval_rnd(struct psys_rnd *r) { return r->value + r->range * (float)rand() / (float)RAND_MAX - 0.5 * r->range; diff -r 3c0a306c5f01 -r a10f19674147 src/rndval.h --- a/src/rndval.h Tue Sep 27 07:52:01 2011 +0300 +++ b/src/rndval.h Tue Sep 27 21:47:27 2011 +0300 @@ -27,6 +27,12 @@ int psys_init_anm_rnd3(struct psys_anm_rnd3 *v); void psys_destroy_anm_rnd3(struct psys_anm_rnd3 *v); +void psys_set_rnd(struct psys_rnd *r, float val, float range); +void psys_set_rnd3(struct psys_rnd3 *r, vec3_t val, vec3_t range); + +void psys_set_anm_rnd(struct psys_anm_rnd *r, anm_time_t tm, float val, float range); +void psys_set_anm_rnd3(struct psys_anm_rnd3 *r, anm_time_t tm, vec3_t val, vec3_t range); + float psys_eval_rnd(struct psys_rnd *r); vec3_t psys_eval_rnd3(struct psys_rnd3 *r);