This commit is contained in:
StevSpotted
2024-12-12 16:28:20 +01:00
parent cf93e05955
commit 03737d9c3c
2 changed files with 52 additions and 3 deletions

34
event.h Normal file
View 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

View File

@@ -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");
}
}