Introduce pushToScene() and removeFromScene() Entity's methods
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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<AnimationableObject> 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));
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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<Direction, Integer> 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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user