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 4df9595..2f573df 100644 --- a/javaecs/src/main/java/nz/ac/massey/javaecs/ComponentArray.java +++ b/javaecs/src/main/java/nz/ac/massey/javaecs/ComponentArray.java @@ -34,9 +34,11 @@ class ComponentArray{ */ protected Object getData(int entity){ try{ - Object result = componentArray.get(entityComponentDataMap.get(entity)); - if (result == null) ECS.writeErr("Attempted to retrieve non-existent data"); - return result; + return componentArray.get(entityComponentDataMap.get(entity)); + } + catch (NullPointerException ex){ + ECS.writeErr("Attempted to retrieve non-existent data"); + return null; } catch (IndexOutOfBoundsException e){ ECS.writeErr("Index out-of-bounds"); 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 26ddafd..1a0611d 100644 --- a/javaecs/src/main/java/nz/ac/massey/javaecs/ComponentManager.java +++ b/javaecs/src/main/java/nz/ac/massey/javaecs/ComponentManager.java @@ -101,7 +101,7 @@ class ComponentManager{ while (result != -1){ Type key = indexComponentType.get(result); componentArrays.get(key).moveData(sourceEntity, destinationEntity); - sourceRegistrations.nextSetBit(result); + result = sourceRegistrations.nextSetBit(result+1); } } 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 72271b6..fd87fb5 100644 --- a/javaecs/src/main/java/nz/ac/massey/javaecs/EntityManager.java +++ b/javaecs/src/main/java/nz/ac/massey/javaecs/EntityManager.java @@ -145,6 +145,10 @@ class EntityManager{ entityRegistrations.get(entity).clear(component); return true; } + catch (NullPointerException e){ + ECS.writeErr("Entity not initialised"); + return false; + } catch (IndexOutOfBoundsException e) { return false; @@ -187,7 +191,6 @@ class EntityManager{ systemManager.entityRegistrationsChanged(newPos, getRegistrations(newPos)); // Invoke the change in the components componentManager.moveAllComponentData(integer, newPos, getRegistrations(integer)); - componentManager.entityDestroyed(integer); } for (int i = newSize; i < maxSize; i++) { // Remove out-of-bounds data