Extract some interfaces from :engine to :api

This commit is contained in:
2021-03-03 13:36:14 +01:00
parent 6d5c9388f7
commit 403453efba
60 changed files with 316 additions and 161 deletions

View File

@@ -1,6 +1,6 @@
package com.bartlomiejpluta.base.api.context; package com.bartlomiejpluta.base.api.game.context;
import com.bartlomiejpluta.base.api.entity.Entity; import com.bartlomiejpluta.base.api.game.entity.Entity;
import org.joml.Vector2f; import org.joml.Vector2f;
public interface Context { public interface Context {

View File

@@ -1,4 +1,4 @@
package com.bartlomiejpluta.base.api.entity; package com.bartlomiejpluta.base.api.game.entity;
import org.joml.Vector2i; import org.joml.Vector2i;

View File

@@ -1,4 +1,4 @@
package com.bartlomiejpluta.base.api.entity; package com.bartlomiejpluta.base.api.game.entity;
import org.joml.Vector2f; import org.joml.Vector2f;
import org.joml.Vector2i; import org.joml.Vector2i;

View File

@@ -1,4 +1,4 @@
package com.bartlomiejpluta.base.api.entity; package com.bartlomiejpluta.base.api.game.entity;
import org.joml.Vector2i; import org.joml.Vector2i;

View File

@@ -1,4 +1,4 @@
package com.bartlomiejpluta.base.api.input; package com.bartlomiejpluta.base.api.game.input;
public enum Key { public enum Key {
KEY_SPACE, KEY_SPACE,

View File

@@ -1,4 +1,4 @@
package com.bartlomiejpluta.base.api.input; package com.bartlomiejpluta.base.api.game.input;
public interface Keyboard { public interface Keyboard {
boolean isKeyPressed(Key key); boolean isKeyPressed(Key key);

View File

@@ -1,7 +1,7 @@
package com.bartlomiejpluta.base.api.map; package com.bartlomiejpluta.base.api.game.map;
import com.bartlomiejpluta.base.api.entity.Entity; import com.bartlomiejpluta.base.api.game.entity.Entity;
import com.bartlomiejpluta.base.api.entity.Movement; import com.bartlomiejpluta.base.api.game.entity.Movement;
import org.joml.Vector2f; import org.joml.Vector2f;
public interface GameMap { public interface GameMap {

View File

@@ -1,7 +1,7 @@
package com.bartlomiejpluta.base.api.map; package com.bartlomiejpluta.base.api.game.map;
import com.bartlomiejpluta.base.api.context.Context; import com.bartlomiejpluta.base.api.game.context.Context;
import com.bartlomiejpluta.base.api.input.Keyboard; import com.bartlomiejpluta.base.api.game.input.Keyboard;
public interface MapHandler { public interface MapHandler {
void init(Context context, GameMap map); void init(Context context, GameMap map);

View File

@@ -1,4 +1,4 @@
package com.bartlomiejpluta.base.api.map; package com.bartlomiejpluta.base.api.game.map;
public enum PassageAbility { public enum PassageAbility {
BLOCK, BLOCK,

View File

@@ -0,0 +1,7 @@
package com.bartlomiejpluta.base.api.game.runner;
import com.bartlomiejpluta.base.api.game.context.Context;
public interface GameRunner {
void init(Context context);
}

View File

@@ -0,0 +1,12 @@
package com.bartlomiejpluta.base.api.internal.camera;
import com.bartlomiejpluta.base.api.internal.object.Placeable;
import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
import com.bartlomiejpluta.base.api.internal.window.Window;
import org.joml.Matrix4f;
public interface Camera extends Placeable {
Matrix4f computeViewModelMatrix(Matrix4f modelMatrix);
void render(Window window, ShaderManager shaderManager);
}

View File

@@ -1,4 +1,4 @@
package com.bartlomiejpluta.base.engine.gc; package com.bartlomiejpluta.base.api.internal.gc;
public interface Cleanable { public interface Cleanable {
void cleanUp(); void cleanUp();

View File

@@ -1,4 +1,4 @@
package com.bartlomiejpluta.base.engine.gc; package com.bartlomiejpluta.base.api.internal.gc;
public interface Disposable { public interface Disposable {
void dispose(); void dispose();

View File

@@ -1,4 +1,4 @@
package com.bartlomiejpluta.base.engine.logic; package com.bartlomiejpluta.base.api.internal.logic;
public interface Updatable { public interface Updatable {
void update(float dt); void update(float dt);

View File

@@ -0,0 +1,27 @@
package com.bartlomiejpluta.base.api.internal.object;
import org.joml.Matrix4f;
import org.joml.Vector2f;
public interface Placeable {
Vector2f getPosition();
void setPosition(float x, float y);
void setPosition(Vector2f position);
void movePosition(float x, float y);
void movePosition(Vector2f position);
float getRotation();
void setRotation(float rotation);
void moveRotation(float rotation);
float getScaleX();
void setScaleX(float scale);
float getScaleY();
void setScaleY(float scale);
void setScale(float scale);
void setScale(float scaleX, float scaleY);
Matrix4f getModelMatrix();
}

View File

@@ -0,0 +1,8 @@
package com.bartlomiejpluta.base.api.internal.render;
import com.bartlomiejpluta.base.api.internal.camera.Camera;
import com.bartlomiejpluta.base.api.internal.window.Window;
public interface Renderable {
void render(Window window, Camera camera, ShaderManager shaderManager);
}

View File

@@ -1,7 +1,6 @@
package com.bartlomiejpluta.base.engine.core.gl.shader.manager; package com.bartlomiejpluta.base.api.internal.render;
import com.bartlomiejpluta.base.engine.core.gl.shader.uniform.Uniform; import com.bartlomiejpluta.base.api.internal.gc.Cleanable;
import com.bartlomiejpluta.base.engine.gc.Cleanable;
import org.joml.*; import org.joml.*;
public interface ShaderManager extends Cleanable { public interface ShaderManager extends Cleanable {

View File

@@ -0,0 +1,40 @@
package com.bartlomiejpluta.base.api.internal.render;
import com.bartlomiejpluta.base.api.internal.gc.Disposable;
import org.joml.*;
public interface ShaderProgram extends Disposable {
void createUniform(String uniformName);
void createUniform(String uniformName, Uniform uniform);
void createUniforms(String uniformName, int size);
void createUniforms(String uniformName, int size, Uniform uniform);
void setUniform(String uniformName, int value);
void setUniform(String uniformName, boolean value);
void setUniform(String uniformName, float value);
void setUniform(String uniformName, Vector2f value);
void setUniform(String uniformName, Vector3f value);
void setUniform(String uniformName, Vector4f value);
void setUniform(String uniformName, Matrix3f value);
void setUniform(String uniformName, Matrix4f value);
void setUniform(String uniformName, Uniform uniform);
void setUniform(String uniformName, int index, Uniform uniform);
void setUniforms(String uniformName, Uniform[] uniforms);
void use();
void detach();
}

View File

@@ -1,6 +1,4 @@
package com.bartlomiejpluta.base.engine.core.gl.shader.uniform; package com.bartlomiejpluta.base.api.internal.render;
import com.bartlomiejpluta.base.engine.core.gl.shader.program.ShaderProgram;
public interface Uniform { public interface Uniform {
void createUniform(ShaderProgram shaderProgram, String uniformName); void createUniform(ShaderProgram shaderProgram, String uniformName);

View File

@@ -0,0 +1,25 @@
package com.bartlomiejpluta.base.api.internal.window;
import org.joml.Vector2f;
public interface Window {
void init();
int getWidth();
int getHeight();
Vector2f getSize();
boolean isResized();
void setResized(boolean resized);
boolean shouldClose();
boolean isKeyPressed(int keyCode);
void update();
void clear(float r, float g, float b, float alpha);
}

View File

@@ -1,7 +0,0 @@
package com.bartlomiejpluta.base.api.runner;
import com.bartlomiejpluta.base.api.context.Context;
public interface GameRunner {
void init(Context context);
}

View File

@@ -1,10 +1,10 @@
package com.bartlomiejpluta.base.engine.core.engine; package com.bartlomiejpluta.base.engine.core.engine;
import com.bartlomiejpluta.base.api.internal.window.Window;
import com.bartlomiejpluta.base.engine.gc.OffHeapGarbageCollector; import com.bartlomiejpluta.base.engine.gc.OffHeapGarbageCollector;
import com.bartlomiejpluta.base.engine.logic.GameLogic; import com.bartlomiejpluta.base.engine.logic.GameLogic;
import com.bartlomiejpluta.base.engine.thread.ThreadManager; import com.bartlomiejpluta.base.engine.thread.ThreadManager;
import com.bartlomiejpluta.base.engine.time.ChronoMeter; import com.bartlomiejpluta.base.engine.time.ChronoMeter;
import com.bartlomiejpluta.base.engine.ui.Window;
import com.bartlomiejpluta.base.engine.ui.WindowManager; import com.bartlomiejpluta.base.engine.ui.WindowManager;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

View File

@@ -1,11 +1,11 @@
package com.bartlomiejpluta.base.engine.core.gl.object.material; package com.bartlomiejpluta.base.engine.core.gl.object.material;
import com.bartlomiejpluta.base.api.internal.camera.Camera;
import com.bartlomiejpluta.base.api.internal.render.Renderable;
import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
import com.bartlomiejpluta.base.api.internal.window.Window;
import com.bartlomiejpluta.base.engine.core.gl.object.texture.Texture; import com.bartlomiejpluta.base.engine.core.gl.object.texture.Texture;
import com.bartlomiejpluta.base.engine.core.gl.render.Renderable;
import com.bartlomiejpluta.base.engine.core.gl.shader.constant.UniformName; import com.bartlomiejpluta.base.engine.core.gl.shader.constant.UniformName;
import com.bartlomiejpluta.base.engine.core.gl.shader.manager.ShaderManager;
import com.bartlomiejpluta.base.engine.ui.Window;
import com.bartlomiejpluta.base.engine.world.camera.Camera;
import lombok.Getter; import lombok.Getter;
import org.joml.Vector2f; import org.joml.Vector2f;
import org.joml.Vector4f; import org.joml.Vector4f;

View File

@@ -1,10 +1,10 @@
package com.bartlomiejpluta.base.engine.core.gl.object.mesh; package com.bartlomiejpluta.base.engine.core.gl.object.mesh;
import com.bartlomiejpluta.base.engine.core.gl.render.Renderable; import com.bartlomiejpluta.base.api.internal.camera.Camera;
import com.bartlomiejpluta.base.engine.core.gl.shader.manager.ShaderManager; import com.bartlomiejpluta.base.api.internal.gc.Disposable;
import com.bartlomiejpluta.base.engine.gc.Disposable; import com.bartlomiejpluta.base.api.internal.render.Renderable;
import com.bartlomiejpluta.base.engine.ui.Window; import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
import com.bartlomiejpluta.base.engine.world.camera.Camera; import com.bartlomiejpluta.base.api.internal.window.Window;
import org.lwjgl.opengl.GL15; import org.lwjgl.opengl.GL15;
import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryStack;

View File

@@ -1,7 +1,7 @@
package com.bartlomiejpluta.base.engine.core.gl.object.texture; package com.bartlomiejpluta.base.engine.core.gl.object.texture;
import com.bartlomiejpluta.base.api.internal.gc.Disposable;
import com.bartlomiejpluta.base.engine.error.AppException; import com.bartlomiejpluta.base.engine.error.AppException;
import com.bartlomiejpluta.base.engine.gc.Disposable;
import lombok.Getter; import lombok.Getter;
import org.joml.Vector2f; import org.joml.Vector2f;
import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryStack;

View File

@@ -1,6 +1,6 @@
package com.bartlomiejpluta.base.engine.core.gl.object.texture; package com.bartlomiejpluta.base.engine.core.gl.object.texture;
import com.bartlomiejpluta.base.engine.gc.Cleanable; import com.bartlomiejpluta.base.api.internal.gc.Cleanable;
public interface TextureManager extends Cleanable { public interface TextureManager extends Cleanable {
Texture loadTexture(String textureFileName); Texture loadTexture(String textureFileName);

View File

@@ -1,9 +1,10 @@
package com.bartlomiejpluta.base.engine.core.gl.render; package com.bartlomiejpluta.base.engine.core.gl.render;
import com.bartlomiejpluta.base.api.internal.camera.Camera;
import com.bartlomiejpluta.base.api.internal.render.Renderable;
import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
import com.bartlomiejpluta.base.api.internal.window.Window;
import com.bartlomiejpluta.base.engine.core.gl.shader.constant.UniformName; import com.bartlomiejpluta.base.engine.core.gl.shader.constant.UniformName;
import com.bartlomiejpluta.base.engine.core.gl.shader.manager.ShaderManager;
import com.bartlomiejpluta.base.engine.ui.Window;
import com.bartlomiejpluta.base.engine.world.camera.Camera;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

View File

@@ -1,9 +0,0 @@
package com.bartlomiejpluta.base.engine.core.gl.render;
import com.bartlomiejpluta.base.engine.core.gl.shader.manager.ShaderManager;
import com.bartlomiejpluta.base.engine.ui.Window;
import com.bartlomiejpluta.base.engine.world.camera.Camera;
public interface Renderable {
void render(Window window, Camera camera, ShaderManager shaderManager);
}

View File

@@ -1,8 +1,9 @@
package com.bartlomiejpluta.base.engine.core.gl.render; package com.bartlomiejpluta.base.engine.core.gl.render;
import com.bartlomiejpluta.base.engine.gc.Cleanable; import com.bartlomiejpluta.base.api.internal.camera.Camera;
import com.bartlomiejpluta.base.engine.ui.Window; import com.bartlomiejpluta.base.api.internal.gc.Cleanable;
import com.bartlomiejpluta.base.engine.world.camera.Camera; import com.bartlomiejpluta.base.api.internal.render.Renderable;
import com.bartlomiejpluta.base.api.internal.window.Window;
public interface Renderer extends Cleanable { public interface Renderer extends Cleanable {
void init(); void init();

View File

@@ -1,7 +1,9 @@
package com.bartlomiejpluta.base.engine.core.gl.shader.manager; package com.bartlomiejpluta.base.engine.core.gl.shader.manager;
import com.bartlomiejpluta.base.engine.core.gl.shader.program.ShaderProgram; import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
import com.bartlomiejpluta.base.engine.core.gl.shader.uniform.Uniform; import com.bartlomiejpluta.base.api.internal.render.ShaderProgram;
import com.bartlomiejpluta.base.api.internal.render.Uniform;
import com.bartlomiejpluta.base.engine.core.gl.shader.program.GLShaderProgram;
import com.bartlomiejpluta.base.engine.util.res.ResourcesManager; import com.bartlomiejpluta.base.engine.util.res.ResourcesManager;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -25,7 +27,7 @@ public class DefaultShaderManager implements ShaderManager {
log.info("Creating {} shader", programName); log.info("Creating {} shader", programName);
var vertexShaderCode = resourcesManager.loadResourceAsString(vertexShaderFilename); var vertexShaderCode = resourcesManager.loadResourceAsString(vertexShaderFilename);
var fragmentShaderCode = resourcesManager.loadResourceAsString(fragmentShaderFilename); var fragmentShaderCode = resourcesManager.loadResourceAsString(fragmentShaderFilename);
var program = ShaderProgram.compile(vertexShaderCode, fragmentShaderCode); var program = GLShaderProgram.compile(vertexShaderCode, fragmentShaderCode);
shaders.put(programName, program); shaders.put(programName, program);

View File

@@ -1,8 +1,8 @@
package com.bartlomiejpluta.base.engine.core.gl.shader.program; package com.bartlomiejpluta.base.engine.core.gl.shader.program;
import com.bartlomiejpluta.base.engine.core.gl.shader.uniform.Uniform; import com.bartlomiejpluta.base.api.internal.render.ShaderProgram;
import com.bartlomiejpluta.base.api.internal.render.Uniform;
import com.bartlomiejpluta.base.engine.error.AppException; import com.bartlomiejpluta.base.engine.error.AppException;
import com.bartlomiejpluta.base.engine.gc.Disposable;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.joml.*; import org.joml.*;
import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryStack;
@@ -14,16 +14,16 @@ import static java.lang.String.format;
import static org.lwjgl.opengl.GL20.*; import static org.lwjgl.opengl.GL20.*;
@Slf4j @Slf4j
public class ShaderProgram implements Disposable { public class GLShaderProgram implements ShaderProgram {
private final int programId; private final int programId;
private final int vertexShaderId; private final int vertexShaderId;
private final int fragmentShaderId; private final int fragmentShaderId;
private final Map<String, Integer> uniforms = new HashMap<>(); private final Map<String, Integer> uniforms = new HashMap<>();
private ShaderProgram(String vertexShaderCode, String fragmentShaderCode) { private GLShaderProgram(String vertexShaderCode, String fragmentShaderCode) {
this.programId = glCreateProgram(); this.programId = glCreateProgram();
if(this.programId == 0) { if (this.programId == 0) {
throw new AppException("Could not create shader program"); throw new AppException("Could not create shader program");
} }
@@ -35,14 +35,14 @@ public class ShaderProgram implements Disposable {
private int createShader(String shaderCode, int shaderType) { private int createShader(String shaderCode, int shaderType) {
int shaderId = glCreateShader(shaderType); int shaderId = glCreateShader(shaderType);
if(shaderId == 0) { if (shaderId == 0) {
throw new AppException("Could not create shader of type: %s", shaderType); throw new AppException("Could not create shader of type: %s", shaderType);
} }
glShaderSource(shaderId, shaderCode); glShaderSource(shaderId, shaderCode);
glCompileShader(shaderId); glCompileShader(shaderId);
if(glGetShaderi(shaderId, GL_COMPILE_STATUS) == 0) { if (glGetShaderi(shaderId, GL_COMPILE_STATUS) == 0) {
throw new AppException("Could not compile shader code: %s", glGetShaderInfoLog(shaderId, 1024)); throw new AppException("Could not compile shader code: %s", glGetShaderInfoLog(shaderId, 1024));
} }
@@ -53,109 +53,126 @@ public class ShaderProgram implements Disposable {
private void linkProgram() { private void linkProgram() {
glLinkProgram(programId); glLinkProgram(programId);
if(glGetProgrami(programId, GL_LINK_STATUS) == 0) { if (glGetProgrami(programId, GL_LINK_STATUS) == 0) {
throw new AppException("Could not link shader program: %s", glGetProgramInfoLog(programId, 1024)); throw new AppException("Could not link shader program: %s", glGetProgramInfoLog(programId, 1024));
} }
if(vertexShaderId != 0) { if (vertexShaderId != 0) {
glDetachShader(programId, vertexShaderId); glDetachShader(programId, vertexShaderId);
} }
if(fragmentShaderId != 0) { if (fragmentShaderId != 0) {
glDetachShader(programId, fragmentShaderId); glDetachShader(programId, fragmentShaderId);
} }
glValidateProgram(programId); glValidateProgram(programId);
if(glGetProgrami(programId, GL_VALIDATE_STATUS) == 0) { if (glGetProgrami(programId, GL_VALIDATE_STATUS) == 0) {
log.warn("Program validation failed: {}", glGetProgramInfoLog(programId, 1024)); log.warn("Program validation failed: {}", glGetProgramInfoLog(programId, 1024));
} }
} }
@Override
public void createUniform(String uniformName) { public void createUniform(String uniformName) {
int location = glGetUniformLocation(programId, uniformName); int location = glGetUniformLocation(programId, uniformName);
if(location < 0) { if (location < 0) {
throw new AppException("Could not find uniform: %s", uniformName); throw new AppException("Could not find uniform: %s", uniformName);
} }
uniforms.put(uniformName, location); uniforms.put(uniformName, location);
} }
@Override
public void createUniform(String uniformName, Uniform uniform) { public void createUniform(String uniformName, Uniform uniform) {
uniform.createUniform(this, uniformName); uniform.createUniform(this, uniformName);
} }
@Override
public void createUniforms(String uniformName, int size) { public void createUniforms(String uniformName, int size) {
for(int i=0; i<size; ++i) { for (int i = 0; i < size; ++i) {
createUniform(format("%s[%d]", uniformName, i)); createUniform(format("%s[%d]", uniformName, i));
} }
} }
@Override
public void createUniforms(String uniformName, int size, Uniform uniform) { public void createUniforms(String uniformName, int size, Uniform uniform) {
for(int i=0; i<size; ++i) { for (int i = 0; i < size; ++i) {
createUniform(format("%s[%d]", uniformName, i), uniform); createUniform(format("%s[%d]", uniformName, i), uniform);
} }
} }
@Override
public void setUniform(String uniformName, int value) { public void setUniform(String uniformName, int value) {
glUniform1i(uniforms.get(uniformName), value); glUniform1i(uniforms.get(uniformName), value);
} }
@Override
public void setUniform(String uniformName, boolean value) { public void setUniform(String uniformName, boolean value) {
glUniform1i(uniforms.get(uniformName), value ? 1 : 0); glUniform1i(uniforms.get(uniformName), value ? 1 : 0);
} }
@Override
public void setUniform(String uniformName, float value) { public void setUniform(String uniformName, float value) {
glUniform1f(uniforms.get(uniformName), value); glUniform1f(uniforms.get(uniformName), value);
} }
@Override
public void setUniform(String uniformName, Vector2f value) { public void setUniform(String uniformName, Vector2f value) {
glUniform2f(uniforms.get(uniformName), value.x, value.y); glUniform2f(uniforms.get(uniformName), value.x, value.y);
} }
@Override
public void setUniform(String uniformName, Vector3f value) { public void setUniform(String uniformName, Vector3f value) {
glUniform3f(uniforms.get(uniformName), value.x, value.y, value.z); glUniform3f(uniforms.get(uniformName), value.x, value.y, value.z);
} }
@Override
public void setUniform(String uniformName, Vector4f value) { public void setUniform(String uniformName, Vector4f value) {
glUniform4f(uniforms.get(uniformName), value.x, value.y, value.z, value.w); glUniform4f(uniforms.get(uniformName), value.x, value.y, value.z, value.w);
} }
@Override
public void setUniform(String uniformName, Matrix3f value) { public void setUniform(String uniformName, Matrix3f value) {
try(var stack = MemoryStack.stackPush()) { try (var stack = MemoryStack.stackPush()) {
var buffer = stack.mallocFloat(3 * 3); var buffer = stack.mallocFloat(3 * 3);
value.get(buffer); value.get(buffer);
glUniformMatrix4fv(uniforms.get(uniformName), false, buffer); glUniformMatrix4fv(uniforms.get(uniformName), false, buffer);
} }
} }
@Override
public void setUniform(String uniformName, Matrix4f value) { public void setUniform(String uniformName, Matrix4f value) {
try(var stack = MemoryStack.stackPush()) { try (var stack = MemoryStack.stackPush()) {
var buffer = stack.mallocFloat(4 * 4); var buffer = stack.mallocFloat(4 * 4);
value.get(buffer); value.get(buffer);
glUniformMatrix4fv(uniforms.get(uniformName), false, buffer); glUniformMatrix4fv(uniforms.get(uniformName), false, buffer);
} }
} }
@Override
public void setUniform(String uniformName, Uniform uniform) { public void setUniform(String uniformName, Uniform uniform) {
uniform.setUniform(this, uniformName); uniform.setUniform(this, uniformName);
} }
@Override
public void setUniform(String uniformName, int index, Uniform uniform) { public void setUniform(String uniformName, int index, Uniform uniform) {
setUniform(format("%s[%d]", uniformName, index), uniform); setUniform(format("%s[%d]", uniformName, index), uniform);
} }
@Override
public void setUniforms(String uniformName, Uniform[] uniforms) { public void setUniforms(String uniformName, Uniform[] uniforms) {
var size = uniforms != null ? uniforms.length : 0; var size = uniforms != null ? uniforms.length : 0;
for(int i=0; i<size; ++i) { for (int i = 0; i < size; ++i) {
setUniform(format("%s[%d]", uniformName, i), uniforms[i]); setUniform(format("%s[%d]", uniformName, i), uniforms[i]);
} }
} }
@Override
public void use() { public void use() {
glUseProgram(programId); glUseProgram(programId);
} }
@Override
public void detach() { public void detach() {
glUseProgram(0); glUseProgram(0);
} }
@@ -164,12 +181,12 @@ public class ShaderProgram implements Disposable {
public void dispose() { public void dispose() {
glUseProgram(0); glUseProgram(0);
if(programId != 0) { if (programId != 0) {
glDeleteProgram(programId); glDeleteProgram(programId);
} }
} }
public static ShaderProgram compile(String vertexShaderCode, String fragmentShaderCode) { public static ShaderProgram compile(String vertexShaderCode, String fragmentShaderCode) {
return new ShaderProgram(vertexShaderCode, fragmentShaderCode); return new GLShaderProgram(vertexShaderCode, fragmentShaderCode);
} }
} }

View File

@@ -1,5 +1,6 @@
package com.bartlomiejpluta.base.engine.gc; package com.bartlomiejpluta.base.engine.gc;
import com.bartlomiejpluta.base.api.internal.gc.Cleanable;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

View File

@@ -1,8 +1,8 @@
package com.bartlomiejpluta.base.engine.input; package com.bartlomiejpluta.base.engine.input;
import com.bartlomiejpluta.base.api.input.Key; import com.bartlomiejpluta.base.api.game.input.Key;
import com.bartlomiejpluta.base.api.input.Keyboard; import com.bartlomiejpluta.base.api.game.input.Keyboard;
import com.bartlomiejpluta.base.engine.ui.Window; import com.bartlomiejpluta.base.api.internal.window.Window;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import static org.lwjgl.glfw.GLFW.*; import static org.lwjgl.glfw.GLFW.*;

View File

@@ -1,17 +1,18 @@
package com.bartlomiejpluta.base.engine.logic; package com.bartlomiejpluta.base.engine.logic;
import com.bartlomiejpluta.base.api.runner.GameRunner; import com.bartlomiejpluta.base.api.game.runner.GameRunner;
import com.bartlomiejpluta.base.api.internal.camera.Camera;
import com.bartlomiejpluta.base.api.internal.window.Window;
import com.bartlomiejpluta.base.engine.core.gl.object.texture.TextureManager; import com.bartlomiejpluta.base.engine.core.gl.object.texture.TextureManager;
import com.bartlomiejpluta.base.engine.core.gl.render.Renderer; import com.bartlomiejpluta.base.engine.core.gl.render.Renderer;
import com.bartlomiejpluta.base.engine.project.loader.ClassLoader; import com.bartlomiejpluta.base.engine.project.loader.ClassLoader;
import com.bartlomiejpluta.base.engine.project.loader.ProjectLoader; import com.bartlomiejpluta.base.engine.project.loader.ProjectLoader;
import com.bartlomiejpluta.base.engine.project.model.Project; import com.bartlomiejpluta.base.engine.project.model.Project;
import com.bartlomiejpluta.base.engine.project.model.RenderableContext; import com.bartlomiejpluta.base.engine.project.model.RenderableContext;
import com.bartlomiejpluta.base.engine.ui.Window;
import com.bartlomiejpluta.base.engine.util.mesh.MeshManager; import com.bartlomiejpluta.base.engine.util.mesh.MeshManager;
import com.bartlomiejpluta.base.engine.util.profiling.fps.FPSMonitor; import com.bartlomiejpluta.base.engine.util.profiling.fps.FPSMonitor;
import com.bartlomiejpluta.base.engine.util.profiling.time.TimeProfilerService; import com.bartlomiejpluta.base.engine.util.profiling.time.TimeProfilerService;
import com.bartlomiejpluta.base.engine.world.camera.Camera; import com.bartlomiejpluta.base.engine.world.camera.DefaultCamera;
import com.bartlomiejpluta.base.engine.world.entity.manager.EntityManager; import com.bartlomiejpluta.base.engine.world.entity.manager.EntityManager;
import com.bartlomiejpluta.base.engine.world.image.manager.ImageManager; import com.bartlomiejpluta.base.engine.world.image.manager.ImageManager;
import com.bartlomiejpluta.base.engine.world.map.manager.MapManager; import com.bartlomiejpluta.base.engine.world.map.manager.MapManager;
@@ -40,7 +41,7 @@ public class DefaultGameLogic implements GameLogic {
private final RenderableContext context; private final RenderableContext context;
private final Camera camera = new Camera(); private final Camera camera = new DefaultCamera();
private Project project; private Project project;
private GameRunner runner; private GameRunner runner;

View File

@@ -1,7 +1,7 @@
package com.bartlomiejpluta.base.engine.logic; package com.bartlomiejpluta.base.engine.logic;
import com.bartlomiejpluta.base.engine.gc.Cleanable; import com.bartlomiejpluta.base.api.internal.gc.Cleanable;
import com.bartlomiejpluta.base.engine.ui.Window; import com.bartlomiejpluta.base.api.internal.window.Window;
public interface GameLogic extends Cleanable { public interface GameLogic extends Cleanable {
void init(Window window); void init(Window window);

View File

@@ -1,18 +1,18 @@
package com.bartlomiejpluta.base.engine.project.model; package com.bartlomiejpluta.base.engine.project.model;
import com.bartlomiejpluta.base.api.context.Context; import com.bartlomiejpluta.base.api.game.context.Context;
import com.bartlomiejpluta.base.api.entity.Entity; import com.bartlomiejpluta.base.api.game.entity.Entity;
import com.bartlomiejpluta.base.api.input.Keyboard; import com.bartlomiejpluta.base.api.game.input.Keyboard;
import com.bartlomiejpluta.base.api.map.MapHandler; import com.bartlomiejpluta.base.api.game.map.MapHandler;
import com.bartlomiejpluta.base.api.internal.camera.Camera;
import com.bartlomiejpluta.base.api.internal.logic.Updatable;
import com.bartlomiejpluta.base.api.internal.render.Renderable;
import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
import com.bartlomiejpluta.base.api.internal.window.Window;
import com.bartlomiejpluta.base.engine.core.gl.object.texture.TextureManager; import com.bartlomiejpluta.base.engine.core.gl.object.texture.TextureManager;
import com.bartlomiejpluta.base.engine.core.gl.render.Renderable;
import com.bartlomiejpluta.base.engine.core.gl.shader.manager.ShaderManager;
import com.bartlomiejpluta.base.engine.input.GLFWKeyboard; import com.bartlomiejpluta.base.engine.input.GLFWKeyboard;
import com.bartlomiejpluta.base.engine.logic.Updatable;
import com.bartlomiejpluta.base.engine.project.loader.ClassLoader; import com.bartlomiejpluta.base.engine.project.loader.ClassLoader;
import com.bartlomiejpluta.base.engine.ui.Window;
import com.bartlomiejpluta.base.engine.util.mesh.MeshManager; import com.bartlomiejpluta.base.engine.util.mesh.MeshManager;
import com.bartlomiejpluta.base.engine.world.camera.Camera;
import com.bartlomiejpluta.base.engine.world.entity.manager.EntityManager; import com.bartlomiejpluta.base.engine.world.entity.manager.EntityManager;
import com.bartlomiejpluta.base.engine.world.image.manager.ImageManager; import com.bartlomiejpluta.base.engine.world.image.manager.ImageManager;
import com.bartlomiejpluta.base.engine.world.map.manager.MapManager; import com.bartlomiejpluta.base.engine.world.map.manager.MapManager;

View File

@@ -1,9 +1,9 @@
package com.bartlomiejpluta.base.engine.ui; package com.bartlomiejpluta.base.engine.ui;
import com.bartlomiejpluta.base.api.internal.window.Window;
import com.bartlomiejpluta.base.engine.error.AppException; import com.bartlomiejpluta.base.engine.error.AppException;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.NonNull;
import lombok.Setter; import lombok.Setter;
import org.joml.Vector2f; import org.joml.Vector2f;
import org.lwjgl.glfw.GLFWErrorCallback; import org.lwjgl.glfw.GLFWErrorCallback;
@@ -14,10 +14,9 @@ import static org.lwjgl.glfw.GLFW.*;
import static org.lwjgl.opengl.GL11.*; import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.system.MemoryUtil.NULL; import static org.lwjgl.system.MemoryUtil.NULL;
@AllArgsConstructor(access = AccessLevel.PRIVATE) public class GLFWWindow implements Window {
public class Window {
private final String title; private final String title;
private long windowHandle; private long windowHandle = -1;
@Getter @Getter
private int width; private int width;
@@ -27,9 +26,24 @@ public class Window {
@Getter @Getter
@Setter @Setter
private boolean resized; private boolean resized = false;
private boolean initialized = false;
public GLFWWindow(@NonNull String title, int width, int height) {
this.title = title;
this.width = width;
this.height = height;
}
@Override
public void init() { public void init() {
if(initialized) {
throw new IllegalStateException("The window is already initialized");
}
initialized = true;
// Setup an error callback. The default implementation // Setup an error callback. The default implementation
// will print the error message in System.err. // will print the error message in System.err.
GLFWErrorCallback.createPrint(System.err).set(); GLFWErrorCallback.createPrint(System.err).set();
@@ -55,9 +69,9 @@ public class Window {
// Setup resize callback // Setup resize callback
glfwSetFramebufferSizeCallback(windowHandle, (window, width, height) -> { glfwSetFramebufferSizeCallback(windowHandle, (window, width, height) -> {
Window.this.width = width; GLFWWindow.this.width = width;
Window.this.height = height; GLFWWindow.this.height = height;
Window.this.resized = true; GLFWWindow.this.resized = true;
}); });
// Setup a key callback. It will be called every time a key is pressed, repeated or released. // Setup a key callback. It will be called every time a key is pressed, repeated or released.
@@ -92,28 +106,33 @@ public class Window {
glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
} }
@Override
public void update() { public void update() {
glfwSwapBuffers(windowHandle); glfwSwapBuffers(windowHandle);
glfwPollEvents(); glfwPollEvents();
} }
@Override
public boolean isKeyPressed(int keyCode) { public boolean isKeyPressed(int keyCode) {
return glfwGetKey(windowHandle, keyCode) == GLFW_PRESS; return glfwGetKey(windowHandle, keyCode) == GLFW_PRESS;
} }
@Override
public void clear(float r, float g, float b, float alpha) { public void clear(float r, float g, float b, float alpha) {
glClearColor(r, g, b, alpha); glClearColor(r, g, b, alpha);
} }
@Override
public boolean shouldClose() { public boolean shouldClose() {
return glfwWindowShouldClose(windowHandle); return glfwWindowShouldClose(windowHandle);
} }
@Override
public Vector2f getSize() { public Vector2f getSize() {
return new Vector2f(width, height); return new Vector2f(width, height);
} }
public static Window create(String title, int width, int height) { public static Window create(String title, int width, int height) {
return new Window(title, -1, width, height, false); return new GLFWWindow(title, width, height);
} }
} }

View File

@@ -1,10 +1,11 @@
package com.bartlomiejpluta.base.engine.ui; package com.bartlomiejpluta.base.engine.ui;
import com.bartlomiejpluta.base.api.internal.window.Window;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@Component @Component
public class WindowManager { public class WindowManager {
public Window createWindow(String title, int width, int height) { public Window createWindow(String title, int width, int height) {
return Window.create(title, width, height); return GLFWWindow.create(title, width, height);
} }
} }

View File

@@ -1,7 +1,7 @@
package com.bartlomiejpluta.base.engine.util.mesh; package com.bartlomiejpluta.base.engine.util.mesh;
import com.bartlomiejpluta.base.api.internal.gc.Cleanable;
import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh; import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh;
import com.bartlomiejpluta.base.engine.gc.Cleanable;
public interface MeshManager extends Cleanable { public interface MeshManager extends Cleanable {
Mesh createQuad(float width, float height, float originX, float originY); Mesh createQuad(float width, float height, float originX, float originY);

View File

@@ -1,7 +1,7 @@
package com.bartlomiejpluta.base.engine.util.profiling.fps; package com.bartlomiejpluta.base.engine.util.profiling.fps;
import com.bartlomiejpluta.base.engine.gc.Cleanable; import com.bartlomiejpluta.base.api.internal.gc.Cleanable;
import com.bartlomiejpluta.base.engine.logic.Updatable; import com.bartlomiejpluta.base.api.internal.logic.Updatable;
public interface FPSMonitor extends Updatable, Cleanable { public interface FPSMonitor extends Updatable, Cleanable {
} }

View File

@@ -1,6 +1,6 @@
package com.bartlomiejpluta.base.engine.util.profiling.time; package com.bartlomiejpluta.base.engine.util.profiling.time;
import com.bartlomiejpluta.base.engine.gc.Cleanable; import com.bartlomiejpluta.base.api.internal.gc.Cleanable;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;

View File

@@ -1,10 +1,10 @@
package com.bartlomiejpluta.base.engine.world.animation; package com.bartlomiejpluta.base.engine.world.animation;
import com.bartlomiejpluta.base.api.internal.camera.Camera;
import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
import com.bartlomiejpluta.base.api.internal.window.Window;
import com.bartlomiejpluta.base.engine.core.gl.object.material.Material; import com.bartlomiejpluta.base.engine.core.gl.object.material.Material;
import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh; import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh;
import com.bartlomiejpluta.base.engine.core.gl.shader.manager.ShaderManager;
import com.bartlomiejpluta.base.engine.ui.Window;
import com.bartlomiejpluta.base.engine.world.camera.Camera;
import com.bartlomiejpluta.base.engine.world.object.Sprite; import com.bartlomiejpluta.base.engine.world.object.Sprite;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.joml.Vector2f; import org.joml.Vector2f;

View File

@@ -1,19 +1,22 @@
package com.bartlomiejpluta.base.engine.world.camera; package com.bartlomiejpluta.base.engine.world.camera;
import com.bartlomiejpluta.base.api.internal.camera.Camera;
import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
import com.bartlomiejpluta.base.api.internal.window.Window;
import com.bartlomiejpluta.base.engine.core.gl.shader.constant.UniformName; import com.bartlomiejpluta.base.engine.core.gl.shader.constant.UniformName;
import com.bartlomiejpluta.base.engine.core.gl.shader.manager.ShaderManager;
import com.bartlomiejpluta.base.engine.ui.Window;
import com.bartlomiejpluta.base.engine.world.object.Model; import com.bartlomiejpluta.base.engine.world.object.Model;
import org.joml.Matrix4f; import org.joml.Matrix4f;
public class Camera extends Model { public class DefaultCamera extends Model implements Camera {
private final Matrix4f projectionMatrix = new Matrix4f(); private final Matrix4f projectionMatrix = new Matrix4f();
private final Matrix4f viewMatrix = new Matrix4f(); private final Matrix4f viewMatrix = new Matrix4f();
@Override
public Matrix4f computeViewModelMatrix(Matrix4f modelMatrix) { public Matrix4f computeViewModelMatrix(Matrix4f modelMatrix) {
return new Matrix4f(viewMatrix).mul(modelMatrix); return new Matrix4f(viewMatrix).mul(modelMatrix);
} }
@Override
public void render(Window window, ShaderManager shaderManager) { public void render(Window window, ShaderManager shaderManager) {
// Update matrices // Update matrices
projectionMatrix projectionMatrix

View File

@@ -1,6 +1,6 @@
package com.bartlomiejpluta.base.engine.world.entity.config; package com.bartlomiejpluta.base.engine.world.entity.config;
import com.bartlomiejpluta.base.api.entity.Direction; import com.bartlomiejpluta.base.api.game.entity.Direction;
import lombok.Data; import lombok.Data;
import org.joml.Vector2i; import org.joml.Vector2i;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;

View File

@@ -1,6 +1,6 @@
package com.bartlomiejpluta.base.engine.world.entity.manager; package com.bartlomiejpluta.base.engine.world.entity.manager;
import com.bartlomiejpluta.base.engine.gc.Cleanable; import com.bartlomiejpluta.base.api.internal.gc.Cleanable;
import com.bartlomiejpluta.base.engine.world.entity.model.DefaultEntity; import com.bartlomiejpluta.base.engine.world.entity.model.DefaultEntity;
public interface EntityManager extends Cleanable { public interface EntityManager extends Cleanable {

View File

@@ -1,7 +1,7 @@
package com.bartlomiejpluta.base.engine.world.entity.model; package com.bartlomiejpluta.base.engine.world.entity.model;
import com.bartlomiejpluta.base.api.entity.Direction; import com.bartlomiejpluta.base.api.game.entity.Direction;
import com.bartlomiejpluta.base.api.entity.Entity; import com.bartlomiejpluta.base.api.game.entity.Entity;
import com.bartlomiejpluta.base.engine.core.gl.object.material.Material; import com.bartlomiejpluta.base.engine.core.gl.object.material.Material;
import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh; import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh;
import com.bartlomiejpluta.base.engine.util.math.MathUtil; import com.bartlomiejpluta.base.engine.util.math.MathUtil;

View File

@@ -1,7 +1,7 @@
package com.bartlomiejpluta.base.engine.world.image.manager; package com.bartlomiejpluta.base.engine.world.image.manager;
import com.bartlomiejpluta.base.api.internal.gc.Cleanable;
import com.bartlomiejpluta.base.engine.common.manager.AssetManager; import com.bartlomiejpluta.base.engine.common.manager.AssetManager;
import com.bartlomiejpluta.base.engine.gc.Cleanable;
import com.bartlomiejpluta.base.engine.world.image.asset.ImageAsset; import com.bartlomiejpluta.base.engine.world.image.asset.ImageAsset;
import com.bartlomiejpluta.base.engine.world.image.model.Image; import com.bartlomiejpluta.base.engine.world.image.model.Image;

View File

@@ -1,7 +1,7 @@
package com.bartlomiejpluta.base.engine.world.map.layer.base; package com.bartlomiejpluta.base.engine.world.map.layer.base;
import com.bartlomiejpluta.base.engine.core.gl.render.Renderable; import com.bartlomiejpluta.base.api.internal.logic.Updatable;
import com.bartlomiejpluta.base.engine.logic.Updatable; import com.bartlomiejpluta.base.api.internal.render.Renderable;
public interface Layer extends Renderable, Updatable { public interface Layer extends Renderable, Updatable {

View File

@@ -1,10 +1,10 @@
package com.bartlomiejpluta.base.engine.world.map.layer.color; package com.bartlomiejpluta.base.engine.world.map.layer.color;
import com.bartlomiejpluta.base.api.internal.camera.Camera;
import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
import com.bartlomiejpluta.base.api.internal.window.Window;
import com.bartlomiejpluta.base.engine.core.gl.object.material.Material; import com.bartlomiejpluta.base.engine.core.gl.object.material.Material;
import com.bartlomiejpluta.base.engine.core.gl.shader.manager.ShaderManager;
import com.bartlomiejpluta.base.engine.ui.Window;
import com.bartlomiejpluta.base.engine.util.mesh.MeshManager; import com.bartlomiejpluta.base.engine.util.mesh.MeshManager;
import com.bartlomiejpluta.base.engine.world.camera.Camera;
import com.bartlomiejpluta.base.engine.world.map.layer.base.Layer; import com.bartlomiejpluta.base.engine.world.map.layer.base.Layer;
import com.bartlomiejpluta.base.engine.world.map.model.DefaultGameMap; import com.bartlomiejpluta.base.engine.world.map.model.DefaultGameMap;
import com.bartlomiejpluta.base.engine.world.object.Sprite; import com.bartlomiejpluta.base.engine.world.object.Sprite;

View File

@@ -1,8 +1,8 @@
package com.bartlomiejpluta.base.engine.world.map.layer.image; package com.bartlomiejpluta.base.engine.world.map.layer.image;
import com.bartlomiejpluta.base.engine.core.gl.shader.manager.ShaderManager; import com.bartlomiejpluta.base.api.internal.camera.Camera;
import com.bartlomiejpluta.base.engine.ui.Window; import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
import com.bartlomiejpluta.base.engine.world.camera.Camera; import com.bartlomiejpluta.base.api.internal.window.Window;
import com.bartlomiejpluta.base.engine.world.image.model.Image; import com.bartlomiejpluta.base.engine.world.image.model.Image;
import com.bartlomiejpluta.base.engine.world.map.layer.base.Layer; import com.bartlomiejpluta.base.engine.world.map.layer.base.Layer;
import com.bartlomiejpluta.base.engine.world.map.model.DefaultGameMap; import com.bartlomiejpluta.base.engine.world.map.model.DefaultGameMap;

View File

@@ -1,10 +1,10 @@
package com.bartlomiejpluta.base.engine.world.map.layer.object; package com.bartlomiejpluta.base.engine.world.map.layer.object;
import com.bartlomiejpluta.base.api.entity.Direction; import com.bartlomiejpluta.base.api.game.entity.Direction;
import com.bartlomiejpluta.base.api.map.PassageAbility; import com.bartlomiejpluta.base.api.game.map.PassageAbility;
import com.bartlomiejpluta.base.engine.core.gl.shader.manager.ShaderManager; import com.bartlomiejpluta.base.api.internal.camera.Camera;
import com.bartlomiejpluta.base.engine.ui.Window; import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
import com.bartlomiejpluta.base.engine.world.camera.Camera; import com.bartlomiejpluta.base.api.internal.window.Window;
import com.bartlomiejpluta.base.engine.world.map.layer.base.Layer; import com.bartlomiejpluta.base.engine.world.map.layer.base.Layer;
import com.bartlomiejpluta.base.engine.world.movement.MovableSprite; import com.bartlomiejpluta.base.engine.world.movement.MovableSprite;
import org.joml.Vector2i; import org.joml.Vector2i;

View File

@@ -1,8 +1,8 @@
package com.bartlomiejpluta.base.engine.world.map.layer.tile; package com.bartlomiejpluta.base.engine.world.map.layer.tile;
import com.bartlomiejpluta.base.engine.core.gl.shader.manager.ShaderManager; import com.bartlomiejpluta.base.api.internal.camera.Camera;
import com.bartlomiejpluta.base.engine.ui.Window; import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
import com.bartlomiejpluta.base.engine.world.camera.Camera; import com.bartlomiejpluta.base.api.internal.window.Window;
import com.bartlomiejpluta.base.engine.world.map.layer.base.Layer; import com.bartlomiejpluta.base.engine.world.map.layer.base.Layer;
import com.bartlomiejpluta.base.engine.world.tileset.model.Tile; import com.bartlomiejpluta.base.engine.world.tileset.model.Tile;

View File

@@ -1,7 +1,7 @@
package com.bartlomiejpluta.base.engine.world.map.manager; package com.bartlomiejpluta.base.engine.world.map.manager;
import com.bartlomiejpluta.base.api.internal.gc.Cleanable;
import com.bartlomiejpluta.base.engine.common.manager.AssetManager; import com.bartlomiejpluta.base.engine.common.manager.AssetManager;
import com.bartlomiejpluta.base.engine.gc.Cleanable;
import com.bartlomiejpluta.base.engine.world.map.asset.GameMapAsset; import com.bartlomiejpluta.base.engine.world.map.asset.GameMapAsset;
import com.bartlomiejpluta.base.engine.world.map.model.DefaultGameMap; import com.bartlomiejpluta.base.engine.world.map.model.DefaultGameMap;

View File

@@ -1,15 +1,15 @@
package com.bartlomiejpluta.base.engine.world.map.model; package com.bartlomiejpluta.base.engine.world.map.model;
import com.bartlomiejpluta.base.api.entity.Entity; import com.bartlomiejpluta.base.api.game.entity.Entity;
import com.bartlomiejpluta.base.api.entity.Movement; import com.bartlomiejpluta.base.api.game.entity.Movement;
import com.bartlomiejpluta.base.api.map.GameMap; import com.bartlomiejpluta.base.api.game.map.GameMap;
import com.bartlomiejpluta.base.api.map.PassageAbility; import com.bartlomiejpluta.base.api.game.map.PassageAbility;
import com.bartlomiejpluta.base.engine.core.gl.render.Renderable; import com.bartlomiejpluta.base.api.internal.camera.Camera;
import com.bartlomiejpluta.base.engine.core.gl.shader.manager.ShaderManager; import com.bartlomiejpluta.base.api.internal.logic.Updatable;
import com.bartlomiejpluta.base.engine.logic.Updatable; import com.bartlomiejpluta.base.api.internal.render.Renderable;
import com.bartlomiejpluta.base.engine.ui.Window; import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
import com.bartlomiejpluta.base.api.internal.window.Window;
import com.bartlomiejpluta.base.engine.util.mesh.MeshManager; import com.bartlomiejpluta.base.engine.util.mesh.MeshManager;
import com.bartlomiejpluta.base.engine.world.camera.Camera;
import com.bartlomiejpluta.base.engine.world.entity.model.DefaultEntity; import com.bartlomiejpluta.base.engine.world.entity.model.DefaultEntity;
import com.bartlomiejpluta.base.engine.world.image.model.Image; import com.bartlomiejpluta.base.engine.world.image.model.Image;
import com.bartlomiejpluta.base.engine.world.map.layer.base.Layer; import com.bartlomiejpluta.base.engine.world.map.layer.base.Layer;

View File

@@ -1,6 +1,6 @@
package com.bartlomiejpluta.base.engine.world.map.serial; package com.bartlomiejpluta.base.engine.world.map.serial;
import com.bartlomiejpluta.base.api.map.PassageAbility; import com.bartlomiejpluta.base.api.game.map.PassageAbility;
import com.bartlomiejpluta.base.engine.error.AppException; import com.bartlomiejpluta.base.engine.error.AppException;
import com.bartlomiejpluta.base.engine.util.mesh.MeshManager; import com.bartlomiejpluta.base.engine.util.mesh.MeshManager;
import com.bartlomiejpluta.base.engine.world.image.manager.ImageManager; import com.bartlomiejpluta.base.engine.world.image.manager.ImageManager;

View File

@@ -1,7 +1,7 @@
package com.bartlomiejpluta.base.engine.world.movement; package com.bartlomiejpluta.base.engine.world.movement;
import com.bartlomiejpluta.base.api.entity.Direction; import com.bartlomiejpluta.base.api.game.entity.Direction;
import com.bartlomiejpluta.base.api.entity.Movement; import com.bartlomiejpluta.base.api.game.entity.Movement;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.Data; import lombok.Data;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;

View File

@@ -1,10 +1,10 @@
package com.bartlomiejpluta.base.engine.world.movement; package com.bartlomiejpluta.base.engine.world.movement;
import com.bartlomiejpluta.base.api.entity.Direction; import com.bartlomiejpluta.base.api.game.entity.Direction;
import com.bartlomiejpluta.base.api.entity.Movement; import com.bartlomiejpluta.base.api.game.entity.Movement;
import com.bartlomiejpluta.base.api.internal.logic.Updatable;
import com.bartlomiejpluta.base.engine.core.gl.object.material.Material; import com.bartlomiejpluta.base.engine.core.gl.object.material.Material;
import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh; import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh;
import com.bartlomiejpluta.base.engine.logic.Updatable;
import com.bartlomiejpluta.base.engine.world.animation.AnimatedSprite; import com.bartlomiejpluta.base.engine.world.animation.AnimatedSprite;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.Getter; import lombok.Getter;

View File

@@ -1,5 +1,6 @@
package com.bartlomiejpluta.base.engine.world.object; package com.bartlomiejpluta.base.engine.world.object;
import com.bartlomiejpluta.base.api.internal.object.Placeable;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@@ -9,7 +10,7 @@ import org.joml.Vector2f;
import static java.lang.Math.toRadians; import static java.lang.Math.toRadians;
@EqualsAndHashCode @EqualsAndHashCode
public abstract class Model { public abstract class Model implements Placeable {
private final Matrix4f modelMatrix = new Matrix4f(); private final Matrix4f modelMatrix = new Matrix4f();
@Getter @Getter
@@ -27,40 +28,48 @@ public abstract class Model {
@Setter @Setter
protected float scaleY = 1.0f; protected float scaleY = 1.0f;
@Override
public void setPosition(float x, float y) { public void setPosition(float x, float y) {
position.x = x; position.x = x;
position.y = y; position.y = y;
} }
@Override
public void setPosition(Vector2f position) { public void setPosition(Vector2f position) {
this.position.x = position.x; this.position.x = position.x;
this.position.y = position.y; this.position.y = position.y;
} }
@Override
public void movePosition(float x, float y) { public void movePosition(float x, float y) {
position.x += x; position.x += x;
position.y += y; position.y += y;
} }
@Override
public void movePosition(Vector2f position) { public void movePosition(Vector2f position) {
this.position.x += position.x; this.position.x += position.x;
this.position.y += position.y; this.position.y += position.y;
} }
@Override
public void moveRotation(float rotation) { public void moveRotation(float rotation) {
this.rotation += rotation; this.rotation += rotation;
} }
@Override
public void setScale(float scale) { public void setScale(float scale) {
this.scaleX = scale; this.scaleX = scale;
this.scaleY = scale; this.scaleY = scale;
} }
@Override
public void setScale(float scaleX, float scaleY) { public void setScale(float scaleX, float scaleY) {
this.scaleX = scaleX; this.scaleX = scaleX;
this.scaleY = scaleY; this.scaleY = scaleY;
} }
@Override
public Matrix4f getModelMatrix() { public Matrix4f getModelMatrix() {
return modelMatrix return modelMatrix
.identity() .identity()

View File

@@ -1,12 +1,12 @@
package com.bartlomiejpluta.base.engine.world.object; package com.bartlomiejpluta.base.engine.world.object;
import com.bartlomiejpluta.base.api.internal.camera.Camera;
import com.bartlomiejpluta.base.api.internal.render.Renderable;
import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
import com.bartlomiejpluta.base.api.internal.window.Window;
import com.bartlomiejpluta.base.engine.core.gl.object.material.Material; import com.bartlomiejpluta.base.engine.core.gl.object.material.Material;
import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh; import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh;
import com.bartlomiejpluta.base.engine.core.gl.render.Renderable;
import com.bartlomiejpluta.base.engine.core.gl.shader.constant.UniformName; import com.bartlomiejpluta.base.engine.core.gl.shader.constant.UniformName;
import com.bartlomiejpluta.base.engine.core.gl.shader.manager.ShaderManager;
import com.bartlomiejpluta.base.engine.ui.Window;
import com.bartlomiejpluta.base.engine.world.camera.Camera;
import lombok.*; import lombok.*;
@RequiredArgsConstructor @RequiredArgsConstructor

View File

@@ -1,7 +1,7 @@
package com.bartlomiejpluta.base.engine.world.tileset.manager; package com.bartlomiejpluta.base.engine.world.tileset.manager;
import com.bartlomiejpluta.base.api.internal.gc.Cleanable;
import com.bartlomiejpluta.base.engine.common.manager.AssetManager; import com.bartlomiejpluta.base.engine.common.manager.AssetManager;
import com.bartlomiejpluta.base.engine.gc.Cleanable;
import com.bartlomiejpluta.base.engine.world.tileset.asset.TileSetAsset; import com.bartlomiejpluta.base.engine.world.tileset.asset.TileSetAsset;
import com.bartlomiejpluta.base.engine.world.tileset.model.TileSet; import com.bartlomiejpluta.base.engine.world.tileset.model.TileSet;