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

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