diff --git a/src/main/java/com/yes/yes/utils/Entity.java b/src/main/java/com/yes/yes/utils/Entity.java index 5ef5fc2..91298f1 100644 --- a/src/main/java/com/yes/yes/utils/Entity.java +++ b/src/main/java/com/yes/yes/utils/Entity.java @@ -1,9 +1,14 @@ package com.yes.yes.utils; import java.util.ArrayList; +import java.util.HashMap; +import java.util.function.Function; public abstract class Entity extends javafx.scene.Group { private ArrayList behaviours = new ArrayList<>(); + private final HashMap data = new HashMap(); + private final EventHandler handler = new EventHandler(); + private int rotation; public final void addBehaviour(Component behaviour) { behaviours.add(behaviour); @@ -26,4 +31,24 @@ public abstract class Entity extends javafx.scene.Group { behaviour.update(); } } + + public final void setData(String key, Object value) { + data.put(key, value); + } + + public final T getData(String key) { + return (T) data.get(key); + } + + public final void addListener(String eventName, Function function) { + handler.addListener(eventName, function); + } + + public final void removeListener(String eventName, Function function) { + handler.removeListener(eventName, function); + } + + public final void trigger(String eventName, Object parameter) { + handler.trigger(eventName, parameter); + } } diff --git a/src/main/java/com/yes/yes/utils/EventHandler.java b/src/main/java/com/yes/yes/utils/EventHandler.java new file mode 100644 index 0000000..a6a56f3 --- /dev/null +++ b/src/main/java/com/yes/yes/utils/EventHandler.java @@ -0,0 +1,33 @@ +package com.yes.yes.utils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.function.Function; + +public class EventHandler { + private final HashMap>> events = new HashMap<>(); + + + + public void addListener(String eventName, Function function) { + if (!events.containsKey(eventName)) { + events.put(eventName, new ArrayList<>()); + } + events.get(eventName).add(function); + } + + public void removeListener(String eventName, Function function) throws IllegalArgumentException { + //NOTE: This needs to be called otherwise memory leak + if (!events.containsKey(eventName)) { + throw new IllegalArgumentException("Event " + eventName + " does not exist!"); + } + events.get(eventName).remove(function); + } + + public void trigger(String eventName, Object parameter) { + //TODO: Check if this needs null checking + if (events.containsKey(eventName)) { + events.get(eventName).forEach(e -> e.apply(parameter)); + } + } +} diff --git a/src/main/java/com/yes/yes/utils/GlobalEventHandler.java b/src/main/java/com/yes/yes/utils/GlobalEventHandler.java new file mode 100644 index 0000000..38f7e31 --- /dev/null +++ b/src/main/java/com/yes/yes/utils/GlobalEventHandler.java @@ -0,0 +1,19 @@ +package com.yes.yes.utils; + +import java.util.function.Function; + +public abstract class GlobalEventHandler { + private static final EventHandler handler = new EventHandler(); + + public static void addListener(String eventName, Function function) { + handler.addListener(eventName, function); + } + + public static void removeListener(String eventName, Function function) { + handler.removeListener(eventName, function); + } + + public static void trigger(String eventName, Object parameter) { + handler.trigger(eventName, parameter); + } +}