Crouching (Left Control key)
parent
ceaf8edade
commit
93db635364
|
@ -38,6 +38,7 @@
|
|||
#keymap_right = KEY_KEY_D
|
||||
#keymap_jump = KEY_SPACE
|
||||
#keymap_sneak = KEY_LSHIFT
|
||||
#keymap_crouch = KEY_LCONTROL
|
||||
#keymap_inventory = KEY_KEY_I
|
||||
# Go down ladder / go down in fly mode / go fast in fast mode
|
||||
#keymap_special1 = KEY_KEY_E
|
||||
|
|
|
@ -36,6 +36,7 @@ void set_default_settings(Settings *settings)
|
|||
settings->setDefault("keymap_jump", "KEY_SPACE");
|
||||
settings->setDefault("keymap_sneak", "KEY_LSHIFT");
|
||||
settings->setDefault("keymap_drop", "KEY_KEY_Q");
|
||||
settings->setDefault("keymap_crouch", "KEY_LCONTROL");
|
||||
settings->setDefault("keymap_inventory", "KEY_KEY_I");
|
||||
settings->setDefault("keymap_special1", "KEY_KEY_E");
|
||||
settings->setDefault("keymap_chat", "KEY_KEY_T");
|
||||
|
|
|
@ -1561,7 +1561,8 @@ void the_game(
|
|||
false,
|
||||
false,
|
||||
camera_pitch,
|
||||
camera_yaw
|
||||
camera_yaw,
|
||||
false
|
||||
);
|
||||
client.setPlayerControl(control);
|
||||
}
|
||||
|
@ -1583,9 +1584,10 @@ void the_game(
|
|||
input->isKeyDown(getKeySetting("keymap_right")),
|
||||
input->isKeyDown(getKeySetting("keymap_jump")),
|
||||
input->isKeyDown(getKeySetting("keymap_special1")),
|
||||
input->isKeyDown(getKeySetting("keymap_sneak")),
|
||||
input->isKeyDown(getKeySetting("keymap_sneak")) || input->isKeyDown(getKeySetting("keymap_crouch")),
|
||||
camera_pitch,
|
||||
camera_yaw
|
||||
camera_yaw,
|
||||
input->isKeyDown(getKeySetting("keymap_crouch"))
|
||||
);
|
||||
client.setPlayerControl(control);
|
||||
}
|
||||
|
|
|
@ -47,7 +47,8 @@ Player::Player(IGameDef *gamedef):
|
|||
m_pitch(0),
|
||||
m_yaw(0),
|
||||
m_speed(0,0,0),
|
||||
m_position(0,0,0)
|
||||
m_position(0,0,0),
|
||||
m_eyeOffset(0,BS+(5*BS)/8,0)
|
||||
{
|
||||
updateName("<not set>");
|
||||
resetInventory();
|
||||
|
@ -750,6 +751,21 @@ void LocalPlayer::applyControl(float dtime)
|
|||
|
||||
// Accelerate to target speed with maximum increment
|
||||
accelerate(speed, inc);
|
||||
|
||||
static const f32 eyes_max = BS+(5*BS)/8;
|
||||
static const f32 eyes_min = BS * 0.9f;
|
||||
static const f32 eyes_delta = 10.f;
|
||||
if(control.crouch){
|
||||
//crouching
|
||||
if(m_eyeOffset.Y > eyes_min + 0.01f)
|
||||
m_eyeOffset.Y += (eyes_min-m_eyeOffset.Y) * eyes_delta * dtime;
|
||||
else m_eyeOffset.Y = eyes_min;
|
||||
}else{
|
||||
//standing
|
||||
if(m_eyeOffset.Y < eyes_max - 0.01f)
|
||||
m_eyeOffset.Y += (eyes_max-m_eyeOffset.Y) * eyes_delta * dtime;
|
||||
else m_eyeOffset.Y = eyes_max;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
10
src/player.h
10
src/player.h
|
@ -69,7 +69,8 @@ public:
|
|||
// This is at the height of the eyes of the current figure
|
||||
// return v3f(0, BS+BS/2, 0);
|
||||
// This is more like in minecraft
|
||||
return v3f(0,BS+(5*BS)/8,0);
|
||||
//return v3f(0,BS+(5*BS)/8,0);
|
||||
return m_eyeOffset;
|
||||
}
|
||||
|
||||
v3f getEyePosition()
|
||||
|
@ -169,6 +170,7 @@ protected:
|
|||
f32 m_yaw;
|
||||
v3f m_speed;
|
||||
v3f m_position;
|
||||
v3f m_eyeOffset;
|
||||
|
||||
public:
|
||||
|
||||
|
@ -188,6 +190,7 @@ struct PlayerControl
|
|||
sneak = false;
|
||||
pitch = 0;
|
||||
yaw = 0;
|
||||
crouch = false;
|
||||
}
|
||||
PlayerControl(
|
||||
bool a_up,
|
||||
|
@ -198,7 +201,8 @@ struct PlayerControl
|
|||
bool a_aux1,
|
||||
bool a_sneak,
|
||||
float a_pitch,
|
||||
float a_yaw
|
||||
float a_yaw,
|
||||
bool a_crouch
|
||||
)
|
||||
{
|
||||
up = a_up;
|
||||
|
@ -210,6 +214,7 @@ struct PlayerControl
|
|||
sneak = a_sneak;
|
||||
pitch = a_pitch;
|
||||
yaw = a_yaw;
|
||||
crouch = a_crouch;
|
||||
}
|
||||
bool up;
|
||||
bool down;
|
||||
|
@ -220,6 +225,7 @@ struct PlayerControl
|
|||
bool sneak;
|
||||
float pitch;
|
||||
float yaw;
|
||||
bool crouch;
|
||||
};
|
||||
|
||||
class LocalPlayer : public Player
|
||||
|
|
Loading…
Reference in New Issue