From 429f9536a988e0c0d4b55b55c6ddf43bccd9809f Mon Sep 17 00:00:00 2001 From: milan Date: Thu, 8 Dec 2022 14:04:00 +0100 Subject: [PATCH] last room and puzzle order --- Assets/Desert/Assets/Desert.asset | 9 ++-- .../Assets/Prefabs/Desert XR Origin.prefab | 8 ++- .../Assets/Prefabs/Gamemaster Canvas.prefab | 54 +++++++++---------- Assets/Engine/Runtime/Engine.cs | 29 ++++++---- Assets/Engine/Runtime/GameControl.cs | 13 +++++ Assets/Engine/Runtime/Measurements/Measure.cs | 10 ---- Assets/Engine/Runtime/Room.cs | 12 +++-- Assets/Scenes/TestScene.unity | 2 +- ProjectSettings/ProjectSettings.asset | 25 +++++---- 9 files changed, 91 insertions(+), 71 deletions(-) diff --git a/Assets/Desert/Assets/Desert.asset b/Assets/Desert/Assets/Desert.asset index 1021a7c..ebac74a 100644 --- a/Assets/Desert/Assets/Desert.asset +++ b/Assets/Desert/Assets/Desert.asset @@ -12,7 +12,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 28d04249c1c4438da94b524e7d4afff2, type: 3} m_Name: Desert m_EditorClassIdentifier: - minRoomSize: {x: 4, y: 2} + minRoomSize: {x: 3, y: 2} playSpace: {x: 4, y: 2} spaceTile: {fileID: 3229991053255736984, guid: b8f192f7cebe686468af6b1a71c4605b, type: 3} @@ -32,9 +32,8 @@ MonoBehaviour: - {fileID: 11400000, guid: 83d6800536b1df14287ff2cd8e0d58ce, type: 2} puzzleCount: {x: 1, y: 1} puzzleTypes: - - {fileID: 11400000, guid: 3f79d37154e44ca47b54bb43bbe8d9aa, type: 2} - - {fileID: 11400000, guid: 8707242279bb6c541a12dc4491388c42, type: 2} - - {fileID: 11400000, guid: 3e5e65f1afdbf7f458b2bcc8b90ec1ff, type: 2} - - {fileID: 11400000, guid: 15dcebb677f5df940839eaaa50274294, type: 2} - {fileID: 11400000, guid: ecc412010abd45a4aaa7d364b6c3789c, type: 2} + - {fileID: 11400000, guid: 3f79d37154e44ca47b54bb43bbe8d9aa, type: 2} + - {fileID: 11400000, guid: 15dcebb677f5df940839eaaa50274294, type: 2} + - {fileID: 11400000, guid: 8707242279bb6c541a12dc4491388c42, type: 2} - {fileID: 11400000, guid: ee5a44432e80cd64689be3ff34750339, type: 2} diff --git a/Assets/Desert/Assets/Prefabs/Desert XR Origin.prefab b/Assets/Desert/Assets/Prefabs/Desert XR Origin.prefab index 5a4f928..0fc3c39 100644 --- a/Assets/Desert/Assets/Prefabs/Desert XR Origin.prefab +++ b/Assets/Desert/Assets/Prefabs/Desert XR Origin.prefab @@ -5,7 +5,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: - serializedVersion: 2 + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 419816427646908932, guid: c84e0198f66a41b4294f6e8e585192a4, @@ -91,7 +91,13 @@ PrefabInstance: objectReference: {fileID: 3680365890358827431, guid: 7bb2b5aee7d244943b4f1bb2f6606ac2, type: 3} m_RemovedComponents: [] + m_RemovedGameObjects: [] m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 419816428804372187, guid: c84e0198f66a41b4294f6e8e585192a4, + type: 3} + insertIndex: -1 + addedObject: {fileID: 542038026734091070} m_SourcePrefab: {fileID: 100100000, guid: c84e0198f66a41b4294f6e8e585192a4, type: 3} --- !u!1 &6854256365856247459 stripped GameObject: diff --git a/Assets/Engine/Assets/Prefabs/Gamemaster Canvas.prefab b/Assets/Engine/Assets/Prefabs/Gamemaster Canvas.prefab index e670013..bd5e79b 100644 --- a/Assets/Engine/Assets/Prefabs/Gamemaster Canvas.prefab +++ b/Assets/Engine/Assets/Prefabs/Gamemaster Canvas.prefab @@ -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: diff --git a/Assets/Engine/Runtime/Engine.cs b/Assets/Engine/Runtime/Engine.cs index e6e3b2f..18cc3d9 100644 --- a/Assets/Engine/Runtime/Engine.cs +++ b/Assets/Engine/Runtime/Engine.cs @@ -37,11 +37,14 @@ namespace EscapeRoomEngine.Engine.Runtime public IOption CurrentRoom => NumberOfRooms > 0 ? Some.Of(_rooms[^1]) : None.New(); private readonly List _rooms = new(); + private List _puzzles; private GameObject _playSpaceOrigin; private void Awake() { Measure.Clear(); + + _puzzles = new List(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); diff --git a/Assets/Engine/Runtime/GameControl.cs b/Assets/Engine/Runtime/GameControl.cs index 9c8be00..119abc3 100644 --- a/Assets/Engine/Runtime/GameControl.cs +++ b/Assets/Engine/Runtime/GameControl.cs @@ -12,6 +12,19 @@ namespace EscapeRoomEngine.Engine.Runtime public class GameControl : MonoBehaviour { + public static GameControl Instance + { + get + { + if (_foundGameControl == null) + { + _foundGameControl = FindObjectOfType(); + } + return _foundGameControl; + } + } + private static GameControl _foundGameControl; + [SerializeField] private Button startButton, stopButton, pauseButton, resumeButton, addMinuteButton, removeMinuteButton; [SerializeField] private Text timeText; diff --git a/Assets/Engine/Runtime/Measurements/Measure.cs b/Assets/Engine/Runtime/Measurements/Measure.cs index 2f219b6..0383645 100644 --- a/Assets/Engine/Runtime/Measurements/Measure.cs +++ b/Assets/Engine/Runtime/Measurements/Measure.cs @@ -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(); } } \ No newline at end of file diff --git a/Assets/Engine/Runtime/Room.cs b/Assets/Engine/Runtime/Room.cs index 3120b79..6b8c543 100644 --- a/Assets/Engine/Runtime/Room.cs +++ b/Assets/Engine/Runtime/Room.cs @@ -12,6 +12,8 @@ namespace EscapeRoomEngine.Engine.Runtime { internal Passage entrance, exit; internal GameObject roomObject; + + internal bool LastRoom => exit == null; private readonly List _spaces = new(); private readonly List _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 diff --git a/Assets/Scenes/TestScene.unity b/Assets/Scenes/TestScene.unity index 3df15a1..d5daa60 100644 --- a/Assets/Scenes/TestScene.unity +++ b/Assets/Scenes/TestScene.unity @@ -655,7 +655,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 9a9b6b8b557abbb4ab172444615ebf23, type: 3} m_Name: m_EditorClassIdentifier: - maxSpaceGenerationTries: 10 + maxSpaceGenerationTries: 1000 roomOffset: {x: 0, y: 1000, z: 0} theme: {fileID: 11400000, guid: 568d9a7d70f3edb4cb6db66a0010f105, type: 2} --- !u!4 &1568048335 diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index c590344..e7532f3 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -3,7 +3,7 @@ --- !u!129 &1 PlayerSettings: m_ObjectHideFlags: 0 - serializedVersion: 24 + serializedVersion: 25 productGUID: b368a972d2b31304b8a0cc9ae2876edc AndroidProfiler: 0 AndroidFilterTouchesWhenObscured: 0 @@ -131,12 +131,7 @@ PlayerSettings: vulkanEnablePreTransform: 0 vulkanEnableLateAcquireNextImage: 0 vulkanEnableCommandBufferRecycling: 1 - m_SupportedAspectRatios: - 4:3: 1 - 5:4: 1 - 16:10: 1 - 16:9: 1 - Others: 1 + loadStoreDebugModeEnabled: 0 bundleVersion: 0.1.0 preloadedAssets: - {fileID: 0} @@ -150,6 +145,7 @@ PlayerSettings: enable360StereoCapture: 0 isWsaHolographicRemotingEnabled: 0 enableFrameTimingStats: 0 + enableOpenGLProfilerGPURecorders: 1 useHDRDisplay: 0 D3DHDRBitDepth: 0 m_ColorGamuts: 00000000 @@ -256,6 +252,7 @@ PlayerSettings: androidSplashScreen: {fileID: 0} AndroidKeystoreName: AndroidKeyaliasName: + AndroidEnableArmv9SecurityFeatures: 0 AndroidBuildApkPerCpuArchitecture: 0 AndroidTVCompatibility: 0 AndroidIsGame: 1 @@ -269,7 +266,6 @@ PlayerSettings: banner: {fileID: 0} androidGamepadSupportLevel: 0 chromeosInputEmulation: 1 - AndroidMinifyWithR8: 0 AndroidMinifyRelease: 0 AndroidMinifyDebug: 0 AndroidValidateAppBundleSize: 1 @@ -527,6 +523,7 @@ PlayerSettings: m_BuildTargetGroupLightmapEncodingQuality: [] m_BuildTargetGroupHDRCubemapEncodingQuality: [] m_BuildTargetGroupLightmapSettings: [] + m_BuildTargetGroupLoadStoreDebugModeSettings: [] m_BuildTargetNormalMapEncoding: [] m_BuildTargetDefaultTextureCompressionFormat: [] playModeTestRunnerEnabled: 0 @@ -679,7 +676,6 @@ PlayerSettings: switchNetworkInterfaceManagerInitializeEnabled: 1 switchPlayerConnectionEnabled: 1 switchUseNewStyleFilepaths: 0 - switchUseLegacyFmodPriorities: 0 switchUseMicroSleepForYield: 1 switchEnableRamDiskSupport: 0 switchMicroSleepForYieldTime: 25 @@ -767,6 +763,7 @@ PlayerSettings: webGLMemorySize: 32 webGLExceptionSupport: 1 webGLNameFilesAsHashes: 0 + webGLShowDiagnostics: 0 webGLDataCaching: 1 webGLDebugSymbols: 0 webGLEmscriptenArgs: @@ -797,12 +794,10 @@ PlayerSettings: suppressCommonWarnings: 1 allowUnsafeCode: 0 useDeterministicCompilation: 1 - enableRoslynAnalyzers: 1 selectedPlatform: 0 additionalIl2CppArgs: scriptingRuntimeVersion: 1 gcIncremental: 0 - assemblyVersionValidation: 1 gcWBarrierValidation: 0 apiCompatibilityLevelPerPlatform: {} m_RenderingPath: 1 @@ -875,8 +870,13 @@ PlayerSettings: luminVersion: m_VersionCode: 1 m_VersionName: + hmiPlayerDataPath: + hmiForceSRGBBlit: 1 + embeddedLinuxEnableGamepadInput: 1 + hmiCpuConfiguration: apiCompatibilityLevel: 6 activeInputHandler: 2 + windowsGamepadBackendHint: 0 cloudProjectId: framebufferDepthMemorylessMode: 0 qualitySettingsNames: [] @@ -884,7 +884,6 @@ PlayerSettings: organizationId: cloudEnabled: 0 legacyClampBlendShapeWeights: 0 - playerDataPath: - forceSRGBBlit: 1 + hmiLoadingImage: {fileID: 0} virtualTexturingSupportEnabled: 0 insecureHttpOption: 0