diff --git a/source/glest_game/game/game.cpp b/source/glest_game/game/game.cpp index 44480cb96..1cbc54336 100644 --- a/source/glest_game/game/game.cpp +++ b/source/glest_game/game/game.cpp @@ -49,6 +49,7 @@ Game::Game(Program *program, const GameSettings *gameSettings): this->program = program; Unit::setGame(this); + gameStarted = false; original_updateFps = GameConstants::updateFps; original_cameraFps = GameConstants::cameraFps; @@ -368,6 +369,7 @@ void Game::load(LoadGameItem loadTypes) { SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); Game::findFactionLogoFile(&gameSettings, &logger); + Window::handleEvent(); SDL_PumpEvents(); } @@ -393,6 +395,7 @@ void Game::load(LoadGameItem loadTypes) { // give CPU time to update other things to avoid apperance of hanging sleep(0); + Window::handleEvent(); SDL_PumpEvents(); SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); @@ -430,6 +433,7 @@ void Game::load(LoadGameItem loadTypes) { // give CPU time to update other things to avoid apperance of hanging sleep(0); + Window::handleEvent(); SDL_PumpEvents(); SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); @@ -442,6 +446,7 @@ void Game::load(LoadGameItem loadTypes) { // give CPU time to update other things to avoid apperance of hanging sleep(0); + Window::handleEvent(); SDL_PumpEvents(); SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); @@ -501,6 +506,7 @@ void Game::init(bool initForPreviewOnly) // give CPU time to update other things to avoid apperance of hanging sleep(0); + Window::handleEvent(); SDL_PumpEvents(); } @@ -511,6 +517,7 @@ void Game::init(bool initForPreviewOnly) if(initForPreviewOnly == false) { // give CPU time to update other things to avoid apperance of hanging sleep(0); + Window::handleEvent(); SDL_PumpEvents(); gui.init(this); @@ -537,6 +544,7 @@ void Game::init(bool initForPreviewOnly) if(initForPreviewOnly == false) { // give CPU time to update other things to avoid apperance of hanging sleep(0); + Window::handleEvent(); SDL_PumpEvents(); scriptManager.init(&world, &gameCamera); @@ -570,6 +578,7 @@ void Game::init(bool initForPreviewOnly) // give CPU time to update other things to avoid apperance of hanging sleep(0); + Window::handleEvent(); SDL_PumpEvents(); //weather particle systems @@ -607,6 +616,7 @@ void Game::init(bool initForPreviewOnly) // give CPU time to update other things to avoid apperance of hanging sleep(0); + Window::handleEvent(); SDL_PumpEvents(); SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); @@ -660,6 +670,8 @@ void Game::init(bool initForPreviewOnly) SystemFlags::OutputDebug(SystemFlags::debugPathFinder,"================ STARTING GAME ================\n"); SystemFlags::OutputDebug(SystemFlags::debugPathFinder,"PathFinderType: %s\n", (getGameSettings()->getPathFinderType() ? "RoutePlanner" : "PathFinder")); + gameStarted = true; + SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] ==== START GAME ==== getCurrentPixelByteCount() = %llu\n",__FILE__,__FUNCTION__,__LINE__,(long long unsigned int)renderer.getCurrentPixelByteCount()); SystemFlags::OutputDebug(SystemFlags::debugWorldSynch,"==== START GAME ====\n"); } @@ -933,9 +945,12 @@ void Game::tick() { // ==================== events ==================== -void Game::mouseDownLeft(int x, int y){ - +void Game::mouseDownLeft(int x, int y) { try { + if(gameStarted == false) { + return; + } + Map *map= world.getMap(); const Metrics &metrics= Metrics::getInstance(); NetworkManager &networkManager= NetworkManager::getInstance(); @@ -1028,8 +1043,12 @@ void Game::mouseDownLeft(int x, int y){ } } -void Game::mouseDownRight(int x, int y){ +void Game::mouseDownRight(int x, int y) { try { + if(gameStarted == false) { + return; + } + Map *map= world.getMap(); const Metrics &metrics= Metrics::getInstance(); @@ -1057,13 +1076,25 @@ void Game::mouseDownRight(int x, int y){ } } - void Game::mouseUpCenter(int x, int y){ - if (!mouseMoved) gameCamera.resetPosition(); - else mouseMoved = false; + void Game::mouseUpCenter(int x, int y) { + if(gameStarted == false) { + return; + } + + if(mouseMoved == false) { + gameCamera.resetPosition(); + } + else { + mouseMoved = false; + } } -void Game::mouseUpLeft(int x, int y){ +void Game::mouseUpLeft(int x, int y) { try { + if(gameStarted == false) { + return; + } + gui.mouseUpLeftGraphics(x, y); } catch(const exception &ex) { @@ -1077,8 +1108,12 @@ void Game::mouseUpLeft(int x, int y){ } } -void Game::mouseDoubleClickLeft(int x, int y){ +void Game::mouseDoubleClickLeft(int x, int y) { try { + if(gameStarted == false) { + return; + } + const Metrics &metrics= Metrics::getInstance(); //display panel @@ -1104,8 +1139,12 @@ void Game::mouseDoubleClickLeft(int x, int y){ } } -void Game::mouseMove(int x, int y, const MouseState *ms){ +void Game::mouseMove(int x, int y, const MouseState *ms) { try { + if(gameStarted == false) { + return; + } + const Metrics &metrics = Metrics::getInstance(); mouseX = x; @@ -1219,7 +1258,10 @@ void Game::eventMouseWheel(int x, int y, int zDelta) { void Game::keyDown(char key) { try { - SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] key = [%c] [%d]\n",__FILE__,__FUNCTION__,__LINE__,key,key); + SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] key = [%c] [%d] gameStarted [%d]\n",__FILE__,__FUNCTION__,__LINE__,key,key, gameStarted); + if(gameStarted == false) { + return; + } Lang &lang= Lang::getInstance(); bool speedChangesAllowed= !NetworkManager::getInstance().isNetworkGame(); @@ -1388,6 +1430,10 @@ void Game::keyDown(char key) { void Game::keyUp(char key){ try { + if(gameStarted == false) { + return; + } + if(chatManager.getEditEnabled()) { //send key to the chat manager chatManager.keyUp(key); @@ -1428,6 +1474,10 @@ void Game::keyUp(char key){ } void Game::keyPress(char c){ + if(gameStarted == false) { + return; + } + chatManager.keyPress(c); } diff --git a/source/glest_game/game/game.h b/source/glest_game/game/game.h index 7b1716db1..4783b3cc1 100644 --- a/source/glest_game/game/game.h +++ b/source/glest_game/game/game.h @@ -112,6 +112,8 @@ private: bool photoModeEnabled; Program *program; + bool gameStarted; + public: Game(Program *program, const GameSettings *gameSettings); ~Game(); @@ -168,6 +170,7 @@ public: static string findFactionLogoFile(const GameSettings *settings, Logger *logger, string factionLogoFilter="loading_screen.*"); bool getGameOver() { return gameOver; } + bool hasGameStarted() { return gameStarted;} private: //render diff --git a/source/glest_game/network/client_interface.cpp b/source/glest_game/network/client_interface.cpp index 283ed0758..5ca037345 100755 --- a/source/glest_game/network/client_interface.cpp +++ b/source/glest_game/network/client_interface.cpp @@ -19,11 +19,11 @@ #include "conversion.h" #include "config.h" #include "lang.h" -#include "leak_dumper.h" - #include "map.h" #include "config.h" #include "logger.h" +#include "window.h" +#include "leak_dumper.h" using namespace std; using namespace Shared::Platform; @@ -727,6 +727,8 @@ void ClientInterface::waitUntilReady(Checksum* checksum) { SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] Line: %d\n",__FILE__,__FUNCTION__,__LINE__); return; } + + Window::handleEvent(); // sleep a bit sleep(waitSleepTime); } diff --git a/source/glest_game/network/server_interface.cpp b/source/glest_game/network/server_interface.cpp index 49784bed3..648bb0200 100644 --- a/source/glest_game/network/server_interface.cpp +++ b/source/glest_game/network/server_interface.cpp @@ -23,6 +23,7 @@ #include "util.h" #include "game_util.h" #include "miniftpserver.h" +#include "window.h" #include "leak_dumper.h" using namespace std; @@ -992,6 +993,8 @@ void ServerInterface::waitUntilReady(Checksum *checksum) { } } } + + Window::handleEvent(); } SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s] PART B (telling client we are ready!\n",__FUNCTION__); try { diff --git a/source/glest_game/types/tech_tree.cpp b/source/glest_game/types/tech_tree.cpp index 9b365b550..e49921b43 100644 --- a/source/glest_game/types/tech_tree.cpp +++ b/source/glest_game/types/tech_tree.cpp @@ -19,7 +19,8 @@ #include "logger.h" #include "xml_parser.h" #include "platform_util.h" -#include "game_util.h" +#include "game_util.h" +#include "window.h" #include "leak_dumper.h" using namespace Shared::Util; @@ -62,6 +63,7 @@ void TechTree::load(const string &dir, set &factions, Checksum* checksum for(int i=0; i &factions, Checksum* checksum // give CPU time to update other things to avoid apperance of hanging sleep(0); + Window::handleEvent(); SDL_PumpEvents(); //load tech tree xml info @@ -97,6 +100,7 @@ void TechTree::load(const string &dir, set &factions, Checksum* checksum const XmlNode *attackTypeNode= attackTypesNode->getChild("attack-type", i); attackTypes[i].setName(attackTypeNode->getAttribute("name")->getRestrictedValue()); attackTypes[i].setId(i); + Window::handleEvent(); SDL_PumpEvents(); } @@ -111,6 +115,7 @@ void TechTree::load(const string &dir, set &factions, Checksum* checksum const XmlNode *armorTypeNode= armorTypesNode->getChild("armor-type", i); armorTypes[i].setName(armorTypeNode->getAttribute("name")->getRestrictedValue()); armorTypes[i].setId(i); + Window::handleEvent(); SDL_PumpEvents(); } @@ -123,6 +128,7 @@ void TechTree::load(const string &dir, set &factions, Checksum* checksum const ArmorType *armorType= getArmorType(damageMultiplierNode->getAttribute("armor")->getRestrictedValue()); float multiplier= damageMultiplierNode->getAttribute("value")->getFloatValue(); damageMultiplierTable.setDamageMultiplier(attackType, armorType, multiplier); + Window::handleEvent(); SDL_PumpEvents(); } } @@ -155,6 +161,7 @@ void TechTree::load(const string &dir, set &factions, Checksum* checksum // give CPU time to update other things to avoid apperance of hanging sleep(0); + Window::handleEvent(); SDL_PumpEvents(); } }