Create Rule system scaffolding
This commit is contained in:
@@ -3,13 +3,16 @@ package com.bartlomiejpluta.base.api.game.context;
|
|||||||
import com.bartlomiejpluta.base.api.game.camera.Camera;
|
import com.bartlomiejpluta.base.api.game.camera.Camera;
|
||||||
import com.bartlomiejpluta.base.api.game.entity.Entity;
|
import com.bartlomiejpluta.base.api.game.entity.Entity;
|
||||||
import com.bartlomiejpluta.base.api.game.image.Image;
|
import com.bartlomiejpluta.base.api.game.image.Image;
|
||||||
|
import com.bartlomiejpluta.base.api.game.window.Window;
|
||||||
|
|
||||||
public interface Context {
|
public interface Context {
|
||||||
|
Window getWindow();
|
||||||
|
|
||||||
|
Camera getCamera();
|
||||||
|
|
||||||
void openMap(String mapUid);
|
void openMap(String mapUid);
|
||||||
|
|
||||||
Entity createEntity(String entitySetUid);
|
Entity createEntity(String entitySetUid);
|
||||||
|
|
||||||
Image getImage(String imageUid);
|
Image getImage(String imageUid);
|
||||||
|
|
||||||
Camera getCamera();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.bartlomiejpluta.base.api.game.map.layer.object;
|
|||||||
import com.bartlomiejpluta.base.api.game.entity.Entity;
|
import com.bartlomiejpluta.base.api.game.entity.Entity;
|
||||||
import com.bartlomiejpluta.base.api.game.entity.Movement;
|
import com.bartlomiejpluta.base.api.game.entity.Movement;
|
||||||
import com.bartlomiejpluta.base.api.game.map.layer.base.Layer;
|
import com.bartlomiejpluta.base.api.game.map.layer.base.Layer;
|
||||||
|
import com.bartlomiejpluta.base.api.game.rule.Rule;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -13,6 +14,12 @@ public interface ObjectLayer extends Layer {
|
|||||||
|
|
||||||
List<Entity> getEntities();
|
List<Entity> getEntities();
|
||||||
|
|
||||||
|
void registerRule(Rule rule);
|
||||||
|
|
||||||
|
void unregisterRule(Rule rule);
|
||||||
|
|
||||||
|
void unregisterRules();
|
||||||
|
|
||||||
void setPassageAbility(int row, int column, PassageAbility passageAbility);
|
void setPassageAbility(int row, int column, PassageAbility passageAbility);
|
||||||
|
|
||||||
PassageAbility[][] getPassageMap();
|
PassageAbility[][] getPassageMap();
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package com.bartlomiejpluta.base.api.game.rule;
|
||||||
|
|
||||||
|
import com.bartlomiejpluta.base.api.game.entity.Entity;
|
||||||
|
|
||||||
|
public interface Rule {
|
||||||
|
boolean test(Entity entity);
|
||||||
|
|
||||||
|
void invoke(Entity entity);
|
||||||
|
}
|
||||||
@@ -51,7 +51,7 @@ public class DefaultGameLogic implements GameLogic {
|
|||||||
public void init(Window window) {
|
public void init(Window window) {
|
||||||
log.info("Initializing game logic");
|
log.info("Initializing game logic");
|
||||||
renderer.init();
|
renderer.init();
|
||||||
context.init(camera);
|
context.init(window, camera);
|
||||||
|
|
||||||
project = projectLoader.loadProject();
|
project = projectLoader.loadProject();
|
||||||
var runnerClass = classLoader.<GameRunner>loadClass(project.getRunner());
|
var runnerClass = classLoader.<GameRunner>loadClass(project.getRunner());
|
||||||
|
|||||||
@@ -9,14 +9,12 @@ import com.bartlomiejpluta.base.api.game.window.Window;
|
|||||||
import com.bartlomiejpluta.base.api.internal.logic.Updatable;
|
import com.bartlomiejpluta.base.api.internal.logic.Updatable;
|
||||||
import com.bartlomiejpluta.base.api.internal.render.Renderable;
|
import com.bartlomiejpluta.base.api.internal.render.Renderable;
|
||||||
import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
|
import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
|
||||||
import com.bartlomiejpluta.base.engine.core.gl.object.texture.TextureManager;
|
|
||||||
import com.bartlomiejpluta.base.engine.project.loader.ClassLoader;
|
import com.bartlomiejpluta.base.engine.project.loader.ClassLoader;
|
||||||
import com.bartlomiejpluta.base.engine.util.mesh.MeshManager;
|
|
||||||
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;
|
||||||
import com.bartlomiejpluta.base.engine.world.map.model.DefaultGameMap;
|
import com.bartlomiejpluta.base.engine.world.map.model.DefaultGameMap;
|
||||||
import com.bartlomiejpluta.base.engine.world.tileset.manager.TileSetManager;
|
import lombok.Getter;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -25,20 +23,21 @@ import org.springframework.stereotype.Component;
|
|||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
||||||
public class RenderableContext implements Context, Updatable, Renderable {
|
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 EntityManager entityManager;
|
||||||
private final ImageManager imageManager;
|
private final ImageManager imageManager;
|
||||||
private final MapManager mapManager;
|
private final MapManager mapManager;
|
||||||
private final ClassLoader classLoader;
|
private final ClassLoader classLoader;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private Window window;
|
||||||
private DefaultGameMap map;
|
private DefaultGameMap map;
|
||||||
private MapHandler mapHandler;
|
private MapHandler mapHandler;
|
||||||
|
|
||||||
|
@Getter
|
||||||
private Camera camera;
|
private Camera camera;
|
||||||
|
|
||||||
public void init(Camera camera) {
|
public void init(Window window, Camera camera) {
|
||||||
|
this.window = window;
|
||||||
this.camera = camera;
|
this.camera = camera;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,11 +62,6 @@ public class RenderableContext implements Context, Updatable, Renderable {
|
|||||||
return imageManager.loadObject(imageUid);
|
return imageManager.loadObject(imageUid);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Camera getCamera() {
|
|
||||||
return camera;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void input(Window window) {
|
public void input(Window window) {
|
||||||
mapHandler.input(window);
|
mapHandler.input(window);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,12 +6,14 @@ import com.bartlomiejpluta.base.api.game.entity.Entity;
|
|||||||
import com.bartlomiejpluta.base.api.game.entity.Movement;
|
import com.bartlomiejpluta.base.api.game.entity.Movement;
|
||||||
import com.bartlomiejpluta.base.api.game.map.layer.object.ObjectLayer;
|
import com.bartlomiejpluta.base.api.game.map.layer.object.ObjectLayer;
|
||||||
import com.bartlomiejpluta.base.api.game.map.layer.object.PassageAbility;
|
import com.bartlomiejpluta.base.api.game.map.layer.object.PassageAbility;
|
||||||
|
import com.bartlomiejpluta.base.api.game.rule.Rule;
|
||||||
import com.bartlomiejpluta.base.api.game.window.Window;
|
import com.bartlomiejpluta.base.api.game.window.Window;
|
||||||
import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
|
import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
import org.joml.Vector2f;
|
import org.joml.Vector2f;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class DefaultObjectLayer implements ObjectLayer {
|
public class DefaultObjectLayer implements ObjectLayer {
|
||||||
@@ -22,6 +24,8 @@ public class DefaultObjectLayer implements ObjectLayer {
|
|||||||
@Getter
|
@Getter
|
||||||
private final PassageAbility[][] passageMap;
|
private final PassageAbility[][] passageMap;
|
||||||
|
|
||||||
|
private final List<Rule> rules = new ArrayList<>();
|
||||||
|
|
||||||
private final int rows;
|
private final int rows;
|
||||||
private final int columns;
|
private final int columns;
|
||||||
private final Vector2f stepSize;
|
private final Vector2f stepSize;
|
||||||
@@ -34,6 +38,21 @@ public class DefaultObjectLayer implements ObjectLayer {
|
|||||||
this.passageMap = passageMap;
|
this.passageMap = passageMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerRule(Rule rule) {
|
||||||
|
rules.add(rule);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void unregisterRule(Rule rule) {
|
||||||
|
rules.remove(rule);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void unregisterRules() {
|
||||||
|
rules.clear();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addEntity(Entity entity) {
|
public void addEntity(Entity entity) {
|
||||||
entity.setStepSize(stepSize.x, stepSize.y);
|
entity.setStepSize(stepSize.x, stepSize.y);
|
||||||
@@ -84,8 +103,14 @@ public class DefaultObjectLayer implements ObjectLayer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(float dt) {
|
public void update(float dt) {
|
||||||
for (var object : entities) {
|
for (var entity : entities) {
|
||||||
object.update(dt);
|
for (var rule : rules) {
|
||||||
|
if (rule.test(entity)) {
|
||||||
|
rule.invoke(entity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
entity.update(dt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user