예제 #1
0
    public static HexTileDirection GetInverse(this HexTileDirection p_hexTileDirection)
    {
        switch (p_hexTileDirection)
        {
        case HexTileDirection.North:
            return(HexTileDirection.South);

        case HexTileDirection.NorthEast:
            return(HexTileDirection.SouthWest);

        case HexTileDirection.SouthEast:
            return(HexTileDirection.NorthWest);

        case HexTileDirection.South:
            return(HexTileDirection.North);

        case HexTileDirection.SouthWest:
            return(HexTileDirection.NorthEast);

        case HexTileDirection.NorthWest:
            return(HexTileDirection.SouthEast);

        default:
            return(HexTileDirection.North);
        }
    }
예제 #2
0
 private HexTileDirection GetNextClockwise(HexTileDirection p_direction)
 {
     if (p_direction == HexTileDirection.NorthWest)
     {
         return(HexTileDirection.North);
     }
     else
     {
         return((HexTileDirection)(((int)p_direction) + 1));
     }
 }
예제 #3
0
    public void HandleSelection(Vector3 p_inputPosition, HexTile[] p_candidateTiles)
    {
        HexTile selectedTile = null;
        float   distance     = float.MaxValue;

        for (int i = 0; i < p_candidateTiles.Length; i++)
        {
            float currentDistance = Vector2.Distance(p_inputPosition, p_candidateTiles[i].transform.position);
            if (currentDistance < distance)
            {
                selectedTile = p_candidateTiles[i];
                distance     = currentDistance;
            }
        }

        HexTileDirection selectionDirection = FindSelectionDirection(p_inputPosition, selectedTile);

        _selectedHexTiles = GetTilesFromConnectionDirection(selectionDirection, selectedTile);

        ConstructSelectionTiles(_selectedHexTiles);
    }
예제 #4
0
    private HexTile[] GetTilesFromConnectionDirection(HexTileDirection p_selectionDirection, HexTile p_selectedTile)
    {
        HexTile[] result = new HexTile[3];

        result[0] = p_selectedTile;

        while (p_selectedTile.ConnectedTiles[(int)p_selectionDirection] == null)
        {
            p_selectionDirection = GetNextClockwise(p_selectionDirection);
        }

        result[1] = p_selectedTile.ConnectedTiles[(int)p_selectionDirection];

        while (p_selectedTile.ConnectedTiles[(int)p_selectionDirection] == null ||
               !p_selectedTile.ConnectedTiles[(int)p_selectionDirection].HasConnection(result[1]))
        {
            p_selectionDirection = GetNextClockwise(p_selectionDirection);
        }

        result[2] = p_selectedTile.ConnectedTiles[(int)p_selectionDirection];

        return(result);
    }
예제 #5
0
 public HexTile GetConnectedTile(HexTileDirection p_direction)
 {
     return(ConnectedTiles[(int)p_direction]);
 }
예제 #6
0
 public void SetConnection(HexTileDirection p_direction, HexTile p_tile)
 {
     ConnectedTiles[(int)p_direction] = p_tile;
 }