Esempio n. 1
0
    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)]);
    }
Esempio n. 2
0
    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);
    }