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

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.Vector2i;

View File

@@ -1,4 +1,4 @@
package com.bartlomiejpluta.base.api.entity;
package com.bartlomiejpluta.base.api.game.entity;
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 {
KEY_SPACE,

View File

@@ -1,4 +1,4 @@
package com.bartlomiejpluta.base.api.input;
package com.bartlomiejpluta.base.api.game.input;
public interface Keyboard {
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.entity.Movement;
import com.bartlomiejpluta.base.api.game.entity.Entity;
import com.bartlomiejpluta.base.api.game.entity.Movement;
import org.joml.Vector2f;
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.input.Keyboard;
import com.bartlomiejpluta.base.api.game.context.Context;
import com.bartlomiejpluta.base.api.game.input.Keyboard;
public interface MapHandler {
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 {
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 {
void cleanUp();

View File

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

View File

@@ -1,4 +1,4 @@
package com.bartlomiejpluta.base.engine.logic;
package com.bartlomiejpluta.base.api.internal.logic;
public interface Updatable {
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.engine.gc.Cleanable;
import com.bartlomiejpluta.base.api.internal.gc.Cleanable;
import org.joml.*;
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;
import com.bartlomiejpluta.base.engine.core.gl.shader.program.ShaderProgram;
package com.bartlomiejpluta.base.api.internal.render;
public interface Uniform {
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;
import com.bartlomiejpluta.base.api.internal.window.Window;
import com.bartlomiejpluta.base.engine.gc.OffHeapGarbageCollector;
import com.bartlomiejpluta.base.engine.logic.GameLogic;
import com.bartlomiejpluta.base.engine.thread.ThreadManager;
import com.bartlomiejpluta.base.engine.time.ChronoMeter;
import com.bartlomiejpluta.base.engine.ui.Window;
import com.bartlomiejpluta.base.engine.ui.WindowManager;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;

View File

@@ -1,11 +1,11 @@
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.render.Renderable;
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 org.joml.Vector2f;
import org.joml.Vector4f;

View File

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

View File

@@ -1,7 +1,7 @@
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.gc.Disposable;
import lombok.Getter;
import org.joml.Vector2f;
import org.lwjgl.system.MemoryStack;

View File

@@ -1,6 +1,6 @@
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 {
Texture loadTexture(String textureFileName);

View File

@@ -1,9 +1,10 @@
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.manager.ShaderManager;
import com.bartlomiejpluta.base.engine.ui.Window;
import com.bartlomiejpluta.base.engine.world.camera.Camera;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
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;
import com.bartlomiejpluta.base.engine.gc.Cleanable;
import com.bartlomiejpluta.base.engine.ui.Window;
import com.bartlomiejpluta.base.engine.world.camera.Camera;
import com.bartlomiejpluta.base.api.internal.camera.Camera;
import com.bartlomiejpluta.base.api.internal.gc.Cleanable;
import com.bartlomiejpluta.base.api.internal.render.Renderable;
import com.bartlomiejpluta.base.api.internal.window.Window;
public interface Renderer extends Cleanable {
void init();

View File

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

View File

@@ -1,8 +1,8 @@
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.gc.Disposable;
import lombok.extern.slf4j.Slf4j;
import org.joml.*;
import org.lwjgl.system.MemoryStack;
@@ -14,13 +14,13 @@ import static java.lang.String.format;
import static org.lwjgl.opengl.GL20.*;
@Slf4j
public class ShaderProgram implements Disposable {
public class GLShaderProgram implements ShaderProgram {
private final int programId;
private final int vertexShaderId;
private final int fragmentShaderId;
private final Map<String, Integer> uniforms = new HashMap<>();
private ShaderProgram(String vertexShaderCode, String fragmentShaderCode) {
private GLShaderProgram(String vertexShaderCode, String fragmentShaderCode) {
this.programId = glCreateProgram();
if (this.programId == 0) {
@@ -71,6 +71,7 @@ public class ShaderProgram implements Disposable {
}
}
@Override
public void createUniform(String uniformName) {
int location = glGetUniformLocation(programId, uniformName);
@@ -81,46 +82,56 @@ public class ShaderProgram implements Disposable {
uniforms.put(uniformName, location);
}
@Override
public void createUniform(String uniformName, Uniform uniform) {
uniform.createUniform(this, uniformName);
}
@Override
public void createUniforms(String uniformName, int size) {
for (int i = 0; i < size; ++i) {
createUniform(format("%s[%d]", uniformName, i));
}
}
@Override
public void createUniforms(String uniformName, int size, Uniform uniform) {
for (int i = 0; i < size; ++i) {
createUniform(format("%s[%d]", uniformName, i), uniform);
}
}
@Override
public void setUniform(String uniformName, int value) {
glUniform1i(uniforms.get(uniformName), value);
}
@Override
public void setUniform(String uniformName, boolean value) {
glUniform1i(uniforms.get(uniformName), value ? 1 : 0);
}
@Override
public void setUniform(String uniformName, float value) {
glUniform1f(uniforms.get(uniformName), value);
}
@Override
public void setUniform(String uniformName, Vector2f value) {
glUniform2f(uniforms.get(uniformName), value.x, value.y);
}
@Override
public void setUniform(String uniformName, Vector3f value) {
glUniform3f(uniforms.get(uniformName), value.x, value.y, value.z);
}
@Override
public void setUniform(String uniformName, Vector4f value) {
glUniform4f(uniforms.get(uniformName), value.x, value.y, value.z, value.w);
}
@Override
public void setUniform(String uniformName, Matrix3f value) {
try (var stack = MemoryStack.stackPush()) {
var buffer = stack.mallocFloat(3 * 3);
@@ -129,6 +140,7 @@ public class ShaderProgram implements Disposable {
}
}
@Override
public void setUniform(String uniformName, Matrix4f value) {
try (var stack = MemoryStack.stackPush()) {
var buffer = stack.mallocFloat(4 * 4);
@@ -137,14 +149,17 @@ public class ShaderProgram implements Disposable {
}
}
@Override
public void setUniform(String uniformName, Uniform uniform) {
uniform.setUniform(this, uniformName);
}
@Override
public void setUniform(String uniformName, int index, Uniform uniform) {
setUniform(format("%s[%d]", uniformName, index), uniform);
}
@Override
public void setUniforms(String uniformName, Uniform[] uniforms) {
var size = uniforms != null ? uniforms.length : 0;
for (int i = 0; i < size; ++i) {
@@ -152,10 +167,12 @@ public class ShaderProgram implements Disposable {
}
}
@Override
public void use() {
glUseProgram(programId);
}
@Override
public void detach() {
glUseProgram(0);
}
@@ -170,6 +187,6 @@ public class ShaderProgram implements Disposable {
}
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;
import com.bartlomiejpluta.base.api.internal.gc.Cleanable;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;

View File

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

View File

@@ -1,17 +1,18 @@
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.render.Renderer;
import com.bartlomiejpluta.base.engine.project.loader.ClassLoader;
import com.bartlomiejpluta.base.engine.project.loader.ProjectLoader;
import com.bartlomiejpluta.base.engine.project.model.Project;
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.profiling.fps.FPSMonitor;
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.image.manager.ImageManager;
import com.bartlomiejpluta.base.engine.world.map.manager.MapManager;
@@ -40,7 +41,7 @@ public class DefaultGameLogic implements GameLogic {
private final RenderableContext context;
private final Camera camera = new Camera();
private final Camera camera = new DefaultCamera();
private Project project;
private GameRunner runner;

View File

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

View File

@@ -1,18 +1,18 @@
package com.bartlomiejpluta.base.engine.project.model;
import com.bartlomiejpluta.base.api.context.Context;
import com.bartlomiejpluta.base.api.entity.Entity;
import com.bartlomiejpluta.base.api.input.Keyboard;
import com.bartlomiejpluta.base.api.map.MapHandler;
import com.bartlomiejpluta.base.api.game.context.Context;
import com.bartlomiejpluta.base.api.game.entity.Entity;
import com.bartlomiejpluta.base.api.game.input.Keyboard;
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.render.Renderable;
import com.bartlomiejpluta.base.engine.core.gl.shader.manager.ShaderManager;
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.ui.Window;
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.image.manager.ImageManager;
import com.bartlomiejpluta.base.engine.world.map.manager.MapManager;

View File

@@ -1,9 +1,9 @@
package com.bartlomiejpluta.base.engine.ui;
import com.bartlomiejpluta.base.api.internal.window.Window;
import com.bartlomiejpluta.base.engine.error.AppException;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NonNull;
import lombok.Setter;
import org.joml.Vector2f;
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.system.MemoryUtil.NULL;
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class Window {
public class GLFWWindow implements Window {
private final String title;
private long windowHandle;
private long windowHandle = -1;
@Getter
private int width;
@@ -27,9 +26,24 @@ public class Window {
@Getter
@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() {
if(initialized) {
throw new IllegalStateException("The window is already initialized");
}
initialized = true;
// Setup an error callback. The default implementation
// will print the error message in System.err.
GLFWErrorCallback.createPrint(System.err).set();
@@ -55,9 +69,9 @@ public class Window {
// Setup resize callback
glfwSetFramebufferSizeCallback(windowHandle, (window, width, height) -> {
Window.this.width = width;
Window.this.height = height;
Window.this.resized = true;
GLFWWindow.this.width = width;
GLFWWindow.this.height = height;
GLFWWindow.this.resized = true;
});
// 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);
}
@Override
public void update() {
glfwSwapBuffers(windowHandle);
glfwPollEvents();
}
@Override
public boolean isKeyPressed(int keyCode) {
return glfwGetKey(windowHandle, keyCode) == GLFW_PRESS;
}
@Override
public void clear(float r, float g, float b, float alpha) {
glClearColor(r, g, b, alpha);
}
@Override
public boolean shouldClose() {
return glfwWindowShouldClose(windowHandle);
}
@Override
public Vector2f getSize() {
return new Vector2f(width, 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;
import com.bartlomiejpluta.base.api.internal.window.Window;
import org.springframework.stereotype.Component;
@Component
public class WindowManager {
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;
import com.bartlomiejpluta.base.api.internal.gc.Cleanable;
import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh;
import com.bartlomiejpluta.base.engine.gc.Cleanable;
public interface MeshManager extends Cleanable {
Mesh createQuad(float width, float height, float originX, float originY);

View File

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

View File

@@ -1,6 +1,6 @@
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 org.springframework.stereotype.Component;

View File

@@ -1,10 +1,10 @@
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.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 lombok.EqualsAndHashCode;
import org.joml.Vector2f;

View File

@@ -1,19 +1,22 @@
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.manager.ShaderManager;
import com.bartlomiejpluta.base.engine.ui.Window;
import com.bartlomiejpluta.base.engine.world.object.Model;
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 viewMatrix = new Matrix4f();
@Override
public Matrix4f computeViewModelMatrix(Matrix4f modelMatrix) {
return new Matrix4f(viewMatrix).mul(modelMatrix);
}
@Override
public void render(Window window, ShaderManager shaderManager) {
// Update matrices
projectionMatrix

View File

@@ -1,6 +1,6 @@
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 org.joml.Vector2i;
import org.springframework.boot.context.properties.ConfigurationProperties;

View File

@@ -1,6 +1,6 @@
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;
public interface EntityManager extends Cleanable {

View File

@@ -1,7 +1,7 @@
package com.bartlomiejpluta.base.engine.world.entity.model;
import com.bartlomiejpluta.base.api.entity.Direction;
import com.bartlomiejpluta.base.api.entity.Entity;
import com.bartlomiejpluta.base.api.game.entity.Direction;
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.mesh.Mesh;
import com.bartlomiejpluta.base.engine.util.math.MathUtil;

View File

@@ -1,7 +1,7 @@
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.gc.Cleanable;
import com.bartlomiejpluta.base.engine.world.image.asset.ImageAsset;
import com.bartlomiejpluta.base.engine.world.image.model.Image;

View File

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

View File

@@ -1,10 +1,10 @@
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.shader.manager.ShaderManager;
import com.bartlomiejpluta.base.engine.ui.Window;
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.model.DefaultGameMap;
import com.bartlomiejpluta.base.engine.world.object.Sprite;

View File

@@ -1,8 +1,8 @@
package com.bartlomiejpluta.base.engine.world.map.layer.image;
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.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.world.image.model.Image;
import com.bartlomiejpluta.base.engine.world.map.layer.base.Layer;
import com.bartlomiejpluta.base.engine.world.map.model.DefaultGameMap;

View File

@@ -1,10 +1,10 @@
package com.bartlomiejpluta.base.engine.world.map.layer.object;
import com.bartlomiejpluta.base.api.entity.Direction;
import com.bartlomiejpluta.base.api.map.PassageAbility;
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.api.game.entity.Direction;
import com.bartlomiejpluta.base.api.game.map.PassageAbility;
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.world.map.layer.base.Layer;
import com.bartlomiejpluta.base.engine.world.movement.MovableSprite;
import org.joml.Vector2i;

View File

@@ -1,8 +1,8 @@
package com.bartlomiejpluta.base.engine.world.map.layer.tile;
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.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.world.map.layer.base.Layer;
import com.bartlomiejpluta.base.engine.world.tileset.model.Tile;

View File

@@ -1,7 +1,7 @@
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.gc.Cleanable;
import com.bartlomiejpluta.base.engine.world.map.asset.GameMapAsset;
import com.bartlomiejpluta.base.engine.world.map.model.DefaultGameMap;

View File

@@ -1,15 +1,15 @@
package com.bartlomiejpluta.base.engine.world.map.model;
import com.bartlomiejpluta.base.api.entity.Entity;
import com.bartlomiejpluta.base.api.entity.Movement;
import com.bartlomiejpluta.base.api.map.GameMap;
import com.bartlomiejpluta.base.api.map.PassageAbility;
import com.bartlomiejpluta.base.engine.core.gl.render.Renderable;
import com.bartlomiejpluta.base.engine.core.gl.shader.manager.ShaderManager;
import com.bartlomiejpluta.base.engine.logic.Updatable;
import com.bartlomiejpluta.base.engine.ui.Window;
import com.bartlomiejpluta.base.api.game.entity.Entity;
import com.bartlomiejpluta.base.api.game.entity.Movement;
import com.bartlomiejpluta.base.api.game.map.GameMap;
import com.bartlomiejpluta.base.api.game.map.PassageAbility;
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.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.image.model.Image;
import com.bartlomiejpluta.base.engine.world.map.layer.base.Layer;

View File

@@ -1,6 +1,6 @@
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.util.mesh.MeshManager;
import com.bartlomiejpluta.base.engine.world.image.manager.ImageManager;

View File

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

View File

@@ -1,10 +1,10 @@
package com.bartlomiejpluta.base.engine.world.movement;
import com.bartlomiejpluta.base.api.entity.Direction;
import com.bartlomiejpluta.base.api.entity.Movement;
import com.bartlomiejpluta.base.api.game.entity.Direction;
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.mesh.Mesh;
import com.bartlomiejpluta.base.engine.logic.Updatable;
import com.bartlomiejpluta.base.engine.world.animation.AnimatedSprite;
import lombok.EqualsAndHashCode;
import lombok.Getter;

View File

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

View File

@@ -1,12 +1,12 @@
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.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.manager.ShaderManager;
import com.bartlomiejpluta.base.engine.ui.Window;
import com.bartlomiejpluta.base.engine.world.camera.Camera;
import lombok.*;
@RequiredArgsConstructor

View File

@@ -1,7 +1,7 @@
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.gc.Cleanable;
import com.bartlomiejpluta.base.engine.world.tileset.asset.TileSetAsset;
import com.bartlomiejpluta.base.engine.world.tileset.model.TileSet;