From bc604b52df36f6636e0ccdf6fcbffe992e41a751 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Fri, 5 Mar 2021 19:57:03 +0100 Subject: [PATCH] Refactor Movement --- .../base/api/game/entity/Movement.java | 3 ++- .../base/api/game/map/layer/object/ObjectLayer.java | 2 ++ .../world/map/layer/object/DefaultObjectLayer.java | 13 +++++++++++++ .../base/engine/world/movement/DefaultMovement.java | 10 +++++++--- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/api/src/main/java/com/bartlomiejpluta/base/api/game/entity/Movement.java b/api/src/main/java/com/bartlomiejpluta/base/api/game/entity/Movement.java index ef4abf28..e6ef9434 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/api/game/entity/Movement.java +++ b/api/src/main/java/com/bartlomiejpluta/base/api/game/entity/Movement.java @@ -1,10 +1,11 @@ package com.bartlomiejpluta.base.api.game.entity; +import com.bartlomiejpluta.base.api.game.map.layer.object.ObjectLayer; import org.joml.Vector2i; public interface Movement { - boolean perform(); + boolean perform(ObjectLayer layer); Movement another(); diff --git a/api/src/main/java/com/bartlomiejpluta/base/api/game/map/layer/object/ObjectLayer.java b/api/src/main/java/com/bartlomiejpluta/base/api/game/map/layer/object/ObjectLayer.java index 59ab78c3..39e7b2ac 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/api/game/map/layer/object/ObjectLayer.java +++ b/api/src/main/java/com/bartlomiejpluta/base/api/game/map/layer/object/ObjectLayer.java @@ -27,4 +27,6 @@ public interface ObjectLayer extends Layer { PassageAbility[][] getPassageMap(); boolean isMovementPossible(Movement movement); + + void pushMovement(Movement movement); } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/object/DefaultObjectLayer.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/object/DefaultObjectLayer.java index 9682e764..a77ed584 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/object/DefaultObjectLayer.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/object/DefaultObjectLayer.java @@ -14,6 +14,7 @@ import lombok.NonNull; import org.joml.Vector2f; import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; public class DefaultObjectLayer implements ObjectLayer { @@ -24,6 +25,8 @@ public class DefaultObjectLayer implements ObjectLayer { @Getter private final PassageAbility[][] passageMap; + private final List movements = new LinkedList<>(); + private final List rules = new ArrayList<>(); private final int rows; @@ -108,8 +111,18 @@ public class DefaultObjectLayer implements ObjectLayer { return isTargetReachable && canMoveFromCurrentTile; } + @Override + public void pushMovement(Movement movement) { + movements.add(movement); + } + @Override public void update(float dt) { + for (var iterator = movements.iterator(); iterator.hasNext(); ) { + iterator.next().perform(this); + iterator.remove(); + } + for (var entity : entities) { for (var rule : rules) { if (rule.when(entity)) { diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/movement/DefaultMovement.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/movement/DefaultMovement.java index 3b6a38b9..8b90b7fd 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/movement/DefaultMovement.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/movement/DefaultMovement.java @@ -2,6 +2,7 @@ package com.bartlomiejpluta.base.engine.world.movement; import com.bartlomiejpluta.base.api.game.entity.Direction; import com.bartlomiejpluta.base.api.game.entity.Movement; +import com.bartlomiejpluta.base.api.game.map.layer.object.ObjectLayer; import lombok.AccessLevel; import lombok.Data; import lombok.RequiredArgsConstructor; @@ -15,9 +16,12 @@ public class DefaultMovement implements Movement { private boolean performed = false; @Override - public boolean perform() { - performed = object.move(direction); - return performed; + public boolean perform(ObjectLayer layer) { + if (!layer.isMovementPossible(this)) { + return false; + } + + return object.move(direction); } @Override