diff --git a/javaecs/src/main/java/nz/ac/massey/javaecs/ComponentArray.java b/javaecs/src/main/java/nz/ac/massey/javaecs/ComponentArray.java index e000ec6..0dd13f1 100644 --- a/javaecs/src/main/java/nz/ac/massey/javaecs/ComponentArray.java +++ b/javaecs/src/main/java/nz/ac/massey/javaecs/ComponentArray.java @@ -37,11 +37,11 @@ class ComponentArray{ return componentArray.get(entityComponentDataMap.get(entity)); } catch (NullPointerException ex){ - Engine.writeErr("Attempted to retrieve non-existent data"); + Engine.writeErr("Attempted to retrieve non-existent data for unassigned entity: " + entity.getValue()); return null; } catch (IndexOutOfBoundsException e){ - Engine.writeErr("Index out-of-bounds"); + Engine.writeErr("Index out-of-bounds for entity: " + entity.getValue()); return null; } } @@ -94,7 +94,7 @@ class ComponentArray{ */ protected boolean removeData(Entity entity){ if (!entityComponentDataMap.containsKey(entity)){ - Engine.writeErr("Attempted to remove non-existent entity"); + Engine.writeErr("Attempted to remove non-existent entity: " + entity.getValue()); return false; } // Get the componentData index of the entity 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 7c95f82..961118d 100644 --- a/javaecs/src/main/java/nz/ac/massey/javaecs/ComponentManager.java +++ b/javaecs/src/main/java/nz/ac/massey/javaecs/ComponentManager.java @@ -17,7 +17,6 @@ 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. 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 28b12d3..1bdeabf 100644 --- a/javaecs/src/main/java/nz/ac/massey/javaecs/Engine.java +++ b/javaecs/src/main/java/nz/ac/massey/javaecs/Engine.java @@ -97,18 +97,21 @@ public class Engine { /** * Adds an exisiting component to an exisiting entity * @param entity the entity to add the component to - * @param componentName the class name of the component to add + * @param componentType the class name of the component to add * @param component the actual component data * @return true if the compnent was added to the entity */ - public boolean addComponent(Entity entity, Type componentName, Object component){ - if (entityManager.registerComponent(componentManager.getComponentIndex(componentName), entity)) + public boolean addComponent(Entity entity, Type componentType, Object component){ + if (entityManager.registerComponent(componentManager.getComponentIndex(componentType), entity)) { systemManager.entityRegistrationsChanged(entity, entityManager.getRegistrations(entity)); - componentManager.addComponentToEntity(componentName, component, entity); + componentManager.addComponentToEntity(componentType, component, entity); return true; } - else return false; + else { + writeErr("(" + componentType.getTypeName() + ")"); + return false; + } } /** diff --git a/javaecs/src/main/java/nz/ac/massey/javaecs/Entity.java b/javaecs/src/main/java/nz/ac/massey/javaecs/Entity.java index 3d6da74..a311cca 100644 --- a/javaecs/src/main/java/nz/ac/massey/javaecs/Entity.java +++ b/javaecs/src/main/java/nz/ac/massey/javaecs/Entity.java @@ -35,4 +35,9 @@ public class Entity { { return (this.getValue() == ((Entity)obj).getValue()); } + + @Override + public int hashCode(){ + return value; + } } 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 19b970a..9e5fdfc 100644 --- a/javaecs/src/main/java/nz/ac/massey/javaecs/EntityManager.java +++ b/javaecs/src/main/java/nz/ac/massey/javaecs/EntityManager.java @@ -76,16 +76,23 @@ class EntityManager{ } /** - * Gets the BitSet containing the registrations of the entity + * Gets the BitSet containing the registrations of the entity. * @param entity the entity whose BitSet to retrieve - * @return the BitSet of the provided entity + * @return the BitSet of the provided entity, or a new, empty BitSet if the result was null or out of bounds */ protected BitSet getRegistrations(Entity entity){ try{ - return entityRegistrations.get(entity.getValue()); + BitSet registrations = entityRegistrations.get(entity.getValue()); + if (registrations != null){ + return registrations; + } + else{ + Engine.writeErr("Registrations not initialised for entity: " + entity.getValue() + "; The entity does not exist"); + return new BitSet(); + } } catch (IndexOutOfBoundsException e){ - Engine.writeErr("Index out of bounds error getting registrations for " + entity.getValue() + ";\nThe entity might not exist"); + Engine.writeErr("Index out of bounds error getting registrations for " + entity.getValue() + "; The entity might not exist"); return new BitSet(); // Using a blank BitSet will retain data safety (that is, no data will be modified) } } @@ -103,7 +110,7 @@ class EntityManager{ } else if (entityRegistrations.get(entity.getValue()).get(component)) { - Engine.writeErr("Entity is already assigned to the component"); + Engine.writeErr("Entity: " + entity.getValue() + " is already assigned to component " + component); return false; } else{ diff --git a/javaecs/src/main/java/nz/ac/massey/javaecs/SystemManager.java b/javaecs/src/main/java/nz/ac/massey/javaecs/SystemManager.java index 529dff1..cf5df38 100644 --- a/javaecs/src/main/java/nz/ac/massey/javaecs/SystemManager.java +++ b/javaecs/src/main/java/nz/ac/massey/javaecs/SystemManager.java @@ -59,7 +59,7 @@ class SystemManager{ */ protected boolean registerSystem(Type systemType, ECSSystem system){ if (systems.containsKey(systemType)){ - Engine.writeErr("System already registered"); + Engine.writeErr("System \'" + systemType.getTypeName() + "\' already registered"); return false; } systems.put(systemType, system); 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 8eab114..19f7a8d 100644 --- a/javaecs/src/test/java/nz/ac/massey/javaecs/AppTest.java +++ b/javaecs/src/test/java/nz/ac/massey/javaecs/AppTest.java @@ -131,6 +131,7 @@ class AppTest { for (int i = 256; i < 512; i++) { gameEngine.destroyEntity(Entity.asEntity(i)); } + int k = 0; } /** @@ -231,6 +232,12 @@ class AppTest { @Test void testGetRegistrationsOutOfRange(){ + Entity entity = Entity.asEntity(-1); + assertEquals(new BitSet(), gameEngine.entityManager.getRegistrations(entity)); + } + + @Test + void testGetRegistrationsUnassignedEntity(){ Entity entity = Entity.asEntity(25); assertEquals(new BitSet(), gameEngine.entityManager.getRegistrations(entity)); }