Refactor Movement
This commit is contained in:
@@ -1,10 +1,11 @@
|
|||||||
package com.bartlomiejpluta.base.api.game.entity;
|
package com.bartlomiejpluta.base.api.game.entity;
|
||||||
|
|
||||||
|
|
||||||
|
import com.bartlomiejpluta.base.api.game.map.layer.object.ObjectLayer;
|
||||||
import org.joml.Vector2i;
|
import org.joml.Vector2i;
|
||||||
|
|
||||||
public interface Movement {
|
public interface Movement {
|
||||||
boolean perform();
|
boolean perform(ObjectLayer layer);
|
||||||
|
|
||||||
Movement another();
|
Movement another();
|
||||||
|
|
||||||
|
|||||||
@@ -27,4 +27,6 @@ public interface ObjectLayer extends Layer {
|
|||||||
PassageAbility[][] getPassageMap();
|
PassageAbility[][] getPassageMap();
|
||||||
|
|
||||||
boolean isMovementPossible(Movement movement);
|
boolean isMovementPossible(Movement movement);
|
||||||
|
|
||||||
|
void pushMovement(Movement movement);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import lombok.NonNull;
|
|||||||
import org.joml.Vector2f;
|
import org.joml.Vector2f;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class DefaultObjectLayer implements ObjectLayer {
|
public class DefaultObjectLayer implements ObjectLayer {
|
||||||
@@ -24,6 +25,8 @@ public class DefaultObjectLayer implements ObjectLayer {
|
|||||||
@Getter
|
@Getter
|
||||||
private final PassageAbility[][] passageMap;
|
private final PassageAbility[][] passageMap;
|
||||||
|
|
||||||
|
private final List<Movement> movements = new LinkedList<>();
|
||||||
|
|
||||||
private final List<Rule> rules = new ArrayList<>();
|
private final List<Rule> rules = new ArrayList<>();
|
||||||
|
|
||||||
private final int rows;
|
private final int rows;
|
||||||
@@ -108,8 +111,18 @@ public class DefaultObjectLayer implements ObjectLayer {
|
|||||||
return isTargetReachable && canMoveFromCurrentTile;
|
return isTargetReachable && canMoveFromCurrentTile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void pushMovement(Movement movement) {
|
||||||
|
movements.add(movement);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(float dt) {
|
public void update(float dt) {
|
||||||
|
for (var iterator = movements.iterator(); iterator.hasNext(); ) {
|
||||||
|
iterator.next().perform(this);
|
||||||
|
iterator.remove();
|
||||||
|
}
|
||||||
|
|
||||||
for (var entity : entities) {
|
for (var entity : entities) {
|
||||||
for (var rule : rules) {
|
for (var rule : rules) {
|
||||||
if (rule.when(entity)) {
|
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.Direction;
|
||||||
import com.bartlomiejpluta.base.api.game.entity.Movement;
|
import com.bartlomiejpluta.base.api.game.entity.Movement;
|
||||||
|
import com.bartlomiejpluta.base.api.game.map.layer.object.ObjectLayer;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@@ -15,9 +16,12 @@ public class DefaultMovement implements Movement {
|
|||||||
private boolean performed = false;
|
private boolean performed = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean perform() {
|
public boolean perform(ObjectLayer layer) {
|
||||||
performed = object.move(direction);
|
if (!layer.isMovementPossible(this)) {
|
||||||
return performed;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return object.move(direction);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user