using UnityEngine;
using UnityEngine.Tilemaps;
// Tile that displays a Sprite when it is alone and a different Sprite when it is orthogonally adjacent to the same NeighourTile
[CreateAssetMenu]
public class NeighbourTile : TileBase
{
public Sprite spriteA;
public Sprite spriteB;
public override void RefreshTile(Vector3Int position, ITilemap tilemap)
{
for (int yd = -1; yd <= 1; yd++)
{
Vector3Int location = new Vector3Int(position.x, position.y + yd, position.z);
if (IsNeighbour(location, tilemap))
tilemap.RefreshTile(location);
}
for (int xd = -1; xd <= 1; xd++)
{
Vector3Int location = new Vector3Int(position.x + xd, position.y, position.z);
if (IsNeighbour(location, tilemap))
tilemap.RefreshTile(location);
}
}
public override void GetTileData(Vector3Int position, ITilemap tilemap, ref TileData tileData)
{
tileData.sprite = spriteA;
for (int yd = -1; yd <= 1; yd += 2)
{
Vector3Int location = new Vector3Int(position.x, position.y + yd, position.z);
if (IsNeighbour(location, tilemap))
tileData.sprite = spriteB;
}
for (int xd = -1; xd <= 1; xd += 2)
{
Vector3Int location = new Vector3Int(position.x + xd, position.y, position.z);
if (IsNeighbour(location, tilemap))
tileData.sprite = spriteB;
}
}
private bool IsNeighbour(Vector3Int position, ITilemap tilemap)
{
TileBase tile = tilemap.GetTile(position);
return (tile != null && tile == this);
}
}