private DirectionalTileType GetValidTile(Vector2Int coords) { var neighborMap = new NeighborhoodMap(); neighborMap.Left = Map.GetType(coords.x - 1, coords.y).HasFace(Faces.Right); neighborMap.Right = Map.GetType(coords.x + 1, coords.y).HasFace(Faces.Left); neighborMap.Bottom = Map.GetType(coords.x, coords.y - 1).HasFace(Faces.Top); neighborMap.Top = Map.GetType(coords.x, coords.y + 1).HasFace(Faces.Bottom); var validTiles = neighborMap.GetValidDirectionalTiles(); return(validTiles[UnityEngine.Random.Range(0, validTiles.Count)]); }
public static List <DirectionalTileType> GetValidDirectionalTiles(this NeighborhoodMap neighborhood) { var valids = AllDirectionalTiles.ToList(); valids.Remove(DirectionalTileType.Unknown); if (neighborhood.Top.HasValue && neighborhood.Top.Value) { valids.Remove(DirectionalTileType.EndcapLeft); valids.Remove(DirectionalTileType.EndcapRight); valids.Remove(DirectionalTileType.EndcapBottom); valids.Remove(DirectionalTileType.StraightHorizontal); valids.Remove(DirectionalTileType.TJunctionBottom); } if (neighborhood.Right.HasValue && neighborhood.Right.Value) { valids.Remove(DirectionalTileType.EndcapTop); valids.Remove(DirectionalTileType.EndcapBottom); valids.Remove(DirectionalTileType.EndcapLeft); valids.Remove(DirectionalTileType.StraightVertical); valids.Remove(DirectionalTileType.TJunctionLeft); } if (neighborhood.Bottom.HasValue && neighborhood.Bottom.Value) { valids.Remove(DirectionalTileType.EndcapLeft); valids.Remove(DirectionalTileType.EndcapRight); valids.Remove(DirectionalTileType.EndcapTop); valids.Remove(DirectionalTileType.StraightHorizontal); valids.Remove(DirectionalTileType.TJunctionTop); } if (neighborhood.Left.HasValue && neighborhood.Left.Value) { valids.Remove(DirectionalTileType.EndcapTop); valids.Remove(DirectionalTileType.EndcapBottom); valids.Remove(DirectionalTileType.EndcapRight); valids.Remove(DirectionalTileType.StraightVertical); valids.Remove(DirectionalTileType.TJunctionRight); } if (neighborhood.Top.HasValue && !neighborhood.Top.Value) { valids.Remove(DirectionalTileType.Intersection); valids.Remove(DirectionalTileType.EndcapTop); valids.Remove(DirectionalTileType.StraightVertical); valids.Remove(DirectionalTileType.TJunctionTop); valids.Remove(DirectionalTileType.TJunctionLeft); valids.Remove(DirectionalTileType.TJunctionRight); } if (neighborhood.Left.HasValue && !neighborhood.Left.Value) { valids.Remove(DirectionalTileType.Intersection); valids.Remove(DirectionalTileType.EndcapLeft); valids.Remove(DirectionalTileType.StraightHorizontal); valids.Remove(DirectionalTileType.TJunctionLeft); valids.Remove(DirectionalTileType.TJunctionTop); valids.Remove(DirectionalTileType.TJunctionBottom); } if (neighborhood.Right.HasValue && !neighborhood.Right.Value) { valids.Remove(DirectionalTileType.Intersection); valids.Remove(DirectionalTileType.EndcapRight); valids.Remove(DirectionalTileType.StraightHorizontal); valids.Remove(DirectionalTileType.TJunctionRight); valids.Remove(DirectionalTileType.TJunctionTop); valids.Remove(DirectionalTileType.TJunctionBottom); } if (neighborhood.Bottom.HasValue && !neighborhood.Bottom.Value) { valids.Remove(DirectionalTileType.Intersection); valids.Remove(DirectionalTileType.EndcapBottom); valids.Remove(DirectionalTileType.StraightVertical); valids.Remove(DirectionalTileType.TJunctionBottom); valids.Remove(DirectionalTileType.TJunctionLeft); valids.Remove(DirectionalTileType.TJunctionRight); } return(valids); }