more roll testing

This commit is contained in:
jacob 2026-02-18 19:04:34 -06:00
parent 67171a9906
commit 3b7b324369
4 changed files with 65 additions and 20 deletions

View File

@ -259,10 +259,15 @@ P_Anim P_AnimFromEnt(P_Frame *frame, P_Ent *ent)
if (P_IsEntRolling(frame, ent)) if (P_IsEntRolling(frame, ent))
{ {
result.span = SPR_SpanKeyFromName(Lit("roll")); 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 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->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 // TODO: Not like this
i64 roll_timeout_ns = P_RollTimeoutNs; i64 roll_timeout_ns = P_RollTimeoutNs;
i64 roll_time_ns = P_RollTimeNs; 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_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); b32 is_rolling = P_IsEntRolling(frame, guy);
if (is_rolling) 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; move = roll_dir;
look = roll_dir; // look = roll_dir;
f32 roll_factor = 1.3; f32 roll_factor = 1.3;
move_force *= roll_factor; move_force *= roll_factor;
max_speed *= roll_factor; max_speed *= roll_factor;
// if ((frame->time_ns - guy->last_roll_time_ns) > P_RollTurnTimeNs)
{
turn_rate = 0.1;
}
} }
// Integrate linear movement // 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)) for (P_Ent *firer = P_FirstEnt(frame); !P_IsEntNil(firer); firer = P_NextEnt(firer))
{ {
P_Ent *weapon = P_EntFromKey(frame, firer->weapon); P_Ent *weapon = P_EntFromKey(frame, firer->weapon);
// if (weapon->is_weapon && firer->control.fire_held) if (weapon->is_weapon && firer->control.fire_held)
if (weapon->is_weapon && firer->control.fire_presses) // if (weapon->is_weapon && firer->control.fire_presses)
{ {
// i64 fire_delta_ns = frame->time_ns - firer->last_fire_ns; // i64 fire_delta_ns = frame->time_ns - firer->last_fire_ns;

View File

@ -81,7 +81,8 @@ Struct(P_DebugDrawNode)
#define P_MinPlayerNameLen 1 #define P_MinPlayerNameLen 1
#define P_MaxPlayerNameLen 24 #define P_MaxPlayerNameLen 24
#define P_RollTimeNs NsFromSeconds(0.5) #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) Struct(P_Control)
{ {
@ -216,6 +217,7 @@ Struct(P_Anim)
SPR_SpanKey span; SPR_SpanKey span;
SPR_SheetKey sheet; SPR_SheetKey sheet;
SPR_SheetKey wep_sheet; SPR_SheetKey wep_sheet;
b32 weapon_over;
}; };
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////

BIN
src/pp/pp_res/guy/guy.ase (Stored with Git LFS)

Binary file not shown.

View File

@ -2191,16 +2191,46 @@ void V_TickForever(WaveLaneCtx *lane)
// quad->occluder = V_OccluderKind_Guy; // quad->occluder = V_OccluderKind_Guy;
} }
//- Push body quad
if (body.ready) if (body.ready)
{
//- Body quad
V_Quad body_quad = Zi;
{ {
Affine body_uv_to_world_af = ScaleAffine(body_pix_to_world_af, DimsFromRng2(body.tex_rect)); 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); //- Weapon quad
quad->quad_uv_to_world_af = body_uv_to_world_af; V_Quad wep_quad = Zi;
quad->tex = body.tex; {
quad->tex_slice_uv = DivRng2Vec2(body.tex_rect, body.tex_dims); Affine wep_uv_to_world_af = ScaleAffine(wep_pix_to_world_af, DimsFromRng2(wep.tex_rect));
quad->occluder_id = ent->key.v & 0xFFFFFFFF; 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 //- Push test explosion
// if (frame->held_buttons[Button_G]) if (frame->held_buttons[Button_G])
if (frame->held_buttons[Button_G] && !prev_frame->held_buttons[Button_G]) // if (frame->held_buttons[Button_G] && !prev_frame->held_buttons[Button_G])
{ {
// Fire // Fire
{ {