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.entity.Entity;
|
||||
import com.bartlomiejpluta.base.api.game.image.Image;
|
||||
import com.bartlomiejpluta.base.api.game.window.Window;
|
||||
|
||||
public interface Context {
|
||||
Window getWindow();
|
||||
|
||||
Camera getCamera();
|
||||
|
||||
void openMap(String mapUid);
|
||||
|
||||
Entity createEntity(String entitySetUid);
|
||||
|
||||
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.Movement;
|
||||
import com.bartlomiejpluta.base.api.game.map.layer.base.Layer;
|
||||
import com.bartlomiejpluta.base.api.game.rule.Rule;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -13,6 +14,12 @@ public interface ObjectLayer extends Layer {
|
||||
|
||||
List<Entity> getEntities();
|
||||
|
||||
void registerRule(Rule rule);
|
||||
|
||||
void unregisterRule(Rule rule);
|
||||
|
||||
void unregisterRules();
|
||||
|
||||
void setPassageAbility(int row, int column, PassageAbility passageAbility);
|
||||
|
||||
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) {
|
||||
log.info("Initializing game logic");
|
||||
renderer.init();
|
||||
context.init(camera);
|
||||
context.init(window, camera);
|
||||
|
||||
project = projectLoader.loadProject();
|
||||
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.render.Renderable;
|
||||
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.util.mesh.MeshManager;
|
||||
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;
|
||||
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.SneakyThrows;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -25,20 +23,21 @@ 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 final ClassLoader classLoader;
|
||||
|
||||
@Getter
|
||||
private Window window;
|
||||
private DefaultGameMap map;
|
||||
private MapHandler mapHandler;
|
||||
|
||||
@Getter
|
||||
private Camera camera;
|
||||
|
||||
public void init(Camera camera) {
|
||||
public void init(Window window, Camera camera) {
|
||||
this.window = window;
|
||||
this.camera = camera;
|
||||
}
|
||||
|
||||
@@ -63,11 +62,6 @@ public class RenderableContext implements Context, Updatable, Renderable {
|
||||
return imageManager.loadObject(imageUid);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Camera getCamera() {
|
||||
return camera;
|
||||
}
|
||||
|
||||
public void input(Window 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.map.layer.object.ObjectLayer;
|
||||
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.internal.render.ShaderManager;
|
||||
import lombok.Getter;
|
||||
import lombok.NonNull;
|
||||
import org.joml.Vector2f;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class DefaultObjectLayer implements ObjectLayer {
|
||||
@@ -22,6 +24,8 @@ public class DefaultObjectLayer implements ObjectLayer {
|
||||
@Getter
|
||||
private final PassageAbility[][] passageMap;
|
||||
|
||||
private final List<Rule> rules = new ArrayList<>();
|
||||
|
||||
private final int rows;
|
||||
private final int columns;
|
||||
private final Vector2f stepSize;
|
||||
@@ -34,6 +38,21 @@ public class DefaultObjectLayer implements ObjectLayer {
|
||||
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
|
||||
public void addEntity(Entity entity) {
|
||||
entity.setStepSize(stepSize.x, stepSize.y);
|
||||
@@ -84,8 +103,14 @@ public class DefaultObjectLayer implements ObjectLayer {
|
||||
|
||||
@Override
|
||||
public void update(float dt) {
|
||||
for (var object : entities) {
|
||||
object.update(dt);
|
||||
for (var entity : entities) {
|
||||
for (var rule : rules) {
|
||||
if (rule.test(entity)) {
|
||||
rule.invoke(entity);
|
||||
}
|
||||
}
|
||||
|
||||
entity.update(dt);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user