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)); }
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); }
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)]); }