From 42413aee72e503714f51d725aa8125b1c0ff0427 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matt=C3=A9o=20Delabre?= Date: Mon, 11 Apr 2016 13:19:44 +0200 Subject: [PATCH] =?UTF-8?q?=C3=89coulement=20du=20temps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/game.hpp | 2 ++ src/game.cpp | 43 +++++++++++++++++++++++++++++++++++++------ 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/include/game.hpp b/include/game.hpp index ae5aebc..4651dcf 100644 --- a/include/game.hpp +++ b/include/game.hpp @@ -21,6 +21,8 @@ private: std::vector pending_kill; bool test_mode; + float time_left; + std::shared_ptr return_state; Mode mode; diff --git a/src/game.cpp b/src/game.cpp index d58fc4b..8d81552 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -1,3 +1,4 @@ +#include #include #include "game.hpp" #include "player.hpp" @@ -20,6 +21,7 @@ void Game::begin() { } mode = Game::Mode::NORMAL; + time_left = getTotalTime(); getWindow().setFramerateLimit(0); } @@ -40,10 +42,10 @@ void Game::processEvent(const sf::Event& event) { // appui sur échap : échange entre le mode pause et normal if (event.key.code == sf::Keyboard::Escape) { - if (mode == Game::Mode::NORMAL) { - mode = Game::Mode::PAUSED; - } else if (mode == Game::Mode::PAUSED) { - mode = Game::Mode::NORMAL; + if (getMode() == Game::Mode::NORMAL) { + setMode(Game::Mode::PAUSED); + } else if (getMode() == Game::Mode::PAUSED) { + setMode(Game::Mode::NORMAL); } } } @@ -61,7 +63,7 @@ void Game::frame() { // on met à jour la physique d'un cran temporel, // si on est en mode normal - if (mode == Game::Mode::NORMAL) { + if (getMode() == Game::Mode::NORMAL) { update(); } @@ -90,7 +92,10 @@ void Game::draw() { getManager().useGUIView(); // dessin du timer - widget_timer.setTimeLeft(getTotalTime()); + widget_timer.setTimeLeft( + std::max(std::floor(time_left), 0.f) + ); + widget_timer.draw(sf::Vector2f(window_size.x / 2 - 50, 0)); } @@ -120,6 +125,15 @@ void Game::update() { std::vector colliding; std::vector& objects = getObjects(); + // on décrémente le temps, si le temps est nul, + // on a perdu + if (time_left <= 0) { + setMode(Game::Mode::LOST); + return; + } else { + time_left -= Manager::FRAME_TIME.asSeconds(); + } + // on tue les objets qui étaient déjà planifiés pour mourir for (auto it = pending_kill.begin(); it != pending_kill.end(); it++) { removeObject(*it); @@ -210,4 +224,21 @@ Game::Mode Game::getMode() { void Game::setMode(Game::Mode set_mode) { mode = set_mode; + + // TODO: pour le débogage + // affichage du mode actuel + switch (set_mode) { + case Game::Mode::NORMAL: + std::cout << "<< Reprise >>" << std::endl; + break; + case Game::Mode::PAUSED: + std::cout << "<< En pause >>" << std::endl; + break; + case Game::Mode::WON: + std::cout << "<< Gagné ! >>" << std::endl; + break; + case Game::Mode::LOST: + std::cout << "<< Perdu ! >>" << std::endl; + break; + } }