diff --git a/src/defaultkeysmap.h b/src/defaultkeysmap.h index bf8724c..4b0cc70 100644 --- a/src/defaultkeysmap.h +++ b/src/defaultkeysmap.h @@ -6,7 +6,7 @@ class DefaultKeysMap : public IKeysMap { 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, MOVE_CURSOR_LEFT, MOVE_CURSOR_RIGHT, TOGGLE_MOUSE_CURSOR, LEFT_CLICK, EXIT_GAME,LAST_DEFAULT_ACTION}; @@ -16,9 +16,10 @@ public: keys.push_back( {{SECONDARY_ACTION,input::MOUSE}, sf::Mouse::Right, IKeysMap::PRESSED} ); keys.push_back( {{TERTIARY_ACTION,input::MOUSE}, sf::Mouse::Middle, IKeysMap::PRESSED} ); keys.push_back( {{MOVE_FORWARD,input::KEYBOARD}, sf::Keyboard::Z, IKeysMap::HOLD} ); - 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_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( {{TOGGLE_NOCLIP,input::KEYBOARD}, sf::Keyboard::G, 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_RIGHT,input::KEYBOARD}, {JUMP,input::KEYBOARD}, + {RUN,input::KEYBOARD}, {TOGGLE_NOCLIP,input::KEYBOARD}, {TOGGLE_PHYSICS_DEBUG,input::KEYBOARD}, {TOGGLE_MOUSE_CURSOR,input::KEYBOARD}, diff --git a/src/scene/playercharacternode.cpp b/src/scene/playercharacternode.cpp index 0bc2edf..c7f5ad2 100644 --- a/src/scene/playercharacternode.cpp +++ b/src/scene/playercharacternode.cpp @@ -55,6 +55,7 @@ void FirstPersonCamera::setUpVector(const glm::vec3 &up) } const float WALK_SPEED = 5.f; +const float RUNNING_MULTIPLIER = 2.f; const float TORSO_RADIUS = 0.30f; const float TORSO_HEIGHT = 0.8f; const float LEGS_HEIGHT = 1.f; @@ -92,13 +93,14 @@ PlayerCharacterNode::~PlayerCharacterNode() 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[BACKWARD] = backward; m_inputActions[STRAFE_LEFT] = strafeLeft; m_inputActions[STRAFE_RIGHT] = strafeRight; m_inputActions[JUMP] = jump; + m_inputActions[RUN] = run; m_inputActions[TOGGLE_NOCLIP] = toggleNoClip; } @@ -121,6 +123,7 @@ void PlayerCharacterNode::update() int walk = 0; int strafe = 0; bool jump = false; + bool run = false; for(Action action : input->getActions()) { if(action.action == m_inputActions[FORWARD]) @@ -133,6 +136,8 @@ void PlayerCharacterNode::update() ++strafe; else if(action.action == m_inputActions[JUMP]) jump = true; + else if(action.action == m_inputActions[RUN]) + run=true; else if(action.action == m_inputActions[TOGGLE_NOCLIP]) toggleNoClip(); } @@ -161,6 +166,7 @@ void PlayerCharacterNode::update() else { glm::vec2 hPos = glm::normalize(glm::vec2(moveDir.x, moveDir.z))*WALK_SPEED; + if(run) hPos *= RUNNING_MULTIPLIER; targetVelocity.setX(hPos.x); targetVelocity.setZ(hPos.y); } diff --git a/src/scene/playercharacternode.h b/src/scene/playercharacternode.h index e83659c..d426ca8 100644 --- a/src/scene/playercharacternode.h +++ b/src/scene/playercharacternode.h @@ -47,13 +47,13 @@ class PlayerCharacterNode : public CameraNode std::vector 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: PlayerCharacterNode(bool noClip = true); ~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); diff --git a/src/test/main.cpp b/src/test/main.cpp index ff14a66..c425bf3 100644 --- a/src/test/main.cpp +++ b/src/test/main.cpp @@ -192,7 +192,7 @@ public: void initScene(){ //player 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); scene->getRootObject()->addChild(m_player); scene->setMainCamera(m_player);