Create Entities, Rules and Animations buffers
This commit is contained in:
@@ -11,6 +11,7 @@ import lombok.NonNull;
|
||||
import org.joml.Vector2fc;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Queue;
|
||||
|
||||
public abstract class BaseLayer implements Layer, Updatable {
|
||||
@@ -23,6 +24,8 @@ public abstract class BaseLayer implements Layer, Updatable {
|
||||
|
||||
protected final Queue<Animation> animations = new LinkedList<>();
|
||||
|
||||
private final List<Animation> animationsToAdd = new LinkedList<>();
|
||||
|
||||
public BaseLayer(@NonNull GameMap map) {
|
||||
this.map = map;
|
||||
this.stepSize = map.getStepSize();
|
||||
@@ -30,9 +33,7 @@ public abstract class BaseLayer implements Layer, Updatable {
|
||||
|
||||
@Override
|
||||
public void pushAnimation(Animation animation) {
|
||||
animation.setStepSize(stepSize.x(), stepSize.y());
|
||||
animations.add(animation);
|
||||
animation.onAdd(this);
|
||||
animationsToAdd.add(animation);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -42,6 +43,16 @@ public abstract class BaseLayer implements Layer, Updatable {
|
||||
|
||||
@Override
|
||||
public void update(float dt) {
|
||||
if(!animationsToAdd.isEmpty()) {
|
||||
for(var animation : animationsToAdd) {
|
||||
animation.setStepSize(stepSize.x(), stepSize.y());
|
||||
animations.add(animation);
|
||||
animation.onAdd(this);
|
||||
}
|
||||
|
||||
animationsToAdd.clear();
|
||||
}
|
||||
|
||||
for (var iterator = animations.iterator(); iterator.hasNext(); ) {
|
||||
var animation = iterator.next();
|
||||
animation.update(dt);
|
||||
|
||||
@@ -32,6 +32,8 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
|
||||
|
||||
private final List<Rule> rules = new ArrayList<>();
|
||||
|
||||
private final List<Entity> entitiesToAdd = new LinkedList<>();
|
||||
private final List<Rule> rulesToAdd = new LinkedList<>();
|
||||
private final List<Entity> entitiesToRemove = new LinkedList<>();
|
||||
private final List<Rule> rulesToRemove = new LinkedList<>();
|
||||
|
||||
@@ -48,7 +50,7 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
|
||||
|
||||
@Override
|
||||
public void registerRule(Rule rule) {
|
||||
rules.add(rule);
|
||||
rulesToAdd.add(rule);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -63,9 +65,7 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
|
||||
|
||||
@Override
|
||||
public void addEntity(Entity entity) {
|
||||
entity.onAdd(this);
|
||||
entity.setStepSize(stepSize.x(), stepSize.y());
|
||||
entities.add(entity);
|
||||
entitiesToAdd.add(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -144,6 +144,23 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
|
||||
}
|
||||
}
|
||||
|
||||
// Insert entities requested to be added
|
||||
if(!entitiesToAdd.isEmpty()) {
|
||||
for (var entity : entitiesToAdd) {
|
||||
entity.onAdd(this);
|
||||
entity.setStepSize(stepSize.x(), stepSize.y());
|
||||
entities.add(entity);
|
||||
}
|
||||
|
||||
entitiesToAdd.clear();
|
||||
}
|
||||
|
||||
// Insert rules requested to be added
|
||||
if(!rulesToAdd.isEmpty()) {
|
||||
rules.addAll(rulesToAdd);
|
||||
rulesToAdd.clear();
|
||||
}
|
||||
|
||||
// Remove entities requested to be removed
|
||||
if (!entitiesToRemove.isEmpty()) {
|
||||
for (var entity : entitiesToRemove) {
|
||||
|
||||
Reference in New Issue
Block a user