aboutsummaryrefslogtreecommitdiff
path: root/mwe/events/src
diff options
context:
space:
mode:
authorWBoerenkamps <wrj.boerenkamps@student.avans.nl>2024-11-03 11:23:54 +0100
committerWBoerenkamps <wrj.boerenkamps@student.avans.nl>2024-11-03 11:23:54 +0100
commit75cf0b8e72aff7072c25ab015ce5c9c64eb3ecc5 (patch)
treedd459130f169a924db0637146d31ed20aaa10d74 /mwe/events/src
parented8534e2d150428bcbc4a6df8940323ae8db2925 (diff)
parent6aa8fdd04728b6a499f526de727514ae3d0490b4 (diff)
Merge branch 'master' of https://github.com/lonkaars/crepe into wouter/events-poc
Diffstat (limited to 'mwe/events/src')
-rw-r--r--mwe/events/src/event.cpp8
-rw-r--r--mwe/events/src/eventManager.cpp200
-rw-r--r--mwe/events/src/main.cpp57
3 files changed, 156 insertions, 109 deletions
diff --git a/mwe/events/src/event.cpp b/mwe/events/src/event.cpp
index 0a7454d..eae4d14 100644
--- a/mwe/events/src/event.cpp
+++ b/mwe/events/src/event.cpp
@@ -44,12 +44,10 @@ std::pair<int, int> MousePressedEvent::getMousePosition() const {
}
//Collision event
-CollisionEvent::CollisionEvent(Collision collision) : collisionData(collision), Event("CollisionEvent") {
+CollisionEvent::CollisionEvent(Collision collision)
+ : collisionData(collision), Event("CollisionEvent") {}
-}
-
-Collision CollisionEvent::getCollisionData() const
-{
+Collision CollisionEvent::getCollisionData() const {
return this->collisionData;
}
diff --git a/mwe/events/src/eventManager.cpp b/mwe/events/src/eventManager.cpp
index c37dcb0..34a093d 100644
--- a/mwe/events/src/eventManager.cpp
+++ b/mwe/events/src/eventManager.cpp
@@ -1,98 +1,130 @@
#include "eventManager.h"
-void EventManager::shutdown()
-{
- subscribers.clear();
-}
+void EventManager::shutdown() { subscribers.clear(); }
-void EventManager::subscribe(int eventType, std::unique_ptr<IEventHandlerWrapper>&& handler, int eventId)
-{
- if (eventId) {
- std::unordered_map<int, std::unordered_map<int, std::vector<std::unique_ptr<IEventHandlerWrapper>>>>::iterator subscribers = subscribersByEventId.find(eventType);
+void EventManager::subscribe(int eventType,
+ std::unique_ptr<IEventHandlerWrapper> && handler,
+ int eventId) {
+ if (eventId) {
+ std::unordered_map<
+ int, std::unordered_map<
+ int, std::vector<std::unique_ptr<IEventHandlerWrapper>>>>::
+ iterator subscribers
+ = subscribersByEventId.find(eventType);
- if (subscribers != subscribersByEventId.end()) {
- std::unordered_map<int, std::vector<std::unique_ptr<IEventHandlerWrapper>>>& handlersMap = subscribers->second;
- std::unordered_map<int, std::vector<std::unique_ptr<IEventHandlerWrapper>>>::iterator handlers = handlersMap.find(eventId);
- if (handlers != handlersMap.end()) {
- handlers->second.emplace_back(std::move(handler));
- return;
- }
- }
- subscribersByEventId[eventType][eventId].emplace_back(std::move(handler));
+ if (subscribers != subscribersByEventId.end()) {
+ std::unordered_map<
+ int, std::vector<std::unique_ptr<IEventHandlerWrapper>>> &
+ handlersMap
+ = subscribers->second;
+ std::unordered_map<
+ int,
+ std::vector<std::unique_ptr<IEventHandlerWrapper>>>::iterator
+ handlers
+ = handlersMap.find(eventId);
+ if (handlers != handlersMap.end()) {
+ handlers->second.emplace_back(std::move(handler));
+ return;
+ }
+ }
+ subscribersByEventId[eventType][eventId].emplace_back(
+ std::move(handler));
- } else {
- auto& handlers = subscribers[eventType];
- handlers.emplace_back(std::move(handler));
- }
+ } else {
+ auto & handlers = subscribers[eventType];
+ handlers.emplace_back(std::move(handler));
+ }
}
-void EventManager::unsubscribe(int eventType, const std::string& handlerName, int eventId)
-{
- if (eventId) {
- std::unordered_map<int, std::unordered_map<int, std::vector<std::unique_ptr<IEventHandlerWrapper>>>>::iterator subscriberList = subscribersByEventId.find(eventType);
- if (subscriberList != subscribersByEventId.end()) {
- std::unordered_map<int, std::vector<std::unique_ptr<IEventHandlerWrapper>>>& handlersMap = subscriberList->second;
- std::unordered_map<int, std::vector<std::unique_ptr<IEventHandlerWrapper>>>::iterator handlers = handlersMap.find(eventId);
- if (handlers != handlersMap.end()) {
- std::vector<std::unique_ptr<IEventHandlerWrapper>>& callbacks = handlers->second;
- for (std::vector<std::unique_ptr<IEventHandlerWrapper>>::iterator it = callbacks.begin(); it != callbacks.end(); ++it) {
- if (it->get()->getType() == handlerName) {
- it = callbacks.erase(it);
- return;
- }
- }
- }
- }
- } else {
- std::unordered_map<int, std::vector<std::unique_ptr<IEventHandlerWrapper>>>::iterator handlersIt = subscribers.find(eventType);
- if (handlersIt != subscribers.end()) {
- std::vector<std::unique_ptr<IEventHandlerWrapper>>& handlers = handlersIt->second;
- for (std::vector<std::unique_ptr<IEventHandlerWrapper>>::iterator it = handlers.begin(); it != handlers.end(); ++it) {
- if (it->get()->getType() == handlerName) {
- it = handlers.erase(it);
- return;
- }
- }
- }
- }
+void EventManager::unsubscribe(int eventType, const std::string & handlerName,
+ int eventId) {
+ if (eventId) {
+ std::unordered_map<
+ int, std::unordered_map<
+ int, std::vector<std::unique_ptr<IEventHandlerWrapper>>>>::
+ iterator subscriberList
+ = subscribersByEventId.find(eventType);
+ if (subscriberList != subscribersByEventId.end()) {
+ std::unordered_map<
+ int, std::vector<std::unique_ptr<IEventHandlerWrapper>>> &
+ handlersMap
+ = subscriberList->second;
+ std::unordered_map<
+ int,
+ std::vector<std::unique_ptr<IEventHandlerWrapper>>>::iterator
+ handlers
+ = handlersMap.find(eventId);
+ if (handlers != handlersMap.end()) {
+ std::vector<std::unique_ptr<IEventHandlerWrapper>> & callbacks
+ = handlers->second;
+ for (std::vector<
+ std::unique_ptr<IEventHandlerWrapper>>::iterator it
+ = callbacks.begin();
+ it != callbacks.end(); ++it) {
+ if (it->get()->getType() == handlerName) {
+ it = callbacks.erase(it);
+ return;
+ }
+ }
+ }
+ }
+ } else {
+ std::unordered_map<
+ int, std::vector<std::unique_ptr<IEventHandlerWrapper>>>::iterator
+ handlersIt
+ = subscribers.find(eventType);
+ if (handlersIt != subscribers.end()) {
+ std::vector<std::unique_ptr<IEventHandlerWrapper>> & handlers
+ = handlersIt->second;
+ for (std::vector<std::unique_ptr<IEventHandlerWrapper>>::iterator it
+ = handlers.begin();
+ it != handlers.end(); ++it) {
+ if (it->get()->getType() == handlerName) {
+ it = handlers.erase(it);
+ return;
+ }
+ }
+ }
+ }
}
-void EventManager::triggerEvent(const Event& event_, int eventId)
-{
- if (eventId > 0) {
- auto handlersIt = subscribersByEventId[event_.getEventType()].find(eventId);
- if (handlersIt != subscribersByEventId[event_.getEventType()].end()) {
- std::vector<std::unique_ptr<IEventHandlerWrapper>>& callbacks = handlersIt->second;
- for (auto it = callbacks.begin(); it != callbacks.end();) {
- (*it)->exec(event_);
- if ((*it)->isDestroyOnSuccess()) {
- it = callbacks.erase(it);
- } else {
- ++it;
- }
- }
- }
- } else {
- auto& handlers = subscribers[event_.getEventType()];
- for (std::unique_ptr<IEventHandlerWrapper>& handler : handlers) {
- handler->exec(event_);
- }
- }
+void EventManager::triggerEvent(const Event & event_, int eventId) {
+ if (eventId > 0) {
+ auto handlersIt
+ = subscribersByEventId[event_.getEventType()].find(eventId);
+ if (handlersIt != subscribersByEventId[event_.getEventType()].end()) {
+ std::vector<std::unique_ptr<IEventHandlerWrapper>> & callbacks
+ = handlersIt->second;
+ for (auto it = callbacks.begin(); it != callbacks.end();) {
+ (*it)->exec(event_);
+ if ((*it)->isDestroyOnSuccess()) {
+ it = callbacks.erase(it);
+ } else {
+ ++it;
+ }
+ }
+ }
+ } else {
+ auto & handlers = subscribers[event_.getEventType()];
+ for (std::unique_ptr<IEventHandlerWrapper> & handler : handlers) {
+ handler->exec(event_);
+ }
+ }
}
-void EventManager::queueEvent(std::unique_ptr<Event>&& event_, int eventId)
-{
- eventsQueue.emplace_back(std::move(event_), eventId);
+void EventManager::queueEvent(std::unique_ptr<Event> && event_, int eventId) {
+ eventsQueue.emplace_back(std::move(event_), eventId);
}
-void EventManager::dispatchEvents()
-{
- for (std::vector<std::pair<std::unique_ptr<Event>, int>>::iterator eventIt = eventsQueue.begin(); eventIt != eventsQueue.end();) {
- if (!eventIt->first.get()->getHandled()) {
- triggerEvent(*eventIt->first.get(), eventIt->second);
- eventIt = eventsQueue.erase(eventIt);
- } else {
- ++eventIt;
- }
- }
+void EventManager::dispatchEvents() {
+ for (std::vector<std::pair<std::unique_ptr<Event>, int>>::iterator eventIt
+ = eventsQueue.begin();
+ eventIt != eventsQueue.end();) {
+ if (!eventIt->first.get()->getHandled()) {
+ triggerEvent(*eventIt->first.get(), eventIt->second);
+ eventIt = eventsQueue.erase(eventIt);
+ } else {
+ ++eventIt;
+ }
+ }
}
diff --git a/mwe/events/src/main.cpp b/mwe/events/src/main.cpp
index 8fd6d10..972fc70 100644
--- a/mwe/events/src/main.cpp
+++ b/mwe/events/src/main.cpp
@@ -1,3 +1,4 @@
+#include "customTypes.h"
#include "event.h"
#include "loopManager.h"
#include <SDL2/SDL.h>
@@ -17,9 +18,9 @@ public:
REGISTER_EVENT_TYPE(PlayerDamagedEvent);
- int getDamage() const { return damage; }
- int getPlayerID() const { return playerID; }
-
+ int getDamage() const { return damage; }
+ int getPlayerID() const { return playerID; }
+
private:
int damage;
int playerID;
@@ -29,22 +30,22 @@ void onPlayerDamaged(const PlayerDamagedEvent & e) {
<< " damage." << std::endl;
}
-void onKeyPressed1(const KeyPressedEvent& e)
-{
- int keyCode = e.getKeyCode();
- fprintf(stderr,"first function KeyCode %d\n",keyCode);
+void onKeyPressed1(const KeyPressedEvent & e) {
+ int keyCode = e.getKeyCode();
+ fprintf(stderr, "first function KeyCode %d\n", keyCode);
}
-void onKeyPressed(const KeyPressedEvent& e)
-{
- int keyCode = e.getKeyCode();
- fprintf(stderr,"second function KeyCode %d\n",keyCode);
+void onKeyPressed(const KeyPressedEvent & e) {
+ int keyCode = e.getKeyCode();
+ fprintf(stderr, "second function KeyCode %d\n", keyCode);
}
-void CollisionHandler(const CollisionEvent& e){
- std::cout << "collision between object id: "<< e.getCollisionData().objectIdA << " and id: " << e.getCollisionData().objectIdB << std::endl;
+void CollisionHandler(const CollisionEvent & e) {
+ std::cout << "collision betwee object id: "
+ << e.getCollisionData().objectIdA
+ << " and id: " << e.getCollisionData().objectIdB << std::endl;
}
void testCollisionEvent() {
Collision testCollision(1, 2, {3, 4}, {5, 6}, 7.8f);
- subscribe<CollisionEvent>(CollisionHandler,1);
+ subscribe<CollisionEvent>(CollisionHandler, 1);
// EventHandler<PlayerDamagedEvent>
triggerEvent(CollisionEvent(testCollision), 1);
}
@@ -56,16 +57,32 @@ int main(int argc, char * args[]) {
// custom event class poc
subscribe<PlayerDamagedEvent>(onPlayerDamaged);
triggerEvent(PlayerDamagedEvent(50, 1));
- subscribe<KeyPressedEvent>(onKeyPressed,1,false);
- subscribe<KeyPressedEvent>(onKeyPressed1,false);
- // queueEvent(std::move(anotherKeyPressEvent));
- triggerEvent(KeyPressedEvent(42), 1);
-
+ subscribe<KeyPressedEvent>(onKeyPressed, 1, false);
+ subscribe<KeyPressedEvent>(onKeyPressed1, false);
+ // queueEvent(std::move(anotherKeyPressEvent));
+ triggerEvent(KeyPressedEvent(42), 1);
+
EventManager::getInstance().dispatchEvents();
//collision event call
testCollisionEvent();
-
+
gameLoop.setup();
gameLoop.loop();
return 0;
}
+// void collisionUpdate(){
+// int count;
+// //iedere collision
+// for (int i = 0; i < count; i++)
+// {
+// //trigger object 1
+// //triger object 2
+// triggerEvent(CollisionEvent(1,2),1);
+// triggerEvent(CollisionEvent(1,2),2);
+// }
+
+// }
+// int main(){
+
+// return 0;
+// }