Move Movement enum to :API
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
package com.bartlomiejpluta.base.api.entity;
|
package com.bartlomiejpluta.base.api.entity;
|
||||||
|
|
||||||
|
import com.bartlomiejpluta.base.api.geo.Vector;
|
||||||
|
|
||||||
public enum Direction {
|
public enum Direction {
|
||||||
UP(0, -1),
|
UP(0, -1),
|
||||||
DOWN(0, 1),
|
DOWN(0, 1),
|
||||||
@@ -8,9 +10,11 @@ public enum Direction {
|
|||||||
|
|
||||||
public final int x;
|
public final int x;
|
||||||
public final int y;
|
public final int y;
|
||||||
|
public final Vector vector;
|
||||||
|
|
||||||
Direction(int x, int y) {
|
Direction(int x, int y) {
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
|
this.vector = Vector.of(x, y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
package com.bartlomiejpluta.base.game.map.layer.object;
|
package com.bartlomiejpluta.base.game.map.layer.object;
|
||||||
|
|
||||||
import com.bartlomiejpluta.base.api.entity.Direction;
|
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.gl.shader.manager.ShaderManager;
|
||||||
import com.bartlomiejpluta.base.core.ui.Window;
|
import com.bartlomiejpluta.base.core.ui.Window;
|
||||||
import com.bartlomiejpluta.base.core.world.camera.Camera;
|
import com.bartlomiejpluta.base.core.world.camera.Camera;
|
||||||
import com.bartlomiejpluta.base.game.map.layer.base.Layer;
|
import com.bartlomiejpluta.base.game.map.layer.base.Layer;
|
||||||
import com.bartlomiejpluta.base.game.movement.MovableSprite;
|
import com.bartlomiejpluta.base.game.movement.MovableSprite;
|
||||||
import org.joml.Vector2i;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ public class ObjectLayer implements Layer {
|
|||||||
passageMap[row][column] = passageAbility;
|
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]) {
|
var isTargetReachable = switch (passageMap[target.y][target.x]) {
|
||||||
case UP_ONLY -> direction != Direction.DOWN;
|
case UP_ONLY -> direction != Direction.DOWN;
|
||||||
case DOWN_ONLY -> direction != Direction.UP;
|
case DOWN_ONLY -> direction != Direction.UP;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.bartlomiejpluta.base.game.map.model;
|
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.render.Renderable;
|
||||||
import com.bartlomiejpluta.base.core.gl.shader.manager.ShaderManager;
|
import com.bartlomiejpluta.base.core.gl.shader.manager.ShaderManager;
|
||||||
import com.bartlomiejpluta.base.core.logic.Updatable;
|
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.object.PassageAbility;
|
||||||
import com.bartlomiejpluta.base.game.map.layer.tile.TileLayer;
|
import com.bartlomiejpluta.base.game.map.layer.tile.TileLayer;
|
||||||
import com.bartlomiejpluta.base.game.movement.MovableSprite;
|
import com.bartlomiejpluta.base.game.movement.MovableSprite;
|
||||||
import com.bartlomiejpluta.base.game.movement.Movement;
|
|
||||||
import com.bartlomiejpluta.base.game.tileset.model.TileSet;
|
import com.bartlomiejpluta.base.game.tileset.model.TileSet;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
@@ -150,14 +150,14 @@ public class GameMap implements Renderable, Updatable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isMovementPossible(int layerIndex, Movement movement) {
|
public boolean isMovementPossible(int layerIndex, Movement movement) {
|
||||||
var target = movement.getTargetCoordinate();
|
var target = movement.getTo();
|
||||||
|
|
||||||
// Is trying to go beyond the map
|
// Is trying to go beyond the map
|
||||||
if (target.x < 0 || target.y < 0 || target.x >= columns || target.y >= rows) {
|
if (target.x < 0 || target.y < 0 || target.x >= columns || target.y >= rows) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var source = movement.getSourceCoordinate();
|
var source = movement.getFrom();
|
||||||
var direction = movement.getDirection();
|
var direction = movement.getDirection();
|
||||||
|
|
||||||
return ((ObjectLayer) layers.get(layerIndex)).isMovementPossible(source, target, direction);
|
return ((ObjectLayer) layers.get(layerIndex)).isMovementPossible(source, target, direction);
|
||||||
|
|||||||
@@ -1,32 +1,37 @@
|
|||||||
package com.bartlomiejpluta.base.game.movement;
|
package com.bartlomiejpluta.base.game.movement;
|
||||||
|
|
||||||
import com.bartlomiejpluta.base.api.entity.Direction;
|
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.AccessLevel;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.joml.Vector2i;
|
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@RequiredArgsConstructor(access = AccessLevel.PACKAGE)
|
@RequiredArgsConstructor(access = AccessLevel.PACKAGE)
|
||||||
public class Movement {
|
public class DefaultMovement implements Movement {
|
||||||
private final MovableSprite object;
|
private final MovableSprite object;
|
||||||
private final Direction direction;
|
private final Direction direction;
|
||||||
private boolean performed = false;
|
private boolean performed = false;
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean perform() {
|
public boolean perform() {
|
||||||
performed = object.move(direction);
|
performed = object.move(direction);
|
||||||
return performed;
|
return performed;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Vector2i getSourceCoordinate() {
|
@Override
|
||||||
return new Vector2i(object.getCoordinates());
|
|
||||||
}
|
|
||||||
|
|
||||||
public Vector2i getTargetCoordinate() {
|
|
||||||
return new Vector2i(direction.x, direction.y).add(object.getCoordinates());
|
|
||||||
}
|
|
||||||
|
|
||||||
public Movement another() {
|
public Movement another() {
|
||||||
return object.prepareMovement(direction);
|
return object.prepareMovement(direction);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Vector getFrom() {
|
||||||
|
return object.getCoordinates();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Vector getTo() {
|
||||||
|
return getFrom().add(direction.vector);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,12 +1,13 @@
|
|||||||
package com.bartlomiejpluta.base.game.movement;
|
package com.bartlomiejpluta.base.game.movement;
|
||||||
|
|
||||||
import com.bartlomiejpluta.base.api.entity.Direction;
|
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.material.Material;
|
||||||
import com.bartlomiejpluta.base.core.gl.object.mesh.Mesh;
|
import com.bartlomiejpluta.base.core.gl.object.mesh.Mesh;
|
||||||
import com.bartlomiejpluta.base.core.logic.Updatable;
|
import com.bartlomiejpluta.base.core.logic.Updatable;
|
||||||
import com.bartlomiejpluta.base.game.animation.AnimatedSprite;
|
import com.bartlomiejpluta.base.game.animation.AnimatedSprite;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.Getter;
|
|
||||||
import org.joml.Vector2f;
|
import org.joml.Vector2f;
|
||||||
import org.joml.Vector2i;
|
import org.joml.Vector2i;
|
||||||
|
|
||||||
@@ -17,7 +18,6 @@ public abstract class MovableSprite extends AnimatedSprite implements Updatable
|
|||||||
private int moveTime = 0;
|
private int moveTime = 0;
|
||||||
private Vector2f movementVector;
|
private Vector2f movementVector;
|
||||||
|
|
||||||
@Getter
|
|
||||||
private final Vector2i coordinates = new Vector2i(0, 0);
|
private final Vector2i coordinates = new Vector2i(0, 0);
|
||||||
|
|
||||||
protected int framesToCrossOneTile = 1;
|
protected int framesToCrossOneTile = 1;
|
||||||
@@ -28,8 +28,8 @@ public abstract class MovableSprite extends AnimatedSprite implements Updatable
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(float dt) {
|
public void update(float dt) {
|
||||||
if(movementVector != null) {
|
if (movementVector != null) {
|
||||||
if(moveTime > 0) {
|
if (moveTime > 0) {
|
||||||
--moveTime;
|
--moveTime;
|
||||||
movePosition(movementVector);
|
movePosition(movementVector);
|
||||||
} else {
|
} else {
|
||||||
@@ -48,7 +48,7 @@ public abstract class MovableSprite extends AnimatedSprite implements Updatable
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Movement prepareMovement(Direction direction) {
|
public Movement prepareMovement(Direction direction) {
|
||||||
return new Movement(this, direction);
|
return new DefaultMovement(this, direction);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean move(Direction direction) {
|
protected boolean move(Direction direction) {
|
||||||
@@ -63,6 +63,10 @@ public abstract class MovableSprite extends AnimatedSprite implements Updatable
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Vector getCoordinates() {
|
||||||
|
return Vector.of(coordinates.x, coordinates.y);
|
||||||
|
}
|
||||||
|
|
||||||
public MovableSprite setCoordinates(int x, int y) {
|
public MovableSprite setCoordinates(int x, int y) {
|
||||||
coordinates.x = x;
|
coordinates.x = x;
|
||||||
coordinates.y = y;
|
coordinates.y = y;
|
||||||
|
|||||||
Reference in New Issue
Block a user