Remove rules and create movement rules
This commit is contained in:
@@ -3,7 +3,7 @@ package com.bartlomiejpluta.base.api.map.layer.object;
|
|||||||
import com.bartlomiejpluta.base.api.entity.Entity;
|
import com.bartlomiejpluta.base.api.entity.Entity;
|
||||||
import com.bartlomiejpluta.base.api.map.layer.base.Layer;
|
import com.bartlomiejpluta.base.api.map.layer.base.Layer;
|
||||||
import com.bartlomiejpluta.base.api.move.Movement;
|
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 org.joml.Vector2ic;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -17,9 +17,9 @@ public interface ObjectLayer extends Layer {
|
|||||||
|
|
||||||
List<Entity> getEntities();
|
List<Entity> getEntities();
|
||||||
|
|
||||||
void registerRule(Rule rule);
|
void registerMovementRule(MovementRule rule);
|
||||||
|
|
||||||
void unregisterRule(Rule rule);
|
void unregisterMovementRule(MovementRule rule);
|
||||||
|
|
||||||
void unregisterRules();
|
void unregisterRules();
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ package com.bartlomiejpluta.base.api.move;
|
|||||||
import org.joml.Vector2ic;
|
import org.joml.Vector2ic;
|
||||||
|
|
||||||
public interface Movement {
|
public interface Movement {
|
||||||
|
Movable getObject();
|
||||||
|
|
||||||
boolean perform();
|
boolean perform();
|
||||||
|
|
||||||
Movement another();
|
Movement another();
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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);
|
|
||||||
}
|
|
||||||
@@ -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<Entity> 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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.layer.object.PassageAbility;
|
||||||
import com.bartlomiejpluta.base.api.map.model.GameMap;
|
import com.bartlomiejpluta.base.api.map.model.GameMap;
|
||||||
import com.bartlomiejpluta.base.api.move.Movement;
|
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.api.screen.Screen;
|
||||||
import com.bartlomiejpluta.base.engine.world.map.layer.base.BaseLayer;
|
import com.bartlomiejpluta.base.engine.world.map.layer.base.BaseLayer;
|
||||||
import com.bartlomiejpluta.base.internal.render.ShaderManager;
|
import com.bartlomiejpluta.base.internal.render.ShaderManager;
|
||||||
@@ -33,12 +33,12 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
|
|||||||
|
|
||||||
private final Queue<Movement> movements = new LinkedList<>();
|
private final Queue<Movement> movements = new LinkedList<>();
|
||||||
|
|
||||||
private final List<Rule> rules = new ArrayList<>();
|
private final List<MovementRule> movementRules = new ArrayList<>();
|
||||||
|
|
||||||
private final List<Entity> entitiesToAdd = new LinkedList<>();
|
private final List<Entity> entitiesToAdd = new LinkedList<>();
|
||||||
private final List<Rule> rulesToAdd = new LinkedList<>();
|
private final List<MovementRule> movementRulesToAdd = 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<MovementRule> movementRulesToRemove = new LinkedList<>();
|
||||||
|
|
||||||
private final int rows;
|
private final int rows;
|
||||||
private final int columns;
|
private final int columns;
|
||||||
@@ -52,18 +52,18 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerRule(Rule rule) {
|
public void registerMovementRule(MovementRule rule) {
|
||||||
rulesToAdd.add(rule);
|
movementRulesToAdd.add(rule);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void unregisterRule(Rule rule) {
|
public void unregisterMovementRule(MovementRule rule) {
|
||||||
rulesToRemove.add(rule);
|
movementRulesToRemove.add(rule);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void unregisterRules() {
|
public void unregisterRules() {
|
||||||
rulesToRemove.addAll(rules);
|
movementRulesToRemove.addAll(movementRules);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -128,18 +128,20 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
|
|||||||
|
|
||||||
while (!movements.isEmpty()) {
|
while (!movements.isEmpty()) {
|
||||||
var movement = movements.poll();
|
var movement = movements.poll();
|
||||||
if (isTileReachable(movement.getTo())) {
|
var from = movement.getFrom();
|
||||||
|
var to = movement.getTo();
|
||||||
|
if (isTileReachable(to)) {
|
||||||
movement.perform();
|
movement.perform();
|
||||||
|
|
||||||
|
for(var rule : movementRules) {
|
||||||
|
if(((from.equals(rule.from())) || (to.equals(rule.to())))) {
|
||||||
|
rule.invoke(movement);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var entity : entities) {
|
for (var entity : entities) {
|
||||||
for (var rule : rules) {
|
|
||||||
if (rule.when(entity)) {
|
|
||||||
rule.then(entity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
entity.update(dt);
|
entity.update(dt);
|
||||||
|
|
||||||
if (entity instanceof NPC) {
|
if (entity instanceof NPC) {
|
||||||
@@ -159,9 +161,9 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Insert rules requested to be added
|
// Insert rules requested to be added
|
||||||
if(!rulesToAdd.isEmpty()) {
|
if(!movementRulesToAdd.isEmpty()) {
|
||||||
rules.addAll(rulesToAdd);
|
movementRules.addAll(movementRulesToAdd);
|
||||||
rulesToAdd.clear();
|
movementRulesToAdd.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove entities requested to be removed
|
// Remove entities requested to be removed
|
||||||
@@ -175,9 +177,9 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Remove rules requested to be unregistered
|
// Remove rules requested to be unregistered
|
||||||
if (!rulesToRemove.isEmpty()) {
|
if (!movementRulesToRemove.isEmpty()) {
|
||||||
rules.removeAll(rulesToRemove);
|
movementRules.removeAll(movementRulesToRemove);
|
||||||
rulesToRemove.clear();
|
movementRulesToRemove.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user