station 46 room

This commit is contained in:
2023-05-14 18:13:02 +02:00
parent f03d723119
commit eba953b844
31 changed files with 978 additions and 672 deletions

View File

@@ -72,14 +72,20 @@ namespace EscapeRoomEngine.Engine.Runtime
public void GenerateRoom()
{
Logger.Log("Generating room...", LogType.RoomGeneration);
var intro = NumberOfRooms == 0;
// get the last entrance from the newest room or create a spawn passage with no entrance door for where the player will start
var entrance = NumberOfRooms > 0 ? _rooms.Last().exit : new Passage(new DoorModule(null, theme.spawnDoor));
var entrance = intro ? new Passage(new DoorModule(null, theme.spawnDoor)) : _rooms.Last().exit;
var room = new Room(entrance);
_rooms.Add(room);
if (_plannedPuzzles.Count > 0)
if (intro)
{
GenerateIntroSpace(room, entrance);
}
else if (_plannedPuzzles.Count > 0)
{
GeneratePuzzleSpace(room, entrance);
}
@@ -92,7 +98,12 @@ namespace EscapeRoomEngine.Engine.Runtime
var roomId = _rooms.Count - 1;
room.InstantiateRoom(_playSpaceOrigin.transform, roomId * roomOffset, roomId.ToString());
if (theme.environment)
if (intro)
{
Instantiate(theme.intro, room.roomObject.transform, false);
FindObjectOfType<Intro>().Place(room.exit.fromOut.DoorState.transform);
}
else if (theme.environment)
{
Instantiate(theme.environment, room.roomObject.transform, false);
}
@@ -101,6 +112,20 @@ namespace EscapeRoomEngine.Engine.Runtime
UpdateUI();
}
private void GenerateIntroSpace(Room room, Passage entrance)
{
Logger.Log($"Generating intro space...", LogType.RoomGeneration);
var space = new IntroSpace(room, entrance);
var exitDoor = new DoorModule(space, theme.introExitDoor);
if (!space.AddModuleWithRequirements(exitDoor))
{
throw new EngineException("Could not satisfy requirements for exit door.");
}
var exit = new Passage(exitDoor);
room.AddSpace(space, exit);
}
private void GeneratePuzzleSpace(Room room, Passage entrance)
{
var puzzlesAdded = 0;
@@ -183,15 +208,11 @@ namespace EscapeRoomEngine.Engine.Runtime
GameControl.Instance.PlannedPuzzles = _plannedPuzzles;
}
/// <summary>
/// Hide or destroy the room two rooms ago. The actual previous room is kept for the player to be able to backtrack one room.
/// </summary>
/// <param name="destroy"></param>
public void HidePreviousRoom(bool destroy = true)
{
if (NumberOfRooms > 2)
if (NumberOfRooms >= 2)
{
var room = _rooms[NumberOfRooms - 3];
var room = _rooms[NumberOfRooms - 2];
// lock the doors that might be used to return to the old room
room.exit.toIn.DoorState.Lock();