more roll testing
This commit is contained in:
parent
67171a9906
commit
3b7b324369
29
src/pp/pp.c
29
src/pp/pp.c
@ -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;
|
||||||
|
|
||||||
|
|||||||
@ -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)
BIN
src/pp/pp_res/guy/guy.ase
(Stored with Git LFS)
Binary file not shown.
@ -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)
|
||||||
{
|
{
|
||||||
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);
|
//- 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
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user