Go to the documentation of this file.00001 #ifndef __NYTRO_GameProvider_H
00002 #define __NYTRO_GameProvider_H
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "system/nyCommon.h"
00012 #include "system/nyProvider.h"
00013 #include "game/nyWorld.h"
00014 #include "input/nyInputCommon.h"
00015 #include "system/nyStreamProvider.h"
00016 #include "scene/nySceneGraph.h"
00017 #include "game/nyFlowGraph.h"
00018
00019 namespace Nytro
00020 {
00022 namespace Game
00023 {
00024 extern const char* kSaveGameFolder;
00025
00028 class NYTRO_API GameStateHandler : public Base, public InputObserver
00029 {
00030 public:
00031
00033 enum EGameState
00034 {
00035 eGameState_Intro,
00036 eGameState_MainMenu,
00037 eGameState_LevelLoading,
00038 eGameState_LevelCutscene,
00039 eGameState_InGame,
00040 eGameState_InGameMenu,
00041 eGameState_Outro,
00042 eGameState_User,
00043 eGameState_Last
00044 };
00045
00046 GameStateHandler();
00047 virtual ~GameStateHandler();
00048
00050 virtual void onInitialize();
00052 virtual void onRelease();
00054 virtual void onEnter();
00056 virtual void onExit();
00059 virtual void onFrame();
00061 virtual void onInput();
00062
00063 protected:
00064 };
00065
00067 class NYTRO_API GameConfiguration
00068 {
00069 public:
00070
00071 struct StreamLocationInfo
00072 {
00073 string m_name, m_displayName, m_root, m_handler;
00074 map<string,string> m_attributes;
00075 };
00076
00077 GameConfiguration();
00078 virtual ~GameConfiguration();
00079
00081 virtual EResult load( const char* pFilename );
00083 virtual EResult save( const char* pFilename );
00085 virtual void apply();
00086
00087
00088 string m_fileName, m_title, m_description, m_gameProviderClassname, m_gameDataFolder;
00090 vector<StreamLocationInfo> m_streamLocations;
00091 };
00092
00096 class NYTRO_API GameProvider : public Provider, public InputObserver
00097 {
00098 public:
00099
00100 GameProvider();
00101 virtual ~GameProvider();
00102
00104 virtual EResult initialize();
00106 virtual EResult release();
00109 virtual EResult onEnterGameMode();
00111 virtual EResult onExitGameMode();
00114 virtual void onFrame();
00116 virtual void onInput();
00118 World* getWorld();
00120 SceneGraph* getScene();
00122 virtual void setCurrentGameStateHandler( GameStateHandler* pHandler );
00124 virtual void setCurrentGameStateHandler( const char* pName );
00126 virtual void setCurrentGameStateHandler( GameStateHandler::EGameState aType );
00128 virtual GameStateHandler* getCurrentGameStateHandler();
00130 virtual GameStateHandler* getGameStateHandlerByType( GameStateHandler::EGameState aType );
00132 virtual vector<GameStateHandler*> getGameStateHandlers();
00134 virtual void addGameStateHandler( GameStateHandler* pHandler );
00137 EResult saveGame( const char* pGameName, const char* pToFolder = kSaveGameFolder, char* pCustomLevelData = NULL, uint32 aCustomLevelDataSize = 0 );
00140 EResult loadGame( const char* pGameName, const char* pFromFolder = kSaveGameFolder, char** ppCustomLevelData = NULL, uint32* pCustomLevelDataSize = NULL );
00142 void loadSavedGames( const char* pFromFolder = kSaveGameFolder );
00144 FlowGraphManager& getFlowGraphManager();
00146 GameConfiguration& getGameConfiguration();
00147
00148 protected:
00149
00151 vector<GameStateHandler*> m_gameStateHandlers;
00153 GameStateHandler* m_pCurrentGameStateHandler;
00155 World* m_pWorld;
00157 SceneGraph* m_pScene;
00159 GameConfiguration m_gameConfig;
00161 vector<string> m_savedGames;
00163 vector<Texture*> m_savedGamesThumbs;
00165 FlowGraphManager m_flowGraphManager;
00166 };
00167
00168
00169 };
00170 };
00171
00172 #endif