correctly delete old rooms
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
17
Assets/Engine/Runtime/Utilities/DisablePicking.cs
Normal file
17
Assets/Engine/Runtime/Utilities/DisablePicking.cs
Normal 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
|
||||
}
|
||||
}
|
||||
}
|
||||
3
Assets/Engine/Runtime/Utilities/DisablePicking.cs.meta
Normal file
3
Assets/Engine/Runtime/Utilities/DisablePicking.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 496991ba2bf54e1e854a171f18180c54
|
||||
timeCreated: 1670798898
|
||||
Reference in New Issue
Block a user