Move Movement enum to :API

This commit is contained in:
2021-03-02 10:31:45 +01:00
parent 8b012b8584
commit 6130dc5bb4
7 changed files with 67 additions and 20 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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