From 4bc6a26c740efcc74a230ff500ef90c609176566 Mon Sep 17 00:00:00 2001 From: jacob Date: Wed, 4 Feb 2026 09:13:34 -0600 Subject: [PATCH] death wip --- src/pp/pp.c | 44 ++++++++++++++++++++++++++++---------------- src/pp/pp.h | 1 - 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/src/pp/pp.c b/src/pp/pp.c index 5c61148c..98f54925 100644 --- a/src/pp/pp.c +++ b/src/pp/pp.c @@ -2,9 +2,9 @@ P_Ctx P = Zi; ThreadLocal P_ThreadLocalCtx P_tl = Zi; Readonly P_Ent P_NilEnt = { - .prev_xf = CompXformIdentity, .xf = CompXformIdentity, .control.look = { 1, 0 }, + .health = 1, }; Readonly P_Frame P_NilFrame = { @@ -1456,7 +1456,6 @@ void P_SpawnEntsFromList(P_Frame *frame, P_EntList ents) P_Ent *old_prev_in_bin = dst->prev_in_bin; { *dst = *src; - dst->prev_xf = NormXform(dst->prev_xf); dst->xf = NormXform(dst->xf); } dst->next = old_next; @@ -1643,14 +1642,6 @@ void P_StepFrame(P_Frame *frame) P_Ent *local_player = P_EntFromKey(frame, P_tl.local_player); P_Ent *local_guy = P_EntFromKey(frame, local_player->guy); - ////////////////////////////// - //- Update double-buffered entity data - - for (P_Ent *ent = P_FirstEnt(frame); !P_IsEntNil(ent); ent = P_NextEnt(ent)) - { - ent->prev_xf = ent->xf; - } - ////////////////////////////// //- Spawn entities @@ -2560,15 +2551,15 @@ void P_StepFrame(P_Frame *frame) Vec2 ray_dir = SubVec2(ray_end, ray_start); // TODO: Real raycast query - P_Ent *closest_victim = &P_NilEnt; + P_Ent *victim = &P_NilEnt; P_RaycastResult victim_raycast = Zi; { f32 closest_len_sq = Inf; - for (P_Ent *victim = P_FirstEnt(frame); !P_IsEntNil(victim); victim = P_NextEnt(victim)) + for (P_Ent *potential_victim = P_FirstEnt(frame); !P_IsEntNil(potential_victim); potential_victim = P_NextEnt(potential_victim)) { - if (victim->is_guy && !P_MatchKey(victim->key, bullet->bullet_firer)) + if (potential_victim->is_guy && !P_MatchKey(potential_victim->key, bullet->bullet_firer)) { - P_Shape victim_world_shape = P_WorldShapeFromEnt(victim); + P_Shape victim_world_shape = P_WorldShapeFromEnt(potential_victim); P_RaycastResult entrance_raycast = P_RaycastShape(victim_world_shape, ray_start, ray_dir); Vec2 entrance = entrance_raycast.p; @@ -2584,7 +2575,7 @@ void P_StepFrame(P_Frame *frame) if (len_sq < closest_len_sq) { closest_len_sq = len_sq; - closest_victim = victim; + victim = potential_victim; victim_raycast = entrance_raycast; } } @@ -2593,13 +2584,16 @@ void P_StepFrame(P_Frame *frame) } } - if (!P_IsEntNil(closest_victim)) + if (!P_IsEntNil(victim)) { bullet->has_hit = 1; bullet->hit_entry = victim_raycast.p; bullet->hit_entry_normal = victim_raycast.normal; // bullet->bullet_end = bullet->hit_entry; bullet->exists = 0; + + // TODO: Remove this + victim->health -= 0.25; } Rng2 bounds = Zi; @@ -2615,6 +2609,24 @@ void P_StepFrame(P_Frame *frame) } } + ////////////////////////////// + //- Kill guys + + for (P_Ent *guy = P_FirstEnt(frame); !P_IsEntNil(guy); guy = P_NextEnt(guy)) + { + if (guy->is_guy) + { + if (guy->health <= 0) + { + P_Ent *old_guy = P_EntFromKey(prev_frame, guy->key); + if (old_guy->health > 0) + { + guy->exists = 0; + } + } + } + } + ////////////////////////////// //- Debug draw diff --git a/src/pp/pp.h b/src/pp/pp.h index 31dd663f..a01bbf67 100644 --- a/src/pp/pp.h +++ b/src/pp/pp.h @@ -112,7 +112,6 @@ Struct(P_Ent) b32 is_dummy; f32 health; - Xform prev_xf; Xform xf; // TODO: Remove this (weapon testing)