Enable removing entities and rules from the loop inside
This commit is contained in:
@@ -35,6 +35,9 @@ public class DefaultObjectLayer implements ObjectLayer {
|
|||||||
|
|
||||||
private final List<Rule> rules = new ArrayList<>();
|
private final List<Rule> rules = new ArrayList<>();
|
||||||
|
|
||||||
|
private final List<Entity> entitiesToRemove = new LinkedList<>();
|
||||||
|
private final List<Rule> rulesToRemove = new LinkedList<>();
|
||||||
|
|
||||||
private final int rows;
|
private final int rows;
|
||||||
private final int columns;
|
private final int columns;
|
||||||
private final Vector2fc stepSize;
|
private final Vector2fc stepSize;
|
||||||
@@ -55,12 +58,12 @@ public class DefaultObjectLayer implements ObjectLayer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void unregisterRule(Rule rule) {
|
public void unregisterRule(Rule rule) {
|
||||||
rules.remove(rule);
|
rulesToRemove.add(rule);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void unregisterRules() {
|
public void unregisterRules() {
|
||||||
rules.clear();
|
rulesToRemove.addAll(rules);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -72,13 +75,12 @@ public class DefaultObjectLayer implements ObjectLayer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeEntity(Entity entity) {
|
public void removeEntity(Entity entity) {
|
||||||
entity.onRemove(this);
|
entitiesToRemove.add(entity);
|
||||||
entities.remove(entity);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void clearEntities() {
|
public void clearEntities() {
|
||||||
entities.clear();
|
entitiesToRemove.addAll(entities);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -114,7 +116,6 @@ public class DefaultObjectLayer implements ObjectLayer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,6 +146,22 @@ public class DefaultObjectLayer implements ObjectLayer {
|
|||||||
((NPC) entity).getStrategy().nextActivity(this, dt);
|
((NPC) entity).getStrategy().nextActivity(this, dt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remove entities requested to be removed
|
||||||
|
if (!entitiesToRemove.isEmpty()) {
|
||||||
|
for (var entity : entitiesToRemove) {
|
||||||
|
entities.remove(entity);
|
||||||
|
entity.onRemove(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
entitiesToRemove.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove rules requested to be unregistered
|
||||||
|
if (!rulesToRemove.isEmpty()) {
|
||||||
|
rules.removeAll(rulesToRemove);
|
||||||
|
rulesToRemove.clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user