#ifndef Game_h__ #define Game_h__ #include "Entity.h" #include "IPhysicsWorld.h" #include "World.h" #include "InputSystemOIS.h" #include "script/ScriptSystem.h" #include #include #include #include "CGUIDataManager.h" namespace LifeGame { #define MAX_FPS_COUNTER 100 class Game { protected: LifeCore::DisplayMode* modes; IPhysicsWorld* physicsWorld; LifeGraphics::LifeEngine* pGraphics; LifeCore::IRenderWindow* output; int mainWindow; World* gameWorld; float gameTime; bool bRunning; bool customWindow; LifeCore::InputSystemOIS* input; int frameCounter; ScriptSystem* pScriptSystem; CGUIRenderer* gui_renderer; LifeGUI::GUIManager* gui_manager; public: Game(); LifeCore::IRenderWindow* GetWindow() { return output; } void DrawDebug() { physicsWorld->CompileDebug(); pGraphics->debugDrawer->Render(); pGraphics->debugDrawer->Flush(); } LifeGraphics::LifeEngine* GetGraphics() { return pGraphics; } IPhysicsWorld* GetPhysics() { return physicsWorld; } void InitVideo(LifeGraphics::RENDERER_TYPE renderer, int width, int height) { pGraphics = new LifeGraphics::LifeEngine(); pGraphics->Init(renderer, LifeGraphics::RenderParams(false, false)); physicsWorld->SetDebugDrawer(pGraphics->debugDrawer); LifeGUI::GUIManager::me()->Init(new CGUIRenderer(pGraphics->GetRenderer()), new CGUIDataManager()); } void SetResourcesPath(const String& path) { LifeGraphics::ResourceManager::me()->SetCentralDirectory(path); } void SetWindow(RenderWindowWin* window) { output = window; } void SetWindow(int width, int height) { output = new RenderWindowWin(); output->SetSize(width, height); } void InitInput(int screenWidth, int screenHeight, LifeCore::IRenderWindow* wnd) { input = new LifeCore::InputSystemOIS(); input->Init(wnd->GetWidth(), wnd->GetHeight(), false, wnd->GetWindowHandle()); } LifeCore::IInputSystem* GetInput() { return input; } int Run() { bRunning = true; while(IsRunning()) { process(); Sleep(0); } return 0; } bool IsRunning() { return bRunning; } void Exit() { bRunning = false; } virtual ~Game() { SAFE_DELETE(physicsWorld); } World* GetWorld() { return gameWorld; } void processWorld(World* world){ input->Capture(); world->Update(0.001f); world->Render(); DrawDebug(); world->GetOutput()->GetSwapChain()->Present(); world->GetOutput()->GetWindow()->Update(); } void process() { gameTime += pGraphics->GetTimeElapsed(); //pGraphics->GetRenderer()->ClearBuffers(CF_COLOR_TARGET | CF_DEPTH_BUFFER, 0xffff00, 1, 0); //stateManager.Update(); //to world // stateManager.Render(); frameCounter++; avgFps[fcPos++] = 1.0f / GetGraphics()->GetTimeElapsed(); if(fcPos >= MAX_FPS_COUNTER) { fcPos = 0; fps = 0.0f; for(int i = 0; i