last room and puzzle order

This commit is contained in:
2022-12-08 14:04:00 +01:00
parent b3c53031c1
commit 429f9536a9
9 changed files with 91 additions and 71 deletions

View File

@@ -9,7 +9,7 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 7182894751559651105}
m_Layer: 8
m_Layer: 5
m_Name: Time Control
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -55,7 +55,7 @@ GameObject:
- component: {fileID: 4522052737472525134}
- component: {fileID: 4522052737472525132}
- component: {fileID: 4522052737472525135}
m_Layer: 8
m_Layer: 5
m_Name: Text
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -135,7 +135,7 @@ GameObject:
- component: {fileID: 4522052737580626018}
- component: {fileID: 4522052737580626016}
- component: {fileID: 4522052737580626019}
m_Layer: 8
m_Layer: 5
m_Name: Text
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -216,7 +216,7 @@ GameObject:
- component: {fileID: 4522052737741634401}
- component: {fileID: 4522052737741634400}
- component: {fileID: 4522052737741634403}
m_Layer: 8
m_Layer: 5
m_Name: Resume Button
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -241,7 +241,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 62.799988, y: -79}
m_AnchoredPosition: {x: 70.79999, y: -79}
m_SizeDelta: {x: 66, y: 30}
m_Pivot: {x: 0, y: 1}
--- !u!222 &4522052737741634401
@@ -351,7 +351,7 @@ GameObject:
- component: {fileID: 4522052738465728853}
- component: {fileID: 4522052738465728852}
- component: {fileID: 4522052738465728855}
m_Layer: 8
m_Layer: 5
m_Name: Add Time Button
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -377,7 +377,7 @@ RectTransform:
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 0, y: -119}
m_SizeDelta: {x: 52.8, y: 30}
m_SizeDelta: {x: 60.8, y: 30}
m_Pivot: {x: 0, y: 1}
--- !u!222 &4522052738465728853
CanvasRenderer:
@@ -485,7 +485,7 @@ GameObject:
- component: {fileID: 4522052738508588346}
- component: {fileID: 4522052738508588344}
- component: {fileID: 4522052738508588347}
m_Layer: 8
m_Layer: 5
m_Name: Time Label Text
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -565,7 +565,7 @@ GameObject:
- component: {fileID: 4522052738585297418}
- component: {fileID: 4522052738585297416}
- component: {fileID: 4522052738585297419}
m_Layer: 8
m_Layer: 5
m_Name: Text
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -647,7 +647,7 @@ GameObject:
- component: {fileID: 4522052738604070282}
- component: {fileID: 4522052738604070280}
- component: {fileID: 4522052738604070283}
m_Layer: 8
m_Layer: 5
m_Name: Time Text
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -671,7 +671,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 66.8, y: -4}
m_AnchoredPosition: {x: 74.8, y: -4}
m_SizeDelta: {x: 137.34573, y: 30}
m_Pivot: {x: 0, y: 1}
--- !u!222 &4522052738604070280
@@ -728,7 +728,7 @@ GameObject:
- component: {fileID: 4522052738889303940}
- component: {fileID: 4522052738889303943}
- component: {fileID: 4522052738889303942}
m_Layer: 8
m_Layer: 5
m_Name: Pause Button
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -754,7 +754,7 @@ RectTransform:
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 0, y: -79}
m_SizeDelta: {x: 52.8, y: 30}
m_SizeDelta: {x: 60.8, y: 30}
m_Pivot: {x: 0, y: 1}
--- !u!222 &4522052738889303940
CanvasRenderer:
@@ -863,7 +863,7 @@ GameObject:
- component: {fileID: 4522052738906404846}
- component: {fileID: 4522052738906404817}
- component: {fileID: 4522052738906404816}
m_Layer: 8
m_Layer: 5
m_Name: Stop Button
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -888,7 +888,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 62.800003, y: -39}
m_AnchoredPosition: {x: 70.8, y: -39}
m_SizeDelta: {x: 44.6, y: 30}
m_Pivot: {x: 0, y: 1}
--- !u!222 &4522052738906404846
@@ -997,7 +997,7 @@ GameObject:
- component: {fileID: 4522052738910035495}
- component: {fileID: 4522052738910035493}
- component: {fileID: 4522052738910035492}
m_Layer: 8
m_Layer: 5
m_Name: Text
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -1078,7 +1078,7 @@ GameObject:
- component: {fileID: 4522052738919441880}
- component: {fileID: 4522052738919441883}
- component: {fileID: 4522052738919441882}
m_Layer: 8
m_Layer: 5
m_Name: Exit Button
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -1212,7 +1212,7 @@ GameObject:
- component: {fileID: 4522052738950503473}
- component: {fileID: 4522052738950503375}
- component: {fileID: 4522052738950503374}
m_Layer: 8
m_Layer: 5
m_Name: Text
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -1294,7 +1294,7 @@ GameObject:
- component: {fileID: 4522052738963994964}
- component: {fileID: 4522052738963994967}
- component: {fileID: 6342815206448132038}
m_Layer: 8
m_Layer: 5
m_Name: Gamemaster Canvas
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -1334,7 +1334,7 @@ Canvas:
serializedVersion: 3
m_RenderMode: 0
m_Camera: {fileID: 0}
m_PlaneDistance: 100
m_PlaneDistance: 0
m_PixelPerfect: 1
m_ReceivesEvents: 1
m_OverrideSorting: 0
@@ -1416,7 +1416,7 @@ GameObject:
- component: {fileID: 4522052739117531223}
- component: {fileID: 4522052739117531221}
- component: {fileID: 4522052739117531220}
m_Layer: 8
m_Layer: 5
m_Name: Text
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -1497,7 +1497,7 @@ GameObject:
- component: {fileID: 4522052739295172458}
- component: {fileID: 4522052739295172461}
- component: {fileID: 4522052739295172460}
m_Layer: 8
m_Layer: 5
m_Name: Remove Time Button
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -1522,8 +1522,8 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 62.799988, y: -119}
m_SizeDelta: {x: 52.8, y: 30}
m_AnchoredPosition: {x: 70.79999, y: -119}
m_SizeDelta: {x: 60.8, y: 30}
m_Pivot: {x: 0, y: 1}
--- !u!222 &4522052739295172458
CanvasRenderer:
@@ -1631,7 +1631,7 @@ GameObject:
- component: {fileID: 4522052739297849632}
- component: {fileID: 4522052739297849662}
- component: {fileID: 4522052739297849633}
m_Layer: 8
m_Layer: 5
m_Name: Text
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -1712,7 +1712,7 @@ GameObject:
- component: {fileID: 4522052739596861246}
- component: {fileID: 4522052739596861217}
- component: {fileID: 4522052739596861216}
m_Layer: 8
m_Layer: 5
m_Name: Start Button
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -1738,7 +1738,7 @@ RectTransform:
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 0, y: -39}
m_SizeDelta: {x: 52.8, y: 30}
m_SizeDelta: {x: 60.8, y: 30}
m_Pivot: {x: 0, y: 1}
--- !u!222 &4522052739596861246
CanvasRenderer:

