From 12b0acbcbe04773dfe47a68134fbb13f100d3ec0 Mon Sep 17 00:00:00 2001 From: "milan @ U1" Date: Wed, 14 Dec 2022 21:57:03 +0100 Subject: [PATCH] estimate ui --- .../Prefabs/UI/Gamemaster Canvas.prefab | 489 +++++++++++------- Assets/Engine/Runtime/Engine.cs | 26 +- Assets/Engine/Runtime/Measurements/Measure.cs | 8 + .../Runtime/Measurements/PuzzleStorage.cs | 2 +- Assets/Engine/Runtime/Room.cs | 12 +- Assets/Engine/Runtime/UI/GameControl.cs | 38 +- Assets/Scenes/TestScene.unity | 4 +- 7 files changed, 368 insertions(+), 211 deletions(-) diff --git a/Assets/Engine/Assets/Prefabs/UI/Gamemaster Canvas.prefab b/Assets/Engine/Assets/Prefabs/UI/Gamemaster Canvas.prefab index 7693d8b..da42ef3 100644 --- a/Assets/Engine/Assets/Prefabs/UI/Gamemaster Canvas.prefab +++ b/Assets/Engine/Assets/Prefabs/UI/Gamemaster Canvas.prefab @@ -30,13 +30,15 @@ RectTransform: m_Children: - {fileID: 4522052738508588346} - {fileID: 3651690039212746853} + - {fileID: 6111926162705994754} + - {fileID: 1606827657543776964} + - {fileID: 8506001028645180302} + - {fileID: 5237193151499999207} - {fileID: 4759128159024176926} - {fileID: 1891571209360683323} - {fileID: 6434422615423022383} - {fileID: 3909503323894949288} - {fileID: 7086005505455629097} - - {fileID: 8506001028645180302} - - {fileID: 5237193151499999207} - {fileID: 76348826299067250} - {fileID: 1019622809213071054} m_Father: {fileID: 4522052738963994966} @@ -195,7 +197,6 @@ RectTransform: m_Children: - {fileID: 7182894751559651105} - {fileID: 9062548758054197003} - - {fileID: 482424009816971294} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -284,8 +285,10 @@ MonoBehaviour: addTimeButton: {fileID: 76348826299067249} removeTimeButton: {fileID: 1019622809213071053} timeText: {fileID: 3651690039212746852} - targetTimeText: {fileID: 7086005505455629096} + roomTimeText: {fileID: 1606827657543776965} estimateTimeText: {fileID: 5237193151499999206} + targetTimeText: {fileID: 7086005505455629096} + uiUpdateInterval: 1 gameState: 0 --- !u!1 &5267753817356931382 GameObject: @@ -650,7 +653,7 @@ PrefabInstance: - target: {fileID: 5840570772713645737, guid: a0d402627dc805e42ab9e84487b9871b, type: 3} propertyPath: m_AnchoredPosition.y - value: -34 + value: -94 objectReference: {fileID: 0} - target: {fileID: 5840570772713645737, guid: a0d402627dc805e42ab9e84487b9871b, type: 3} @@ -863,7 +866,7 @@ PrefabInstance: - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} propertyPath: m_AnchoredPosition.y - value: -70 + value: -130 objectReference: {fileID: 0} - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} @@ -938,7 +941,7 @@ PrefabInstance: - target: {fileID: 5840570772713645737, guid: a0d402627dc805e42ab9e84487b9871b, type: 3} propertyPath: m_AnchoredPosition.y - value: -34 + value: -94 objectReference: {fileID: 0} - target: {fileID: 5840570772713645737, guid: a0d402627dc805e42ab9e84487b9871b, type: 3} @@ -1429,6 +1432,159 @@ RectTransform: type: 3} m_PrefabInstance: {fileID: 2501054174014209494} m_PrefabAsset: {fileID: 0} +--- !u!1001 &3645369568327693290 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 7182894751559651105} + m_Modifications: + - target: {fileID: 2655555272253868329, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_Name + value: Room Time + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_Pivot.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_AnchorMin.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_SizeDelta.x + value: 46 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_SizeDelta.y + value: 30 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -46 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -34 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868335, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_Text + value: '00:00 + +' + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868335, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_FontData.m_Alignment + value: 2 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} +--- !u!224 &1606827657543776964 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + m_PrefabInstance: {fileID: 3645369568327693290} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1606827657543776965 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 2655555272253868335, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + m_PrefabInstance: {fileID: 3645369568327693290} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1001 &3709675561396504867 PrefabInstance: m_ObjectHideFlags: 0 @@ -1535,7 +1691,7 @@ PrefabInstance: - target: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, type: 3} propertyPath: m_AnchoredPosition.y - value: -129 + value: -159 objectReference: {fileID: 0} - target: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, type: 3} @@ -1615,175 +1771,6 @@ RectTransform: type: 3} m_PrefabInstance: {fileID: 3709675561396504867} m_PrefabAsset: {fileID: 0} ---- !u!1001 &3802654961677695567 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 4522052738963994966} - m_Modifications: - - target: {fileID: 3635623839229914385, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_Text - value: Exit - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501520, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_Name - value: Exit - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_Pivot.x - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_Pivot.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_RootOrder - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_AnchorMax.x - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_AnchorMin.x - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_AnchorMin.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_SizeDelta.x - value: 40.410492 - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_SizeDelta.y - value: 30 - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_AnchoredPosition.x - value: -20 - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 16 - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501522, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.size - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501522, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Mode - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501522, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 6342815206448132038} - - target: {fileID: 3635623840709501522, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_CallState - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501522, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName - value: ExitGame - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501522, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName - value: Escape_Room_Engine.Engine.Scripts.GameControl, Assembly-CSharp - objectReference: {fileID: 0} - - target: {fileID: 3635623840709501522, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName - value: UnityEngine.Object, UnityEngine - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: c7b840466ebfae1468d75282ab9334f5, type: 3} ---- !u!224 &482424009816971294 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, - type: 3} - m_PrefabInstance: {fileID: 3802654961677695567} - m_PrefabAsset: {fileID: 0} --- !u!1001 &4346599348938312863 PrefabInstance: m_ObjectHideFlags: 0 @@ -1890,7 +1877,7 @@ PrefabInstance: - target: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, type: 3} propertyPath: m_AnchoredPosition.y - value: -129 + value: -159 objectReference: {fileID: 0} - target: {fileID: 3635623840709501521, guid: c7b840466ebfae1468d75282ab9334f5, type: 3} @@ -2071,7 +2058,7 @@ PrefabInstance: - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} propertyPath: m_AnchoredPosition.y - value: -70 + value: -130 objectReference: {fileID: 0} - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} @@ -2180,7 +2167,7 @@ PrefabInstance: - target: {fileID: 5840570772713645737, guid: a0d402627dc805e42ab9e84487b9871b, type: 3} propertyPath: m_AnchoredPosition.y - value: -34 + value: -94 objectReference: {fileID: 0} - target: {fileID: 5840570772713645737, guid: a0d402627dc805e42ab9e84487b9871b, type: 3} @@ -2220,12 +2207,12 @@ PrefabInstance: - target: {fileID: 5840570772713645738, guid: a0d402627dc805e42ab9e84487b9871b, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName - value: StopGame + value: ExitGame objectReference: {fileID: 0} - target: {fileID: 5840570772713645738, guid: a0d402627dc805e42ab9e84487b9871b, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName - value: EscapeRoomEngine.Engine.Runtime.GameControl, Engine + value: EscapeRoomEngine.Engine.Runtime.UI.GameControl, Engine objectReference: {fileID: 0} - target: {fileID: 5840570772713645738, guid: a0d402627dc805e42ab9e84487b9871b, type: 3} @@ -2356,7 +2343,7 @@ PrefabInstance: - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} propertyPath: m_AnchoredPosition.y - value: -99 + value: -65 objectReference: {fileID: 0} - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} @@ -2490,7 +2477,7 @@ PrefabInstance: - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} propertyPath: m_AnchoredPosition.y - value: -99 + value: -65 objectReference: {fileID: 0} - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} @@ -2542,3 +2529,137 @@ RectTransform: type: 3} m_PrefabInstance: {fileID: 7814961547219803849} m_PrefabAsset: {fileID: 0} +--- !u!1001 &8073688616030330156 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 7182894751559651105} + m_Modifications: + - target: {fileID: 2655555272253868329, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_Name + value: Room Time Label + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_Pivot.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_SizeDelta.x + value: 56 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_SizeDelta.y + value: 30 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -34 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868335, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_Text + value: 'Room:' + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} +--- !u!224 &6111926162705994754 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + m_PrefabInstance: {fileID: 8073688616030330156} + m_PrefabAsset: {fileID: 0} diff --git a/Assets/Engine/Runtime/Engine.cs b/Assets/Engine/Runtime/Engine.cs index 000d94a..55a2beb 100644 --- a/Assets/Engine/Runtime/Engine.cs +++ b/Assets/Engine/Runtime/Engine.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using EscapeRoomEngine.Engine.Runtime.Measurements; using EscapeRoomEngine.Engine.Runtime.Modules; +using EscapeRoomEngine.Engine.Runtime.UI; using EscapeRoomEngine.Engine.Runtime.Utilities; using NaughtyAttributes; using UnityEngine; @@ -27,9 +28,10 @@ namespace EscapeRoomEngine.Engine.Runtime public int NumberOfRooms => _rooms.Count; public IOption CurrentRoom => NumberOfRooms > 0 ? Some.Of(_rooms[^1]) : None.New(); + public float EstimatedTimeRemaining { get; private set; } private readonly List _rooms = new(); - private List _puzzles; + private List _availablePuzzles, _plannedPuzzles; private GameObject _playSpaceOrigin; private void Awake() @@ -38,7 +40,8 @@ namespace EscapeRoomEngine.Engine.Runtime Measure.Clear(); - _puzzles = new List(theme.puzzleTypes); + _availablePuzzles = new List(theme.puzzleTypes); + _plannedPuzzles = new List(_availablePuzzles); } private void Start() @@ -70,6 +73,7 @@ namespace EscapeRoomEngine.Engine.Runtime Instantiate(theme.environment, room.roomObject.transform, false); } + GameControl.Instance.TimeInRoom = 0; UpdateUI(); } @@ -79,9 +83,8 @@ namespace EscapeRoomEngine.Engine.Runtime var tries = 0; Space space; Passage exit = null; + var puzzle = PlanPuzzles(); - var puzzle = _puzzles.PopRandomElement(); - do { tries++; @@ -91,7 +94,7 @@ namespace EscapeRoomEngine.Engine.Runtime space = new Space(room, entrance); // add exit - if (_puzzles.Count > 0) + if (_plannedPuzzles.Count > 0) { var exitDoor = new DoorModule(space, theme.exitDoorTypes.RandomElement()); if (!space.AddModuleWithRequirements(exitDoor)) @@ -116,6 +119,19 @@ namespace EscapeRoomEngine.Engine.Runtime room.AddSpace(space, exit); } + /// + /// Updates the list of puzzles planned for this run and returns the puzzle to put in the next room. + /// + private PuzzleModuleDescription PlanPuzzles() + { + + var nextPuzzle = _plannedPuzzles.PopRandomElement(); + + EstimatedTimeRemaining = Measure.AverageTime(_plannedPuzzles); + + return nextPuzzle; + } + #endregion public void HidePreviousRoom(bool destroy = true) diff --git a/Assets/Engine/Runtime/Measurements/Measure.cs b/Assets/Engine/Runtime/Measurements/Measure.cs index b8702b2..14f9855 100644 --- a/Assets/Engine/Runtime/Measurements/Measure.cs +++ b/Assets/Engine/Runtime/Measurements/Measure.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Linq; using EscapeRoomEngine.Engine.Runtime.Modules; using EscapeRoomEngine.Engine.Runtime.Utilities; using UnityEngine; @@ -17,6 +18,13 @@ namespace EscapeRoomEngine.Engine.Runtime.Measurements private static Dictionary _runningMeasurements; private static Session _currentSession; + public static float AverageTime(IEnumerable puzzles) => + puzzles.Sum(puzzle => PuzzleStorage.Instance.Load(puzzle).AverageTimeToSolve); + public static float AverageTime(PuzzleModuleDescription puzzle) => + PuzzleStorage.Instance.Load(puzzle).AverageTimeToSolve; + public static float AverageTime(Room room) => + room.puzzles.Sum(puzzle => AverageTime((PuzzleModuleDescription)puzzle.description)); + public static void StartMeasuring(PuzzleModuleDescription puzzle) { _runningMeasurements[puzzle.Id] = new PuzzleMeasurement diff --git a/Assets/Engine/Runtime/Measurements/PuzzleStorage.cs b/Assets/Engine/Runtime/Measurements/PuzzleStorage.cs index 88b7125..24b269b 100644 --- a/Assets/Engine/Runtime/Measurements/PuzzleStorage.cs +++ b/Assets/Engine/Runtime/Measurements/PuzzleStorage.cs @@ -63,7 +63,7 @@ namespace EscapeRoomEngine.Engine.Runtime.Measurements private Puzzle LoadOrNew(PuzzleModuleDescription puzzle) => _realm.Find(puzzle.Id) ?? New(puzzle); - private Puzzle Load(PuzzleModuleDescription puzzle) => _realm.Find(puzzle.Id); + public Puzzle Load(PuzzleModuleDescription puzzle) => _realm.Find(puzzle.Id); public void Delete(PuzzleModuleDescription puzzle) { diff --git a/Assets/Engine/Runtime/Room.cs b/Assets/Engine/Runtime/Room.cs index a41b5ef..838b6f6 100644 --- a/Assets/Engine/Runtime/Room.cs +++ b/Assets/Engine/Runtime/Room.cs @@ -13,11 +13,11 @@ namespace EscapeRoomEngine.Engine.Runtime { internal Passage entrance, exit; internal GameObject roomObject; + internal readonly List puzzles = new(); internal bool LastRoom => exit == null; private readonly List _spaces = new(); - private readonly List _puzzles = new(); private readonly List _doors = new(); internal Room(Passage entrance) @@ -38,8 +38,8 @@ namespace EscapeRoomEngine.Engine.Runtime { Logger.Log($"Skipping {this}...", LogType.PuzzleFlow); - _puzzles.ForEach(puzzle => puzzle.PuzzleState.Solve()); - if (_puzzles.Count == 0 && !LastRoom) + puzzles.ForEach(puzzle => puzzle.PuzzleState.Solve()); + if (puzzles.Count == 0 && !LastRoom) { exit.fromOut.DoorState.Unlock(); } @@ -52,7 +52,7 @@ namespace EscapeRoomEngine.Engine.Runtime internal void AddPuzzle(PuzzleModule puzzle) { - _puzzles.Add(puzzle); + puzzles.Add(puzzle); puzzle.PuzzleState.PuzzleEvent += OnPuzzleEvent; } @@ -66,7 +66,7 @@ namespace EscapeRoomEngine.Engine.Runtime { GameControl.Instance.StopGame(); } - else if (_puzzles.All(p => p.PuzzleState.Solved)) + else if (puzzles.All(p => p.PuzzleState.Solved)) { exit.fromOut.DoorState.Unlock(); } @@ -87,7 +87,7 @@ namespace EscapeRoomEngine.Engine.Runtime break; // start measurements on every puzzle as soon as the player enters the last room case DoorEventType.ExitedFrom when door.Equals(entrance.toIn) && Engine.Instance.CurrentRoom.Contains(this): - _puzzles.ForEach(puzzle => Measure.StartMeasuring((PuzzleModuleDescription)puzzle.description)); + puzzles.ForEach(puzzle => Measure.StartMeasuring((PuzzleModuleDescription)puzzle.description)); Engine.Instance.HidePreviousRoom(); break; } diff --git a/Assets/Engine/Runtime/UI/GameControl.cs b/Assets/Engine/Runtime/UI/GameControl.cs index 1db2b24..a0d67d7 100644 --- a/Assets/Engine/Runtime/UI/GameControl.cs +++ b/Assets/Engine/Runtime/UI/GameControl.cs @@ -19,24 +19,27 @@ namespace EscapeRoomEngine.Engine.Runtime.UI [BoxGroup("Internal")] [SerializeField] private Button startButton, stopButton, pauseButton, addTimeButton, removeTimeButton; [BoxGroup("Internal")] [SerializeField] - private Text timeText, targetTimeText, estimateTimeText; + private Text timeText, roomTimeText, estimateTimeText, targetTimeText; [BoxGroup("Internal")] [SerializeField] private float uiUpdateInterval = 1; [HideInInspector] public GameState gameState = GameState.Stopped; - private float _timeElapsed, _targetTime; + public float TimeElapsed { get; private set; } + public float TimeInRoom { get; set; } + public float TargetTime { get; private set; } + private float _previousUIUpdate; private void Awake() { Instance = this; - - _targetTime = Engine.Instance.initialTargetTime; } private void Start() { + TargetTime = Engine.Instance.initialTargetTime; + SetTimeText(); } @@ -45,7 +48,8 @@ namespace EscapeRoomEngine.Engine.Runtime.UI // update time if (gameState == GameState.Running) { - _timeElapsed += Time.deltaTime; + TimeElapsed += Time.deltaTime; + TimeInRoom += Time.deltaTime; } // update ui @@ -61,7 +65,7 @@ namespace EscapeRoomEngine.Engine.Runtime.UI stopButton.interactable = gameState != GameState.Stopped; pauseButton.interactable = gameState is GameState.Running or GameState.Paused; addTimeButton.interactable = gameState != GameState.Stopped; - removeTimeButton.interactable = gameState != GameState.Stopped && _targetTime >= _timeElapsed + 60; + removeTimeButton.interactable = gameState != GameState.Stopped && TargetTime >= TimeElapsed + 60; } #region Time Controls @@ -70,7 +74,7 @@ namespace EscapeRoomEngine.Engine.Runtime.UI { gameState = GameState.Running; - _timeElapsed = 0; + TimeElapsed = 0; // generate the first room if it hasn't been generated yet Engine.Instance.CurrentRoom.Match(none: () => Engine.Instance.GenerateRoom()); @@ -84,7 +88,7 @@ namespace EscapeRoomEngine.Engine.Runtime.UI if (gameState != GameState.Stopped) { // was running - Measure.EndSession(_timeElapsed); + Measure.EndSession(TimeElapsed); } gameState = GameState.Stopped; @@ -112,17 +116,25 @@ namespace EscapeRoomEngine.Engine.Runtime.UI /// The amount of seconds that will be added to the time. Can be negative to remove time. public void ChangeTime(int seconds) { - if (_targetTime + seconds >= _timeElapsed) + if (TargetTime + seconds >= TimeElapsed) { - _targetTime += seconds; + TargetTime += seconds; } } private void SetTimeText() { - timeText.text = TimeToText(_timeElapsed); - targetTimeText.text = TimeToText(_targetTime); - estimateTimeText.text = TimeToText(_timeElapsed); + timeText.text = TimeToText(TimeElapsed); + roomTimeText.text = TimeToText(TimeInRoom); + targetTimeText.text = TimeToText(TargetTime); + + Engine.Instance.CurrentRoom.Match(some: room => + { + estimateTimeText.text = TimeToText( + TimeElapsed - TimeInRoom + + Mathf.Max(TimeInRoom, Measure.AverageTime(room)) + + Engine.Instance.EstimatedTimeRemaining); + }); } private static string TimeToText(float time) => $"{time.ToTimeSpan():mm':'ss}"; diff --git a/Assets/Scenes/TestScene.unity b/Assets/Scenes/TestScene.unity index 0ef30f6..e136414 100644 --- a/Assets/Scenes/TestScene.unity +++ b/Assets/Scenes/TestScene.unity @@ -567,7 +567,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: maxSpaceGenerationTries: 1000 - targetTime: 300 + initialTargetTime: 300 roomOffset: {x: 0, y: 1000, z: 0} theme: {fileID: 11400000, guid: 568d9a7d70f3edb4cb6db66a0010f105, type: 2} --- !u!4 &1568048335 @@ -598,7 +598,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: loggingEnabled: 1 - typeFilter: 0000000009000000 + typeFilter: 00000000 --- !u!114 &1568048339 MonoBehaviour: m_ObjectHideFlags: 0