From c87567358ceebd6df9c431168c5c3e6a49ba7d5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Tue, 30 Mar 2021 12:58:31 +0200 Subject: [PATCH] Remove rules and create movement rules --- .../api/map/layer/object/ObjectLayer.java | 6 +-- .../base/api/move/Movement.java | 2 + .../base/api/rule/MovementRule.java | 13 ++++++ .../bartlomiejpluta/base/api/rule/Rule.java | 9 ---- .../base/lib/rule/BaseRule.java | 33 ------------- .../map/layer/object/DefaultObjectLayer.java | 46 ++++++++++--------- 6 files changed, 42 insertions(+), 67 deletions(-) create mode 100644 api/src/main/java/com/bartlomiejpluta/base/api/rule/MovementRule.java delete mode 100644 api/src/main/java/com/bartlomiejpluta/base/api/rule/Rule.java delete mode 100644 api/src/main/java/com/bartlomiejpluta/base/lib/rule/BaseRule.java diff --git a/api/src/main/java/com/bartlomiejpluta/base/api/map/layer/object/ObjectLayer.java b/api/src/main/java/com/bartlomiejpluta/base/api/map/layer/object/ObjectLayer.java index a7fc2f0f..3d190c2d 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/api/map/layer/object/ObjectLayer.java +++ b/api/src/main/java/com/bartlomiejpluta/base/api/map/layer/object/ObjectLayer.java @@ -3,7 +3,7 @@ package com.bartlomiejpluta.base.api.map.layer.object; import com.bartlomiejpluta.base.api.entity.Entity; import com.bartlomiejpluta.base.api.map.layer.base.Layer; import com.bartlomiejpluta.base.api.move.Movement; -import com.bartlomiejpluta.base.api.rule.Rule; +import com.bartlomiejpluta.base.api.rule.MovementRule; import org.joml.Vector2ic; import java.util.List; @@ -17,9 +17,9 @@ public interface ObjectLayer extends Layer { List getEntities(); - void registerRule(Rule rule); + void registerMovementRule(MovementRule rule); - void unregisterRule(Rule rule); + void unregisterMovementRule(MovementRule rule); void unregisterRules(); diff --git a/api/src/main/java/com/bartlomiejpluta/base/api/move/Movement.java b/api/src/main/java/com/bartlomiejpluta/base/api/move/Movement.java index 9b1d83fa..090ff20e 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/api/move/Movement.java +++ b/api/src/main/java/com/bartlomiejpluta/base/api/move/Movement.java @@ -3,6 +3,8 @@ package com.bartlomiejpluta.base.api.move; import org.joml.Vector2ic; public interface Movement { + Movable getObject(); + boolean perform(); Movement another(); diff --git a/api/src/main/java/com/bartlomiejpluta/base/api/rule/MovementRule.java b/api/src/main/java/com/bartlomiejpluta/base/api/rule/MovementRule.java new file mode 100644 index 00000000..ba830021 --- /dev/null +++ b/api/src/main/java/com/bartlomiejpluta/base/api/rule/MovementRule.java @@ -0,0 +1,13 @@ +package com.bartlomiejpluta.base.api.rule; + +import com.bartlomiejpluta.base.api.entity.Entity; +import com.bartlomiejpluta.base.api.move.Movement; +import org.joml.Vector2ic; + +public interface MovementRule { + Vector2ic from(); + + Vector2ic to(); + + void invoke(Movement movement); +} diff --git a/api/src/main/java/com/bartlomiejpluta/base/api/rule/Rule.java b/api/src/main/java/com/bartlomiejpluta/base/api/rule/Rule.java deleted file mode 100644 index 8620d9fa..00000000 --- a/api/src/main/java/com/bartlomiejpluta/base/api/rule/Rule.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.bartlomiejpluta.base.api.rule; - -import com.bartlomiejpluta.base.api.entity.Entity; - -public interface Rule { - boolean when(Entity entity); - - void then(Entity entity); -} diff --git a/api/src/main/java/com/bartlomiejpluta/base/lib/rule/BaseRule.java b/api/src/main/java/com/bartlomiejpluta/base/lib/rule/BaseRule.java deleted file mode 100644 index 1e9cc1a5..00000000 --- a/api/src/main/java/com/bartlomiejpluta/base/lib/rule/BaseRule.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.bartlomiejpluta.base.lib.rule; - -import com.bartlomiejpluta.base.api.entity.Entity; -import com.bartlomiejpluta.base.api.rule.Rule; - -import java.util.HashSet; -import java.util.Set; - -public abstract class BaseRule implements Rule { - private final Set invoked = new HashSet<>(); - - protected abstract boolean test(Entity entity); - - protected abstract void invoke(Entity entity); - - @Override - public boolean when(Entity entity) { - if (test(entity)) { - return true; - } - - invoked.remove(entity); - return false; - } - - @Override - public void then(Entity entity) { - if (!invoked.contains(entity)) { - invoke(entity); - invoked.add(entity); - } - } -} \ No newline at end of file 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 1ca086e4..b3fbce74 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 @@ -7,7 +7,7 @@ import com.bartlomiejpluta.base.api.map.layer.object.ObjectLayer; import com.bartlomiejpluta.base.api.map.layer.object.PassageAbility; import com.bartlomiejpluta.base.api.map.model.GameMap; import com.bartlomiejpluta.base.api.move.Movement; -import com.bartlomiejpluta.base.api.rule.Rule; +import com.bartlomiejpluta.base.api.rule.MovementRule; import com.bartlomiejpluta.base.api.screen.Screen; import com.bartlomiejpluta.base.engine.world.map.layer.base.BaseLayer; import com.bartlomiejpluta.base.internal.render.ShaderManager; @@ -33,12 +33,12 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer { private final Queue movements = new LinkedList<>(); - private final List rules = new ArrayList<>(); + private final List movementRules = new ArrayList<>(); private final List entitiesToAdd = new LinkedList<>(); - private final List rulesToAdd = new LinkedList<>(); + private final List movementRulesToAdd = new LinkedList<>(); private final List entitiesToRemove = new LinkedList<>(); - private final List rulesToRemove = new LinkedList<>(); + private final List movementRulesToRemove = new LinkedList<>(); private final int rows; private final int columns; @@ -52,18 +52,18 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer { } @Override - public void registerRule(Rule rule) { - rulesToAdd.add(rule); + public void registerMovementRule(MovementRule rule) { + movementRulesToAdd.add(rule); } @Override - public void unregisterRule(Rule rule) { - rulesToRemove.add(rule); + public void unregisterMovementRule(MovementRule rule) { + movementRulesToRemove.add(rule); } @Override public void unregisterRules() { - rulesToRemove.addAll(rules); + movementRulesToRemove.addAll(movementRules); } @Override @@ -128,18 +128,20 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer { while (!movements.isEmpty()) { var movement = movements.poll(); - if (isTileReachable(movement.getTo())) { + var from = movement.getFrom(); + var to = movement.getTo(); + if (isTileReachable(to)) { movement.perform(); + + for(var rule : movementRules) { + if(((from.equals(rule.from())) || (to.equals(rule.to())))) { + rule.invoke(movement); + } + } } } for (var entity : entities) { - for (var rule : rules) { - if (rule.when(entity)) { - rule.then(entity); - } - } - entity.update(dt); if (entity instanceof NPC) { @@ -159,9 +161,9 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer { } // Insert rules requested to be added - if(!rulesToAdd.isEmpty()) { - rules.addAll(rulesToAdd); - rulesToAdd.clear(); + if(!movementRulesToAdd.isEmpty()) { + movementRules.addAll(movementRulesToAdd); + movementRulesToAdd.clear(); } // Remove entities requested to be removed @@ -175,9 +177,9 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer { } // Remove rules requested to be unregistered - if (!rulesToRemove.isEmpty()) { - rules.removeAll(rulesToRemove); - rulesToRemove.clear(); + if (!movementRulesToRemove.isEmpty()) { + movementRules.removeAll(movementRulesToRemove); + movementRulesToRemove.clear(); } }