added run with leftshift

This commit is contained in:
Lendemor 2017-08-19 20:29:34 +02:00
parent a6bb3e5769
commit 6c3689f11f
4 changed files with 14 additions and 6 deletions

View File

@ -6,7 +6,7 @@
class DefaultKeysMap : public IKeysMap class DefaultKeysMap : public IKeysMap
{ {
public: public:
enum{MAIN_ACTION, SECONDARY_ACTION, TERTIARY_ACTION, MOVE_FORWARD, MOVE_BACKWARD, STRAFE_LEFT, STRAFE_RIGHT, JUMP, enum{MAIN_ACTION, SECONDARY_ACTION, TERTIARY_ACTION, MOVE_FORWARD, MOVE_BACKWARD, STRAFE_LEFT, STRAFE_RIGHT, JUMP,RUN,
TOGGLE_NOCLIP, TOGGLE_PHYSICS_DEBUG, TOGGLE_CONSOLE, TOGGLE_NOCLIP, TOGGLE_PHYSICS_DEBUG, TOGGLE_CONSOLE,
MOVE_CURSOR_LEFT, MOVE_CURSOR_RIGHT, TOGGLE_MOUSE_CURSOR, LEFT_CLICK, MOVE_CURSOR_LEFT, MOVE_CURSOR_RIGHT, TOGGLE_MOUSE_CURSOR, LEFT_CLICK,
EXIT_GAME,LAST_DEFAULT_ACTION}; EXIT_GAME,LAST_DEFAULT_ACTION};
@ -19,6 +19,7 @@ public:
keys.push_back( {{MOVE_BACKWARD,input::KEYBOARD}, sf::Keyboard::S, IKeysMap::HOLD} ); keys.push_back( {{MOVE_BACKWARD,input::KEYBOARD}, sf::Keyboard::S, IKeysMap::HOLD} );
keys.push_back( {{STRAFE_LEFT,input::KEYBOARD}, sf::Keyboard::Q, IKeysMap::HOLD} ); keys.push_back( {{STRAFE_LEFT,input::KEYBOARD}, sf::Keyboard::Q, IKeysMap::HOLD} );
keys.push_back( {{STRAFE_RIGHT,input::KEYBOARD}, sf::Keyboard::D, IKeysMap::HOLD} ); keys.push_back( {{STRAFE_RIGHT,input::KEYBOARD}, sf::Keyboard::D, IKeysMap::HOLD} );
keys.push_back( {{RUN,input::KEYBOARD}, sf::Keyboard::LShift,IKeysMap::HOLD} );
keys.push_back( {{JUMP,input::KEYBOARD}, sf::Keyboard::Space, IKeysMap::PRESSED} ); keys.push_back( {{JUMP,input::KEYBOARD}, sf::Keyboard::Space, IKeysMap::PRESSED} );
keys.push_back( {{TOGGLE_NOCLIP,input::KEYBOARD}, sf::Keyboard::G, IKeysMap::PRESSED} ); keys.push_back( {{TOGGLE_NOCLIP,input::KEYBOARD}, sf::Keyboard::G, IKeysMap::PRESSED} );
keys.push_back( {{TOGGLE_PHYSICS_DEBUG,input::KEYBOARD},sf::Keyboard::P, IKeysMap::PRESSED} ); keys.push_back( {{TOGGLE_PHYSICS_DEBUG,input::KEYBOARD},sf::Keyboard::P, IKeysMap::PRESSED} );
@ -41,6 +42,7 @@ public:
{STRAFE_LEFT,input::KEYBOARD}, {STRAFE_LEFT,input::KEYBOARD},
{STRAFE_RIGHT,input::KEYBOARD}, {STRAFE_RIGHT,input::KEYBOARD},
{JUMP,input::KEYBOARD}, {JUMP,input::KEYBOARD},
{RUN,input::KEYBOARD},
{TOGGLE_NOCLIP,input::KEYBOARD}, {TOGGLE_NOCLIP,input::KEYBOARD},
{TOGGLE_PHYSICS_DEBUG,input::KEYBOARD}, {TOGGLE_PHYSICS_DEBUG,input::KEYBOARD},
{TOGGLE_MOUSE_CURSOR,input::KEYBOARD}, {TOGGLE_MOUSE_CURSOR,input::KEYBOARD},

View File

@ -55,6 +55,7 @@ void FirstPersonCamera::setUpVector(const glm::vec3 &up)
} }
const float WALK_SPEED = 5.f; const float WALK_SPEED = 5.f;
const float RUNNING_MULTIPLIER = 2.f;
const float TORSO_RADIUS = 0.30f; const float TORSO_RADIUS = 0.30f;
const float TORSO_HEIGHT = 0.8f; const float TORSO_HEIGHT = 0.8f;
const float LEGS_HEIGHT = 1.f; const float LEGS_HEIGHT = 1.f;
@ -92,13 +93,14 @@ PlayerCharacterNode::~PlayerCharacterNode()
delete m_playerLight; delete m_playerLight;
} }
void PlayerCharacterNode::setInputs(int forward, int backward, int strafeLeft, int strafeRight, int jump, int toggleNoClip) void PlayerCharacterNode::setInputs(int forward, int backward, int strafeLeft, int strafeRight, int jump, int run, int toggleNoClip)
{ {
m_inputActions[FORWARD] = forward; m_inputActions[FORWARD] = forward;
m_inputActions[BACKWARD] = backward; m_inputActions[BACKWARD] = backward;
m_inputActions[STRAFE_LEFT] = strafeLeft; m_inputActions[STRAFE_LEFT] = strafeLeft;
m_inputActions[STRAFE_RIGHT] = strafeRight; m_inputActions[STRAFE_RIGHT] = strafeRight;
m_inputActions[JUMP] = jump; m_inputActions[JUMP] = jump;
m_inputActions[RUN] = run;
m_inputActions[TOGGLE_NOCLIP] = toggleNoClip; m_inputActions[TOGGLE_NOCLIP] = toggleNoClip;
} }
@ -121,6 +123,7 @@ void PlayerCharacterNode::update()
int walk = 0; int walk = 0;
int strafe = 0; int strafe = 0;
bool jump = false; bool jump = false;
bool run = false;
for(Action action : input->getActions()) for(Action action : input->getActions())
{ {
if(action.action == m_inputActions[FORWARD]) if(action.action == m_inputActions[FORWARD])
@ -133,6 +136,8 @@ void PlayerCharacterNode::update()
++strafe; ++strafe;
else if(action.action == m_inputActions[JUMP]) else if(action.action == m_inputActions[JUMP])
jump = true; jump = true;
else if(action.action == m_inputActions[RUN])
run=true;
else if(action.action == m_inputActions[TOGGLE_NOCLIP]) else if(action.action == m_inputActions[TOGGLE_NOCLIP])
toggleNoClip(); toggleNoClip();
} }
@ -161,6 +166,7 @@ void PlayerCharacterNode::update()
else else
{ {
glm::vec2 hPos = glm::normalize(glm::vec2(moveDir.x, moveDir.z))*WALK_SPEED; glm::vec2 hPos = glm::normalize(glm::vec2(moveDir.x, moveDir.z))*WALK_SPEED;
if(run) hPos *= RUNNING_MULTIPLIER;
targetVelocity.setX(hPos.x); targetVelocity.setX(hPos.x);
targetVelocity.setZ(hPos.y); targetVelocity.setZ(hPos.y);
} }

