Replace for-each loops with plain old C-style for loops
This commit is contained in:
@@ -10,9 +10,7 @@ import com.bartlomiejpluta.base.internal.render.ShaderManager;
|
||||
import lombok.NonNull;
|
||||
import org.joml.Vector2fc;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Queue;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public abstract class BaseLayer implements Layer, Updatable {
|
||||
|
||||
@@ -22,9 +20,7 @@ public abstract class BaseLayer implements Layer, Updatable {
|
||||
@NonNull
|
||||
protected final Vector2fc stepSize;
|
||||
|
||||
protected final Queue<Animation> animations = new LinkedList<>();
|
||||
|
||||
private final List<Animation> animationsToAdd = new LinkedList<>();
|
||||
protected final ArrayList<Animation> animations = new ArrayList<>();
|
||||
|
||||
public BaseLayer(@NonNull GameMap map) {
|
||||
this.map = map;
|
||||
@@ -33,7 +29,9 @@ public abstract class BaseLayer implements Layer, Updatable {
|
||||
|
||||
@Override
|
||||
public void pushAnimation(Animation animation) {
|
||||
animationsToAdd.add(animation);
|
||||
animations.add(animation);
|
||||
animation.setStepSize(stepSize.x(), stepSize.y());
|
||||
animation.onAdd(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -43,22 +41,18 @@ public abstract class BaseLayer implements Layer, Updatable {
|
||||
|
||||
@Override
|
||||
public void update(float dt) {
|
||||
if(!animationsToAdd.isEmpty()) {
|
||||
for(var animation : animationsToAdd) {
|
||||
animations.add(animation);
|
||||
animation.setStepSize(stepSize.x(), stepSize.y());
|
||||
animation.onAdd(this);
|
||||
}
|
||||
|
||||
animationsToAdd.clear();
|
||||
}
|
||||
|
||||
for (var iterator = animations.iterator(); iterator.hasNext(); ) {
|
||||
var animation = iterator.next();
|
||||
// Disclaimer
|
||||
// For the sake of an easy adding and removing
|
||||
// animations from the animation.update() method inside
|
||||
// the loop, the loop itself has been implemented
|
||||
// as plain old C-style for loop.
|
||||
for (int i = 0; i < animations.size(); ++i) {
|
||||
var animation = animations.get(i);
|
||||
animation.update(dt);
|
||||
|
||||
if (animation.finished()) {
|
||||
iterator.remove();
|
||||
animations.remove(animation);
|
||||
animation.onFinish(this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ import static java.lang.Integer.compare;
|
||||
public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
|
||||
|
||||
@Getter
|
||||
private final List<Entity> entities;
|
||||
private final ArrayList<Entity> entities = new ArrayList<>();
|
||||
|
||||
private final List<InteractiveEntity> interactiveEntities = new ArrayList<>();
|
||||
|
||||
@@ -38,35 +38,29 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
|
||||
|
||||
private final List<MovementRule> movementRules = new ArrayList<>();
|
||||
|
||||
private final List<Entity> entitiesToAdd = new LinkedList<>();
|
||||
private final List<MovementRule> movementRulesToAdd = new LinkedList<>();
|
||||
private final List<Entity> entitiesToRemove = new LinkedList<>();
|
||||
private final List<MovementRule> movementRulesToRemove = new LinkedList<>();
|
||||
|
||||
private final int rows;
|
||||
private final int columns;
|
||||
|
||||
public DefaultObjectLayer(@NonNull GameMap map, int rows, int columns, List<Entity> entities, PassageAbility[][] passageMap) {
|
||||
public DefaultObjectLayer(@NonNull GameMap map, int rows, int columns, PassageAbility[][] passageMap) {
|
||||
super(map);
|
||||
this.rows = rows;
|
||||
this.columns = columns;
|
||||
this.entities = entities;
|
||||
this.passageMap = passageMap;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerMovementRule(MovementRule rule) {
|
||||
movementRulesToAdd.add(rule);
|
||||
movementRules.add(rule);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unregisterMovementRule(MovementRule rule) {
|
||||
movementRulesToRemove.add(rule);
|
||||
movementRules.remove(rule);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unregisterRules() {
|
||||
movementRulesToRemove.addAll(movementRules);
|
||||
movementRules.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -77,18 +71,30 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
|
||||
layer.entities.remove(entity);
|
||||
}
|
||||
|
||||
if (entity instanceof InteractiveEntity) {
|
||||
interactiveEntities.add((InteractiveEntity) entity);
|
||||
}
|
||||
|
||||
entity.setStepSize(stepSize.x(), stepSize.y());
|
||||
entitiesToAdd.add(entity);
|
||||
entities.add(entity);
|
||||
|
||||
entity.onAdd(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeEntity(Entity entity) {
|
||||
entitiesToRemove.add(entity);
|
||||
entities.remove(entity);
|
||||
|
||||
if (entity instanceof InteractiveEntity) {
|
||||
interactiveEntities.remove(entity);
|
||||
}
|
||||
|
||||
entity.onRemove(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearEntities() {
|
||||
entitiesToRemove.addAll(entities);
|
||||
entities.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -132,52 +138,12 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
|
||||
movements.add(movement);
|
||||
}
|
||||
|
||||
@SuppressWarnings("ForLoopReplaceableByForEach")
|
||||
@Override
|
||||
public void update(float dt) {
|
||||
// Insert entities requested to be added
|
||||
if (!entitiesToAdd.isEmpty()) {
|
||||
for (var entity : entitiesToAdd) {
|
||||
entity.onAdd(this);
|
||||
if (entity instanceof InteractiveEntity) {
|
||||
interactiveEntities.add((InteractiveEntity) entity);
|
||||
}
|
||||
|
||||
entities.add(entity);
|
||||
}
|
||||
|
||||
entitiesToAdd.clear();
|
||||
}
|
||||
|
||||
// Insert rules requested to be added
|
||||
if (!movementRulesToAdd.isEmpty()) {
|
||||
movementRules.addAll(movementRulesToAdd);
|
||||
movementRulesToAdd.clear();
|
||||
}
|
||||
|
||||
// Remove entities requested to be removed
|
||||
if (!entitiesToRemove.isEmpty()) {
|
||||
for (var entity : entitiesToRemove) {
|
||||
entities.remove(entity);
|
||||
if (entity instanceof InteractiveEntity) {
|
||||
interactiveEntities.remove(entity);
|
||||
}
|
||||
|
||||
entity.onRemove(this);
|
||||
}
|
||||
|
||||
entitiesToRemove.clear();
|
||||
}
|
||||
|
||||
// Remove rules requested to be unregistered
|
||||
if (!movementRulesToRemove.isEmpty()) {
|
||||
movementRules.removeAll(movementRulesToRemove);
|
||||
movementRulesToRemove.clear();
|
||||
}
|
||||
|
||||
// Update BaseLayer (animations etc.)
|
||||
super.update(dt);
|
||||
|
||||
// Update movements
|
||||
while (!movements.isEmpty()) {
|
||||
var movement = movements.poll();
|
||||
var from = movement.getFrom();
|
||||
@@ -185,7 +151,13 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
|
||||
if (isTileReachable(to)) {
|
||||
movement.perform();
|
||||
|
||||
for (var rule : movementRules) {
|
||||
// Disclaimer
|
||||
// For the sake of an easy adding and removing
|
||||
// rules from the rule.update() method inside
|
||||
// the loop, the loop itself has been implemented
|
||||
// as plain old C-style for loop.
|
||||
for (int i = 0; i < movementRules.size(); ++i) {
|
||||
var rule = movementRules.get(i);
|
||||
if (((from.equals(rule.from())) || (to.equals(rule.to())))) {
|
||||
rule.invoke(movement);
|
||||
}
|
||||
@@ -193,8 +165,13 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
|
||||
}
|
||||
}
|
||||
|
||||
// Update entities
|
||||
for (var entity : entities) {
|
||||
// Disclaimer
|
||||
// For the sake of an easy adding and removing
|
||||
// entities from the entity.update() method inside
|
||||
// the loop, the loop itself has been implemented
|
||||
// as plain old C-style for loop.
|
||||
for (int i = 0; i < entities.size(); ++i) {
|
||||
var entity = entities.get(i);
|
||||
entity.update(dt);
|
||||
|
||||
if (entity instanceof NPC) {
|
||||
|
||||
@@ -130,7 +130,7 @@ public class DefaultGameMap implements Renderable, Updatable, GameMap {
|
||||
Arrays.fill(passageMap[i], 0, columns, PassageAbility.ALLOW);
|
||||
}
|
||||
|
||||
var layer = new DefaultObjectLayer(this, rows, columns, new ArrayList<>(), passageMap);
|
||||
var layer = new DefaultObjectLayer(this, rows, columns, passageMap);
|
||||
|
||||
layers.add(layer);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user