"Sprinting"
This commit is contained in:
parent
473de216f2
commit
e1f9212d3c
@ -145,6 +145,7 @@ static const std::map<SDL_Scancode, game::PlayerInputType> s_inputmap = {
|
||||
{ SDL_SCANCODE_A, game::IN_LEFT },
|
||||
{ SDL_SCANCODE_D, game::IN_RIGHT },
|
||||
{ SDL_SCANCODE_SPACE, game::IN_JUMP },
|
||||
{ SDL_SCANCODE_LSHIFT, game::IN_SPRINT },
|
||||
{ SDL_SCANCODE_LCTRL, game::IN_CROUCH },
|
||||
{ SDL_SCANCODE_E, game::IN_USE },
|
||||
{ SDL_SCANCODE_F3, game::IN_DEBUG1 },
|
||||
|
||||
@ -155,7 +155,9 @@ void game::Character::SyncTransformFromController()
|
||||
void game::Character::UpdateMovement()
|
||||
{
|
||||
constexpr float dt = 1.0f / 25.0f;
|
||||
constexpr float running_mult = 3.0f;
|
||||
bool walking = false;
|
||||
bool running = false;
|
||||
glm::vec2 movedir(0.0f);
|
||||
|
||||
if (in_ & (1 << CIN_FORWARD))
|
||||
@ -175,11 +177,19 @@ void game::Character::UpdateMovement()
|
||||
if (movedir.x != 0.0f || movedir.y != 0.0f)
|
||||
{
|
||||
walking = true;
|
||||
|
||||
if (in_ & (1 << CIN_SPRINT))
|
||||
running = true;
|
||||
|
||||
float target_yaw = forward_yaw_ + std::atan2(movedir.y, movedir.x);
|
||||
Turn(yaw_, target_yaw, 4.0f * dt);
|
||||
Turn(yaw_, target_yaw, 8.0f * dt);
|
||||
|
||||
glm::vec3 forward_dir(glm::cos(yaw_), glm::sin(yaw_), 0.0f);
|
||||
walkdir = forward_dir * walk_speed_ * dt;
|
||||
|
||||
if (running)
|
||||
walkdir *= running_mult;
|
||||
|
||||
}
|
||||
|
||||
if (controller_)
|
||||
@ -197,6 +207,8 @@ void game::Character::UpdateMovement()
|
||||
float run_blend_target = walking ? 0.5f : 0.0f;
|
||||
MoveToward(animstate_.loco_blend, run_blend_target, dt * 2.0f);
|
||||
float anim_speed = glm::mix(0.5f, 1.5f, UnMix(0.0f, 0.5f, animstate_.loco_blend));
|
||||
if (running)
|
||||
anim_speed *= running_mult;
|
||||
animstate_.loco_phase = glm::mod(animstate_.loco_phase + anim_speed * dt, 1.0f);
|
||||
}
|
||||
|
||||
|
||||
@ -19,6 +19,7 @@ enum CharacterInputType
|
||||
CIN_LEFT,
|
||||
CIN_RIGHT,
|
||||
CIN_JUMP,
|
||||
CIN_SPRINT,
|
||||
};
|
||||
|
||||
struct CapsuleShape
|
||||
|
||||
@ -93,6 +93,11 @@ void game::PlayerCharacter::UpdateInputs()
|
||||
c_in |= 1 << CIN_JUMP;
|
||||
}
|
||||
|
||||
if (in & (1 << IN_SPRINT))
|
||||
{
|
||||
c_in |= 1 << CIN_SPRINT;
|
||||
}
|
||||
|
||||
if (vehicle_)
|
||||
{
|
||||
SetInputs(0);
|
||||
|
||||
@ -14,6 +14,7 @@ namespace game
|
||||
IN_RIGHT,
|
||||
IN_JUMP,
|
||||
IN_CROUCH,
|
||||
IN_SPRINT,
|
||||
IN_USE,
|
||||
IN_ATTACK,
|
||||
IN_DEBUG1,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user