00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <server/ServerStateTooFewPlayersState.h>
00022 #include <server/ServerTooFewPlayersStimulus.h>
00023 #include <server/ServerChannelManager.h>
00024 #include <server/ScorchedServer.h>
00025 #include <server/ServerNewGameState.h>
00026 #include <server/ServerState.h>
00027 #include <server/ServerCommon.h>
00028 #include <tank/TankContainer.h>
00029 #include <coms/ComsGameStoppedMessage.h>
00030 #include <coms/ComsMessageSender.h>
00031 #include <common/OptionsScorched.h>
00032 #include <common/Logger.h>
00033
00034 ServerStateTooFewPlayersState::ServerStateTooFewPlayersState() :
00035 GameStateI("ServerStateTooFewPlayersState"),
00036 totalTime_(0.0f)
00037
00038 {
00039 }
00040
00041 ServerStateTooFewPlayersState::~ServerStateTooFewPlayersState()
00042 {
00043 }
00044
00045 void ServerStateTooFewPlayersState::enterState(const unsigned state)
00046 {
00047
00048 ScorchedServer::instance()->getTankContainer().setAllDead();
00049
00050
00051 ComsGameStoppedMessage gameStopped;
00052 ComsMessageSender::sendToAllPlayingClients(gameStopped);
00053
00054 ServerChannelManager::instance()->sendText(
00055 ChannelText("info",
00056 "TOO_FEW_PLAYERS",
00057 "Too few players, stopping play"),
00058 true);
00059 }
00060
00061 bool ServerStateTooFewPlayersState::acceptStateChange(const unsigned state,
00062 const unsigned nextState,
00063 float frameTime)
00064 {
00065 bool readyToPlay = !ServerTooFewPlayersStimulus::instance()->
00066 acceptStateChange(state, nextState, frameTime);
00067 if (readyToPlay) return true;
00068
00069
00070 totalTime_ += frameTime;
00071 if (totalTime_ > 1.0f)
00072 {
00073 totalTime_ = 0.0f;
00074 if (ScorchedServer::instance()->getOptionsGame().commitChanges())
00075 {
00076 ServerChannelManager::instance()->sendText(
00077 ChannelText("info",
00078 "GAME_OPTIONS_CHANGED",
00079 "Game options have been changed!"),
00080 true);
00081 }
00082 }
00083
00084
00085 #ifndef S3D_SERVER
00086 {
00087 if (ScorchedServer::instance()->getTankContainer().getNoOfNonSpectatorTanks() ==
00088 ScorchedServer::instance()->getOptionsGame().getNoMinPlayers())
00089 {
00090
00091
00092
00093 S3D::dialogExit("Scorched3D",
00094 "Incorrect players added for current game settings."
00095 "Is this a team game with un-even teams?");
00096 }
00097 }
00098 #endif // S3D_SERVER
00099
00100 return false;
00101 }