Esempio n. 1
0
    private bool CanPlacePieceInConnection(EConnectionPoints connection, Dictionary <PieceCoordinates, MapNode> coordinateMap)
    {
        PieceCoordinates nextCoordinates;

        switch (connection)
        {
        default:
            nextCoordinates = new PieceCoordinates(0, 0);
            break;

        case EConnectionPoints.Up:
            nextCoordinates = new PieceCoordinates(Coordinates.X, Coordinates.Z + 1);
            break;

        case EConnectionPoints.Down:
            nextCoordinates = new PieceCoordinates(Coordinates.X, Coordinates.Z - 1);
            break;

        case EConnectionPoints.Left:
            nextCoordinates = new PieceCoordinates(Coordinates.X - 1, Coordinates.Z);
            break;

        case EConnectionPoints.Right:
            nextCoordinates = new PieceCoordinates(Coordinates.X + 1, Coordinates.Z);
            break;
        }

        return(!coordinateMap.ContainsKey(nextCoordinates));
    }
Esempio n. 2
0
    private void PlacePieceAtConnection(GameObject newPiece, EConnectionPoints connection)
    {
        switch (connection)
        {
        case EConnectionPoints.Up:
            newPiece.transform.position = transform.position + new Vector3(0, 0, PieceSize);
            newPiece.GetComponent <MapNode>().Coordinates = new PieceCoordinates(Coordinates.X, Coordinates.Z + 1);
            break;

        case EConnectionPoints.Down:
            newPiece.transform.position = transform.position + new Vector3(0, 0, -PieceSize);
            newPiece.GetComponent <MapNode>().Coordinates = new PieceCoordinates(Coordinates.X, Coordinates.Z - 1);
            break;

        case EConnectionPoints.Left:
            newPiece.transform.position = transform.position + new Vector3(-PieceSize, 0, 0f);
            newPiece.GetComponent <MapNode>().Coordinates = new PieceCoordinates(Coordinates.X - 1, Coordinates.Z);
            break;

        case EConnectionPoints.Right:
            newPiece.transform.position = transform.position + new Vector3(PieceSize, 0, 0f);
            newPiece.GetComponent <MapNode>().Coordinates = new PieceCoordinates(Coordinates.X + 1, Coordinates.Z);
            break;
        }
    }
 public static EConnectionPoints Opposite(this EConnectionPoints connectionPoint)
 {
     //Should probably find a better base case for this
     return(connectionPoint == EConnectionPoints.Up ? EConnectionPoints.Down :
            connectionPoint == EConnectionPoints.Down ? EConnectionPoints.Up :
            connectionPoint == EConnectionPoints.Left ? EConnectionPoints.Right :
            connectionPoint == EConnectionPoints.Right ? EConnectionPoints.Left :
            EConnectionPoints.Up);
 }
Esempio n. 4
0
    private GameObject InstantiateRandomPieceAtConnection(EConnectionPoints connection, GameObject parentGameObject)
    {
        //If we want to connect at a connection point, we need a piece with the opposite connection.
        var connectionPointForNewPiece = connection.Opposite();

        GameObject newPiece = Instantiate(Singletons.MapPieceLookUp.GetRandomPieceWithConnection(connectionPointForNewPiece));

        newPiece.transform.parent = parentGameObject.transform;
        newPiece.GetComponent <MapNode>().ConnectionPoints.Remove(connectionPointForNewPiece);

        PlacePieceAtConnection(newPiece, connection);

        return(newPiece);
    }
    public GameObject GetRandomPieceWithConnection(EConnectionPoints requiredConnection)
    {
        if (RandomPiecePool.Count == 0)
        {
            generateRandomPiecePool();
        }

        List <GameObject> nodesWithRequiredConneciton = new List <GameObject>();

        foreach (var piece in RandomPiecePool)
        {
            if (piece.ConnectionPoints.Contains(requiredConnection))
            {
                nodesWithRequiredConneciton.Add(piece.gameObject);
            }
        }

        return(nodesWithRequiredConneciton[Random.Range(0, nodesWithRequiredConneciton.Count - 1)]);
    }