From 8e2c63aac7a9f9dc1fb4c5939c73e4356b9349dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Mon, 1 Feb 2021 13:19:54 +0100 Subject: [PATCH] Introduce pushToScene() and removeFromScene() Entity's methods --- .../world/animation/AnimationableObject.java | 2 ++ .../base/core/world/camera/Camera.java | 4 +-- .../core/world/movement/MovableObject.java | 3 +- .../{Object.java => PositionableObject.java} | 14 +++++---- .../core/world/object/RenderableObject.java | 4 ++- .../base/core/world/scene/Scene.java | 7 +++++ .../entity/manager/DefaultEntityManager.java | 8 ++--- .../world/entity/manager/EntityManager.java | 3 +- .../base/game/world/entity/model/Entity.java | 30 +++++++++++++++++-- 9 files changed, 57 insertions(+), 18 deletions(-) rename engine/src/main/java/com/bartlomiejpluta/base/core/world/object/{Object.java => PositionableObject.java} (69%) diff --git a/engine/src/main/java/com/bartlomiejpluta/base/core/world/animation/AnimationableObject.java b/engine/src/main/java/com/bartlomiejpluta/base/core/world/animation/AnimationableObject.java index e5be2feb..af3cdd78 100755 --- a/engine/src/main/java/com/bartlomiejpluta/base/core/world/animation/AnimationableObject.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/core/world/animation/AnimationableObject.java @@ -3,9 +3,11 @@ package com.bartlomiejpluta.base.core.world.animation; import com.bartlomiejpluta.base.core.gl.object.material.Material; import com.bartlomiejpluta.base.core.gl.object.mesh.Mesh; import com.bartlomiejpluta.base.core.world.object.RenderableObject; +import lombok.EqualsAndHashCode; import org.joml.Vector2f; import org.joml.Vector2i; +@EqualsAndHashCode(callSuper = true) public abstract class AnimationableObject extends RenderableObject { protected final Vector2i spriteSheetDimension; diff --git a/engine/src/main/java/com/bartlomiejpluta/base/core/world/camera/Camera.java b/engine/src/main/java/com/bartlomiejpluta/base/core/world/camera/Camera.java index 9923dcb0..11ea4dd1 100755 --- a/engine/src/main/java/com/bartlomiejpluta/base/core/world/camera/Camera.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/core/world/camera/Camera.java @@ -1,10 +1,10 @@ package com.bartlomiejpluta.base.core.world.camera; import com.bartlomiejpluta.base.core.ui.Window; -import com.bartlomiejpluta.base.core.world.object.Object; +import com.bartlomiejpluta.base.core.world.object.PositionableObject; import org.joml.Matrix4f; -public class Camera extends Object { +public class Camera extends PositionableObject { private final Matrix4f projectionMatrix = new Matrix4f(); private final Matrix4f viewMatrix = new Matrix4f(); diff --git a/engine/src/main/java/com/bartlomiejpluta/base/core/world/movement/MovableObject.java b/engine/src/main/java/com/bartlomiejpluta/base/core/world/movement/MovableObject.java index 41fc8824..63688baa 100755 --- a/engine/src/main/java/com/bartlomiejpluta/base/core/world/movement/MovableObject.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/core/world/movement/MovableObject.java @@ -4,11 +4,12 @@ import com.bartlomiejpluta.base.core.gl.object.material.Material; import com.bartlomiejpluta.base.core.gl.object.mesh.Mesh; import com.bartlomiejpluta.base.core.logic.Updatable; import com.bartlomiejpluta.base.core.world.animation.AnimationableObject; +import lombok.EqualsAndHashCode; import lombok.Getter; import org.joml.Vector2f; import org.joml.Vector2i; - +@EqualsAndHashCode(callSuper = true) public abstract class MovableObject extends AnimationableObject implements Updatable { private final Vector2f coordinateStepSize; diff --git a/engine/src/main/java/com/bartlomiejpluta/base/core/world/object/Object.java b/engine/src/main/java/com/bartlomiejpluta/base/core/world/object/PositionableObject.java similarity index 69% rename from engine/src/main/java/com/bartlomiejpluta/base/core/world/object/Object.java rename to engine/src/main/java/com/bartlomiejpluta/base/core/world/object/PositionableObject.java index 90dbc415..7bfb5f7c 100755 --- a/engine/src/main/java/com/bartlomiejpluta/base/core/world/object/Object.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/core/world/object/PositionableObject.java @@ -1,5 +1,6 @@ package com.bartlomiejpluta.base.core.world.object; +import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; import org.joml.Matrix4f; @@ -7,7 +8,8 @@ import org.joml.Vector2f; import static java.lang.Math.toRadians; -public abstract class Object { +@EqualsAndHashCode +public abstract class PositionableObject { private final Matrix4f modelMatrix = new Matrix4f(); @Getter @@ -21,31 +23,31 @@ public abstract class Object { @Setter protected float scale = 1.0f; - public Object setPosition(float x, float y) { + public PositionableObject setPosition(float x, float y) { position.x = x; position.y = y; return this; } - public Object setPosition(Vector2f position) { + public PositionableObject setPosition(Vector2f position) { this.position.x = position.x; this.position.y = position.y; return this; } - public Object movePosition(float x, float y) { + public PositionableObject movePosition(float x, float y) { position.x += x; position.y += y; return this; } - public Object movePosition(Vector2f position) { + public PositionableObject movePosition(Vector2f position) { this.position.x += position.x; this.position.y += position.y; return this; } - public Object moveRotation(float rotation) { + public PositionableObject moveRotation(float rotation) { this.rotation += rotation; return this; } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/core/world/object/RenderableObject.java b/engine/src/main/java/com/bartlomiejpluta/base/core/world/object/RenderableObject.java index cd2b19b3..48a86188 100755 --- a/engine/src/main/java/com/bartlomiejpluta/base/core/world/object/RenderableObject.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/core/world/object/RenderableObject.java @@ -5,6 +5,7 @@ import com.bartlomiejpluta.base.core.gl.object.mesh.Mesh; import com.bartlomiejpluta.base.core.gl.render.Renderable; import com.bartlomiejpluta.base.core.gl.shader.manager.ShaderManager; import com.bartlomiejpluta.base.core.ui.Window; +import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; @@ -12,7 +13,8 @@ import org.joml.Vector2f; import org.joml.Vector4f; @RequiredArgsConstructor -public abstract class RenderableObject extends Object implements Renderable { +@EqualsAndHashCode(callSuper = true) +public abstract class RenderableObject extends PositionableObject implements Renderable { private final Mesh mesh; @Getter diff --git a/engine/src/main/java/com/bartlomiejpluta/base/core/world/scene/Scene.java b/engine/src/main/java/com/bartlomiejpluta/base/core/world/scene/Scene.java index 3c2096e6..0baaf552 100755 --- a/engine/src/main/java/com/bartlomiejpluta/base/core/world/scene/Scene.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/core/world/scene/Scene.java @@ -10,6 +10,7 @@ import com.bartlomiejpluta.base.core.world.camera.Camera; import com.bartlomiejpluta.base.core.world.map.GameMap; import com.bartlomiejpluta.base.core.world.object.RenderableObject; import lombok.AllArgsConstructor; +import lombok.Getter; import lombok.Setter; import java.util.ArrayList; @@ -22,6 +23,7 @@ public class Scene implements Renderable { private final List objects = new ArrayList<>(); @Setter + @Getter private GameMap map; public Scene addObject(AnimationableObject object) { @@ -29,6 +31,11 @@ public class Scene implements Renderable { return this; } + public Scene removeObject(AnimationableObject object) { + objects.remove(object); + return this; + } + @Override public void render(Window window, ShaderManager shaderManager) { shaderManager.setUniform(UniformName.UNI_PROJECTION_MATRIX, camera.getProjectionMatrix(window)); diff --git a/game/src/main/java/com/bartlomiejpluta/base/game/world/entity/manager/DefaultEntityManager.java b/game/src/main/java/com/bartlomiejpluta/base/game/world/entity/manager/DefaultEntityManager.java index 010cb9da..805c2b90 100755 --- a/game/src/main/java/com/bartlomiejpluta/base/game/world/entity/manager/DefaultEntityManager.java +++ b/game/src/main/java/com/bartlomiejpluta/base/game/world/entity/manager/DefaultEntityManager.java @@ -3,11 +3,11 @@ package com.bartlomiejpluta.base.game.world.entity.manager; import com.bartlomiejpluta.base.core.gl.object.material.Material; import com.bartlomiejpluta.base.core.gl.object.mesh.Mesh; import com.bartlomiejpluta.base.core.util.mesh.MeshManager; -import com.bartlomiejpluta.base.game.world.entity.model.Entity; +import com.bartlomiejpluta.base.core.world.scene.Scene; import com.bartlomiejpluta.base.game.world.entity.config.EntitySpriteConfiguration; +import com.bartlomiejpluta.base.game.world.entity.model.Entity; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.joml.Vector2f; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -19,8 +19,8 @@ public class DefaultEntityManager implements EntityManager { private final EntitySpriteConfiguration configuration; @Override - public Entity createEntity(Material material, Vector2f coordinateStepSize) { - return new Entity(buildMesh(material), material, coordinateStepSize, configuration); + public Entity createEntity(Material material, Scene scene) { + return new Entity(scene, buildMesh(material), material, scene.getMap().getStepSize(), configuration); } private Mesh buildMesh(Material material) { diff --git a/game/src/main/java/com/bartlomiejpluta/base/game/world/entity/manager/EntityManager.java b/game/src/main/java/com/bartlomiejpluta/base/game/world/entity/manager/EntityManager.java index 2f5a0415..5f5f9d4d 100755 --- a/game/src/main/java/com/bartlomiejpluta/base/game/world/entity/manager/EntityManager.java +++ b/game/src/main/java/com/bartlomiejpluta/base/game/world/entity/manager/EntityManager.java @@ -2,9 +2,10 @@ package com.bartlomiejpluta.base.game.world.entity.manager; import com.bartlomiejpluta.base.core.gc.Cleanable; import com.bartlomiejpluta.base.core.gl.object.material.Material; +import com.bartlomiejpluta.base.core.world.scene.Scene; import com.bartlomiejpluta.base.game.world.entity.model.Entity; import org.joml.Vector2f; public interface EntityManager extends Cleanable { - Entity createEntity(Material material, Vector2f coordinateStepSize); + Entity createEntity(Material material, Scene scene); } diff --git a/game/src/main/java/com/bartlomiejpluta/base/game/world/entity/model/Entity.java b/game/src/main/java/com/bartlomiejpluta/base/game/world/entity/model/Entity.java index 5ca92dfe..1a262848 100755 --- a/game/src/main/java/com/bartlomiejpluta/base/game/world/entity/model/Entity.java +++ b/game/src/main/java/com/bartlomiejpluta/base/game/world/entity/model/Entity.java @@ -4,15 +4,23 @@ import com.bartlomiejpluta.base.core.gl.object.material.Material; import com.bartlomiejpluta.base.core.gl.object.mesh.Mesh; import com.bartlomiejpluta.base.core.world.movement.Direction; import com.bartlomiejpluta.base.core.world.movement.MovableObject; +import com.bartlomiejpluta.base.core.world.scene.Scene; import com.bartlomiejpluta.base.game.world.entity.config.EntitySpriteConfiguration; +import lombok.EqualsAndHashCode; +import lombok.Getter; import lombok.Setter; import org.joml.Vector2f; import java.util.Map; +@EqualsAndHashCode(exclude = "scene", callSuper = true) public class Entity extends MovableObject { private final Map spriteDirectionRows; private final int defaultSpriteColumn; + private final Scene scene; + + @Getter + private boolean onScene; @Setter private int animationSpeed = 100; @@ -66,9 +74,25 @@ public class Entity extends MovableObject { return framesToCrossOneTile; } - public Entity(Mesh mesh, Material material, Vector2f coordinateStepSize, EntitySpriteConfiguration configuration) { + public void pushToScene() { + if(!onScene) { + scene.addObject(this); + onScene = true; + } + } + + public void removeFromScene() { + if(onScene) { + scene.removeObject(this); + onScene = false; + } + } + + public Entity(Scene scene, Mesh mesh, Material material, Vector2f coordinateStepSize, EntitySpriteConfiguration configuration) { super(mesh, material, coordinateStepSize, configuration.getDimension().asVector()); - defaultSpriteColumn = configuration.getDefaultSpriteColumn(); - spriteDirectionRows = configuration.getSpriteDirectionRows(); + this.scene = scene; + this.defaultSpriteColumn = configuration.getDefaultSpriteColumn(); + this.spriteDirectionRows = configuration.getSpriteDirectionRows(); + this.onScene = false; } }