diff --git a/src/pp/pp.c b/src/pp/pp.c index 8182887b..f4e6640d 100644 --- a/src/pp/pp.c +++ b/src/pp/pp.c @@ -259,10 +259,15 @@ P_Anim P_AnimFromEnt(P_Frame *frame, P_Ent *ent) if (P_IsEntRolling(frame, ent)) { result.span = SPR_SpanKeyFromName(Lit("roll")); + result.weapon_over = 1; + } + else if (Vec2LenSq(ent->control.move) > (0.01 * 0.01)) + { + result.span = SPR_SpanKeyFromName(Lit("walk")); } else { - result.span = SPR_SpanKeyFromName(Lit("walk")); + result.span = SPR_SpanKeyFromName(Lit("idle")); } } @@ -2265,17 +2270,19 @@ void P_StepFrame(P_Frame *frame) { if (guy->is_guy) { - if (guy->control.roll_presses && !IsVec2Zero(guy->control.move)) + // if (guy->control.roll_presses && !IsVec2Zero(guy->control.move)) + if (guy->control.roll_presses) { // TODO: Not like this i64 roll_timeout_ns = P_RollTimeoutNs; i64 roll_time_ns = P_RollTimeNs; - if (frame->time_ns - roll_timeout_ns + roll_time_ns > guy->last_roll_time_ns || guy->last_roll_time_ns == 0) + if (frame->time_ns - roll_timeout_ns - roll_time_ns > guy->last_roll_time_ns || guy->last_roll_time_ns == 0) { guy->last_roll_time_ns = frame->time_ns; - guy->last_roll_dir = NormRot(guy->control.move); + // guy->last_roll_dir = NormRot(guy->control.move); + guy->last_roll_dir = NormRot(guy->control.look); } } } @@ -2315,14 +2322,20 @@ void P_StepFrame(P_Frame *frame) b32 is_rolling = P_IsEntRolling(frame, guy); if (is_rolling) { - Vec2 roll_dir = NormRot(guy->last_roll_dir); + // Vec2 roll_dir = NormRot(guy->last_roll_dir); + Vec2 roll_dir = NormRot(guy->xf.r); move = roll_dir; - look = roll_dir; + // look = roll_dir; f32 roll_factor = 1.3; move_force *= roll_factor; max_speed *= roll_factor; + + // if ((frame->time_ns - guy->last_roll_time_ns) > P_RollTurnTimeNs) + { + turn_rate = 0.1; + } } // Integrate linear movement @@ -2900,8 +2913,8 @@ void P_StepFrame(P_Frame *frame) for (P_Ent *firer = P_FirstEnt(frame); !P_IsEntNil(firer); firer = P_NextEnt(firer)) { P_Ent *weapon = P_EntFromKey(frame, firer->weapon); - // if (weapon->is_weapon && firer->control.fire_held) - if (weapon->is_weapon && firer->control.fire_presses) + if (weapon->is_weapon && firer->control.fire_held) + // if (weapon->is_weapon && firer->control.fire_presses) { // i64 fire_delta_ns = frame->time_ns - firer->last_fire_ns; diff --git a/src/pp/pp.h b/src/pp/pp.h index ee53e61c..99e8fb6b 100644 --- a/src/pp/pp.h +++ b/src/pp/pp.h @@ -81,7 +81,8 @@ Struct(P_DebugDrawNode) #define P_MinPlayerNameLen 1 #define P_MaxPlayerNameLen 24 #define P_RollTimeNs NsFromSeconds(0.5) -#define P_RollTimeoutNs NsFromSeconds(1) +#define P_RollTurnTimeNs (NsFromSeconds(0.1)) +#define P_RollTimeoutNs NsFromSeconds(0.5) Struct(P_Control) { @@ -216,6 +217,7 @@ Struct(P_Anim) SPR_SpanKey span; SPR_SheetKey sheet; SPR_SheetKey wep_sheet; + b32 weapon_over; }; //////////////////////////////////////////////////////////// diff --git a/src/pp/pp_res/guy/guy.ase b/src/pp/pp_res/guy/guy.ase index b1943b5b..18030774 100644 --- a/src/pp/pp_res/guy/guy.ase +++ b/src/pp/pp_res/guy/guy.ase @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bbde9ea89b5500db6e6345cbd13dbd451f770e630c3dc7ea2569b8dc8521dae4 -size 4113 +oid sha256:d82b61111d4989e75e91809b1d69085649fefa43cefd6ae9e27473512d65b2c9 +size 4080 diff --git a/src/pp/pp_vis/pp_vis_core.c b/src/pp/pp_vis/pp_vis_core.c index 9a792266..3da7af3e 100644 --- a/src/pp/pp_vis/pp_vis_core.c +++ b/src/pp/pp_vis/pp_vis_core.c @@ -2191,16 +2191,46 @@ void V_TickForever(WaveLaneCtx *lane) // quad->occluder = V_OccluderKind_Guy; } - //- Push body quad if (body.ready) { - Affine body_uv_to_world_af = ScaleAffine(body_pix_to_world_af, DimsFromRng2(body.tex_rect)); + //- Body quad + V_Quad body_quad = Zi; + { + Affine body_uv_to_world_af = ScaleAffine(body_pix_to_world_af, DimsFromRng2(body.tex_rect)); + body_quad.quad_uv_to_world_af = body_uv_to_world_af; + body_quad.tex = body.tex; + body_quad.tex_slice_uv = DivRng2Vec2(body.tex_rect, body.tex_dims); + body_quad.occluder_id = ent->key.v & 0xFFFFFFFF; + } - V_Quad *quad = PushStruct(frame->quads_arena, V_Quad); - quad->quad_uv_to_world_af = body_uv_to_world_af; - quad->tex = body.tex; - quad->tex_slice_uv = DivRng2Vec2(body.tex_rect, body.tex_dims); - quad->occluder_id = ent->key.v & 0xFFFFFFFF; + //- Weapon quad + V_Quad wep_quad = Zi; + { + Affine wep_uv_to_world_af = ScaleAffine(wep_pix_to_world_af, DimsFromRng2(wep.tex_rect)); + wep_quad.quad_uv_to_world_af = wep_uv_to_world_af; + wep_quad.tex = wep.tex; + wep_quad.tex_slice_uv = DivRng2Vec2(wep.tex_rect, wep.tex_dims); + // wep_quad.occluder = V_OccluderKind_Guy; + } + + //- Push quads + if (wep.ready) + { + if (anim.weapon_over) + { + *PushStructNoZero(frame->quads_arena, V_Quad) = body_quad; + *PushStructNoZero(frame->quads_arena, V_Quad) = wep_quad; + } + else + { + *PushStructNoZero(frame->quads_arena, V_Quad) = wep_quad; + *PushStructNoZero(frame->quads_arena, V_Quad) = body_quad; + } + } + else + { + *PushStructNoZero(frame->quads_arena, V_Quad) = body_quad; + } } } } @@ -2731,8 +2761,8 @@ void V_TickForever(WaveLaneCtx *lane) ////////////////////////////// //- Push test explosion - // if (frame->held_buttons[Button_G]) - if (frame->held_buttons[Button_G] && !prev_frame->held_buttons[Button_G]) + if (frame->held_buttons[Button_G]) + // if (frame->held_buttons[Button_G] && !prev_frame->held_buttons[Button_G]) { // Fire {