aboutsummaryrefslogtreecommitdiff
path: root/core/src/main/java/coffee/liz/ecs
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/java/coffee/liz/ecs')
-rw-r--r--core/src/main/java/coffee/liz/ecs/DAGWorld.java9
-rw-r--r--core/src/main/java/coffee/liz/ecs/model/System.java5
-rw-r--r--core/src/main/java/coffee/liz/ecs/model/World.java2
3 files changed, 14 insertions, 2 deletions
diff --git a/core/src/main/java/coffee/liz/ecs/DAGWorld.java b/core/src/main/java/coffee/liz/ecs/DAGWorld.java
index f3ad30b..dea83ef 100644
--- a/core/src/main/java/coffee/liz/ecs/DAGWorld.java
+++ b/core/src/main/java/coffee/liz/ecs/DAGWorld.java
@@ -153,4 +153,13 @@ public class DAGWorld<T> implements World<T> {
return Collections.unmodifiableList(result);
}
+
+ @Override
+ public void close() throws Exception {
+ for (final System<T> system : systemExecutionOrder) {
+ system.close();
+ }
+ componentCache.clear();
+ entities.clear();
+ }
}
diff --git a/core/src/main/java/coffee/liz/ecs/model/System.java b/core/src/main/java/coffee/liz/ecs/model/System.java
index 220b917..cc46f39 100644
--- a/core/src/main/java/coffee/liz/ecs/model/System.java
+++ b/core/src/main/java/coffee/liz/ecs/model/System.java
@@ -9,7 +9,7 @@ import java.util.Collection;
* @param <T>
* is the state of the stuff outside the {@link World}.
*/
-public interface System<T> {
+public interface System<T> extends AutoCloseable {
/**
* {@link System} clazzes that must run before this system.
*
@@ -26,4 +26,7 @@ public interface System<T> {
* Is the timestep.
*/
void update(final World<T> world, final T state, final Duration dt);
+
+ @Override
+ default void close() {}
}
diff --git a/core/src/main/java/coffee/liz/ecs/model/World.java b/core/src/main/java/coffee/liz/ecs/model/World.java
index 96c7a74..05363e8 100644
--- a/core/src/main/java/coffee/liz/ecs/model/World.java
+++ b/core/src/main/java/coffee/liz/ecs/model/World.java
@@ -10,7 +10,7 @@ import java.util.Set;
* @param <T>
* is the state of the stuff outside the world.
*/
-public interface World<T> {
+public interface World<T> extends AutoCloseable {
/**
* Create unique {@link Entity} in the {@link World}.
*