mirror of
https://github.com/BreizhHardware/bloubloulespoissons.git
synced 2026-03-18 21:50:32 +01:00
s
This commit is contained in:
34
event.h
Normal file
34
event.h
Normal file
@@ -0,0 +1,34 @@
|
||||
#ifndef EVENTHANDLER_H
|
||||
#define EVENTHANDLER_H
|
||||
|
||||
#include <functional>
|
||||
#include <unordered_map>
|
||||
#include <string>
|
||||
|
||||
class EventHandler {
|
||||
public:
|
||||
using EventCallback = std::function<void()>;
|
||||
|
||||
template <typename EventCallback, typename... Args>
|
||||
|
||||
void registerEvent(const std::string& eventName, EventCallback callback, Args&&... args) {
|
||||
|
||||
eventCallbacks[eventName] = [callback, ...args = std::forward<Args>(args)]() {
|
||||
|
||||
callback(args.get()...);
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
void triggerEvent(const std::string& eventName) {
|
||||
if (eventCallbacks.find(eventName) != eventCallbacks.end()) {
|
||||
eventCallbacks[eventName]();
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
std::unordered_map<std::string, EventCallback> eventCallbacks;
|
||||
};
|
||||
|
||||
#endif
|
||||
21
main.cpp
21
main.cpp
@@ -24,6 +24,8 @@
|
||||
#include "network/networking_client.h"
|
||||
#include "shark.h"
|
||||
|
||||
#include "event.h"
|
||||
|
||||
|
||||
#include <system_error>
|
||||
|
||||
@@ -306,6 +308,14 @@ void updateShark(Shark &shark) {
|
||||
}
|
||||
}
|
||||
|
||||
void onPlayerLost(Menu &menu){
|
||||
menuRunning = true;
|
||||
menu.changePage("Main");
|
||||
menu.show();
|
||||
}
|
||||
|
||||
EventHandler eventHandler;
|
||||
|
||||
int main(int argc, char* args[]) {
|
||||
|
||||
SDL_SetHint(SDL_HINT_VIDEO_WAYLAND_ALLOW_LIBDECOR, "0");
|
||||
@@ -315,12 +325,16 @@ int main(int argc, char* args[]) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
Menu menu(renderer);
|
||||
menu.addPage("Main");
|
||||
menu.addPage("Multi");
|
||||
menu.addPage("Multi-Join");
|
||||
menu.changePage("Main");
|
||||
|
||||
|
||||
eventHandler.registerEvent("playerLost", onPlayerLost, std::ref(menu));
|
||||
|
||||
std::thread menu_thread = createThread("Menu thread", HandleMenuClick, std::ref(menu));
|
||||
std::thread quit_thread = createThread("Quit thread", handleQuitThread);
|
||||
|
||||
@@ -509,7 +523,8 @@ int pas_la_fontion_main_enfin_ce_nest_pas_la_fontion_principale_du_programme_mai
|
||||
std::cerr << "Exception caught 5: " << e.what() << std::endl;
|
||||
}
|
||||
std::cout << "All threads killed" << std::endl;
|
||||
running = false;
|
||||
// running = false;
|
||||
eventHandler.triggerEvent("playerLost");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -616,7 +631,7 @@ int pas_la_fontion_main_enfin_ce_nest_pas_la_fontion_principale_du_programme_mai
|
||||
std::cerr << "Exception caught 5: " << e.what() << std::endl;
|
||||
}
|
||||
|
||||
running = false;
|
||||
eventHandler.triggerEvent("playerLost");
|
||||
}
|
||||
else if (argc > 0 && argc < 65535 && args != "") {
|
||||
int port = 1234;
|
||||
@@ -676,7 +691,7 @@ int pas_la_fontion_main_enfin_ce_nest_pas_la_fontion_principale_du_programme_mai
|
||||
} catch (const std::system_error& e) {
|
||||
std::cerr << "Exception caught 4: " << e.what() << std::endl;
|
||||
}
|
||||
running = false;
|
||||
eventHandler.triggerEvent("playerLost");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user