Replace custom Vector with JOML's Vector2* in :API

This commit is contained in:
2021-03-02 20:26:43 +01:00
parent 95ee0a5c62
commit ed0f9ac0c5
11 changed files with 62 additions and 80 deletions

View File

@@ -1,6 +1,6 @@
package com.bartlomiejpluta.base.api.entity;
import com.bartlomiejpluta.base.api.geo.Vector;
import org.joml.Vector2i;
public enum Direction {
UP(0, -1),
@@ -10,11 +10,13 @@ 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);
}
public Vector2i asVector() {
return new Vector2i(x, y);
}
}

View File

@@ -1,11 +1,20 @@
package com.bartlomiejpluta.base.api.entity;
import com.bartlomiejpluta.base.api.geo.Vector;
import org.joml.Vector2f;
import org.joml.Vector2i;
public interface Entity {
Vector getCoordinates();
Vector2i getCoordinates();
void setCoordinates(Vector coordinates);
void setCoordinates(Vector2i coordinates);
void setCoordinates(int x, int y);
Vector2f getPosition();
void setPosition(Vector2f position);
void setPosition(float x, float y);
Movement prepareMovement(Direction direction);

View File

@@ -1,15 +1,16 @@
package com.bartlomiejpluta.base.api.entity;
import com.bartlomiejpluta.base.api.geo.Vector;
import org.joml.Vector2i;
public interface Movement {
boolean perform();
Movement another();
Vector getFrom();
Vector2i getFrom();
Vector getTo();
Vector2i getTo();
Direction getDirection();
}

View File

@@ -1,19 +0,0 @@
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

@@ -5,18 +5,14 @@ import com.bartlomiejpluta.base.api.entity.Movement;
public interface GameMap {
void addEntity(int objectLayerIndex, Entity entity);
void removeEntity(int objectLayerIndex, Entity entity);
boolean isMovementPossible(int objectLayerIndex, Movement movement);
void setTile(int tileLayerIndex, int row, int column, int tileId);
void setTile(int tileLayerIndex, int row, int column, int tileSetRow, int tileSetColumn);
void clearTile(int tileLayerIndex, int row, int column);
void setPassageAbility(int objectLayerIndex, int row, int column, PassageAbility passageAbility);
void setTile(int tileLayerIndex, int row, int column, int tileId);
void setTile(int tileLayerIndex, int row, int column, int tileSetRow, int tileSetColumn);
void clearTile(int tileLayerIndex, int row, int column);
void setColor(int colorLayerIndex, float r, float g, float b, float alpha);
}

View File

@@ -1,12 +1,24 @@
package ${package};
import com.bartlomiejpluta.base.api.map.MapHandler;
import com.bartlomiejpluta.base.api.map.GameMap;
import com.bartlomiejpluta.base.api.context.Context;
import com.bartlomiejpluta.base.api.input.Keyboard;
public class ${className} implements MapHandler {
@Override
public void init(Context context) {
public void init(Context context, GameMap map) {
throw new RuntimeException("Not implemented yet");
}
@Override
void input(Keyboard keyboard) {
throw new RuntimeException("Not implemented yet");
}
@Override
public void update(Context context, GameMap map, float dt) {
throw new RuntimeException("Not implemented yet");
}
}

View File

@@ -27,52 +27,45 @@ public abstract class Model {
@Setter
protected float scaleY = 1.0f;
public Model setPosition(float x, float y) {
public void setPosition(float x, float y) {
position.x = x;
position.y = y;
return this;
}
public Model setPosition(Vector2f position) {
public void setPosition(Vector2f position) {
this.position.x = position.x;
this.position.y = position.y;
return this;
}
public Model movePosition(float x, float y) {
public void movePosition(float x, float y) {
position.x += x;
position.y += y;
return this;
}
public Model movePosition(Vector2f position) {
public void movePosition(Vector2f position) {
this.position.x += position.x;
this.position.y += position.y;
return this;
}
public Model moveRotation(float rotation) {
public void moveRotation(float rotation) {
this.rotation += rotation;
return this;
}
public Model setScale(float scale) {
public void setScale(float scale) {
this.scaleX = scale;
this.scaleY = scale;
return this;
}
public Model setScale(float scaleX, float scaleY) {
public void setScale(float scaleX, float scaleY) {
this.scaleX = scaleX;
this.scaleY = scaleY;
return this;
}
public Matrix4f getModelMatrix() {
return modelMatrix
.identity()
.translate(position.x, position.y, 0)
.rotateZ((float) toRadians(-rotation))
.scaleXY(scaleX, scaleY);
.identity()
.translate(position.x, position.y, 0)
.rotateZ((float) toRadians(-rotation))
.scaleXY(scaleX, scaleY);
}
}

View File

@@ -2,7 +2,6 @@ package com.bartlomiejpluta.base.game.entity.model;
import com.bartlomiejpluta.base.api.entity.Direction;
import com.bartlomiejpluta.base.api.entity.Entity;
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.util.math.MathUtil;
@@ -64,11 +63,6 @@ public class DefaultEntity extends MovableSprite implements Entity {
return false;
}
@Override
public void setCoordinates(Vector coordinates) {
setCoordinates(coordinates.x, coordinates.y);
}
@Override
public void setSpeed(float speed) {
framesToCrossOneTile = (int) (1 / MathUtil.clamp(speed, Float.MIN_VALUE, 1.0));

View File

@@ -1,13 +1,13 @@
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.api.map.PassageAbility;
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;
@@ -33,7 +33,7 @@ public class ObjectLayer implements Layer {
passageMap[row][column] = passageAbility;
}
public boolean isMovementPossible(Vector source, Vector target, Direction direction) {
public boolean isMovementPossible(Vector2i source, Vector2i target, Direction direction) {
var isTargetReachable = switch (passageMap[target.y][target.x]) {
case UP_ONLY -> direction != Direction.DOWN;
case DOWN_ONLY -> direction != Direction.UP;

View File

@@ -2,10 +2,10 @@ 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)
@@ -26,12 +26,12 @@ public class DefaultMovement implements Movement {
}
@Override
public Vector getFrom() {
public Vector2i getFrom() {
return object.getCoordinates();
}
@Override
public Vector getTo() {
return getFrom().add(direction.vector);
public Vector2i getTo() {
return direction.asVector().add(object.getCoordinates());
}
}

View File

@@ -2,12 +2,12 @@ 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;
@@ -18,6 +18,7 @@ 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;
@@ -63,27 +64,20 @@ 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) {
public void setCoordinates(int x, int y) {
coordinates.x = x;
coordinates.y = y;
setPosition((x + 0.5f) * coordinateStepSize.x, (y + 0.5f) * coordinateStepSize.y);
return this;
}
public MovableSprite setCoordinates(Vector2i coordinates) {
return setCoordinates(coordinates.x, coordinates.y);
public void setCoordinates(Vector2i coordinates) {
setCoordinates(coordinates.x, coordinates.y);
}
public MovableSprite setStepSize(float x, float y) {
public void setStepSize(float x, float y) {
coordinateStepSize.x = x;
coordinateStepSize.y = y;
setCoordinates(coordinates);
return this;
}
public MovableSprite(Mesh mesh, Material material) {