Séparation des événements du GUI et des événements du jeu
This commit is contained in:
parent
f3264759aa
commit
b7a3bc6d78
|
@ -33,6 +33,12 @@ private:
|
||||||
State* previous_state;
|
State* previous_state;
|
||||||
std::stack<std::unique_ptr<State>> states;
|
std::stack<std::unique_ptr<State>> states;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Détermine si l'événement donné s'est passé à l'intérieur
|
||||||
|
* de l'interface et doit être ignoré pour la suite ou non
|
||||||
|
*/
|
||||||
|
bool isInsideGUI(const sf::Event& event);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* Énumération des modificateurs
|
* Énumération des modificateurs
|
||||||
|
|
|
@ -67,8 +67,12 @@ void Manager::start() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// seulement si l'événement ne s'est pas passé dans l'interface
|
||||||
|
// on le fait passer aux gestionnaires "normaux"
|
||||||
|
if (!isInsideGUI(event)) {
|
||||||
states.top()->processEvent(event);
|
states.top()->processEvent(event);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// s'il n'y a plus d'état, on quitte
|
// s'il n'y a plus d'état, on quitte
|
||||||
if (states.empty()) {
|
if (states.empty()) {
|
||||||
|
@ -143,6 +147,42 @@ void Manager::useGUIView() {
|
||||||
window.setView(gui_view);
|
window.setView(gui_view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Manager::isInsideGUI(const sf::Event& event) {
|
||||||
|
sf::Vector2f check_point;
|
||||||
|
bool should_check_point = false;
|
||||||
|
|
||||||
|
if (event.type == sf::Event::MouseButtonPressed ||
|
||||||
|
event.type == sf::Event::MouseButtonReleased) {
|
||||||
|
check_point.x = event.mouseButton.x;
|
||||||
|
check_point.y = event.mouseButton.y;
|
||||||
|
should_check_point = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (event.type == sf::Event::MouseMoved) {
|
||||||
|
check_point.x = event.mouseMove.x;
|
||||||
|
check_point.y = event.mouseMove.y;
|
||||||
|
should_check_point = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (event.type == sf::Event::MouseWheelScrolled) {
|
||||||
|
check_point.x = event.mouseWheelScroll.x;
|
||||||
|
check_point.y = event.mouseWheelScroll.y;
|
||||||
|
should_check_point = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// si l'événement est de type souris, on regarde que
|
||||||
|
// le point en question ne se trouve pas dans un des widgets
|
||||||
|
if (should_check_point) {
|
||||||
|
for (auto const &widget : widgets) {
|
||||||
|
if (widget->GetAllocation().contains(check_point)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void Manager::addWidget(sfg::Widget::Ptr widget) {
|
void Manager::addWidget(sfg::Widget::Ptr widget) {
|
||||||
widgets.push_back(widget);
|
widgets.push_back(widget);
|
||||||
desktop.Add(widget);
|
desktop.Add(widget);
|
||||||
|
|
Loading…
Reference in New Issue