mirror of
https://github.com/inf112-v20/Fiasko.git
synced 2025-01-31 23:29:36 +01:00
Legger til nødvendig logikk for å kunne tegne partikler
This commit is contained in:
parent
2887187190
commit
1a17473d89
@ -6,6 +6,7 @@ import inf112.fiasko.roborally.element_properties.Position;
|
||||
import inf112.fiasko.roborally.objects.IDrawableGame;
|
||||
import inf112.fiasko.roborally.objects.DrawableObject;
|
||||
import inf112.fiasko.roborally.objects.IDrawableObject;
|
||||
import inf112.fiasko.roborally.objects.Particle;
|
||||
import inf112.fiasko.roborally.objects.Robot;
|
||||
import inf112.fiasko.roborally.objects.Tile;
|
||||
import inf112.fiasko.roborally.objects.Wall;
|
||||
@ -27,11 +28,13 @@ public final class IOUtil {
|
||||
List<IDrawableObject> drawableObjects = new ArrayList<>();
|
||||
List<Tile> tilesToDraw = game.getTilesToDraw();
|
||||
List<Wall> wallsToDraw = game.getWallsToDraw();
|
||||
List<Particle> particlesToDraw = game.getParticlesToDraw();
|
||||
List<Robot> robotsToDraw = game.getRobotsToDraw();
|
||||
int gameWidth = game.getWidth();
|
||||
int gameHeight = game.getHeight();
|
||||
drawableObjects.addAll(getDrawableObjectsFromElementList(tilesToDraw, gameWidth, tileWidth, tileHeight));
|
||||
drawableObjects.addAll(getDrawableObjectsFromElementList(wallsToDraw, gameWidth, tileWidth, tileHeight));
|
||||
drawableObjects.addAll(getDrawableObjectsFromElementList(particlesToDraw, gameWidth, tileWidth, tileHeight));
|
||||
drawableObjects.addAll(getDrawableRobots(robotsToDraw, gameHeight, tileWidth, tileHeight));
|
||||
return drawableObjects;
|
||||
}
|
||||
@ -86,6 +89,9 @@ public final class IOUtil {
|
||||
} else if (currentElement.getClass().isAssignableFrom(Wall.class)) {
|
||||
Wall wall = (Wall) currentElement;
|
||||
region = TextureConverterUtil.convertElement(wall);
|
||||
} else if (currentElement.getClass().isAssignableFrom(Particle.class)) {
|
||||
Particle particle = (Particle) currentElement;
|
||||
region = TextureConverterUtil.convertElement(particle);
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unknown element type passed to function.");
|
||||
}
|
||||
@ -118,6 +124,10 @@ public final class IOUtil {
|
||||
Wall wall = (Wall) element;
|
||||
hasRotatedTexture = true;
|
||||
direction = wall.getDirection();
|
||||
} else if (element.getClass().isAssignableFrom(Particle.class)) {
|
||||
Particle particle = (Particle) element;
|
||||
hasRotatedTexture = true;
|
||||
direction = particle.getDirection();
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unknown element type passed to function.");
|
||||
}
|
||||
|
@ -5,9 +5,11 @@ import com.badlogic.gdx.graphics.Texture;
|
||||
import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
||||
import com.badlogic.gdx.utils.Disposable;
|
||||
import inf112.fiasko.roborally.element_properties.Direction;
|
||||
import inf112.fiasko.roborally.element_properties.ParticleType;
|
||||
import inf112.fiasko.roborally.element_properties.RobotID;
|
||||
import inf112.fiasko.roborally.element_properties.TileType;
|
||||
import inf112.fiasko.roborally.element_properties.WallType;
|
||||
import inf112.fiasko.roborally.objects.Particle;
|
||||
import inf112.fiasko.roborally.objects.Robot;
|
||||
import inf112.fiasko.roborally.objects.Tile;
|
||||
import inf112.fiasko.roborally.objects.Wall;
|
||||
@ -29,6 +31,8 @@ public final class TextureConverterUtil {
|
||||
private static final Texture robotsTexture = new Texture(Gdx.files.internal("assets/robots.png"));
|
||||
private static Map<TileType, TextureConverterContainer> tileSheetTileTextureMappings;
|
||||
private static Map<TileType, Boolean> tileSheetTileHasRotatedTextureMappings;
|
||||
private static Map<ParticleType, TextureConverterContainer> tileSheetParticleTextureMappings;
|
||||
private static Map<ParticleType, Boolean> tileSheetParticleHasRotatedTextureMappings;
|
||||
private static Map<WallType, TextureConverterContainer> tileSheetWallTextureMappings;
|
||||
|
||||
private TextureConverterUtil() {}
|
||||
@ -68,6 +72,30 @@ public final class TextureConverterUtil {
|
||||
throw new IllegalArgumentException("Invalid or unimplemented tile type encountered");
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the texture representing the particle
|
||||
* @param particle The particle to draw
|
||||
* @return The texture to draw
|
||||
*/
|
||||
public static TextureRegion convertElement(Particle particle) {
|
||||
if (tileSheetParticleTextureMappings == null) {
|
||||
try {
|
||||
loadParticleMappings();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
Direction direction = particle.getDirection();
|
||||
TextureConverterContainer converterContainer = tileSheetParticleTextureMappings.get(particle.getParticleType());
|
||||
if (converterContainer != null) {
|
||||
return getDirectionalTextureRegion(direction, converterContainer.getXNorth(),
|
||||
converterContainer.getYNorth(), converterContainer.getXEast(), converterContainer.getYEast(),
|
||||
converterContainer.getXSouth(), converterContainer.getYSouth(), converterContainer.getXWest(),
|
||||
converterContainer.getYWest());
|
||||
}
|
||||
throw new IllegalArgumentException("Invalid or unimplemented particle type encountered");
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the texture representing the tile
|
||||
* @param wall The wall to draw
|
||||
@ -95,8 +123,12 @@ public final class TextureConverterUtil {
|
||||
throw new IllegalArgumentException("Invalid or unimplemented tile type encountered");
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the texture representing the robot
|
||||
* @param robot The robot to draw
|
||||
* @return The texture to draw
|
||||
*/
|
||||
public static TextureRegion convertElement(Robot robot) {
|
||||
|
||||
if (robot.getRobotId() == RobotID.ROBOT_1) {
|
||||
return new TextureRegion(robotsTexture, 0, 0, 64, 64);
|
||||
} else if (robot.getRobotId() == RobotID.ROBOT_2) {
|
||||
@ -136,6 +168,25 @@ public final class TextureConverterUtil {
|
||||
return tileSheetTileHasRotatedTextureMappings.get(tile.getTileType());
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether a particle has textures for different rotations
|
||||
*
|
||||
* For a particle without a rotated texture, the texture needs to be rotated when rendering.
|
||||
*
|
||||
* @param particle The particle to check
|
||||
* @return True if rotated versions of the texture exists. False otherwise
|
||||
*/
|
||||
public static boolean hasRotatedTexture(Particle particle) {
|
||||
if (tileSheetTileTextureMappings == null) {
|
||||
try {
|
||||
loadParticleMappings();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return tileSheetParticleHasRotatedTextureMappings.get(particle.getParticleType());
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads mappings between a tile and texture
|
||||
*
|
||||
@ -158,6 +209,28 @@ public final class TextureConverterUtil {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads mappings between a particle and a texture
|
||||
*
|
||||
* Loads both information about mapping from a particle to a texture converter container and information about
|
||||
* mapping from a particle to whether the particle has a rotated version of each texture
|
||||
*
|
||||
* @throws IOException If the mapping file can't be properly read
|
||||
*/
|
||||
private static synchronized void loadParticleMappings() throws IOException {
|
||||
tileSheetParticleTextureMappings = new HashMap<>();
|
||||
tileSheetParticleHasRotatedTextureMappings = new HashMap<>();
|
||||
InputStream fileStream = ResourceUtil.getResourceAsInputStream("texture_sheet_particle_mapping.txt");
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(fileStream));
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
String[] parameters = line.split(" ");
|
||||
ParticleType type = ParticleType.valueOf(parameters[0]);
|
||||
storeTextMappingInMap(parameters, type, tileSheetParticleTextureMappings,
|
||||
tileSheetParticleHasRotatedTextureMappings);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads mappings between a wall and texture
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user