//////////////////////////////////////////////////////////// // PlayingTurn //////////////////////////////////////////////////////////// PlayingTurn::PlayingTurn(my_context ctx) : Base(ctx) { if (TRACE_EXECUTION) Logger().debugStream() << "(HumanClientFSM) PlayingTurn"; Client().Register(Client().m_ui->GetMapWnd()); Client().m_ui->GetMapWnd()->InitTurn(); // TODO: reselect last fleet if stored in save game ui data? Client().m_ui->GetMessageWnd()->HandleGameStatusUpdate( boost::io::str(FlexibleFormat(UserString("TURN_BEGIN")) % CurrentTurn()) + "\n"); Client().m_ui->GetMessageWnd()->HandlePlayerStatusUpdate(Message::PLAYING_TURN, Client().PlayerID()); Client().m_ui->GetPlayerListWnd()->Refresh(); Client().m_ui->GetPlayerListWnd()->HandlePlayerStatusUpdate(Message::PLAYING_TURN, Client().PlayerID()); Client().m_ui->GetMapWnd()->EnableOrderIssuing(Client().EmpireID() != ALL_EMPIRES); // if not controlling an empire, the player (observer) can't do anything // other than waiting for more turn updates. Turn updates received when not // in WaitingForTurnData state will be ignored, and the Turn button is // disabled. So, posting TurnEnded here has the effect of automatically // keeping observers in the WaitingForTurnData state so they can receive // updates from the server. if (Client().EmpireID() == ALL_EMPIRES) post_event(TurnEnded()); else if (GetOptionsDB().Get<bool>("auto-advance-first-turn")) { static bool once = true; if (once) { post_event(AutoAdvanceFirstTurn()); once = false; } } }
//////////////////////////////////////////////////////////// // PlayingTurn //////////////////////////////////////////////////////////// PlayingTurn::PlayingTurn(my_context ctx) : Base(ctx) { if (TRACE_EXECUTION) DebugLogger() << "(HumanClientFSM) PlayingTurn"; Client().Register(Client().GetClientUI()->GetMapWnd()); Client().GetClientUI()->GetMapWnd()->InitTurn(); Client().GetClientUI()->GetMapWnd()->RegisterWindows(); // only useful at game start but InitTurn() takes a long time, don't want to display windows before content is ready. could go in WaitingForGameStart dtor but what if it is given e.g. an error reaction? // TODO: reselect last fleet if stored in save game ui data? Client().GetClientUI()->GetMessageWnd()->HandleGameStatusUpdate( boost::io::str(FlexibleFormat(UserString("TURN_BEGIN")) % CurrentTurn()) + "\n"); Client().GetClientUI()->GetMessageWnd()->HandlePlayerStatusUpdate(Message::PLAYING_TURN, Client().PlayerID()); Client().GetClientUI()->GetPlayerListWnd()->Refresh(); Client().GetClientUI()->GetPlayerListWnd()->HandlePlayerStatusUpdate(Message::PLAYING_TURN, Client().PlayerID()); if (Client().GetApp()->GetClientType() != Networking::CLIENT_TYPE_HUMAN_OBSERVER) Client().GetClientUI()->GetMapWnd()->EnableOrderIssuing(true); if (Client().GetApp()->GetClientType() == Networking::CLIENT_TYPE_HUMAN_OBSERVER) { // observers can't do anything but wait for the next update, and need to // be back in WaitingForTurnData, so posting TurnEnded here has the effect // of keeping observers in the WaitingForTurnData state so they can receive // updates from the server. post_event(TurnEnded()); } else if (Client().GetApp()->GetClientType() == Networking::CLIENT_TYPE_HUMAN_PLAYER) { if (Client().GetClientUI()->GetMapWnd()->AutoEndTurnEnabled()) { // if in-game-GUI auto turn advance enabled, set auto turn counter to 1 Client().InitAutoTurns(1); } if (Client().AutoTurnsLeft() <= 0 && GetOptionsDB().Get<bool>("auto-quit")) { // if no auto turns left, and supposed to quit after that, quit DebugLogger() << "auto-quit ending game."; std::cout << "auto-quit ending game." << std::endl; Client().EndGame(true); throw HumanClientApp::CleanQuit(); } // if there are still auto turns left, advance the turn automatically, // and decrease the auto turn counter if (Client().AutoTurnsLeft() > 0) { post_event(AdvanceTurn()); Client().DecAutoTurns(); } } }
void HumanClientApp::StartTurn() { DebugLogger() << "HumanClientApp::StartTurn"; const Empire *empire = GetEmpire(EmpireID()); if (empire) { double RP = empire->ResourceOutput(RE_RESEARCH); double PP = empire->ResourceOutput(RE_INDUSTRY); int turn_number = CurrentTurn(); float ratio = (RP/(PP+0.0001)); const GG::Clr color = empire->Color(); DebugLogger() << "Current Output (turn " << turn_number << ") RP/PP: " << ratio << " (" << RP << "/" << PP << ")"; DebugLogger() << "EmpireColors: " << static_cast<int>(color.r) << " " << static_cast<int>(color.g) << " " << static_cast<int>(color.b) << " " << static_cast<int>(color.a); } ClientApp::StartTurn(); m_fsm->process_event(TurnEnded()); }