ClientState.cpp

Go to the documentation of this file.
00001 ////////////////////////////////////////////////////////////////////////////////
00002 //    Scorched3D (c) 2000-2009
00003 //
00004 //    This file is part of Scorched3D.
00005 //
00006 //    Scorched3D is free software; you can redistribute it and/or modify
00007 //    it under the terms of the GNU General Public License as published by
00008 //    the Free Software Foundation; either version 2 of the License, or
00009 //    (at your option) any later version.
00010 //
00011 //    Scorched3D is distributed in the hope that it will be useful,
00012 //    but WITHOUT ANY WARRANTY; without even the implied warranty of
00013 //    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014 //    GNU General Public License for more details.
00015 //
00016 //    You should have received a copy of the GNU General Public License
00017 //    along with Scorched3D; if not, write to the Free Software
00018 //    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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()); // SOUND
00052         gameState.addStateLoop(state, Main2DCamera::instance(),
00053                 LandscapeMusicManager::instance()); // MUSIC
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         // StateOptions
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         // Set the start state
00148         gameState.setState(StateOptions);
00149 
00150         // StateConnect
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         // StateGetPlayers
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         // StateLoadFiles
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         // StateLoadPlayers (Single Player Only)
00196         addWindowManager(gameState, StateLoadPlayers);
00197         gameState.addStateEntry(StateLoadPlayers,
00198                 ClientLoadPlayersState::instance());
00199         gameState.addStateStimulus(StateLoadPlayers,
00200                 StimWait, StateWait);
00201 
00202         // StateDisconnected
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         // StateWait
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         // StateBuyWeapons
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         // StateAutoDefense
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         // StatePlaying
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         // StateShot
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         // StateScore
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 }

Generated on Mon Feb 16 15:14:37 2009 for Scorched3D by  doxygen 1.5.3