Create Rule system scaffolding

This commit is contained in:
2021-03-04 20:08:43 +01:00
parent b80c5c4687
commit b8d2fdda53
6 changed files with 55 additions and 17 deletions

View File

@@ -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();
}

View File

@@ -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();

View File

@@ -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);
}

View File

@@ -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());

View File

@@ -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);
}

View File

@@ -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);
}
}