diff --git a/source/glest_game/game/game.cpp b/source/glest_game/game/game.cpp index 79c30fd1..233ae894 100644 --- a/source/glest_game/game/game.cpp +++ b/source/glest_game/game/game.cpp @@ -95,7 +95,11 @@ Game::Game(Program *program, const GameSettings *gameSettings): renderNetworkStatus= false; speed= sNormal; showFullConsole= false; - cameraKeyboardDirection=camNone; + + camLeftButtonDown=false; + camRightButtonDown=false; + camUpButtonDown=false; + camDownButtonDown=false; Object::setStateCallback(&gui); @@ -1301,7 +1305,7 @@ void Game::mouseMove(int x, int y, const MouseState *ms) { else { //main window //if(Window::isKeyDown() == false) - if(cameraKeyboardDirection == camNone) + if(!camLeftButtonDown && !camRightButtonDown && !camUpButtonDown && !camDownButtonDown) { if (y < 10) { gameCamera.setMoveZ(-scrollSpeed); @@ -1436,22 +1440,22 @@ void Game::keyDown(char key) { //move camera left else if(key == configKeys.getCharKey("CameraModeLeft")) { gameCamera.setMoveX(-1); - cameraKeyboardDirection=camLeft; + camLeftButtonDown=true; } //move camera right else if(key == configKeys.getCharKey("CameraModeRight")) { gameCamera.setMoveX(1); - cameraKeyboardDirection=camRight; + camRightButtonDown=true; } //move camera up else if(key == configKeys.getCharKey("CameraModeUp")) { gameCamera.setMoveZ(1); - cameraKeyboardDirection=camUp; + camUpButtonDown=true; } //move camera down else if(key == configKeys.getCharKey("CameraModeDown")) { gameCamera.setMoveZ(-1); - cameraKeyboardDirection=camDown; + camDownButtonDown=true; } //change camera mode else if(key == configKeys.getCharKey("FreeCameraMode")) { @@ -1574,22 +1578,26 @@ void Game::keyUp(char key){ key == configKeys.getCharKey("CameraRotateUp")) { gameCamera.setMoveY(0); } - else if(key == configKeys.getCharKey("CameraModeUp") && cameraKeyboardDirection == camUp){ + else if(key == configKeys.getCharKey("CameraModeUp")){ gameCamera.setMoveZ(0); - cameraKeyboardDirection= camNone; + camUpButtonDown= false; + calcCameraMoveZ(); } - else if(key == configKeys.getCharKey("CameraModeDown") && cameraKeyboardDirection == camDown){ + else if(key == configKeys.getCharKey("CameraModeDown")){ gameCamera.setMoveZ(0); - cameraKeyboardDirection= camNone; + camDownButtonDown= false; + calcCameraMoveZ(); } - else if(key == configKeys.getCharKey("CameraModeLeft") && cameraKeyboardDirection == camLeft){ + else if(key == configKeys.getCharKey("CameraModeLeft")){ gameCamera.setMoveX(0); - cameraKeyboardDirection= camNone; + camLeftButtonDown= false; + calcCameraMoveX(); } - else if(key == configKeys.getCharKey("CameraModeRight") && cameraKeyboardDirection == camRight){ + else if(key == configKeys.getCharKey("CameraModeRight")){ gameCamera.setMoveX(0); - cameraKeyboardDirection= camNone; + camRightButtonDown= false; + calcCameraMoveX(); } } } @@ -1604,6 +1612,28 @@ void Game::keyUp(char key){ } } +void Game::calcCameraMoveX(){ + //move camera left + if(camLeftButtonDown == true){ + gameCamera.setMoveX(-1); + } + //move camera right + else if(camRightButtonDown == true){ + gameCamera.setMoveX(1); + } +} +void Game::calcCameraMoveZ(){ + //move camera up + if(camUpButtonDown == true){ + gameCamera.setMoveZ(1); + } + //move camera down + else if(camDownButtonDown == true){ + gameCamera.setMoveZ(-1); + } + +} + void Game::keyPress(char c){ if(gameStarted == false) { return; diff --git a/source/glest_game/game/game.h b/source/glest_game/game/game.h index 95994ea6..076f641b 100644 --- a/source/glest_game/game/game.h +++ b/source/glest_game/game/game.h @@ -63,14 +63,6 @@ private: typedef vector Ais; typedef vector AiInterfaces; - enum CameraKeyboardDirection{ - camNone, - camLeft, - camRight, - camUp, - camDown - }; - private: //main data World world; @@ -96,7 +88,11 @@ private: bool showFullConsole; bool mouseMoved; float scrollSpeed; - CameraKeyboardDirection cameraKeyboardDirection; + bool camLeftButtonDown; + bool camRightButtonDown; + bool camUpButtonDown; + bool camDownButtonDown; + Speed speed; GraphicMessageBox mainMessageBox; GraphicMessageBox errorMessageBox; @@ -216,6 +212,8 @@ private: static int ErrorDisplayMessage(const char *msg, bool exitApp); void ReplaceDisconnectedNetworkPlayersWithAI(bool isNetworkGame, NetworkRole role); + void calcCameraMoveX(); + void calcCameraMoveZ(); }; }}//end namespace