View File

@ -47,13 +47,13 @@ class PlayerCharacterNode : public CameraNode
std::vector<int> m_inputActions; std::vector<int> m_inputActions;
enum PlayerAction {FORWARD, BACKWARD, STRAFE_LEFT, STRAFE_RIGHT, JUMP, TOGGLE_NOCLIP}; enum PlayerAction {FORWARD, BACKWARD, STRAFE_LEFT, STRAFE_RIGHT, JUMP, RUN, TOGGLE_NOCLIP};
public: public:
PlayerCharacterNode(bool noClip = true); PlayerCharacterNode(bool noClip = true);
~PlayerCharacterNode(); ~PlayerCharacterNode();
void setInputs(int forward, int backward, int strafe_left, int strafe_right, int jump = NO_ACTION, int toggleNoClip = NO_ACTION); void setInputs(int forward, int backward, int strafe_left, int strafe_right, int jump = NO_ACTION, int run= NO_ACTION, int toggleNoClip = NO_ACTION);
void setPosition(float x, float y, float z); void setPosition(float x, float y, float z);

View File

@ -192,7 +192,7 @@ public:
void initScene(){ void initScene(){
//player //player
m_player = new PlayerCharacterNode(false); m_player = new PlayerCharacterNode(false);
m_player->setInputs(DefaultKeysMap::MOVE_FORWARD, DefaultKeysMap::MOVE_BACKWARD, DefaultKeysMap::STRAFE_LEFT, DefaultKeysMap::STRAFE_RIGHT, DefaultKeysMap::JUMP, DefaultKeysMap::TOGGLE_NOCLIP); m_player->setInputs(DefaultKeysMap::MOVE_FORWARD, DefaultKeysMap::MOVE_BACKWARD, DefaultKeysMap::STRAFE_LEFT, DefaultKeysMap::STRAFE_RIGHT, DefaultKeysMap::JUMP, DefaultKeysMap::RUN, DefaultKeysMap::TOGGLE_NOCLIP);
SceneTree* scene = RESOURCE_GET(SceneTree, m_demo_scene); SceneTree* scene = RESOURCE_GET(SceneTree, m_demo_scene);
scene->getRootObject()->addChild(m_player); scene->getRootObject()->addChild(m_player);
scene->setMainCamera(m_player); scene->setMainCamera(m_player);