"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_A, game::IN_LEFT },
|
||||||
{ SDL_SCANCODE_D, game::IN_RIGHT },
|
{ SDL_SCANCODE_D, game::IN_RIGHT },
|
||||||
{ SDL_SCANCODE_SPACE, game::IN_JUMP },
|
{ SDL_SCANCODE_SPACE, game::IN_JUMP },
|
||||||
|
{ SDL_SCANCODE_LSHIFT, game::IN_SPRINT },
|
||||||
{ SDL_SCANCODE_LCTRL, game::IN_CROUCH },
|
{ SDL_SCANCODE_LCTRL, game::IN_CROUCH },
|
||||||
{ SDL_SCANCODE_E, game::IN_USE },
|
{ SDL_SCANCODE_E, game::IN_USE },
|
||||||
{ SDL_SCANCODE_F3, game::IN_DEBUG1 },
|
{ SDL_SCANCODE_F3, game::IN_DEBUG1 },
|
||||||
|
|||||||
@ -155,7 +155,9 @@ void game::Character::SyncTransformFromController()
|
|||||||
void game::Character::UpdateMovement()
|
void game::Character::UpdateMovement()
|
||||||
{
|
{
|
||||||
constexpr float dt = 1.0f / 25.0f;
|
constexpr float dt = 1.0f / 25.0f;
|
||||||
|
constexpr float running_mult = 3.0f;
|
||||||
bool walking = false;
|
bool walking = false;
|
||||||
|
bool running = false;
|
||||||
glm::vec2 movedir(0.0f);
|
glm::vec2 movedir(0.0f);
|
||||||
|
|
||||||
if (in_ & (1 << CIN_FORWARD))
|
if (in_ & (1 << CIN_FORWARD))
|
||||||
@ -175,11 +177,19 @@ void game::Character::UpdateMovement()
|
|||||||
if (movedir.x != 0.0f || movedir.y != 0.0f)
|
if (movedir.x != 0.0f || movedir.y != 0.0f)
|
||||||
{
|
{
|
||||||
walking = true;
|
walking = true;
|
||||||
|
|
||||||
|
if (in_ & (1 << CIN_SPRINT))
|
||||||
|
running = true;
|
||||||
|
|
||||||
float target_yaw = forward_yaw_ + std::atan2(movedir.y, movedir.x);
|
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);
|
glm::vec3 forward_dir(glm::cos(yaw_), glm::sin(yaw_), 0.0f);
|
||||||
walkdir = forward_dir * walk_speed_ * dt;
|
walkdir = forward_dir * walk_speed_ * dt;
|
||||||
|
|
||||||
|
if (running)
|
||||||
|
walkdir *= running_mult;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (controller_)
|
if (controller_)
|
||||||
@ -197,6 +207,8 @@ void game::Character::UpdateMovement()
|
|||||||
float run_blend_target = walking ? 0.5f : 0.0f;
|
float run_blend_target = walking ? 0.5f : 0.0f;
|
||||||
MoveToward(animstate_.loco_blend, run_blend_target, dt * 2.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));
|
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);
|
animstate_.loco_phase = glm::mod(animstate_.loco_phase + anim_speed * dt, 1.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -19,6 +19,7 @@ enum CharacterInputType
|
|||||||
CIN_LEFT,
|
CIN_LEFT,
|
||||||
CIN_RIGHT,
|
CIN_RIGHT,
|
||||||
CIN_JUMP,
|
CIN_JUMP,
|
||||||
|
CIN_SPRINT,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CapsuleShape
|
struct CapsuleShape
|
||||||
|
|||||||
@ -92,6 +92,11 @@ void game::PlayerCharacter::UpdateInputs()
|
|||||||
{
|
{
|
||||||
c_in |= 1 << CIN_JUMP;
|
c_in |= 1 << CIN_JUMP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (in & (1 << IN_SPRINT))
|
||||||
|
{
|
||||||
|
c_in |= 1 << CIN_SPRINT;
|
||||||
|
}
|
||||||
|
|
||||||
if (vehicle_)
|
if (vehicle_)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -14,6 +14,7 @@ namespace game
|
|||||||
IN_RIGHT,
|
IN_RIGHT,
|
||||||
IN_JUMP,
|
IN_JUMP,
|
||||||
IN_CROUCH,
|
IN_CROUCH,
|
||||||
|
IN_SPRINT,
|
||||||
IN_USE,
|
IN_USE,
|
||||||
IN_ATTACK,
|
IN_ATTACK,
|
||||||
IN_DEBUG1,
|
IN_DEBUG1,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user