correctly delete old rooms

This commit is contained in:
2022-12-07 15:41:00 +01:00
parent 4f886fc0b1
commit d36d33ca96
23 changed files with 222 additions and 242 deletions

View File

@@ -13,7 +13,7 @@ MonoBehaviour:
m_Name: Spawn
m_EditorClassIdentifier:
types: 00000000
modulePrefab: {fileID: 2388501677731357498, guid: db5350cd22f3a0f4f818a5f985342136,
modulePrefab: {fileID: 5940521204297009715, guid: db5350cd22f3a0f4f818a5f985342136,
type: 3}
preconditionRequirements: []
placementRequirements:

View File

@@ -116,11 +116,25 @@ namespace EscapeRoomEngine.Engine.Runtime
room.AddSpace(space, exit);
}
public void HidePreviousRoom()
public void HidePreviousRoom(bool destroy = true)
{
if (NumberOfRooms > 1)
if (NumberOfRooms > 2)
{
_rooms[NumberOfRooms - 2].roomObject.SetActive(false);
var room = _rooms[NumberOfRooms - 3];
// lock the doors that might be used to return to the old room
room.exit.toIn.DoorState.Lock();
room.exit.fromOut.DoorState.Lock();
// destroy or hide the old room
if (destroy)
{
Destroy(room.roomObject);
}
else
{
room.roomObject.SetActive(false);
}
}
}

View File

@@ -54,7 +54,7 @@ namespace EscapeRoomEngine.Engine.Runtime.Modules
internal void Lock() => Unlocked = false;
[Button(enabledMode: EButtonEnableMode.Playmode)]
internal void ExitFrom() => OnDoorEvent(DoorEventType.ExitedFrom);
protected internal void ExitFrom() => OnDoorEvent(DoorEventType.ExitedFrom);
#endregion

View File

@@ -67,24 +67,22 @@ namespace EscapeRoomEngine.Engine.Runtime
internal void AddDoor(DoorModule door)
{
_doors.Add(door);
door.DoorState.DoorEvent += OnDoorEvent;
}
private void OnDoorEvent(DoorModule door, DoorEventType type)
{
// ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault
switch (type)
door.DoorState.DoorEvent += (_, type) =>
{
// generate a new room as soon as the player completes all puzzles in this one
case DoorEventType.Unlocked when door.Equals(exit.fromOut):
Engine.DefaultEngine.GenerateRoom();
break;
// start measurements on every puzzle as soon as the player enters this room
case DoorEventType.ExitedFrom when door.Equals(entrance.toIn):
_puzzles.ForEach(puzzle => Measure.StartMeasuring((PuzzleModuleDescription)puzzle.description));
Engine.DefaultEngine.HidePreviousRoom();
break;
}
// ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault
switch (type)
{
// generate a new room as soon as the player completes all puzzles in this one
case DoorEventType.Unlocked when door.Equals(exit.fromOut):
Engine.DefaultEngine.GenerateRoom();
break;
// start measurements on every puzzle as soon as the player enters the last room
case DoorEventType.ExitedFrom when door.Equals(entrance.toIn) && Engine.DefaultEngine.CurrentRoom.Contains(this):
_puzzles.ForEach(puzzle => Measure.StartMeasuring((PuzzleModuleDescription)puzzle.description));
Engine.DefaultEngine.HidePreviousRoom();
break;
}
};
}
internal void InstantiateRoom(Transform parent, Vector3 offset, string name)
@@ -99,6 +97,7 @@ namespace EscapeRoomEngine.Engine.Runtime
}
entrance.ConnectDoors();
entrance.toIn.DoorState.Unlock();
}
public override string ToString()

View File

@@ -0,0 +1,17 @@
using UnityEditor;
using UnityEngine;
namespace EscapeRoomEngine.Desert.Runtime
{
public class DisablePicking : MonoBehaviour
{
public GameObject objectToDisable;
private void Start()
{
#if UNITY_EDITOR
SceneVisibilityManager.instance.DisablePicking(objectToDisable, true);
#endif
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 496991ba2bf54e1e854a171f18180c54
timeCreated: 1670798898