private void rotateToAttach(GameObject exitToAttachTo, GameObject thisSectionExit) { ExplorableSectionExit toAttachExit = exitToAttachTo.GetComponent <ExplorableSectionExit>(); ExplorableSectionExit ownedExit = thisSectionExit.GetComponent <ExplorableSectionExit>(); ExplorableSectionExit.ExitDirection directionToRotateTo = getDirectionOpposite(toAttachExit.ExitOrientation); int numberOfRotations = getNumberOfRotationsRequired(ownedExit.ExitOrientation, directionToRotateTo); transform.Rotate(0, 0, numberOfRotations * 90); updateExitOrientations(numberOfRotations); }
private ExplorableSectionExit.ExitDirection getDirectionOpposite(ExplorableSectionExit.ExitDirection inputDirection) { // Opposites are all spaced two apart in the enum int oppositeDirection = (int)inputDirection; int lengthOfDirections = ((ExplorableSectionExit.ExitDirection[])System.Enum.GetValues(typeof(ExplorableSectionExit.ExitDirection))).Length; for (int i = 0; i < 2; i++) { oppositeDirection += 1; if (oppositeDirection >= lengthOfDirections) { oppositeDirection -= lengthOfDirections; } } return(((ExplorableSectionExit.ExitDirection[])System.Enum.GetValues(typeof(ExplorableSectionExit.ExitDirection)))[oppositeDirection]); }
void Awake() { createdRooms = new List <GameObject>(); CreateRoomBuildingPool(); startingRoom = Instantiate(startingRoomPrefab, transform.position, Quaternion.identity); ExplorableSectionExit.ExitDirection startingPlayerExit = ExplorableSectionExit.ExitDirection.west; GameObject[] startingRoomExits = startingRoom.GetComponent <ExplorableSection>().Exits; for (int i = 0; i < startingRoomExits.Length; i++) { ExplorableSectionExit startingRoomExit = startingRoomExits[i].GetComponent <ExplorableSectionExit>(); if (startingRoomExit.ExitOrientation == startingPlayerExit) { playerStartPoint = startingRoomExits[i]; } } }
private int getNumberOfRotationsRequired(ExplorableSectionExit.ExitDirection currentDirection, ExplorableSectionExit.ExitDirection directionToMatch) { ExplorableSectionExit.ExitDirection[] exitDirections = (ExplorableSectionExit.ExitDirection[])System.Enum.GetValues(typeof(ExplorableSectionExit.ExitDirection)); int startingDirectionIdx = 0; for (int i = 0; i < exitDirections.Length; i++) { if (currentDirection == exitDirections[i]) { startingDirectionIdx = i; break; } } int targetDirectionIdx = 0; for (int i = 0; i < exitDirections.Length; i++) { if (directionToMatch == exitDirections[i]) { targetDirectionIdx = i; break; } } int numberOfStepsToMatchDirection = 0; while (startingDirectionIdx != targetDirectionIdx) { startingDirectionIdx += 1; if (startingDirectionIdx >= exitDirections.Length) { startingDirectionIdx = startingDirectionIdx - exitDirections.Length; } numberOfStepsToMatchDirection += 1; } return(numberOfStepsToMatchDirection); }
private ExplorableSectionExit.ExitDirection getNewDirectionFromRotations(int numberOfRotations, ExplorableSectionExit.ExitDirection startingOrientation) { ExplorableSectionExit.ExitDirection[] exitDirections = (ExplorableSectionExit.ExitDirection[])System.Enum.GetValues(typeof(ExplorableSectionExit.ExitDirection)); int orientationIdx = 0; for (int i = 0; i < exitDirections.Length; i++) { if (startingOrientation == exitDirections[i]) { orientationIdx = i; break; } } ExplorableSectionExit.ExitDirection newDirection; for (int i = 0; i < numberOfRotations; i++) { orientationIdx += 1; if (orientationIdx >= exitDirections.Length) { orientationIdx = orientationIdx - exitDirections.Length; } } newDirection = exitDirections[orientationIdx]; return(newDirection); }