From cebde72729872668fe8ee11d4a0303abeb508ceb Mon Sep 17 00:00:00 2001 From: Ralusama19 Date: Fri, 20 Jan 2017 23:52:42 +0100 Subject: [PATCH] menu and scenes --- VaporWaveWars/VaporWaveWars.pro | 8 +++++-- VaporWaveWars/button.cpp | 9 ++++---- VaporWaveWars/button.hpp | 4 ++-- VaporWaveWars/commons.hpp | 6 +++-- VaporWaveWars/compas.hpp | 3 +-- VaporWaveWars/game.cpp | 4 ++++ VaporWaveWars/game.hpp | 2 +- VaporWaveWars/main.cpp | 2 +- VaporWaveWars/menu.cpp | 40 +++++++++++++++++++++++++++++++++ VaporWaveWars/menu.hpp | 22 ++++++++++++++++++ VaporWaveWars/mygame.cpp | 36 ++++++++++++++++++++--------- VaporWaveWars/mygame.hpp | 8 +++++-- VaporWaveWars/scene.cpp | 8 +++++++ VaporWaveWars/scene.hpp | 18 +++++++++++++++ 14 files changed, 144 insertions(+), 26 deletions(-) create mode 100644 VaporWaveWars/menu.cpp create mode 100644 VaporWaveWars/menu.hpp create mode 100644 VaporWaveWars/scene.cpp create mode 100644 VaporWaveWars/scene.hpp diff --git a/VaporWaveWars/VaporWaveWars.pro b/VaporWaveWars/VaporWaveWars.pro index 7ff1c56..8515d27 100644 --- a/VaporWaveWars/VaporWaveWars.pro +++ b/VaporWaveWars/VaporWaveWars.pro @@ -9,7 +9,9 @@ SOURCES += main.cpp \ mygame.cpp \ button.cpp \ character.cpp \ - compas.cpp + compas.cpp \ + scene.cpp \ + menu.cpp HEADERS += \ game.hpp \ @@ -17,4 +19,6 @@ HEADERS += \ commons.hpp \ button.hpp \ character.hpp \ - compas.hpp + compas.hpp \ + scene.hpp \ + menu.hpp diff --git a/VaporWaveWars/button.cpp b/VaporWaveWars/button.cpp index b6cd7aa..6d1fdd0 100644 --- a/VaporWaveWars/button.cpp +++ b/VaporWaveWars/button.cpp @@ -25,11 +25,11 @@ int Button::getClicks(){ int c = _clicks; //cout << "popping clicks " << c << endl; _clicks = 0; - //cout << "popclicks = " << _clicks << endl; + if (_clicks > 0) std::cout << "popclicks = " << _clicks << std::endl; return c; } -void Button::update(sf::Vector2i mousePosition){ +void Button::update(sf::Vector2f mousePosition){ //cout << "state = " << _state << endl; if(_state != ButtonState::off){ if(!inside(mousePosition)) _state = 0; @@ -39,7 +39,7 @@ void Button::update(sf::Vector2i mousePosition){ setTextureRect(sf::IntRect(0,_ySize*_state,_xSize,_ySize)); } -bool Button::inside(sf::Vector2i position){ +bool Button::inside(sf::Vector2f position){ sf::FloatRect boundingBox = getGlobalBounds(); if (boundingBox.contains(sf::Vector2f(position.x, position.y))) return true; //cout << "outside!" << endl; @@ -51,13 +51,14 @@ void Button::handleMouseEvent(sf::Event& event){ switch (event.type){ case (sf::Event::MouseButtonPressed): if(_state == ButtonState::active) _state = ButtonState::pressed; + std::cout << "pressed!" << _clicks << std::endl; break; case (sf::Event::MouseButtonReleased): if(_state == ButtonState::pressed){ _state = ButtonState::active; ++_clicks; - //cout << "Click!" << _clicks << endl; + std::cout << "released!" << _clicks << std::endl; } break; diff --git a/VaporWaveWars/button.hpp b/VaporWaveWars/button.hpp index bcebec5..2b23e7c 100644 --- a/VaporWaveWars/button.hpp +++ b/VaporWaveWars/button.hpp @@ -13,13 +13,13 @@ public: int getClicks(); //buttons auto-detect if they are pressed, you just have to passa mouse-event to them void handleMouseEvent(sf::Event& event); - void update(sf::Vector2i mousePosition); + void update(sf::Vector2f mousePosition); protected: int _xSize; int _ySize; sf::Texture _texture; - bool inside(sf::Vector2i position); + bool inside(sf::Vector2f position); private: int _clicks; diff --git a/VaporWaveWars/commons.hpp b/VaporWaveWars/commons.hpp index 1e10a32..370d6fb 100644 --- a/VaporWaveWars/commons.hpp +++ b/VaporWaveWars/commons.hpp @@ -8,6 +8,8 @@ #include #include +const int SCENE_NUM = 4; + #define ASSERT(expression) do \ { \ if(!(expression)) { \ @@ -26,8 +28,8 @@ namespace ButtonState { enum basicState {released, active, pressed, off}; } -namespace GameState { - enum gameState{menu,inGame,help,credits}; +namespace GameScene { + enum gameScene{menu,inGame,help,credits}; } namespace PlayerState { diff --git a/VaporWaveWars/compas.hpp b/VaporWaveWars/compas.hpp index 8067e04..2b4b3e9 100644 --- a/VaporWaveWars/compas.hpp +++ b/VaporWaveWars/compas.hpp @@ -7,8 +7,7 @@ static const float margeErr = 0.80f; -class Compas -{ +class Compas{ private: bool isPress; diff --git a/VaporWaveWars/game.cpp b/VaporWaveWars/game.cpp index f266897..97a80c7 100644 --- a/VaporWaveWars/game.cpp +++ b/VaporWaveWars/game.cpp @@ -13,6 +13,10 @@ Game::~Game() { Game::instance = nullptr; } +Game* Game::i() { + return Game::instance; +} + // Main game loop void Game::run() { sf::Clock c; diff --git a/VaporWaveWars/game.hpp b/VaporWaveWars/game.hpp index 4bcba7a..3b5a682 100644 --- a/VaporWaveWars/game.hpp +++ b/VaporWaveWars/game.hpp @@ -6,7 +6,7 @@ class Game { public: Game(); virtual ~Game(); - static Game* i() { return Game::instance;} + static Game* i(); virtual void run(); diff --git a/VaporWaveWars/main.cpp b/VaporWaveWars/main.cpp index 2b3398f..bf0efb6 100644 --- a/VaporWaveWars/main.cpp +++ b/VaporWaveWars/main.cpp @@ -1,7 +1,7 @@ #include "mygame.hpp" #include "compas.hpp" int main() { - MyGame game = MyGame(); + MyGame game; game.run(); return 0; } diff --git a/VaporWaveWars/menu.cpp b/VaporWaveWars/menu.cpp new file mode 100644 index 0000000..4f40179 --- /dev/null +++ b/VaporWaveWars/menu.cpp @@ -0,0 +1,40 @@ +#include "menu.hpp" +#include "mygame.hpp" + +Menu::Menu() { + _start.setPosition(5,5); + _exit.setPosition(100,100); + _start.turnOn(); + _exit.turnOn(); + _buttons.push_back(&_start); + _buttons.push_back(&_exit); +} + +void Menu::update(float deltaTime, sf::RenderWindow*window){ + //float dx = InputManager::action(InputAction::moveX0); + //_buttons[0]->move(dx,0); + //std::cout << dx << std::endl; + for(unsigned int i = 0; i < _buttons.size(); ++i){ + _buttons[i]->update(window->mapPixelToCoords(sf::Vector2i(sf::Mouse::getPosition(*window)))); + } +} + +void Menu::draw(sf::RenderWindow* window){ + for(unsigned int i = 0; i < _buttons.size(); ++i){ + window->draw(*_buttons[i]); + } +} + +void Menu::updateButtons(sf::Event e){ +// std::cout << "update menu buttons" << std::endl; + for(unsigned int i = 0; i < _buttons.size(); ++i){ + _buttons[i]->handleMouseEvent(e); + } + MyGame* g = static_cast(Game::i()); + if (_start.getClicks() > 0){ +// g->changeScene(GameScene::inGame); + std::cout << "Game not ready to be played. Please Wait." << std::endl; + } + else if(_exit.getClicks() > 0) g->isRunning = false; + +} diff --git a/VaporWaveWars/menu.hpp b/VaporWaveWars/menu.hpp new file mode 100644 index 0000000..ae4cdcb --- /dev/null +++ b/VaporWaveWars/menu.hpp @@ -0,0 +1,22 @@ +#ifndef MENU_HPP +#define MENU_HPP +#include "commons.hpp" +#include "scene.hpp" +#include "button.hpp" +class Menu : public Scene{ + public: + Menu(); + Menu(const Menu& m) = delete; + Menu(const Menu&& m) = delete; + Menu& operator=(Menu& m) = delete; + Menu& operator=(Menu&& m) = delete; + void update(float deltaTime, sf::RenderWindow *window) final override; + void draw(sf::RenderWindow *window) final override; + void updateButtons(sf::Event e) final override; + private: + Button _start = Button("/home/raluca/Projects/WaveGGJ17/build-VaporWaveWars-Desktop-Debug/Resources/buttontejempl.png"); + Button _exit = Button("/home/raluca/Projects/WaveGGJ17/build-VaporWaveWars-Desktop-Debug/Resources/buttontejempl2.png"); + std::vector _buttons; +}; + +#endif // MENU_HPP diff --git a/VaporWaveWars/mygame.cpp b/VaporWaveWars/mygame.cpp index 6fb3bc3..ecbb645 100644 --- a/VaporWaveWars/mygame.cpp +++ b/VaporWaveWars/mygame.cpp @@ -1,48 +1,64 @@ #include "mygame.hpp" MyGame::MyGame() { - _state = GameState::menu; + _scene = GameScene::menu; + _scenes = std::vector(SCENE_NUM); + _scenes[GameScene::menu] = &_menu; std::cout << "in menu" << std::endl; + } MyGame::~MyGame() { } +MyGame* i(){ + return static_cast(Game::i()); +} + +void MyGame::changeScene(GameScene::gameScene n){ + _scene = n; +} + // Main game loop void MyGame::update(float deltaTime, sf::RenderWindow*window) { sf::Event event; while(window->pollEvent(event)){ switch (event.type) { - case (sf::Event::Closed): + case (sf::Event::Closed): Game::i()->isRunning = false; break; - case (sf::Event::KeyPressed): + case (sf::Event::KeyPressed): if(event.key.code == sf::Keyboard::Escape) // Exit the game like this Game::i()->isRunning = false; break; - case (sf::Event::MouseMoved): - case (sf::Event::MouseButtonPressed): - switch(_state){ - case(GameState::menu): - std::cout << "still in menu" << std::endl; + case (sf::Event::MouseMoved): + case (sf::Event::MouseButtonPressed): + case (sf::Event::MouseButtonReleased): + + _scenes[_scene]->updateButtons(event); + switch(_scene){ + case(GameScene::menu): + //std::cout << "still in menu" << std::endl; break; - default: + default: break; } - default: + default: break; } } // do shit + _scenes[_scene]->update(deltaTime,window); } void MyGame::draw(sf::RenderWindow*window) { //a e s t h e t i c s window->clear(sf::Color::Cyan); // draw shit + _scenes[_scene]->draw(window); window->display(); } diff --git a/VaporWaveWars/mygame.hpp b/VaporWaveWars/mygame.hpp index 0b544fe..c6c9236 100644 --- a/VaporWaveWars/mygame.hpp +++ b/VaporWaveWars/mygame.hpp @@ -1,14 +1,18 @@ #ifndef MYGAME_HPP #define MYGAME_HPP #include "game.hpp" - +#include "menu.hpp" class MyGame : public Game{ public: MyGame(); virtual ~MyGame(); + static MyGame* i(); + void changeScene(GameScene::gameScene n); private: - GameState::gameState _state; + GameScene::gameScene _scene; + std::vector _scenes; + Menu _menu; virtual void update(float deltaTime, sf::RenderWindow *window) final override; virtual void draw(sf::RenderWindow *window) final override; }; diff --git a/VaporWaveWars/scene.cpp b/VaporWaveWars/scene.cpp new file mode 100644 index 0000000..1848f21 --- /dev/null +++ b/VaporWaveWars/scene.cpp @@ -0,0 +1,8 @@ +#include "scene.hpp" + +Scene::Scene(){ +} + +Scene::~Scene(){ + +} diff --git a/VaporWaveWars/scene.hpp b/VaporWaveWars/scene.hpp new file mode 100644 index 0000000..a4d4bb7 --- /dev/null +++ b/VaporWaveWars/scene.hpp @@ -0,0 +1,18 @@ +#ifndef SCENE_HPP +#define SCENE_HPP + +#include "commons.hpp" +#include "game.hpp" +class Scene +{ + public: + Scene(); + virtual ~Scene(); + virtual void update(float deltaTime, sf::RenderWindow *window) = 0; + virtual void draw(sf::RenderWindow *window) = 0; + virtual void updateButtons(sf::Event) = 0; + protected: + Game* parent; +}; + +#endif // SCENE_HPP