skizzle/src/manager.cpp

136 lines
3.5 KiB
C++
Raw Normal View History

#include "state.hpp"
#include "manager.hpp"
const unsigned int Manager::FPS = 60;
const sf::Time Manager::FRAME_TIME = sf::seconds(1.f / Manager::FPS);
const float Manager::GRID = 32;
2016-04-11 19:11:34 +00:00
Manager::Manager() : title(sf::String(L"")) {
// préchargement des textures
resource_manager.preload();
// création de la fenêtre (après avoir préchargé les ressources,
// on évite ainsi tout lag pendant le traitement des événements)
window.create(
sf::VideoMode(704, 480), "Skizzle", sf::Style::Default,
sf::ContextSettings(0, 0, 2)
);
// récupération de la vue par défaut comme vue du gui
gui_view = window.getDefaultView();
}
void Manager::start() {
2016-04-11 19:11:34 +00:00
while (!states.empty()) {
sf::Event event;
// traitement des évènements reçus
while (window.pollEvent(event)) {
2016-04-11 19:11:34 +00:00
// fermeture de la fenêtre : on dépile tous les états
if (event.type == sf::Event::Closed) {
2016-04-11 19:11:34 +00:00
while (!states.empty()) {
states.pop();
}
}
2016-04-09 00:32:11 +00:00
// redimensionnement de la vue par défaut
2016-04-08 00:21:19 +00:00
if (event.type == sf::Event::Resized) {
gui_view = sf::View(sf::FloatRect(
2016-04-08 00:21:19 +00:00
0, 0, event.size.width, event.size.height
));
}
2016-04-11 19:11:34 +00:00
// s'il n'y a plus d'état, on quitte
if (states.empty()) {
return;
}
states.top()->processEvent(event);
}
2016-04-11 19:11:34 +00:00
// s'il n'y a plus d'état, on quitte
if (states.empty()) {
return;
}
2016-04-09 21:57:23 +00:00
// affichage de la prochaine frame
2016-04-11 19:11:34 +00:00
states.top()->frame();
window.display();
}
}
2016-04-11 19:11:34 +00:00
void Manager::pushState(std::unique_ptr<State> set_state) {
states.push(std::move(set_state));
}
2016-04-11 19:11:34 +00:00
void Manager::popState() {
states.pop();
2016-03-28 17:57:55 +00:00
}
sf::RenderWindow& Manager::getWindow() {
return window;
}
unsigned int Manager::getFramerate() {
return framerate;
}
void Manager::setFramerate(unsigned int set_framerate) {
// on ne modifie le framerate maximal que s'il a changé
if (set_framerate != framerate) {
window.setFramerateLimit(set_framerate);
framerate = set_framerate;
}
}
sf::Time Manager::getCurrentTime() const {
return clock.getElapsedTime();
}
ResourceManager& Manager::getResourceManager() {
return resource_manager;
}
void Manager::useGUIView() {
window.setView(gui_view);
}
2016-04-06 11:41:12 +00:00
sf::String Manager::getTitle() {
return title;
}
2016-04-06 11:41:12 +00:00
void Manager::setTitle(sf::String set_title) {
if (title != set_title) {
title = set_title;
// màj du titre selon le titre donné par l'état
if (title.isEmpty()) {
window.setTitle(sf::String(L"Skizzle"));
} else {
window.setTitle(sf::String(L"Skizzle ") + title);
}
}
}
bool Manager::isKeyPressed(sf::Keyboard::Key key) const {
return sf::Keyboard::isKeyPressed(key) && window.hasFocus();
}
bool Manager::isKeyPressed(Manager::Modifier modifier) const {
switch (modifier) {
case Manager::Modifier::CONTROL:
return isKeyPressed(sf::Keyboard::LControl) || isKeyPressed(sf::Keyboard::RControl);
case Manager::Modifier::ALT:
return isKeyPressed(sf::Keyboard::LAlt) || isKeyPressed(sf::Keyboard::RAlt);
case Manager::Modifier::SYSTEM:
return isKeyPressed(sf::Keyboard::LSystem) || isKeyPressed(sf::Keyboard::RSystem);
case Manager::Modifier::SHIFT:
return isKeyPressed(sf::Keyboard::LShift) || isKeyPressed(sf::Keyboard::RShift);
}
return false;
}