View File

@@ -37,11 +37,14 @@ namespace EscapeRoomEngine.Engine.Runtime
public IOption<Room> CurrentRoom => NumberOfRooms > 0 ? Some<Room>.Of(_rooms[^1]) : None<Room>.New();
private readonly List<Room> _rooms = new();
private List<PuzzleModuleDescription> _puzzles;
private GameObject _playSpaceOrigin;
private void Awake()
{
Measure.Clear();
_puzzles = new List<PuzzleModuleDescription>(theme.puzzleTypes);
}
private void Start()
@@ -79,7 +82,10 @@ namespace EscapeRoomEngine.Engine.Runtime
var puzzlesAdded = 0;
var tries = 0;
Space space;
Passage exit;
Passage exit = null;
var puzzle = _puzzles[0];
_puzzles.RemoveAt(0);
do
{
@@ -90,19 +96,20 @@ namespace EscapeRoomEngine.Engine.Runtime
space = new Space(room, entrance);
// add exit
var exitDoor = new DoorModule(space, theme.exitDoorTypes.RandomElement());
if (!space.AddModuleWithRequirements(exitDoor))
throw new EngineException("Could not satisfy requirements for exit door.");
exit = new Passage(exitDoor);
// add puzzles
var puzzleCount = Utilities.Utilities.RandomInclusive(theme.puzzleCount.x, theme.puzzleCount.y);
for (var i = 0; i < puzzleCount; i++)
if (_puzzles.Count > 0)
{
if (space.AddModuleWithRequirements(Module.CreateModuleByType(space, theme.puzzleTypes.RandomElement())))
var exitDoor = new DoorModule(space, theme.exitDoorTypes.RandomElement());
if (!space.AddModuleWithRequirements(exitDoor))
{
puzzlesAdded++;
throw new EngineException("Could not satisfy requirements for exit door.");
}
exit = new Passage(exitDoor);
}
// add puzzle
if (space.AddModuleWithRequirements(Module.CreateModuleByType(space, puzzle)))
{
puzzlesAdded++;
}
} while (puzzlesAdded == 0 && tries < maxSpaceGenerationTries);

