From 6130dc5bb4c4817316314dc9f52c6192775a78d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Tue, 2 Mar 2021 10:31:45 +0100 Subject: [PATCH] Move Movement enum to :API --- .../base/api/entity/Direction.java | 4 +++ .../base/api/entity/Movement.java | 15 +++++++++++ .../bartlomiejpluta/base/api/geo/Vector.java | 19 ++++++++++++++ .../game/map/layer/object/ObjectLayer.java | 4 +-- .../base/game/map/model/GameMap.java | 6 ++--- .../{Movement.java => DefaultMovement.java} | 25 +++++++++++-------- .../base/game/movement/MovableSprite.java | 14 +++++++---- 7 files changed, 67 insertions(+), 20 deletions(-) create mode 100644 api/src/main/java/com/bartlomiejpluta/base/api/entity/Movement.java create mode 100644 api/src/main/java/com/bartlomiejpluta/base/api/geo/Vector.java rename game/src/main/java/com/bartlomiejpluta/base/game/movement/{Movement.java => DefaultMovement.java} (62%) diff --git a/api/src/main/java/com/bartlomiejpluta/base/api/entity/Direction.java b/api/src/main/java/com/bartlomiejpluta/base/api/entity/Direction.java index 9c993ef5..27f63fad 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/api/entity/Direction.java +++ b/api/src/main/java/com/bartlomiejpluta/base/api/entity/Direction.java @@ -1,5 +1,7 @@ package com.bartlomiejpluta.base.api.entity; +import com.bartlomiejpluta.base.api.geo.Vector; + public enum Direction { UP(0, -1), DOWN(0, 1), @@ -8,9 +10,11 @@ public enum Direction { public final int x; public final int y; + public final Vector vector; Direction(int x, int y) { this.x = x; this.y = y; + this.vector = Vector.of(x, y); } } diff --git a/api/src/main/java/com/bartlomiejpluta/base/api/entity/Movement.java b/api/src/main/java/com/bartlomiejpluta/base/api/entity/Movement.java new file mode 100644 index 00000000..1661b890 --- /dev/null +++ b/api/src/main/java/com/bartlomiejpluta/base/api/entity/Movement.java @@ -0,0 +1,15 @@ +package com.bartlomiejpluta.base.api.entity; + +import com.bartlomiejpluta.base.api.geo.Vector; + +public interface Movement { + boolean perform(); + + Movement another(); + + Vector getFrom(); + + Vector getTo(); + + Direction getDirection(); +} diff --git a/api/src/main/java/com/bartlomiejpluta/base/api/geo/Vector.java b/api/src/main/java/com/bartlomiejpluta/base/api/geo/Vector.java new file mode 100644 index 00000000..e4845793 --- /dev/null +++ b/api/src/main/java/com/bartlomiejpluta/base/api/geo/Vector.java @@ -0,0 +1,19 @@ +package com.bartlomiejpluta.base.api.geo; + +public class Vector { + public final int x; + public final int y; + + public Vector(int x, int y) { + this.x = x; + this.y = y; + } + + public Vector add(Vector other) { + return new Vector(x + other.x, y + other.y); + } + + public static Vector of(int x, int y) { + return new Vector(x, y); + } +} diff --git a/game/src/main/java/com/bartlomiejpluta/base/game/map/layer/object/ObjectLayer.java b/game/src/main/java/com/bartlomiejpluta/base/game/map/layer/object/ObjectLayer.java index f5540899..045f9d30 100644 --- a/game/src/main/java/com/bartlomiejpluta/base/game/map/layer/object/ObjectLayer.java +++ b/game/src/main/java/com/bartlomiejpluta/base/game/map/layer/object/ObjectLayer.java @@ -1,12 +1,12 @@ package com.bartlomiejpluta.base.game.map.layer.object; import com.bartlomiejpluta.base.api.entity.Direction; +import com.bartlomiejpluta.base.api.geo.Vector; import com.bartlomiejpluta.base.core.gl.shader.manager.ShaderManager; import com.bartlomiejpluta.base.core.ui.Window; import com.bartlomiejpluta.base.core.world.camera.Camera; import com.bartlomiejpluta.base.game.map.layer.base.Layer; import com.bartlomiejpluta.base.game.movement.MovableSprite; -import org.joml.Vector2i; import java.util.List; @@ -32,7 +32,7 @@ public class ObjectLayer implements Layer { passageMap[row][column] = passageAbility; } - public boolean isMovementPossible(Vector2i source, Vector2i target, Direction direction) { + public boolean isMovementPossible(Vector source, Vector target, Direction direction) { var isTargetReachable = switch (passageMap[target.y][target.x]) { case UP_ONLY -> direction != Direction.DOWN; case DOWN_ONLY -> direction != Direction.UP; diff --git a/game/src/main/java/com/bartlomiejpluta/base/game/map/model/GameMap.java b/game/src/main/java/com/bartlomiejpluta/base/game/map/model/GameMap.java index a4199c1b..4e49ae86 100644 --- a/game/src/main/java/com/bartlomiejpluta/base/game/map/model/GameMap.java +++ b/game/src/main/java/com/bartlomiejpluta/base/game/map/model/GameMap.java @@ -1,5 +1,6 @@ package com.bartlomiejpluta.base.game.map.model; +import com.bartlomiejpluta.base.api.entity.Movement; import com.bartlomiejpluta.base.core.gl.render.Renderable; import com.bartlomiejpluta.base.core.gl.shader.manager.ShaderManager; import com.bartlomiejpluta.base.core.logic.Updatable; @@ -15,7 +16,6 @@ import com.bartlomiejpluta.base.game.map.layer.object.ObjectLayer; import com.bartlomiejpluta.base.game.map.layer.object.PassageAbility; import com.bartlomiejpluta.base.game.map.layer.tile.TileLayer; import com.bartlomiejpluta.base.game.movement.MovableSprite; -import com.bartlomiejpluta.base.game.movement.Movement; import com.bartlomiejpluta.base.game.tileset.model.TileSet; import lombok.Getter; import lombok.NonNull; @@ -150,14 +150,14 @@ public class GameMap implements Renderable, Updatable { } public boolean isMovementPossible(int layerIndex, Movement movement) { - var target = movement.getTargetCoordinate(); + var target = movement.getTo(); // Is trying to go beyond the map if (target.x < 0 || target.y < 0 || target.x >= columns || target.y >= rows) { return false; } - var source = movement.getSourceCoordinate(); + var source = movement.getFrom(); var direction = movement.getDirection(); return ((ObjectLayer) layers.get(layerIndex)).isMovementPossible(source, target, direction); diff --git a/game/src/main/java/com/bartlomiejpluta/base/game/movement/Movement.java b/game/src/main/java/com/bartlomiejpluta/base/game/movement/DefaultMovement.java similarity index 62% rename from game/src/main/java/com/bartlomiejpluta/base/game/movement/Movement.java rename to game/src/main/java/com/bartlomiejpluta/base/game/movement/DefaultMovement.java index 5083c337..fe32aa7c 100644 --- a/game/src/main/java/com/bartlomiejpluta/base/game/movement/Movement.java +++ b/game/src/main/java/com/bartlomiejpluta/base/game/movement/DefaultMovement.java @@ -1,32 +1,37 @@ package com.bartlomiejpluta.base.game.movement; import com.bartlomiejpluta.base.api.entity.Direction; +import com.bartlomiejpluta.base.api.entity.Movement; +import com.bartlomiejpluta.base.api.geo.Vector; import lombok.AccessLevel; import lombok.Data; import lombok.RequiredArgsConstructor; -import org.joml.Vector2i; @Data @RequiredArgsConstructor(access = AccessLevel.PACKAGE) -public class Movement { +public class DefaultMovement implements Movement { private final MovableSprite object; private final Direction direction; private boolean performed = false; + @Override public boolean perform() { performed = object.move(direction); return performed; } - public Vector2i getSourceCoordinate() { - return new Vector2i(object.getCoordinates()); - } - - public Vector2i getTargetCoordinate() { - return new Vector2i(direction.x, direction.y).add(object.getCoordinates()); - } - + @Override public Movement another() { return object.prepareMovement(direction); } + + @Override + public Vector getFrom() { + return object.getCoordinates(); + } + + @Override + public Vector getTo() { + return getFrom().add(direction.vector); + } } \ No newline at end of file diff --git a/game/src/main/java/com/bartlomiejpluta/base/game/movement/MovableSprite.java b/game/src/main/java/com/bartlomiejpluta/base/game/movement/MovableSprite.java index bab046b7..109a9d48 100644 --- a/game/src/main/java/com/bartlomiejpluta/base/game/movement/MovableSprite.java +++ b/game/src/main/java/com/bartlomiejpluta/base/game/movement/MovableSprite.java @@ -1,12 +1,13 @@ package com.bartlomiejpluta.base.game.movement; import com.bartlomiejpluta.base.api.entity.Direction; +import com.bartlomiejpluta.base.api.entity.Movement; +import com.bartlomiejpluta.base.api.geo.Vector; import com.bartlomiejpluta.base.core.gl.object.material.Material; import com.bartlomiejpluta.base.core.gl.object.mesh.Mesh; import com.bartlomiejpluta.base.core.logic.Updatable; import com.bartlomiejpluta.base.game.animation.AnimatedSprite; import lombok.EqualsAndHashCode; -import lombok.Getter; import org.joml.Vector2f; import org.joml.Vector2i; @@ -17,7 +18,6 @@ public abstract class MovableSprite extends AnimatedSprite implements Updatable private int moveTime = 0; private Vector2f movementVector; - @Getter private final Vector2i coordinates = new Vector2i(0, 0); protected int framesToCrossOneTile = 1; @@ -28,8 +28,8 @@ public abstract class MovableSprite extends AnimatedSprite implements Updatable @Override public void update(float dt) { - if(movementVector != null) { - if(moveTime > 0) { + if (movementVector != null) { + if (moveTime > 0) { --moveTime; movePosition(movementVector); } else { @@ -48,7 +48,7 @@ public abstract class MovableSprite extends AnimatedSprite implements Updatable } public Movement prepareMovement(Direction direction) { - return new Movement(this, direction); + return new DefaultMovement(this, direction); } protected boolean move(Direction direction) { @@ -63,6 +63,10 @@ public abstract class MovableSprite extends AnimatedSprite implements Updatable return true; } + public Vector getCoordinates() { + return Vector.of(coordinates.x, coordinates.y); + } + public MovableSprite setCoordinates(int x, int y) { coordinates.x = x; coordinates.y = y;