skizzle/src/manager.cpp

101 lines
2.4 KiB
C++
Raw Normal View History

#include "manager.hpp"
Manager::Manager() : window(
2016-04-05 17:30:08 +00:00
sf::VideoMode(704, 480), "Skizzle", sf::Style::Default,
2016-04-09 21:33:05 +00:00
sf::ContextSettings(0, 0, 2)
), default_view(window.getDefaultView()), title(sf::String(L"")),
state(NULL), next_state(NULL), running(false) {}
void Manager::start() {
running = true;
while (running) {
sf::Event event;
// si un changement d'état a été demandé, on l'effectue maintenant
if (next_state != nullptr) {
state = next_state;
next_state->begin();
next_state = nullptr;
}
2016-04-09 21:57:23 +00:00
// vérification de sécurité
if (state == NULL) {
throw std::runtime_error("Aucun état à afficher pour le jeu");
}
// traitement des évènements reçus
while (window.pollEvent(event)) {
// fermeture de la fenêtre
if (event.type == sf::Event::Closed) {
quit();
}
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) {
default_view = sf::View(sf::FloatRect(
0, 0, event.size.width, event.size.height
));
}
2016-04-09 21:57:23 +00:00
state->processEvent(event);
}
2016-04-09 21:57:23 +00:00
// affichage de la prochaine frame
state->frame();
window.display();
}
}
void Manager::quit() {
running = false;
}
std::shared_ptr<State> Manager::getState() {
return state;
}
void Manager::setState(std::shared_ptr<State> set_state) {
// on ne change pas immédiatement l'état, on attend
// la prochaine frame pour éviter toute erreur de segmentation
next_state = set_state;
2016-03-28 17:57:55 +00:00
}
sf::RenderWindow& Manager::getWindow() {
return window;
}
sf::Time Manager::getCurrentTime() const {
return clock.getElapsedTime();
}
ResourceManager& Manager::getResourceManager() {
return resource_manager;
}
2016-04-08 00:21:19 +00:00
void Manager::resetDefaultView() {
window.setView(default_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) {
2016-04-09 00:32:11 +00:00
if (title == set_title) {
return;
}
title = set_title;
2016-04-06 11:41:12 +00:00
if (title.isEmpty()) {
window.setTitle(sf::String(L"Skizzle"));
} else {
2016-04-06 11:41:12 +00:00
window.setTitle(sf::String(L"Skizzle ") + title);
}
}
bool Manager::isKeyPressed(sf::Keyboard::Key key) const {
return sf::Keyboard::isKeyPressed(key) && window.hasFocus();
}