diff --git a/Assets/Engine/Runtime/Space.cs b/Assets/Engine/Runtime/Space.cs index 342ad7f..dec628b 100644 --- a/Assets/Engine/Runtime/Space.cs +++ b/Assets/Engine/Runtime/Space.cs @@ -6,6 +6,7 @@ using UnityEngine; using Logger = EscapeRoomEngine.Engine.Runtime.Utilities.Logger; using LogType = EscapeRoomEngine.Engine.Runtime.Utilities.LogType; using Object = UnityEngine.Object; +using Range = EscapeRoomEngine.Engine.Runtime.Utilities.Range; namespace EscapeRoomEngine.Engine.Runtime { @@ -145,50 +146,50 @@ namespace EscapeRoomEngine.Engine.Runtime /// A room relative (RR) placement with the generated dimensions. Always faces North. private static Placement GenerateSpaceDimensions(Passage entrance, Vector3Int minSize, Vector3Int availableSpace) { - var xMin = -1; - var xMax = -1; - var zMin = -1; - var zMax = -1; + var x = new Range(-1, -1); + var z = new Range(-1, -1); var door = entrance.fromOut; var position = door.RrPosition; + var bottomLeft = door.srPlacement.BottomLeft; + var doorSize = door.Size; // fix the side the door is facing away from switch (door.Orientation) { case Orientation.North: - zMin = position.z; - zMax = Utilities.Utilities.RandomInclusive(zMin + minSize.z, availableSpace.z); + z.min = position.z; + z.max = Utilities.Utilities.RandomInclusive(z.min + minSize.z, availableSpace.z); break; case Orientation.East: - xMin = position.x; - xMax = Utilities.Utilities.RandomInclusive(xMin + minSize.x, availableSpace.x); + x.min = position.x; + x.max = Utilities.Utilities.RandomInclusive(x.min + minSize.x, availableSpace.x); break; case Orientation.South: - zMax = position.z + 1; - zMin = Utilities.Utilities.RandomInclusive(0, zMax - minSize.z); + z.max = position.z + 1; + z.min = Utilities.Utilities.RandomInclusive(0, z.max - minSize.z); break; case Orientation.West: - xMax = position.x + 1; - xMin = Utilities.Utilities.RandomInclusive(0, xMax - minSize.x); + x.max = position.x + 1; + x.min = Utilities.Utilities.RandomInclusive(0, x.max - minSize.x); break; default: throw new ArgumentOutOfRangeException(); } // calculate remaining values if they haven't been covered by the switch statement yet - if(xMin == -1) - xMin = Utilities.Utilities.RandomInclusive(0, Math.Min(position.x, availableSpace.x - minSize.x)); - if(xMax == -1) - xMax = Utilities.Utilities.RandomInclusive(Math.Max(position.x + 1, xMin + minSize.x), availableSpace.x); - if(zMin == -1) - zMin = Utilities.Utilities.RandomInclusive(0, Math.Min(position.z, availableSpace.z - minSize.z)); - if(zMax == -1) - zMax = Utilities.Utilities.RandomInclusive(Math.Max(position.z + 1, zMin + minSize.z), availableSpace.z); + if(x.min == -1) + x.min = Utilities.Utilities.RandomInclusive(0, Math.Min(bottomLeft.x, availableSpace.x - minSize.x)); + if(x.max == -1) + x.max = Utilities.Utilities.RandomInclusive(Math.Max(bottomLeft.x + doorSize.x, x.min + minSize.x), availableSpace.x); + if(z.min == -1) + z.min = Utilities.Utilities.RandomInclusive(0, Math.Min(bottomLeft.z, availableSpace.z - minSize.z)); + if(z.max == -1) + z.max = Utilities.Utilities.RandomInclusive(Math.Max(bottomLeft.z + doorSize.x, z.min + minSize.z), availableSpace.z); var dimensions = new Placement { - position = new Vector3Int(xMin, 0, zMin), - size = new Vector2Int(xMax - xMin, zMax - zMin) + position = new Vector3Int(x.min, 0, z.min), + size = new Vector2Int(x.Length, z.Length) }; Logger.Log($"Generated space dimensions {dimensions} from entrance position {position}", LogType.RoomGeneration);