Refactor DefaultEntity and DefaultEntityManager

This commit is contained in:
2021-03-09 19:20:46 +01:00
parent debb6eec2d
commit 4a1beb5101
2 changed files with 36 additions and 21 deletions

View File

@@ -1,35 +1,59 @@
package com.bartlomiejpluta.base.engine.world.entity.manager; package com.bartlomiejpluta.base.engine.world.entity.manager;
import com.bartlomiejpluta.base.api.game.entity.Direction;
import com.bartlomiejpluta.base.api.game.entity.Entity; import com.bartlomiejpluta.base.api.game.entity.Entity;
import com.bartlomiejpluta.base.engine.core.gl.object.material.Material; import com.bartlomiejpluta.base.engine.core.gl.object.material.Material;
import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh; import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh;
import com.bartlomiejpluta.base.engine.util.mesh.MeshManager; import com.bartlomiejpluta.base.engine.util.mesh.MeshManager;
import com.bartlomiejpluta.base.engine.world.entity.config.EntitySpriteConfiguration; import com.bartlomiejpluta.base.engine.world.entity.config.EntitySpriteConfiguration;
import com.bartlomiejpluta.base.engine.world.entity.model.DefaultEntity; import com.bartlomiejpluta.base.engine.world.entity.model.DefaultEntity;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.joml.Vector2f;
import org.joml.Vector2fc;
import org.joml.Vector2ic;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Map;
import java.util.Map.Entry;
import static java.util.stream.Collectors.toUnmodifiableMap;
@Slf4j @Slf4j
@Component @Component
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class DefaultEntityManager implements EntityManager { public class DefaultEntityManager implements EntityManager {
private final MeshManager meshManager; private final MeshManager meshManager;
private final EntitySetManager entitySetManager; private final EntitySetManager entitySetManager;
private final EntitySpriteConfiguration configuration;
private final Map<Direction, Integer> spriteDirectionRows;
private final Map<Direction, Vector2fc> spriteDefaultRows;
private final Vector2ic entitySpriteDimension;
@Autowired
public DefaultEntityManager(MeshManager meshManager, EntitySetManager entitySetManager, EntitySpriteConfiguration configuration) {
this.meshManager = meshManager;
this.entitySetManager = entitySetManager;
this.entitySpriteDimension = configuration.getDimension().asVector();
this.spriteDirectionRows = configuration.getSpriteDirectionRows();
var defaultSpriteColumn = configuration.getDefaultSpriteColumn();
this.spriteDefaultRows = spriteDirectionRows
.entrySet()
.stream()
.collect(toUnmodifiableMap(Entry::getKey, entry -> new Vector2f(defaultSpriteColumn, entry.getValue())));
}
@Override @Override
public Entity createEntity(String entitySetUid) { public Entity createEntity(String entitySetUid) {
var material = entitySetManager.loadObject(entitySetUid); var material = entitySetManager.loadObject(entitySetUid);
return new DefaultEntity(buildMesh(material), material, configuration); return new DefaultEntity(buildMesh(material), material, spriteDirectionRows, spriteDefaultRows);
} }
private Mesh buildMesh(Material material) { private Mesh buildMesh(Material material) {
var texture = material.getTexture(); var texture = material.getTexture();
var dimension = configuration.getDimension().asVector(); var spriteWidth = texture.getWidth() / (float) entitySpriteDimension.x();
var spriteWidth = texture.getWidth() / (float) dimension.x(); var spriteHeight = texture.getHeight() / (float) entitySpriteDimension.y();
var spriteHeight = texture.getHeight() / (float) dimension.y();
return meshManager.createQuad(spriteWidth, spriteHeight, spriteWidth / 2, spriteHeight * 0.9f); return meshManager.createQuad(spriteWidth, spriteHeight, spriteWidth / 2, spriteHeight * 0.9f);
} }

View File

@@ -7,7 +7,6 @@ import com.bartlomiejpluta.base.api.game.map.layer.object.ObjectLayer;
import com.bartlomiejpluta.base.engine.core.gl.object.material.Material; import com.bartlomiejpluta.base.engine.core.gl.object.material.Material;
import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh; import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh;
import com.bartlomiejpluta.base.engine.util.math.MathUtil; import com.bartlomiejpluta.base.engine.util.math.MathUtil;
import com.bartlomiejpluta.base.engine.world.entity.config.EntitySpriteConfiguration;
import com.bartlomiejpluta.base.engine.world.movement.MovableSprite; import com.bartlomiejpluta.base.engine.world.movement.MovableSprite;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.Getter; import lombok.Getter;
@@ -18,12 +17,10 @@ import org.joml.Vector2i;
import java.util.Map; import java.util.Map;
import static java.util.stream.Collectors.toUnmodifiableMap;
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
public class DefaultEntity extends MovableSprite implements Entity { public class DefaultEntity extends MovableSprite implements Entity {
private final Map<Direction, Integer> spriteDirectionRows; private final Map<Direction, Integer> spriteDirectionRows;
private final Map<Direction, Vector2fc> defaultAnimationFrames; private final Map<Direction, Vector2fc> spriteDefaultRows;
private int animationSpeed = 100; private int animationSpeed = 100;
@@ -59,7 +56,7 @@ public class DefaultEntity extends MovableSprite implements Entity {
@Override @Override
protected void setDefaultAnimationFrame() { protected void setDefaultAnimationFrame() {
material.setSpritePosition(defaultAnimationFrames.get(faceDirection)); material.setSpritePosition(spriteDefaultRows.get(faceDirection));
} }
@Override @Override
@@ -113,16 +110,10 @@ public class DefaultEntity extends MovableSprite implements Entity {
// Do nothing // Do nothing
} }
public DefaultEntity(Mesh mesh, Material material, EntitySpriteConfiguration configuration) { public DefaultEntity(Mesh mesh, Material material, Map<Direction, Integer> spriteDirectionRows, Map<Direction, Vector2fc> spriteDefaultRows) {
super(mesh, material); super(mesh, material);
this.spriteDirectionRows = configuration.getSpriteDirectionRows(); this.spriteDirectionRows = spriteDirectionRows;
this.faceDirection = Direction.DOWN; this.faceDirection = Direction.DOWN;
this.spriteDefaultRows = spriteDefaultRows;
var defaultColumn = configuration.getDefaultSpriteColumn();
defaultAnimationFrames = spriteDirectionRows
.entrySet()
.stream()
.collect(toUnmodifiableMap(Map.Entry::getKey, entry -> new Vector2f(defaultColumn, entry.getValue())));
} }
} }