Introduce pushToScene() and removeFromScene() Entity's methods

This commit is contained in:
2021-02-01 13:19:54 +01:00
parent 44e875299a
commit 8e2c63aac7
9 changed files with 57 additions and 18 deletions

View File

@@ -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) {

View File

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

View File

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