Create GameRunner API scaffolding
This commit is contained in:
@@ -0,0 +1,5 @@
|
|||||||
|
package com.bartlomiejpluta.base.api.context;
|
||||||
|
|
||||||
|
public interface Context {
|
||||||
|
void openMap(String mapUid);
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package com.bartlomiejpluta.base.api.runner;
|
||||||
|
|
||||||
|
import com.bartlomiejpluta.base.api.context.Context;
|
||||||
|
|
||||||
|
public interface GameRunner {
|
||||||
|
void init(Context context);
|
||||||
|
}
|
||||||
@@ -1,5 +1,12 @@
|
|||||||
package ${package};
|
package ${package};
|
||||||
|
|
||||||
public class ${className} {
|
import com.bartlomiejpluta.base.api.runner.GameRunner;
|
||||||
|
import com.bartlomiejpluta.base.api.context.Context;
|
||||||
|
|
||||||
|
public class ${className} implements GameRunner {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(Context context) {
|
||||||
|
throw new RuntimeException("Not implemented yet");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.bartlomiejpluta.base.game.logic;
|
package com.bartlomiejpluta.base.game.logic;
|
||||||
|
|
||||||
import com.bartlomiejpluta.base.core.error.AppException;
|
import com.bartlomiejpluta.base.api.runner.GameRunner;
|
||||||
import com.bartlomiejpluta.base.core.gl.object.texture.TextureManager;
|
import com.bartlomiejpluta.base.core.gl.object.texture.TextureManager;
|
||||||
import com.bartlomiejpluta.base.core.gl.render.Renderer;
|
import com.bartlomiejpluta.base.core.gl.render.Renderer;
|
||||||
import com.bartlomiejpluta.base.core.logic.GameLogic;
|
import com.bartlomiejpluta.base.core.logic.GameLogic;
|
||||||
@@ -11,11 +11,14 @@ import com.bartlomiejpluta.base.core.util.mesh.MeshManager;
|
|||||||
import com.bartlomiejpluta.base.core.world.camera.Camera;
|
import com.bartlomiejpluta.base.core.world.camera.Camera;
|
||||||
import com.bartlomiejpluta.base.game.image.manager.ImageManager;
|
import com.bartlomiejpluta.base.game.image.manager.ImageManager;
|
||||||
import com.bartlomiejpluta.base.game.map.manager.MapManager;
|
import com.bartlomiejpluta.base.game.map.manager.MapManager;
|
||||||
import com.bartlomiejpluta.base.game.map.model.GameMap;
|
import com.bartlomiejpluta.base.game.project.loader.ClassLoader;
|
||||||
import com.bartlomiejpluta.base.game.project.loader.ProjectLoader;
|
import com.bartlomiejpluta.base.game.project.loader.ProjectLoader;
|
||||||
|
import com.bartlomiejpluta.base.game.project.model.Project;
|
||||||
|
import com.bartlomiejpluta.base.game.project.model.RenderableContext;
|
||||||
import com.bartlomiejpluta.base.game.tileset.manager.TileSetManager;
|
import com.bartlomiejpluta.base.game.tileset.manager.TileSetManager;
|
||||||
import com.bartlomiejpluta.base.game.world.entity.manager.EntityManager;
|
import com.bartlomiejpluta.base.game.world.entity.manager.EntityManager;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.SneakyThrows;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
@@ -34,21 +37,26 @@ public class DefaultGameLogic implements GameLogic {
|
|||||||
private final FPSMonitor fpsMonitor;
|
private final FPSMonitor fpsMonitor;
|
||||||
private final MapManager mapManager;
|
private final MapManager mapManager;
|
||||||
private final ProjectLoader projectLoader;
|
private final ProjectLoader projectLoader;
|
||||||
|
private final ClassLoader classLoader;
|
||||||
|
|
||||||
|
private final RenderableContext context;
|
||||||
|
|
||||||
private final Camera camera = new Camera();
|
private final Camera camera = new Camera();
|
||||||
|
|
||||||
private GameMap map;
|
private Project project;
|
||||||
|
private GameRunner runner;
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
@Override
|
@Override
|
||||||
public void init(Window window) {
|
public void init(Window window) {
|
||||||
log.info("Initializing game logic");
|
log.info("Initializing game logic");
|
||||||
renderer.init();
|
renderer.init();
|
||||||
|
|
||||||
// Loading is not available right now, because no project is located in the resources
|
project = projectLoader.loadProject();
|
||||||
// projectLoader.loadProject();
|
var runnerClass = classLoader.<GameRunner>loadClass(project.getRunner());
|
||||||
// map = mapManager.getTheStartMapFromSomewhere() ...
|
runner = runnerClass.getConstructor().newInstance();
|
||||||
|
|
||||||
throw new AppException("TODO: Everything seems to be working fine. The game engine logic is not implemented yet though...");
|
runner.init(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -63,7 +71,7 @@ public class DefaultGameLogic implements GameLogic {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(Window window) {
|
public void render(Window window) {
|
||||||
renderer.render(window, camera, map);
|
renderer.render(window, camera, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package com.bartlomiejpluta.base.game.project.loader;
|
||||||
|
|
||||||
|
public interface ClassLoader {
|
||||||
|
<T> Class<T> loadClass(String className);
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.bartlomiejpluta.base.game.project.loader;
|
||||||
|
|
||||||
|
import com.bartlomiejpluta.base.core.error.AppException;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class DefaultClassLoader implements ClassLoader {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public <T> Class<T> loadClass(String className) {
|
||||||
|
try {
|
||||||
|
return (Class<T>) getClass().getClassLoader().loadClass(className);
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
throw new AppException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@ package com.bartlomiejpluta.base.game.project.loader;
|
|||||||
import com.bartlomiejpluta.base.game.image.manager.ImageManager;
|
import com.bartlomiejpluta.base.game.image.manager.ImageManager;
|
||||||
import com.bartlomiejpluta.base.game.map.manager.MapManager;
|
import com.bartlomiejpluta.base.game.map.manager.MapManager;
|
||||||
import com.bartlomiejpluta.base.game.project.config.ProjectConfiguration;
|
import com.bartlomiejpluta.base.game.project.config.ProjectConfiguration;
|
||||||
|
import com.bartlomiejpluta.base.game.project.model.Project;
|
||||||
import com.bartlomiejpluta.base.game.project.serial.ProjectDeserializer;
|
import com.bartlomiejpluta.base.game.project.serial.ProjectDeserializer;
|
||||||
import com.bartlomiejpluta.base.game.tileset.manager.TileSetManager;
|
import com.bartlomiejpluta.base.game.tileset.manager.TileSetManager;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@@ -19,11 +20,13 @@ public class DefaultProjectLoader implements ProjectLoader {
|
|||||||
private final ImageManager imageManager;
|
private final ImageManager imageManager;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void loadProject() {
|
public Project loadProject() {
|
||||||
var resource = DefaultProjectLoader.class.getResourceAsStream(configuration.projectFile(configuration.getMainFile()));
|
var resource = DefaultProjectLoader.class.getResourceAsStream(configuration.projectFile(configuration.getMainFile()));
|
||||||
var project = projectDeserializer.deserialize(resource);
|
var project = projectDeserializer.deserialize(resource);
|
||||||
project.getTileSetAssets().forEach(tileSetManager::registerAsset);
|
project.getTileSetAssets().forEach(tileSetManager::registerAsset);
|
||||||
project.getMapAssets().forEach(mapManager::registerAsset);
|
project.getMapAssets().forEach(mapManager::registerAsset);
|
||||||
project.getImageAssets().forEach(imageManager::registerAsset);
|
project.getImageAssets().forEach(imageManager::registerAsset);
|
||||||
|
|
||||||
|
return project;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package com.bartlomiejpluta.base.game.project.loader;
|
package com.bartlomiejpluta.base.game.project.loader;
|
||||||
|
|
||||||
|
import com.bartlomiejpluta.base.game.project.model.Project;
|
||||||
|
|
||||||
public interface ProjectLoader {
|
public interface ProjectLoader {
|
||||||
void loadProject();
|
Project loadProject();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
package com.bartlomiejpluta.base.game.project.model;
|
||||||
|
|
||||||
|
import com.bartlomiejpluta.base.api.context.Context;
|
||||||
|
import com.bartlomiejpluta.base.core.gl.object.texture.TextureManager;
|
||||||
|
import com.bartlomiejpluta.base.core.gl.render.Renderable;
|
||||||
|
import com.bartlomiejpluta.base.core.gl.shader.manager.ShaderManager;
|
||||||
|
import com.bartlomiejpluta.base.core.logic.Updatable;
|
||||||
|
import com.bartlomiejpluta.base.core.ui.Window;
|
||||||
|
import com.bartlomiejpluta.base.core.util.mesh.MeshManager;
|
||||||
|
import com.bartlomiejpluta.base.core.world.camera.Camera;
|
||||||
|
import com.bartlomiejpluta.base.game.image.manager.ImageManager;
|
||||||
|
import com.bartlomiejpluta.base.game.map.manager.MapManager;
|
||||||
|
import com.bartlomiejpluta.base.game.map.model.GameMap;
|
||||||
|
import com.bartlomiejpluta.base.game.tileset.manager.TileSetManager;
|
||||||
|
import com.bartlomiejpluta.base.game.world.entity.manager.EntityManager;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
||||||
|
public class RenderableContext implements Context, Updatable, Renderable {
|
||||||
|
private final TileSetManager tileSetManager;
|
||||||
|
private final MeshManager meshManager;
|
||||||
|
private final TextureManager textureManager;
|
||||||
|
private final EntityManager entityManager;
|
||||||
|
private final ImageManager imageManager;
|
||||||
|
private final MapManager mapManager;
|
||||||
|
|
||||||
|
private GameMap map;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void openMap(String mapUid) {
|
||||||
|
map = mapManager.loadMap(mapUid);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update(float dt) {
|
||||||
|
if (map != null) {
|
||||||
|
map.update(dt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(Window window, Camera camera, ShaderManager shaderManager) {
|
||||||
|
if (map != null) {
|
||||||
|
map.render(window, camera, shaderManager);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user