Refactor DefaultEntity and DefaultEntityManager
This commit is contained in:
@@ -1,35 +1,59 @@
|
||||
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.engine.core.gl.object.material.Material;
|
||||
import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh;
|
||||
import com.bartlomiejpluta.base.engine.util.mesh.MeshManager;
|
||||
import com.bartlomiejpluta.base.engine.world.entity.config.EntitySpriteConfiguration;
|
||||
import com.bartlomiejpluta.base.engine.world.entity.model.DefaultEntity;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
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.stereotype.Component;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import static java.util.stream.Collectors.toUnmodifiableMap;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
||||
public class DefaultEntityManager implements EntityManager {
|
||||
private final MeshManager meshManager;
|
||||
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
|
||||
public Entity createEntity(String 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) {
|
||||
var texture = material.getTexture();
|
||||
var dimension = configuration.getDimension().asVector();
|
||||
var spriteWidth = texture.getWidth() / (float) dimension.x();
|
||||
var spriteHeight = texture.getHeight() / (float) dimension.y();
|
||||
var spriteWidth = texture.getWidth() / (float) entitySpriteDimension.x();
|
||||
var spriteHeight = texture.getHeight() / (float) entitySpriteDimension.y();
|
||||
return meshManager.createQuad(spriteWidth, spriteHeight, spriteWidth / 2, spriteHeight * 0.9f);
|
||||
}
|
||||
|
||||
|
||||
@@ -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.mesh.Mesh;
|
||||
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 lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
@@ -18,12 +17,10 @@ import org.joml.Vector2i;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import static java.util.stream.Collectors.toUnmodifiableMap;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class DefaultEntity extends MovableSprite implements Entity {
|
||||
private final Map<Direction, Integer> spriteDirectionRows;
|
||||
private final Map<Direction, Vector2fc> defaultAnimationFrames;
|
||||
private final Map<Direction, Vector2fc> spriteDefaultRows;
|
||||
|
||||
private int animationSpeed = 100;
|
||||
|
||||
@@ -59,7 +56,7 @@ public class DefaultEntity extends MovableSprite implements Entity {
|
||||
|
||||
@Override
|
||||
protected void setDefaultAnimationFrame() {
|
||||
material.setSpritePosition(defaultAnimationFrames.get(faceDirection));
|
||||
material.setSpritePosition(spriteDefaultRows.get(faceDirection));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -113,16 +110,10 @@ public class DefaultEntity extends MovableSprite implements Entity {
|
||||
// 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);
|
||||
this.spriteDirectionRows = configuration.getSpriteDirectionRows();
|
||||
this.spriteDirectionRows = spriteDirectionRows;
|
||||
this.faceDirection = Direction.DOWN;
|
||||
|
||||
var defaultColumn = configuration.getDefaultSpriteColumn();
|
||||
|
||||
defaultAnimationFrames = spriteDirectionRows
|
||||
.entrySet()
|
||||
.stream()
|
||||
.collect(toUnmodifiableMap(Map.Entry::getKey, entry -> new Vector2f(defaultColumn, entry.getValue())));
|
||||
this.spriteDefaultRows = spriteDefaultRows;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user