From 86ef1e30e3fca9523bd583061740ee6328fda687 Mon Sep 17 00:00:00 2001 From: Brychan Dempsey Date: Thu, 10 Jun 2021 15:28:15 +1200 Subject: [PATCH] Changed component data handling Adding empty (null) component data defaults to false Also added getNumEntities() function Added a test for getRegistrationsOutOfRange --- .../java/nz/ac/massey/javaecs/ComponentManager.java | 10 +++++++++- javaecs/src/main/java/nz/ac/massey/javaecs/Engine.java | 4 ++++ .../main/java/nz/ac/massey/javaecs/EntityManager.java | 4 ++++ .../src/test/java/nz/ac/massey/javaecs/AppTest.java | 6 ++++++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/javaecs/src/main/java/nz/ac/massey/javaecs/ComponentManager.java b/javaecs/src/main/java/nz/ac/massey/javaecs/ComponentManager.java index e472173..7c95f82 100644 --- a/javaecs/src/main/java/nz/ac/massey/javaecs/ComponentManager.java +++ b/javaecs/src/main/java/nz/ac/massey/javaecs/ComponentManager.java @@ -17,14 +17,22 @@ class ComponentManager{ private Map componentArrays = new HashMap<>(); private Map componentPosIndex = new HashMap<>(); private Map indexComponentType = new HashMap<>(); + private BitSet ignoreEmpty = new BitSet(); // Ignore empty values when deleting data of the index type. /** - * Adds the specified component to the provided entity + * Adds the specified component to the provided entity. + *

+ * Providing a null Object defaults the value to boolean false * @param componentType the class type of the component to add * @param componentData the component data to associate * @param entity the entity to associate data to */ protected boolean addComponentToEntity(Type componentType, Object componentData, Entity entity){ + if (componentData == null){ + // In the case of null component data, insert the boolean false + // (preserves structure by associating data with a null component) + return componentArrays.get(componentType).insertData(entity, false); + } return componentArrays.get(componentType).insertData(entity, componentData); } diff --git a/javaecs/src/main/java/nz/ac/massey/javaecs/Engine.java b/javaecs/src/main/java/nz/ac/massey/javaecs/Engine.java index 941ad56..28b12d3 100644 --- a/javaecs/src/main/java/nz/ac/massey/javaecs/Engine.java +++ b/javaecs/src/main/java/nz/ac/massey/javaecs/Engine.java @@ -208,4 +208,8 @@ public class Engine { public SystemManager getSystemManager() { return systemManager; } + + public int getNumEntities(){ + return entityManager.getNumEntities(); + } } \ No newline at end of file diff --git a/javaecs/src/main/java/nz/ac/massey/javaecs/EntityManager.java b/javaecs/src/main/java/nz/ac/massey/javaecs/EntityManager.java index 93cfd95..19b970a 100644 --- a/javaecs/src/main/java/nz/ac/massey/javaecs/EntityManager.java +++ b/javaecs/src/main/java/nz/ac/massey/javaecs/EntityManager.java @@ -210,4 +210,8 @@ class EntityManager{ return true; } } + + protected int getNumEntities(){ + return maxSize - unusedEntities.size(); + } } \ No newline at end of file diff --git a/javaecs/src/test/java/nz/ac/massey/javaecs/AppTest.java b/javaecs/src/test/java/nz/ac/massey/javaecs/AppTest.java index 53ec351..8eab114 100644 --- a/javaecs/src/test/java/nz/ac/massey/javaecs/AppTest.java +++ b/javaecs/src/test/java/nz/ac/massey/javaecs/AppTest.java @@ -229,6 +229,12 @@ class AppTest { assertFalse(gameEngine.registerSystem(TestSystem.class, new TestSystem())); } + @Test + void testGetRegistrationsOutOfRange(){ + Entity entity = Entity.asEntity(25); + assertEquals(new BitSet(), gameEngine.entityManager.getRegistrations(entity)); + } + /** * Establish a simple ECS, with a single system and component */