Crouching (Left Control key)

master
jachoo 2011-12-04 14:19:03 +01:00
parent ceaf8edade
commit 93db635364
5 changed files with 32 additions and 6 deletions

View File

@ -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

View File

@ -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");

View File

@ -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);
}

View File

@ -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

View File

@ -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