|
@@ -9,6 +9,7 @@ import pathgame.gameplay.Player;
|
|
|
import pathgame.tilemap.Tile;
|
|
|
import pathgame.tilemap.TileMap;
|
|
|
import pathgame.tilemap.TileRenderType;
|
|
|
+import pathgame.tilemap.TileType;
|
|
|
|
|
|
|
|
|
* A renderer for tile maps.
|
|
@@ -24,8 +25,9 @@ public class TileMapRenderer
|
|
|
|
|
|
private final Texture tileTexture = new Texture("resources/tiles.png");
|
|
|
private final TextureRenderer textureRenderer = new TextureRenderer(20 * 20 * 2);
|
|
|
- private final TextureRenderer swampWaterOverlayRenderer = new TextureRenderer(20 * 20 * 2);
|
|
|
+ private final TextureRenderer waterOverlayRenderer = new TextureRenderer(20 * 20 * 2);
|
|
|
private final TextureRenderer waveRenderer = new TextureRenderer(20 * 20 * 2);
|
|
|
+ private final TextureRenderer swampWaterOverlayRenderer = new TextureRenderer(20 * 20 * 2);
|
|
|
private final TextureRenderer grassOverlayRenderer = new TextureRenderer(20 * 20 * 2);
|
|
|
private float scale = 1.0f;
|
|
|
|
|
@@ -36,7 +38,7 @@ public class TileMapRenderer
|
|
|
|
|
|
private static String[] getWavePath()
|
|
|
{
|
|
|
- String[] path = new String[20];
|
|
|
+ String[] path = new String[60];
|
|
|
for(int i = 0; i < path.length; i++)
|
|
|
{
|
|
|
path[i] = "resources/waves/wave" + (i + 1) + ".png";
|
|
@@ -120,6 +122,11 @@ public class TileMapRenderer
|
|
|
{
|
|
|
return x >= 0 && y >= 0 && x < map.getWidth() && y < map.getHeight();
|
|
|
}
|
|
|
+
|
|
|
+ private boolean isShallowWater(TileMap map, int x, int y)
|
|
|
+ {
|
|
|
+ return isInRange(map, x, y) && map.getTile(x, y).getType() == TileType.SHALLOW_WATER;
|
|
|
+ }
|
|
|
|
|
|
private boolean isSwamp(TileMap map, int x, int y)
|
|
|
{
|
|
@@ -171,6 +178,42 @@ public class TileMapRenderer
|
|
|
}
|
|
|
addTileOverlay(swampWaterOverlayRenderer, x, y, index, 15);
|
|
|
}
|
|
|
+
|
|
|
+ private void addDeepWaterOverlay(TileMap map, int x, int y)
|
|
|
+ {
|
|
|
+ boolean n = isShallowWater(map, x, y - 1);
|
|
|
+ boolean e = isShallowWater(map, x + 1, y);
|
|
|
+ boolean s = isShallowWater(map, x, y + 1);
|
|
|
+ boolean w = isShallowWater(map, x - 1, y);
|
|
|
+
|
|
|
+ if(!n && !w && isShallowWater(map, x - 1, y - 1))
|
|
|
+ {
|
|
|
+ addTileOverlay(waterOverlayRenderer, x, y, 11, 13);
|
|
|
+ }
|
|
|
+ if(!n && !e && isShallowWater(map, x + 1, y - 1))
|
|
|
+ {
|
|
|
+ addTileOverlay(waterOverlayRenderer, x, y, 10, 13);
|
|
|
+ }
|
|
|
+ if(!s && !w && isShallowWater(map, x - 1, y + 1))
|
|
|
+ {
|
|
|
+ addTileOverlay(waterOverlayRenderer, x, y, 9, 13);
|
|
|
+ }
|
|
|
+ if(!s && !e && isShallowWater(map, x + 1, y + 1))
|
|
|
+ {
|
|
|
+ addTileOverlay(waterOverlayRenderer, x, y, 8, 13);
|
|
|
+ }
|
|
|
+
|
|
|
+ int index = 0;
|
|
|
+ index += n ? 0 : 8;
|
|
|
+ index += e ? 0 : 4;
|
|
|
+ index += s ? 0 : 2;
|
|
|
+ index += w ? 0 : 1;
|
|
|
+ if(index == 15)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ addTileOverlay(waterOverlayRenderer, x, y, index, 12);
|
|
|
+ }
|
|
|
|
|
|
private void addGrassOverlay(TileMap map, int x, int y)
|
|
|
{
|
|
@@ -212,8 +255,9 @@ public class TileMapRenderer
|
|
|
private void updateData(TileMap map)
|
|
|
{
|
|
|
textureRenderer.clear();
|
|
|
- swampWaterOverlayRenderer.clear();
|
|
|
+ waterOverlayRenderer.clear();
|
|
|
waveRenderer.clear();
|
|
|
+ swampWaterOverlayRenderer.clear();
|
|
|
grassOverlayRenderer.clear();
|
|
|
for(int x = 0; x < map.getWidth(); x++)
|
|
|
{
|
|
@@ -227,6 +271,10 @@ public class TileMapRenderer
|
|
|
}
|
|
|
if(t.getRenderType() == TileRenderType.WATER)
|
|
|
{
|
|
|
+ if(t.getType() == TileType.DEEP_WATER)
|
|
|
+ {
|
|
|
+ addDeepWaterOverlay(map, x, y);
|
|
|
+ }
|
|
|
addWaterSwampOverlay(map, x, y);
|
|
|
addGrassOverlay(map, x, y);
|
|
|
addTileOverlay(waveRenderer, x, y, 8, 2);
|
|
@@ -239,8 +287,9 @@ public class TileMapRenderer
|
|
|
}
|
|
|
}
|
|
|
textureRenderer.build();
|
|
|
- swampWaterOverlayRenderer.build();
|
|
|
+ waterOverlayRenderer.build();
|
|
|
waveRenderer.build();
|
|
|
+ swampWaterOverlayRenderer.build();
|
|
|
grassOverlayRenderer.build();
|
|
|
}
|
|
|
|
|
@@ -291,6 +340,7 @@ public class TileMapRenderer
|
|
|
r.scale(scale, scale);
|
|
|
r.updateMatrix();
|
|
|
textureRenderer.draw();
|
|
|
+ waterOverlayRenderer.draw();
|
|
|
waveRenderer.draw();
|
|
|
swampWaterOverlayRenderer.draw();
|
|
|
grassOverlayRenderer.draw();
|