|  | @@ -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); // default to 20x20 map
 | 
	
		
			
				|  |  | -    private final TextureRenderer swampWaterOverlayRenderer = new TextureRenderer(20 * 20 * 2); // default to 20x20 map
 | 
	
		
			
				|  |  | +    private final TextureRenderer waterOverlayRenderer = new TextureRenderer(20 * 20 * 2); // default to 20x20 map
 | 
	
		
			
				|  |  |      private final TextureRenderer waveRenderer = new TextureRenderer(20 * 20 * 2); // default to 20x20 map
 | 
	
		
			
				|  |  | +    private final TextureRenderer swampWaterOverlayRenderer = new TextureRenderer(20 * 20 * 2); // default to 20x20 map
 | 
	
		
			
				|  |  |      private final TextureRenderer grassOverlayRenderer = new TextureRenderer(20 * 20 * 2); // default to 20x20 map
 | 
	
		
			
				|  |  |      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)) // upper, left corner
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            addTileOverlay(waterOverlayRenderer, x, y, 11, 13);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if(!n && !e && isShallowWater(map, x + 1, y - 1)) // upper, right corner
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            addTileOverlay(waterOverlayRenderer, x, y, 10, 13);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if(!s && !w && isShallowWater(map, x - 1, y + 1)) // lower, left corner
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            addTileOverlay(waterOverlayRenderer, x, y, 9, 13);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if(!s && !e && isShallowWater(map, x + 1, y + 1)) // lower, right corner
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            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();
 |