room size generation takes into account door module size

This commit is contained in:
2022-11-25 14:12:07 +01:00
parent a5b8e4d131
commit bc61d04541

View File

@@ -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
/// <returns>A room relative (<i>RR</i>) placement with the generated dimensions. Always faces North.</returns>
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);