Refactor Movement

This commit is contained in:
2021-03-05 19:57:03 +01:00
parent 842de3349f
commit bc604b52df
4 changed files with 24 additions and 4 deletions

View File

@@ -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();

View File

@@ -27,4 +27,6 @@ public interface ObjectLayer extends Layer {
PassageAbility[][] getPassageMap();
boolean isMovementPossible(Movement movement);
void pushMovement(Movement movement);
}

View File

@@ -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)) {

View File

@@ -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