aboutsummaryrefslogtreecommitdiff
path: root/core/src/main/java/coffee/liz/ecs
diff options
context:
space:
mode:
authorElizabeth Hunt <me@liz.coffee>2026-01-31 15:47:29 -0800
committerElizabeth Hunt <me@liz.coffee>2026-01-31 15:47:29 -0800
commit518149db6fc7f3726a4f638e0ef90c1cdbbdcb5a (patch)
tree78e299754e6f8bfedb8eeb3f7ae6bd63c5446528 /core/src/main/java/coffee/liz/ecs
parentd8b40e4240fb7f8c62fcd60c567ab386024741d3 (diff)
downloadthe-abstraction-engine-v2-518149db6fc7f3726a4f638e0ef90c1cdbbdcb5a.tar.gz
the-abstraction-engine-v2-518149db6fc7f3726a4f638e0ef90c1cdbbdcb5a.zip
Making world closing more intuitive
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}.
*