Refactor Movement
This commit is contained in:
@@ -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();
|
||||
|
||||
|
||||
@@ -27,4 +27,6 @@ public interface ObjectLayer extends Layer {
|
||||
PassageAbility[][] getPassageMap();
|
||||
|
||||
boolean isMovementPossible(Movement movement);
|
||||
|
||||
void pushMovement(Movement movement);
|
||||
}
|
||||
|
||||
@@ -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<Movement> movements = new LinkedList<>();
|
||||
|
||||
private final List<Rule> 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)) {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user