From f780a14406b643c0ddcd715975428839fc3b7810 Mon Sep 17 00:00:00 2001 From: Cameron Reikes Date: Fri, 23 Dec 2022 18:47:38 -0800 Subject: [PATCH] Basic particles --- buildsettings.h | 2 +- flight.rdbg | Bin 2333 -> 1682 bytes loaded/pip.png | Bin 0 -> 7753 bytes main.c | 75 ++++++++++++++++++++++++++++++++++++++++++++---- types.h | 2 +- 5 files changed, 71 insertions(+), 8 deletions(-) create mode 100644 loaded/pip.png diff --git a/buildsettings.h b/buildsettings.h index d493106..77bc1ce 100644 --- a/buildsettings.h +++ b/buildsettings.h @@ -26,7 +26,7 @@ #define DEBUG_TOOLS #define CHIPMUNK_INTEGRITY_CHECK // #define FAT_THRUSTERS -// #define NO_GRAVITY +#define NO_GRAVITY // #define NO_SUNS #else diff --git a/flight.rdbg b/flight.rdbg index f60eb77db57843b261eab85de6bccfc443231a1f..47236f407e349c515775093c50ae4192feae6fa4 100644 GIT binary patch delta 212 zcmbO$G>LaY38Tg21B?cfy;-;!HGwQOw#tIkV!e#X`b5n~; z5=&C`k|#Sc`Y>7oMGbh1^Rx4F;uDL~ftG`vH1QWVV<1qPx# literal 2333 zcmd5;S#J|D5Kg#no_OLV6%tA!)!MWu6r>`NhC<<`2ZsgjmFk<{=tEDd`skDjpjom%N(?Ke3Ypq^?cla z!iNx*3E!>;7>wa2TBgSNO>awBsRMH#mG#vKOW#b5cdbdR$XnYg1J`PgH~Jm^N$J=eyVg5} zZtMkoXGXpkuz;(8P8a>2%32WkR;Wq}4XIvTW2oN6O z=P|6lm<~f67MbuyE9t%jUzyS#v{QaUer)f~riOEfZl@iL@#FLutdL#8&H_Sj^Ar;}^GPb(RuVQnoVxQha!KrUx zMj>QCSM4dr*HB4>v2vcIsFKJdZCMO(*=|St){Ce&vL+7;gMOg31d5J?h=dy`SjfU7 z^yi=4X@x28+m+pk*Qtw3&pr5eM2>^+Pv;>=-A04A9WP3u lAUB&$N~w!P>kRi0W6JXB56oSZ_N(M-O_OUnK(U<-`~c$anQ{OC diff --git a/loaded/pip.png b/loaded/pip.png new file mode 100644 index 0000000000000000000000000000000000000000..b9e056ca6cb822bb530d63bbbc3b240bd4ffb9c6 GIT binary patch literal 7753 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 + { + *p = (Particle){0}; + p->pos = pos; + p->vel = vel; + p->alive = true; + p->scaling = 1.0 + hash11(exec_time) * 0.2; + created = true; + break; + } + } + if (!created) + { + Log("TOO MANY PARTICLES"); + } +} + struct SquadMeta squad_meta(enum Squad squad) { for (int i = 0; i < ARRLEN(squad_metas); i++) @@ -751,6 +788,7 @@ static void init(void) image_orb = load_image("loaded/orb.png"); image_orb_frozen = load_image("loaded/orb_frozen.png"); image_radardot = load_image("loaded/radardot.png"); + image_pip = load_image("loaded/pip.png"); } // socket initialization @@ -2148,6 +2186,28 @@ static void frame(void) player_scaling = lerp(player_scaling, player_scaling_target, dt * 15.0); hovering_this_player = (EntityID){0}; + // draw particles drawn in world space + set_color(WHITE); + PARTICLES_ITER(p) + { + if (p->alive) + { + p->alive_for += dt; + p->pos = cpvadd(p->pos, cpvmult(p->vel, dt)); + if (p->alive_for > 1.0) + { + p->alive = false; + } + set_color_values(1.0, 1.0, 1.0, 1.0 - clamp01(p->alive_for)); + pipeline_scope(goodpixel_pipeline) + { + sgp_set_image(0, image_pip); + draw_texture_centered(p->pos, 0.15 * p->scaling); + sgp_reset_image(0); + } + } + } + // draw all types of entities ENTITIES_ITER(e) { @@ -2170,11 +2230,14 @@ static void frame(void) } transform_scope() { - rotate_at(entity_rotation(g) + rotangle(b->compass_rotation), - entity_pos(b).x, entity_pos(b).y); + rotate_at(entity_rotation(g) + rotangle(b->compass_rotation), entity_pos(b).x, entity_pos(b).y); if (b->box_type == BoxThruster) { + cpVect particle_vel = box_vel(b); + particle_vel = cpvadd(particle_vel, cpvmult(box_facing_vector(b), 0.5 + hash11(exec_time)*0.2)); // move outwards from thruster + particle_vel = cpvspin(particle_vel, hash11(exec_time)*0.1); + new_particle(cpvadd(entity_pos(b), cpvmult(box_facing_vector(b), BOX_SIZE * 0.5)), particle_vel); transform_scope() { set_color_values(1.0, 1.0, 1.0, 1.0); @@ -2354,7 +2417,6 @@ static void frame(void) draw_circle(entity_pos(b), SCANNER_RADIUS * 0.75); set_color(WHITE); - for (int i = 0; i < SCANNER_MAX_PLATONICS; i++) if (b->detected_platonics[i].intensity > 0.0) { @@ -2369,14 +2431,14 @@ static void frame(void) sgp_set_uniform(&uniform, sizeof(uniform)); transform_scope() { - cpVect pos = cpvadd(entity_pos(b) , cpvmult(b->detected_platonics[i].direction, SCANNER_RADIUS/2.0)); - rotate_at(cpvangle(b->detected_platonics[i].direction), pos.x,pos.y); + cpVect pos = cpvadd(entity_pos(b), cpvmult(b->detected_platonics[i].direction, SCANNER_RADIUS / 2.0)); + rotate_at(cpvangle(b->detected_platonics[i].direction), pos.x, pos.y); draw_color_rect_centered(pos, SCANNER_RADIUS); } sgp_reset_image(0); } } - + set_color(colhexcode(0xf2d75c)); sgp_set_image(0, image_radardot); for (int i = 0; i < SCANNER_MAX_POINTS; i++) @@ -2549,6 +2611,7 @@ static void frame(void) set_color_values(1.0, 1.0, 1.0, 1.0); dbg_drawall(); + } // world space transform end // low health diff --git a/types.h b/types.h index dfb5bbe..9225b91 100644 --- a/types.h +++ b/types.h @@ -696,7 +696,7 @@ static inline double hash11(double p) p = fract(p * .1031f); p *= p + 33.33f; p *= p + p; - return fract(p); + return 2.0 * fract(p) - 1.0; } static inline double deg2rad(double deg)