Create Moveable Object
This commit is contained in:
@@ -8,6 +8,23 @@ plugins {
|
||||
group 'com.bartlomiejpluta.base'
|
||||
version 'unspecified'
|
||||
|
||||
import org.gradle.internal.os.OperatingSystem
|
||||
|
||||
switch (OperatingSystem.current()) {
|
||||
case OperatingSystem.LINUX:
|
||||
def osArch = System.getProperty("os.arch")
|
||||
project.ext.lwjglNatives = osArch.startsWith("arm") || osArch.startsWith("aarch64")
|
||||
? "natives-linux-${osArch.contains("64") || osArch.startsWith("armv8") ? "arm64" : "arm32"}"
|
||||
: "natives-linux"
|
||||
break
|
||||
case OperatingSystem.MAC_OS:
|
||||
project.ext.lwjglNatives = "natives-macos"
|
||||
break
|
||||
case OperatingSystem.WINDOWS:
|
||||
project.ext.lwjglNatives = System.getProperty("os.arch").contains("64") ? "natives-windows" : "natives-windows-x86"
|
||||
break
|
||||
}
|
||||
|
||||
configurations {
|
||||
compileOnly {
|
||||
extendsFrom annotationProcessor
|
||||
@@ -22,6 +39,11 @@ repositories {
|
||||
dependencies {
|
||||
implementation project(":engine")
|
||||
|
||||
implementation platform("org.lwjgl:lwjgl-bom:$lwjglVersion")
|
||||
|
||||
// LWJGL
|
||||
implementation "org.lwjgl:lwjgl-glfw"
|
||||
|
||||
// Spring
|
||||
implementation 'org.springframework.boot:spring-boot-starter'
|
||||
compileOnly 'org.projectlombok:lombok'
|
||||
|
||||
5
game/src/main/java/com/bartlomiejpluta/base/game/world/Direction.java
Executable file
5
game/src/main/java/com/bartlomiejpluta/base/game/world/Direction.java
Executable file
@@ -0,0 +1,5 @@
|
||||
package com.bartlomiejpluta.base.game.world;
|
||||
|
||||
public enum Direction {
|
||||
UP, DOWN, LEFT, RIGHT
|
||||
}
|
||||
77
game/src/main/java/com/bartlomiejpluta/base/game/world/MoveableObject.java
Executable file
77
game/src/main/java/com/bartlomiejpluta/base/game/world/MoveableObject.java
Executable file
@@ -0,0 +1,77 @@
|
||||
package com.bartlomiejpluta.base.game.world;
|
||||
|
||||
import com.bartlomiejpluta.base.core.gl.object.material.Material;
|
||||
import com.bartlomiejpluta.base.core.gl.object.mesh.Mesh;
|
||||
import com.bartlomiejpluta.base.core.world.animation.AnimationableObject;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.joml.Vector2f;
|
||||
import org.joml.Vector2i;
|
||||
|
||||
@Slf4j
|
||||
@Getter
|
||||
public abstract class MoveableObject extends AnimationableObject {
|
||||
private static final Vector2i SPRITE_DIMENSION = new Vector2i(4, 4);
|
||||
|
||||
private final Vector2i coordinates = new Vector2i(0, 0);
|
||||
private Direction direction = Direction.DOWN;
|
||||
private final Vector2f coordinateStepSize;
|
||||
|
||||
public MoveableObject 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 MoveableObject setCoordinates(Vector2i coordinates) {
|
||||
return setCoordinates(coordinates.x, coordinates.y);
|
||||
}
|
||||
|
||||
public MoveableObject moveCoordinates(int x, int y) {
|
||||
coordinates.x += x;
|
||||
coordinates.y += y;
|
||||
movePosition(x * coordinateStepSize.x, y * coordinateStepSize.y);
|
||||
return this;
|
||||
}
|
||||
|
||||
public MoveableObject moveCoordinates(Vector2i coordinates) {
|
||||
return moveCoordinates(coordinates.x, coordinates.y);
|
||||
}
|
||||
|
||||
public MoveableObject setDirection(Direction direction) {
|
||||
this.direction = direction;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Vector2i getSpriteSheetDimensions() {
|
||||
return SPRITE_DIMENSION;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Vector2f[] getSpriteAnimationFramesPositions() {
|
||||
var row = switch (direction) {
|
||||
case DOWN -> 0;
|
||||
case LEFT -> 1;
|
||||
case RIGHT -> 2;
|
||||
case UP -> 3;
|
||||
};
|
||||
|
||||
return new Vector2f[]{new Vector2f(0, row), new Vector2f(1, row), new Vector2f(2, row), new Vector2f(3, row)};
|
||||
}
|
||||
|
||||
public MoveableObject(Material material, Vector2f coordinateStepSize, float scale) {
|
||||
super(buildMesh(material), material);
|
||||
this.coordinateStepSize = coordinateStepSize;
|
||||
this.setScale(scale);
|
||||
setCoordinates(0, 0);
|
||||
}
|
||||
|
||||
private static Mesh buildMesh(Material material) {
|
||||
var texture = material.getTexture();
|
||||
var spriteWidth = texture.getWidth() / (float) SPRITE_DIMENSION.x;
|
||||
var spriteHeight = texture.getHeight() / (float) SPRITE_DIMENSION.y;
|
||||
return Mesh.quad(spriteWidth, spriteHeight, spriteWidth / 2, spriteHeight);
|
||||
}
|
||||
}
|
||||
@@ -5,9 +5,4 @@ app:
|
||||
height: 480
|
||||
|
||||
core:
|
||||
targetUps: 50 # Updates per second
|
||||
|
||||
map:
|
||||
tile:
|
||||
width: 50
|
||||
height: 50
|
||||
targetUps: 50 # Updates per second
|
||||
Reference in New Issue
Block a user