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