From ece39bed38dabfbac37ec1d935c6cd19ab1aedc9 Mon Sep 17 00:00:00 2001 From: Riyyi Date: Mon, 16 Mar 2015 19:47:35 +0100 Subject: [PATCH] Add GameState and MainGame --- src/gamestate.h | 71 ++++++++++++++++++++++++++++++++++++++++++ src/main.cpp | 40 +++++------------------- src/rpg.pro | 8 +++-- src/state/maingame.cpp | 35 +++++++++++++++++++++ src/state/maingame.h | 22 +++++++++++++ 5 files changed, 140 insertions(+), 36 deletions(-) create mode 100644 src/gamestate.h create mode 100644 src/state/maingame.cpp create mode 100644 src/state/maingame.h diff --git a/src/gamestate.h b/src/gamestate.h new file mode 100644 index 0000000..a999aa2 --- /dev/null +++ b/src/gamestate.h @@ -0,0 +1,71 @@ +#ifndef GAMESTATE +#define GAMESTATE + +#include + +class GameState +{ +public: + virtual void Initialize(sf::RenderWindow* window) { + } + + virtual void Update(sf::RenderWindow* window) { + } + + virtual void Render(sf::RenderWindow* window) { + } + + virtual void Destroy(sf::RenderWindow* window) { + } +}; + +class GameStateParent +{ +public: + GameStateParent() { + this->state = NULL; + } + + void SetWindow(sf::RenderWindow* window) { + this->window = window; + } + + void SetState(GameState* state) { + if(this->state != NULL) { + this->state->Destroy(this->window); + } + + this->state = state; + if(this->state != NULL) { + this->state->Initialize(this->window); + } + } + + void Update() { + if(this->state != NULL) { + this->state->Update(this->window); + } + } + + void Render() { + if(this->state != NULL) { + this->state->Render(this->window); + } + } + + ~GameStateParent() { + if(this->state != NULL) { + this->state->Destroy(this->window); + } + } + + +private: + sf::RenderWindow* window; + GameState* state; +}; + +extern GameStateParent gameState; + +#endif // GAMESTATE + diff --git a/src/main.cpp b/src/main.cpp index cb203e8..78f3054 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,14 +1,10 @@ #include #include -#include "inputmanager.h" -#include "entitymanager.h" +#include "state/maingame.h" InputManager inputManager; - -void UpdateCollisions(Entity* entityA, Entity* entityB) { - std::cout << "Collisions!" << std::endl; -} +GameStateParent gameState; int main() { @@ -22,21 +18,13 @@ int main() sf::RenderWindow window(sf::VideoMode(1280, 720), gameName, windowStyle, settings); window.setVerticalSyncEnabled(true); + gameState.SetWindow(&window); + gameState.SetState(new MainGame()); + sf::Clock fpsTimer; sf::Clock timer; sf::Time timeElapsed; - EntityManager entityManager; - entityManager.AddEntity("test", new Entity("data\\gfx\\test.png")); - entityManager.AddEntity("test", new Entity("data\\gfx\\test.png")); - entityManager.SetCollisionMethod(UpdateCollisions); - -// Entity entity; -// entity.Load("data\\gfx\\test.png"); - -// Entity entity2; -// entity2.Load("data\\gfx\\test.png"); - // Run the program as long as the window is open while (window.isOpen()) { @@ -65,26 +53,12 @@ int main() } } } - - if(inputManager.IsPressed(InputManager::Left)) { - std::cout << "LEFT" << std::endl; - } - - if(inputManager.IsPressed(InputManager::Down)) { - std::cout << "DOWN" << std::endl; - } } -// if(entity.Collision(&entity2)) { -// std::cout << "COLLISION!" << std::endl; -// } - window.clear(sf::Color(72, 152, 72)); -// window.draw(entity); -// window.draw(entity2); - - entityManager.Render(&window); + gameState.Update(); + gameState.Render(); window.display(); diff --git a/src/rpg.pro b/src/rpg.pro index 295ea39..937e137 100644 --- a/src/rpg.pro +++ b/src/rpg.pro @@ -18,10 +18,12 @@ DEPENDPATH += $$PWD/include TEMPLATE = app SOURCES += main.cpp \ - inputmanager.cpp + inputmanager.cpp \ + state/maingame.cpp HEADERS += \ inputmanager.h \ entity.h \ - entitymanager.h - + entitymanager.h \ + gamestate.h \ + state/maingame.h diff --git a/src/state/maingame.cpp b/src/state/maingame.cpp new file mode 100644 index 0000000..6ea1a1d --- /dev/null +++ b/src/state/maingame.cpp @@ -0,0 +1,35 @@ +#include "maingame.h" + +void UpdateCollisions(Entity* entityA, Entity* entityB) { + std::cout << "Collisions!" << std::endl; +} + +void MainGame::Initialize(sf::RenderWindow* window) { + entityManager = new EntityManager(); + entityManager->SetCollisionMethod(UpdateCollisions); + + this->entityManager->AddEntity("test", new Entity("data\\gfx\\test.png")); + this->entityManager->AddEntity("test", new Entity("data\\gfx\\test.png")); + this->entityManager->Get("test0")->velocity.x = 0.5; + this->entityManager->Get("test")->setPosition(sf::Vector2f(50, 50)); +} + +void MainGame::Update(sf::RenderWindow* window) { + if(inputManager.IsPressed(InputManager::Left)) { + std::cout << "LEFT" << std::endl; + } + + if(inputManager.IsPressed(InputManager::Down)) { + std::cout << "DOWN" << std::endl; + } + + this->entityManager->Update(); +} + +void MainGame::Render(sf::RenderWindow* window) { + this->entityManager->Render(window); +} + +void MainGame::Destroy(sf::RenderWindow* window) { + delete this->entityManager; +} diff --git a/src/state/maingame.h b/src/state/maingame.h new file mode 100644 index 0000000..de0fc0f --- /dev/null +++ b/src/state/maingame.h @@ -0,0 +1,22 @@ +#ifndef MAINGAME_H +#define MAINGAME_H + +#include + +#include "gamestate.h" +#include "entitymanager.h" +#include "inputmanager.h" + +class MainGame : public GameState +{ +public: + void Initialize(sf::RenderWindow* window); + void Update(sf::RenderWindow* window); + void Render(sf::RenderWindow* window); + void Destroy(sf::RenderWindow* window); + +private: + EntityManager* entityManager; +}; + +#endif // MAINGAME_H