View File

@@ -12,6 +12,19 @@ namespace EscapeRoomEngine.Engine.Runtime
public class GameControl : MonoBehaviour
{
public static GameControl Instance
{
get
{
if (_foundGameControl == null)
{
_foundGameControl = FindObjectOfType<GameControl>();
}
return _foundGameControl;
}
}
private static GameControl _foundGameControl;
[SerializeField] private Button startButton, stopButton, pauseButton, resumeButton, addMinuteButton, removeMinuteButton;
[SerializeField] private Text timeText;

View File

@@ -19,7 +19,6 @@ namespace EscapeRoomEngine.Engine.Runtime.Measurements
};
Logger.Log($"Started measuring {puzzle}", LogType.Measuring);
LogAllMeasurements();
}
public static void Solve(PuzzleModuleDescription puzzle)
@@ -40,15 +39,6 @@ namespace EscapeRoomEngine.Engine.Runtime.Measurements
Logger.Log(PuzzleStorage.Instance.Session.ToString(), LogType.Measuring);
}
public static void LogAllMeasurements()
{
Engine.DefaultEngine.theme.puzzleTypes.ForEach(puzzle =>
{
Logger.Log(PuzzleStorage.Instance.LoadOrNew(puzzle).ToString(), LogType.Measuring);
});
Logger.Log(PuzzleStorage.Instance.Session.ToString(), LogType.Measuring);
}
public static void Clear() => _runningMeasurements = new Dictionary<int, PuzzleMeasurement>();
}
}

View File

@@ -12,6 +12,8 @@ namespace EscapeRoomEngine.Engine.Runtime
{
internal Passage entrance, exit;
internal GameObject roomObject;
internal bool LastRoom => exit == null;
private readonly List<Space> _spaces = new();
private readonly List<PuzzleModule> _puzzles = new();
@@ -36,7 +38,7 @@ namespace EscapeRoomEngine.Engine.Runtime
Logger.Log($"Skipping {this}...", LogType.PuzzleFlow);
_puzzles.ForEach(puzzle => puzzle.PuzzleState.Solve());
if (_puzzles.Count == 0)
if (_puzzles.Count == 0 && !LastRoom)
{
exit.fromOut.DoorState.Unlock();
}
@@ -57,7 +59,11 @@ namespace EscapeRoomEngine.Engine.Runtime
{
if (type == PuzzleEventType.Solved)
{
if (_puzzles.All(p => p.PuzzleState.Solved))
if (LastRoom)
{
GameControl.Instance.StopGame();
}
else if (_puzzles.All(p => p.PuzzleState.Solved))
{
exit.fromOut.DoorState.Unlock();
}
@@ -73,7 +79,7 @@ namespace EscapeRoomEngine.Engine.Runtime
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):
case DoorEventType.Unlocked when !LastRoom && door.Equals(exit.fromOut):
Engine.DefaultEngine.GenerateRoom();
break;
// start measurements on every puzzle as soon as the player enters the last room