00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <engine/ActionController.h>
00022 #include <graph/FrameTimer.h>
00023 #include <graph/ParticleEngine.h>
00024 #include <graph/Main2DCamera.h>
00025 #include <graph/SpeedChange.h>
00026 #include <graph/MainCamera.h>
00027 #include <graph/ShotCountDown.h>
00028 #include <graph/SoftwareMouse.h>
00029 #include <client/ClientState.h>
00030 #include <client/ClientShotState.h>
00031 #include <client/ClientWaitState.h>
00032 #include <client/ClientLoadPlayersState.h>
00033 #include <client/ClientSaveScreenState.h>
00034 #include <client/ScorchedClient.h>
00035 #include <client/ClientProcessingLoop.h>
00036 #include <sound/Sound.h>
00037 #include <tankgraph/RenderTargets.h>
00038 #include <tankgraph/TankKeyboardControl.h>
00039 #include <GLW/GLWWindowManager.h>
00040 #include <GLW/GLWToolTip.h>
00041 #include <landscape/LandscapeStateHandler.h>
00042 #include <landscape/LandscapeMusicManager.h>
00043 #include <GLEXT/GLCameraFrustum.h>
00044 #include <console/ConsoleImpl.h>
00045
00046 void ClientState::addMandatoryComponents(GameState &gameState, unsigned state)
00047 {
00048 gameState.addStateLoop(state, Main2DCamera::instance(),
00049 ClientProcessingLoop::instance());
00050 gameState.addStateLoop(state, Main2DCamera::instance(),
00051 Sound::instance());
00052 gameState.addStateLoop(state, Main2DCamera::instance(),
00053 LandscapeMusicManager::instance());
00054 gameState.addStateLoop(state, Main2DCamera::instance(),
00055 FrameTimer::instance());
00056 }
00057
00058 void ClientState::addWindowManager(GameState &gameState, unsigned state)
00059 {
00060 addMandatoryComponents(gameState, state);
00061
00062 gameState.addStateKeyEntry(state, (ConsoleImpl *) Console::instance());
00063 gameState.addStateEntry(state, GLWWindowManager::instance());
00064 gameState.addStateLoop(state, Main2DCamera::instance(),
00065 GLWWindowManager::instance());
00066 gameState.addStateMouseDownEntry(state,
00067 GameState::MouseButtonLeft | GameState::MouseButtonRight |
00068 GameState::MouseButtonLeftDoubleClick | GameState::MouseButtonRightDoubleClick,
00069 GLWWindowManager::instance());
00070 gameState.addStateMouseDragEntry(state,
00071 GameState::MouseButtonLeft | GameState::MouseButtonRight,
00072 GLWWindowManager::instance());
00073 gameState.addStateMouseUpEntry(state,
00074 GameState::MouseButtonLeft | GameState::MouseButtonRight,
00075 GLWWindowManager::instance());
00076 gameState.addStateKeyEntry(state, GLWWindowManager::instance());
00077 gameState.addStateMouseWheelEntry(state, GLWWindowManager::instance());
00078 gameState.addStateLoop(state, Main2DCamera::instance(),
00079 (ConsoleImpl *) Console::instance());
00080 }
00081
00082 void ClientState::addStandardComponents(GameState &gameState, unsigned state)
00083 {
00084 gameState.addStateKeyEntry(state, SpeedChange::instance());
00085 gameState.addStateEntry(state, &RenderTargets::instance()->render3D);
00086 gameState.addStateLoop(state,
00087 MainCamera::instance(), GLCameraFrustum::instance());
00088 gameState.addStateLoop(state,
00089 MainCamera::instance(), new LandscapeStateLandHandler());
00090 gameState.addStateLoop(state,
00091 MainCamera::instance(), &RenderTargets::instance()->render3D);
00092 gameState.addStateLoop(state,
00093 MainCamera::instance(), new LandscapeStateWaterHandler());
00094 gameState.addStateLoop(state,
00095 MainCamera::instance(), new LandscapeStateObjectsHandler());
00096 gameState.addStateLoop(state, MainCamera::instance(),
00097 &ScorchedClient::instance()->getActionController());
00098 gameState.addStateLoop(state, MainCamera::instance(),
00099 &ScorchedClient::instance()->getParticleEngine());
00100 gameState.addStateLoop(state,
00101 MainCamera::instance(), &MainCamera::instance()->precipitation_);
00102 gameState.addStateLoop(state,
00103 Main2DCamera::instance(), &RenderTargets::instance()->render2D);
00104 gameState.addStateLoop(state,
00105 Main2DCamera::instance(), SpeedChange::instance());
00106 addWindowManager(gameState, state);
00107 gameState.addStateLoop(state, Main2DCamera::instance(),
00108 GLWToolTip::instance());
00109 gameState.addStateLoop(state, Main2DCamera::instance(),
00110 SoftwareMouse::instance());
00111 gameState.addStateMouseDownEntry(state,
00112 GameState::MouseButtonLeft |
00113 GameState::MouseButtonRight |
00114 GameState::MouseButtonMiddle, MainCamera::instance());
00115 gameState.addStateMouseUpEntry(state,
00116 GameState::MouseButtonLeft |
00117 GameState::MouseButtonRight |
00118 GameState::MouseButtonMiddle, MainCamera::instance());
00119 gameState.addStateMouseDragEntry(state,
00120 GameState::MouseButtonLeft |
00121 GameState::MouseButtonRight |
00122 GameState::MouseButtonMiddle, MainCamera::instance());
00123 gameState.addStateMouseWheelEntry(state,
00124 MainCamera::instance());
00125 gameState.addStateKeyEntry(state,
00126 MainCamera::instance());
00127 gameState.addStateLoop(state,
00128 Main2DCamera::instance(), &MainCamera::instance()->saveScreen_);
00129 }
00130
00131 void ClientState::setupGameState()
00132 {
00133 GameState &gameState = ScorchedClient::instance()->getGameState();
00134 gameState.clear();
00135
00136
00137 addWindowManager(gameState, StateOptions);
00138 gameState.addStateLoop(StateOptions,
00139 Main2DCamera::instance(), GLWToolTip::instance());
00140 gameState.addStateLoop(StateOptions,
00141 Main2DCamera::instance(), SoftwareMouse::instance());
00142 gameState.addStateStimulus(StateOptions,
00143 StimDisconnected, StateDisconnected);
00144 gameState.addStateStimulus(StateOptions,
00145 StimConnect, StateConnect);
00146
00147
00148 gameState.setState(StateOptions);
00149
00150
00151 addWindowManager(gameState, StateConnect);
00152 gameState.addStateLoop(StateConnect,
00153 Main2DCamera::instance(), SoftwareMouse::instance());
00154 gameState.addStateStimulus(StateConnect,
00155 StimDisconnected, StateDisconnected);
00156 gameState.addStateStimulus(StateConnect,
00157 StimGameStopped, StateConnect);
00158 gameState.addStateStimulus(StateConnect,
00159 StimOptions, StateOptions);
00160 gameState.addStateStimulus(StateConnect,
00161 StimGetPlayers, StateGetPlayers);
00162 gameState.addStateStimulus(StateConnect,
00163 StimLoadPlayers, StateLoadPlayers);
00164 gameState.addStateStimulus(StateConnect,
00165 StimLoadFiles, StateLoadFiles);
00166
00167
00168 addWindowManager(gameState, StateGetPlayers);
00169 gameState.addStateLoop(StateGetPlayers,
00170 Main2DCamera::instance(), GLWToolTip::instance());
00171 gameState.addStateLoop(StateGetPlayers,
00172 Main2DCamera::instance(), SoftwareMouse::instance());
00173 gameState.addStateStimulus(StateGetPlayers,
00174 StimGameStopped, StateGetPlayers);
00175 gameState.addStateStimulus(StateGetPlayers,
00176 StimDisconnected, StateDisconnected);
00177 gameState.addStateStimulus(StateGetPlayers,
00178 StimWait, StateWait);
00179
00180
00181 addWindowManager(gameState, StateLoadFiles);
00182 gameState.addStateLoop(StateLoadFiles,
00183 Main2DCamera::instance(), GLWToolTip::instance());
00184 gameState.addStateLoop(StateLoadFiles,
00185 Main2DCamera::instance(), SoftwareMouse::instance());
00186 gameState.addStateStimulus(StateLoadFiles,
00187 StimGetPlayers, StateGetPlayers);
00188 gameState.addStateStimulus(StateLoadFiles,
00189 StimGameStopped, StateConnect);
00190 gameState.addStateStimulus(StateLoadFiles,
00191 StimDisconnected, StateDisconnected);
00192 gameState.addStateStimulus(StateLoadFiles,
00193 StimWait, StateWait);
00194
00195
00196 addWindowManager(gameState, StateLoadPlayers);
00197 gameState.addStateEntry(StateLoadPlayers,
00198 ClientLoadPlayersState::instance());
00199 gameState.addStateStimulus(StateLoadPlayers,
00200 StimWait, StateWait);
00201
00202
00203 addWindowManager(gameState, StateDisconnected);
00204 gameState.addStateLoop(StateDisconnected,
00205 Main2DCamera::instance(), SoftwareMouse::instance());
00206 gameState.addStateStimulus(StateDisconnected,
00207 StimDisconnected, StateDisconnected);
00208 gameState.addStateStimulus(StateDisconnected,
00209 StimGameStopped, StateDisconnected);
00210 gameState.addStateStimulus(StateDisconnected,
00211 StimGetPlayers, StateDisconnected);
00212 gameState.addStateStimulus(StateDisconnected,
00213 StimWait, StateDisconnected);
00214
00215
00216 addStandardComponents(gameState, StateWait);
00217 gameState.addStateLoop(StateWait,
00218 Main2DCamera::instance(), ShotCountDown::instance());
00219 gameState.addStateEntry(StateWait,
00220 TankKeyboardControl::instance());
00221 gameState.addStateEntry(StateWait,
00222 ClientWaitState::instance());
00223 gameState.addStateStimulus(StateWait,
00224 StimGameStopped, StateGetPlayers);
00225 gameState.addStateStimulus(StateWait,
00226 StimDisconnected, StateDisconnected);
00227 gameState.addStateStimulus(StateWait,
00228 StimAutoDefense, StateWait);
00229 gameState.addStateStimulus(StateWait,
00230 StimBuyWeapons, StateBuyWeapons);
00231 gameState.addStateStimulus(StateWait,
00232 StimPlaying, StatePlaying);
00233 gameState.addStateStimulus(StateWait,
00234 StimShot, StateShot);
00235 gameState.addStateStimulus(StateWait,
00236 StimWait, StateWait);
00237 gameState.addStateStimulus(StateWait,
00238 StimScore, StateScore);
00239 gameState.addStateStimulus(StateWait,
00240 StimGetPlayers, StateGetPlayers);
00241
00242
00243 addStandardComponents(gameState, StateBuyWeapons);
00244 gameState.addStateLoop(StateBuyWeapons,
00245 Main2DCamera::instance(), ShotCountDown::instance());
00246 gameState.addStateStimulus(StateBuyWeapons,
00247 StimDisconnected, StateDisconnected);
00248 gameState.addStateStimulus(StateBuyWeapons,
00249 StimGameStopped, StateGetPlayers);
00250 gameState.addStateStimulus(StateBuyWeapons,
00251 StimAutoDefense, StateAutoDefense);
00252 gameState.addStateStimulus(StateBuyWeapons,
00253 StimWait, StateWait);
00254
00255
00256 addStandardComponents(gameState, StateAutoDefense);
00257 gameState.addStateLoop(StateAutoDefense,
00258 Main2DCamera::instance(), ShotCountDown::instance());
00259 gameState.addStateStimulus(StateAutoDefense,
00260 StimDisconnected, StateDisconnected);
00261 gameState.addStateStimulus(StateAutoDefense,
00262 StimGameStopped, StateGetPlayers);
00263 gameState.addStateStimulus(StateAutoDefense,
00264 StimWait, StateWait);
00265
00266
00267 addStandardComponents(gameState, StatePlaying);
00268 gameState.addStateKeyEntry(StatePlaying,
00269 TankKeyboardControl::instance());
00270 gameState.addStateLoop(StatePlaying,
00271 Main2DCamera::instance(), ShotCountDown::instance());
00272 gameState.addStateStimulus(StatePlaying,
00273 StimGameStopped, StateGetPlayers);
00274 gameState.addStateStimulus(StatePlaying,
00275 StimDisconnected, StateDisconnected);
00276 gameState.addStateStimulus(StatePlaying,
00277 StimWait, StateWait);
00278
00279
00280 addStandardComponents(gameState, StateShot);
00281 gameState.addStateEntry(StateShot,
00282 TankKeyboardControl::instance());
00283 gameState.addStateEntry(StateShot,
00284 ClientShotState::instance());
00285 gameState.addStateStimulus(StateShot,
00286 ClientShotState::instance(), StateWait);
00287 gameState.addStateStimulus(StateShot,
00288 StimDisconnected, StateDisconnected);
00289 gameState.addStateStimulus(StateShot,
00290 StimWait, StateWait);
00291 gameState.addStateStimulus(StateShot,
00292 StimGameStopped, StateGetPlayers);
00293
00294
00295 addStandardComponents(gameState, StateScore);
00296 gameState.addStateLoop(StateScore,
00297 MainCamera::instance(), ClientSaveScreenState::instance());
00298 gameState.addStateStimulus(StateScore,
00299 StimDisconnected, StateDisconnected);
00300 gameState.addStateStimulus(StateScore,
00301 StimGameStopped, StateGetPlayers);
00302 gameState.addStateStimulus(StateScore,
00303 StimWait, StateWait);
00304 }