// Returns an int that details how much we have to rotate by if we have a match. If the min int is returned, no match. private int FindRoomRotations(GenBlockSpacialProperties room, GenBlockSpacialProperties prefab) { // Check each pattern for (int i = 0; i < mGenerationManager.mRoomRotations.Count; i++) { for (int j = 0; j < mGenerationManager.mRoomRotations[i].Count; j++) { // We have found our room, now we need to find our rotation if (mGenerationManager.mRoomRotations[i][j] == room) { // Check for a match for (int k = 0; k < mGenerationManager.mRoomRotations[i].Count; k++) { if (mGenerationManager.mRoomRotations[i][k] == prefab) { // Because our rotations are set up to from "forward" in a clockwise motion, our rotation angle is the difference between our two rooms multiplied by 90. return((j - k) * 90); } } } } } // No match return(int.MinValue); }
public List <RoomAndRotation> GetAvailableRooms() { // Set up our room list List <RoomAndRotation> rooms = new List <RoomAndRotation>(); // Loop through to find candidate rooms for (int i = 0; i < mGenerationManager.mEnvironmentDatabase.mRooms.Count; i++) { Room room = mGenerationManager.mEnvironmentDatabase.mRooms[i].GetComponent <Room>(); if (room.mSpacialProperties == mSpacialData.mUsedPaths) { // If a room matches our spacial data perfectly, add it to the list rooms.Add(new RoomAndRotation(room.gameObject, 0)); } else { // Strip up and down properties // TODO - This could probably be moved in to the rotation calculation itself to help cut down on code clutter. GenBlockSpacialProperties ourRoom = mSpacialData.mUsedPaths; GenBlockSpacialProperties candidate = room.mSpacialProperties; if ((ourRoom & GenBlockSpacialProperties.UP) != 0 && (candidate & GenBlockSpacialProperties.UP) != 0) { ourRoom &= ~GenBlockSpacialProperties.UP; candidate &= ~GenBlockSpacialProperties.UP; } if ((ourRoom & GenBlockSpacialProperties.DOWN) != 0 && (candidate & GenBlockSpacialProperties.DOWN) != 0) { ourRoom &= ~GenBlockSpacialProperties.DOWN; candidate &= ~GenBlockSpacialProperties.DOWN; } int degrees = FindRoomRotations(ourRoom, candidate); if (degrees > int.MinValue) { rooms.Add(new RoomAndRotation(room.gameObject, degrees)); } } } return(rooms); }
private GenBlockSpacialProperties GetOppositeDirection(GenBlockSpacialProperties direction) { switch (direction) { case (GenBlockSpacialProperties.FORWARD): { return(GenBlockSpacialProperties.BACK); } case (GenBlockSpacialProperties.BACK): { return(GenBlockSpacialProperties.FORWARD); } case (GenBlockSpacialProperties.LEFT): { return(GenBlockSpacialProperties.RIGHT); } case (GenBlockSpacialProperties.RIGHT): { return(GenBlockSpacialProperties.LEFT); } case (GenBlockSpacialProperties.UP): { return(GenBlockSpacialProperties.DOWN); } case (GenBlockSpacialProperties.DOWN): { return(GenBlockSpacialProperties.UP); } } return(0); }