From: <geo...@us...> - 2014-02-14 07:23:14
|
Revision: 6899 http://sourceforge.net/p/freeorion/code/6899 Author: geoffthemedio Date: 2014-02-14 07:23:11 +0000 (Fri, 14 Feb 2014) Log Message: ----------- Added HumanClientApp::CanSaveNow function that will contain all the tests to see if a client can initiate a save at a particular time. Modified Paths: -------------- trunk/FreeOrion/UI/InGameMenu.cpp trunk/FreeOrion/UI/PlayerListWnd.h trunk/FreeOrion/client/human/HumanClientApp.cpp trunk/FreeOrion/client/human/HumanClientApp.h Modified: trunk/FreeOrion/UI/InGameMenu.cpp =================================================================== --- trunk/FreeOrion/UI/InGameMenu.cpp 2014-02-14 07:13:36 UTC (rev 6898) +++ trunk/FreeOrion/UI/InGameMenu.cpp 2014-02-14 07:23:11 UTC (rev 6899) @@ -52,12 +52,13 @@ GG::Connect(m_done_btn->LeftClickedSignal, &InGameMenu::Done, this); if (!HumanClientApp::GetApp()->SinglePlayerGame()) { - // only host can save multiplayer games - if (!HumanClientApp::GetApp()->Networking().PlayerIsHost(HumanClientApp::GetApp()->PlayerID())) - m_save_btn->Disable(); // need lobby to load a multiplayer game; menu load of a file is insufficient m_load_btn->Disable(); } + + if (!HumanClientApp::GetApp()->CanSaveNow()) { + m_save_btn->Disable(); + } } InGameMenu::~InGameMenu() @@ -77,6 +78,15 @@ void InGameMenu::Save() { Logger().debugStream() << "InGameMenu::Save"; + + HumanClientApp* app = HumanClientApp::GetApp(); + if (!app) + return; + if (!app->CanSaveNow()) { + Logger().errorStream() << "InGameMenu::Save aborting; Client app can't save now"; + return; + } + const std::string SAVE_GAME_EXTENSION = HumanClientApp::GetApp()->SinglePlayerGame() ? SP_SAVE_FILE_EXTENSION : MP_SAVE_FILE_EXTENSION; @@ -94,7 +104,7 @@ dlg.Run(); if (!dlg.Result().empty()) { Logger().debugStream() << "... initiating save"; - HumanClientApp::GetApp()->SaveGame(*dlg.Result().begin()); + app->SaveGame(*dlg.Result().begin()); CloseClicked(); Logger().debugStream() << "... save done"; } Modified: trunk/FreeOrion/UI/PlayerListWnd.h =================================================================== --- trunk/FreeOrion/UI/PlayerListWnd.h 2014-02-14 07:13:36 UTC (rev 6898) +++ trunk/FreeOrion/UI/PlayerListWnd.h 2014-02-14 07:23:11 UTC (rev 6899) @@ -31,7 +31,7 @@ mutable boost::signals2::signal<void ()> SelectedPlayersChangedSignal; mutable boost::signals2::signal<void (int)> PlayerDoubleClickedSignal; - mutable boost::signals2::signal<void ()> ClosingSignal; + mutable boost::signals2::signal<void ()> ClosingSignal; private: virtual void CloseClicked(); Modified: trunk/FreeOrion/client/human/HumanClientApp.cpp =================================================================== --- trunk/FreeOrion/client/human/HumanClientApp.cpp 2014-02-14 07:13:36 UTC (rev 6898) +++ trunk/FreeOrion/client/human/HumanClientApp.cpp 2014-02-14 07:23:11 UTC (rev 6899) @@ -269,6 +269,16 @@ bool HumanClientApp::SinglePlayerGame() const { return m_single_player_game; } +bool HumanClientApp::CanSaveNow() const { + // only host can save in multiplayer + if (!SinglePlayerGame() && !Networking().PlayerIsHost(PlayerID())) + return false; + + // can't save while AIs are playing their turns... + // TODO: this + return true; +} + void HumanClientApp::SetSinglePlayerGame(bool sp/* = true*/) { m_single_player_game = sp; } @@ -811,7 +821,7 @@ case Message::TURN_UPDATE: m_fsm->process_event(TurnUpdate(msg)); break; case Message::TURN_PARTIAL_UPDATE: m_fsm->process_event(TurnPartialUpdate(msg)); break; case Message::TURN_PROGRESS: m_fsm->process_event(TurnProgress(msg)); break; - case Message::PLAYER_STATUS: m_fsm->process_event(PlayerStatus(msg)); break; + case Message::PLAYER_STATUS: m_fsm->process_event(::PlayerStatus(msg)); break; case Message::COMBAT_START: m_fsm->process_event(CombatStart(msg)); break; case Message::COMBAT_TURN_UPDATE: m_fsm->process_event(CombatRoundUpdate(msg)); break; case Message::COMBAT_END: m_fsm->process_event(CombatEnd(msg)); break; @@ -904,7 +914,7 @@ void HumanClientApp::HandleWindowClose() { Logger().debugStream() << "HumanClientApp::HandleWindowClose()"; - EndGame(true); + EndGame(); Exit(0); } Modified: trunk/FreeOrion/client/human/HumanClientApp.h =================================================================== --- trunk/FreeOrion/client/human/HumanClientApp.h 2014-02-14 07:13:36 UTC (rev 6898) +++ trunk/FreeOrion/client/human/HumanClientApp.h 2014-02-14 07:23:11 UTC (rev 6899) @@ -44,6 +44,7 @@ /** \name Accessors */ //@{ bool SinglePlayerGame() const; ///< returns true iff this game is a single-player game + bool CanSaveNow() const; ///< returns true / false to indicate whether this client can currently safely initiate a game save //@} /** \name Mutators */ //@{ |