|
From: <sik...@us...> - 2006-05-18 02:11:07
|
Revision: 22 Author: sik0fewl Date: 2006-05-17 19:10:53 -0700 (Wed, 17 May 2006) ViewCVS: http://svn.sourceforge.net/perceptioncrash/?rev=22&view=rev Log Message: ----------- Added game state files Not yet integrated Added Paths: ----------- trunk/perceptioncrash/src/GameManager.cpp trunk/perceptioncrash/src/GameManager.hpp trunk/perceptioncrash/src/GameState.hpp trunk/perceptioncrash/src/InputManager.cpp trunk/perceptioncrash/src/InputManager.hpp Added: trunk/perceptioncrash/src/GameManager.cpp =================================================================== --- trunk/perceptioncrash/src/GameManager.cpp (rev 0) +++ trunk/perceptioncrash/src/GameManager.cpp 2006-05-18 02:10:53 UTC (rev 22) @@ -0,0 +1,194 @@ +#include <OGRE/Ogre.h> + +#include "GameManager.hpp" +#include "InputManager.hpp" +#include "GameState.hpp" + +using namespace Ogre; + +template<> GameManager* Singleton<GameManager>::ms_Singleton = 0; + +GameManager::GameManager() +{ + mRoot = 0; + mInputManager = 0; +} + +GameManager::~GameManager() +{ + // clean up all the states + while (!mStates.empty()) + { + mStates.back()->exit(); + mStates.pop_back(); + } + + if (mInputManager) + delete mInputManager; + + if (mRoot) + delete mRoot; +} + +void +GameManager::start(GameState* state) +{ + mRoot = new Root(); + + setupResources(); + + if (!configure()) + return; + + mRoot->addFrameListener(this); + + mInputManager = new InputManager(mRoot->getAutoCreatedWindow()); + mInputManager->getEventProcessor()->addKeyListener(this); + + changeState(state); + + mRoot->startRendering(); +} + +void +GameManager::changeState(GameState* state) +{ + // cleanup the current state + if (!mStates.empty()) + { + mStates.back()->exit(); + mStates.pop_back(); + } + + // store and init the new state + mStates.push_back(state); + mStates.back()->enter(); +} + +void +GameManager::pushState(GameState* state) +{ + // pause current state + if (!mStates.empty()) + { + mStates.back()->pause(); + } + + // store and init the new state + mStates.push_back(state); + mStates.back()->enter(); +} + +void +GameManager::popState() +{ + // cleanup the current state + if (!mStates.empty()) + { + mStates.back()->exit(); + mStates.pop_back(); + } + + // resume previous state + if (!mStates.empty()) + { + mStates.back()->resume(); + } +} + +void +GameManager::setupResources(void) +{ + // load resource paths from config file + ConfigFile cf; + + cf.load("resources.cfg"); + + // go through all settings in the file + ConfigFile::SectionIterator seci = cf.getSectionIterator(); + + String secName, typeName, archName; + + while (seci.hasMoreElements()) + { + secName = seci.peekNextKey(); + ConfigFile::SettingsMultiMap * settings = seci.getNext(); + ConfigFile::SettingsMultiMap::iterator i; + for (i = settings->begin(); i != settings->end(); ++i) + { + typeName = i->first; + archName = i->second; + ResourceGroupManager::getSingleton().addResourceLocation(archName, + typeName, + secName); + } + } +} + +bool GameManager::configure(void) +{ + // load config settings from ogre.cfg + if (!mRoot->restoreConfig()) + { + // if there is no config file, show the configuration dialog + if (!mRoot->showConfigDialog()) + { + return false; + } + } + + // initialise and create a default rendering window + mRenderWindow = mRoot->initialise(true); + + ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); + + return true; +} + +void +GameManager::keyClicked(KeyEvent* e) +{ + // call keyClicked of current state + mStates.back()->keyClicked(e); +} + +void +GameManager::keyPressed(KeyEvent* e) +{ + // call keyPressed of current state + mStates.back()->keyPressed(e); +} + +void +GameManager::keyReleased(KeyEvent* e) +{ + // call keyReleased of current state + mStates.back()->keyReleased(e); +} + +bool +GameManager::frameStarted(const FrameEvent& evt) +{ + // call frameStarted of current state + return mStates.back()->frameStarted(evt); +} + +bool +GameManager::frameEnded(const FrameEvent& evt) +{ + // call frameEnded of current state + return mStates.back()->frameEnded(evt); +} + +GameManager* +GameManager::getSingletonPtr(void) +{ + return ms_Singleton; +} + +GameManager& +GameManager::getSingleton(void) +{ + assert(ms_Singleton); + return *ms_Singleton; +} Property changes on: trunk/perceptioncrash/src/GameManager.cpp ___________________________________________________________________ Name: svn:keywrords + Id Name: svn:eol-style + native Added: trunk/perceptioncrash/src/GameManager.hpp =================================================================== --- trunk/perceptioncrash/src/GameManager.hpp (rev 0) +++ trunk/perceptioncrash/src/GameManager.hpp 2006-05-18 02:10:53 UTC (rev 22) @@ -0,0 +1,48 @@ +#ifndef PC_GAME_MANAGER_HPP +#define PC_GAME_MANAGER_HPP + +#include <vector> +#include <OGRE/Ogre.h> +#include <OGRE/OgreEventListeners.h> +#include <OGRE/OgreSingleton.h> + +#include "InputManager.hpp" + +class GameState; + +class GameManager : public Ogre::FrameListener, + public Ogre::KeyListener, + public Ogre::Singleton<GameManager> +{ + public: + GameManager(); + ~GameManager(); + + void start(GameState* state); + void changeState(GameState* state); + void pushState(GameState* state); + void popState(); + + static GameManager& getSingleton(void); + static GameManager* getSingletonPtr(void); + + protected: + Ogre::Root* mRoot; + Ogre::RenderWindow* mRenderWindow; + InputManager* mInputManager; + + void setupResources(void); + bool configure(void); + + void keyClicked(Ogre::KeyEvent* e); + void keyPressed(Ogre::KeyEvent* e); + void keyReleased(Ogre::KeyEvent* e); + + bool frameStarted(const Ogre::FrameEvent& evt); + bool frameEnded(const Ogre::FrameEvent& evt); + + private: + std::vector<GameState*> mStates; +}; + +#endif /*PC_GAME_MANAGER */ Added: trunk/perceptioncrash/src/GameState.hpp =================================================================== --- trunk/perceptioncrash/src/GameState.hpp (rev 0) +++ trunk/perceptioncrash/src/GameState.hpp 2006-05-18 02:10:53 UTC (rev 22) @@ -0,0 +1,43 @@ +#ifndef PC_GAME_STATE_HPP +#define PC_GAME_STATE_HPP + +#include <OGRE/Ogre.h> + +#include "GameManager.hpp" + +class GameState +{ + public: + virtual ~GameState(); + + virtual void enter() = 0; + virtual void exit() = 0; + + virtual void pause() = 0; + virtual void resume() = 0; + + virtual void keyClicked(Ogre::KeyEvent* e) = 0; + virtual void keyPressed(Ogre::KeyEvent* e) = 0; + virtual void keyReleased(Ogre::KeyEvent* e) = 0; + virtual bool frameStarted(const Ogre::FrameEvent& evt) = 0; + virtual bool frameEnded(const Ogre::FrameEvent& evt) = 0; + + void changeState(GameState* state) + { + GameManager::getSingletonPtr()->changeState(state); + } + + void pushState(GameState* state) + { + GameManager::getSingletonPtr()->pushState(state); + } + + void popState() + { + GameManager::getSingletonPtr()->popState(); + } + protected: + GameState() { } +}; + +#endif /*PC_GAME_STATE_HPP */ Added: trunk/perceptioncrash/src/InputManager.cpp =================================================================== --- trunk/perceptioncrash/src/InputManager.cpp (rev 0) +++ trunk/perceptioncrash/src/InputManager.cpp 2006-05-18 02:10:53 UTC (rev 22) @@ -0,0 +1,32 @@ +#include <OGRE/OgreEventProcessor.h> + +#include "InputManager.hpp" + +template<> InputManager* Ogre::Singleton<InputManager>::ms_Singleton = 0; + +InputManager::InputManager(Ogre::RenderWindow* window) +{ + mEventProcessor = new Ogre::EventProcessor(); + mEventProcessor->initialise(window); + mEventProcessor->startProcessingEvents(); + mInputDevice = mEventProcessor->getInputReader(); +} + +InputManager::~InputManager() +{ + if (mEventProcessor) + delete mEventProcessor; +} + +InputManager* +InputManager::getSingletonPtr(void) +{ + return ms_Singleton; +} + +InputManager& +InputManager::getSingleton(void) +{ + assert(ms_Singleton); + return *ms_Singleton; +} Property changes on: trunk/perceptioncrash/src/InputManager.cpp ___________________________________________________________________ Name: svn:keywrords + Id Name: svn:eol-style + native Added: trunk/perceptioncrash/src/InputManager.hpp =================================================================== --- trunk/perceptioncrash/src/InputManager.hpp (rev 0) +++ trunk/perceptioncrash/src/InputManager.hpp 2006-05-18 02:10:53 UTC (rev 22) @@ -0,0 +1,26 @@ +#ifndef PC_INPUT_MANAGER_HPP +#define PC_INPUT_MANAGER_HPP + +#include <OGRE/OgreSingleton.h> +#include <OGRE/OgreInput.h> + +class InputManager : public Ogre::Singleton<InputManager> +{ + public: + InputManager(Ogre::RenderWindow* rwindow); + virtual ~InputManager(); + + inline Ogre::InputReader* getInputDevice() const + { return mInputDevice; } + inline Ogre::EventProcessor* getEventProcessor() const + { return mEventProcessor; } + + static InputManager& getSingleton(void); + static InputManager* getSingletonPtr(void); + + private: + Ogre::EventProcessor* mEventProcessor; + Ogre::InputReader* mInputDevice; +}; + +#endif /*PC_INPUT_MANAGER_HPP */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |