From 033989a85e77b2d51328b4722c4446cd278576bd Mon Sep 17 00:00:00 2001 From: milan Date: Sat, 13 May 2023 13:06:08 +0200 Subject: [PATCH] increase room diversity, improve ui --- .../Prefabs/UI/Gamemaster Canvas.prefab | 645 ++++++++++++++++-- .../Prefabs/UI/Puzzle Plan Entry.prefab | 10 +- Assets/Engine/Runtime/Engine.cs | 8 +- Assets/Engine/Runtime/Measurements/Measure.cs | 7 + Assets/Engine/Runtime/Space.cs | 4 - Assets/Engine/Runtime/UI/Elements.meta | 3 - Assets/Engine/Runtime/UI/GameControl.cs | 31 +- .../Runtime/UI/{Elements => }/PauseButton.cs | 0 .../UI/{Elements => }/PauseButton.cs.meta | 0 Assets/Engine/Runtime/UI/PersistedSlider.cs | 35 + .../Engine/Runtime/UI/PersistedSlider.cs.meta | 3 + Assets/Engine/Runtime/UI/PersistedToggle.cs | 31 + .../Engine/Runtime/UI/PersistedToggle.cs.meta | 3 + Assets/Engine/Runtime/UI/PersistedUI.cs | 21 + Assets/Engine/Runtime/UI/PersistedUI.cs.meta | 3 + .../Runtime/UI/{Elements => }/PuzzlePlan.cs | 0 .../UI/{Elements => }/PuzzlePlan.cs.meta | 0 .../UI/{Elements => }/PuzzlePlanEntry.cs | 2 +- .../UI/{Elements => }/PuzzlePlanEntry.cs.meta | 0 Assets/Engine/Runtime/Utilities/Utilities.cs | 10 + .../Station46/Modules/Rings/Scripts/Ring.cs | 3 +- 21 files changed, 736 insertions(+), 83 deletions(-) delete mode 100644 Assets/Engine/Runtime/UI/Elements.meta rename Assets/Engine/Runtime/UI/{Elements => }/PauseButton.cs (100%) rename Assets/Engine/Runtime/UI/{Elements => }/PauseButton.cs.meta (100%) create mode 100644 Assets/Engine/Runtime/UI/PersistedSlider.cs create mode 100644 Assets/Engine/Runtime/UI/PersistedSlider.cs.meta create mode 100644 Assets/Engine/Runtime/UI/PersistedToggle.cs create mode 100644 Assets/Engine/Runtime/UI/PersistedToggle.cs.meta create mode 100644 Assets/Engine/Runtime/UI/PersistedUI.cs create mode 100644 Assets/Engine/Runtime/UI/PersistedUI.cs.meta rename Assets/Engine/Runtime/UI/{Elements => }/PuzzlePlan.cs (100%) rename Assets/Engine/Runtime/UI/{Elements => }/PuzzlePlan.cs.meta (100%) rename Assets/Engine/Runtime/UI/{Elements => }/PuzzlePlanEntry.cs (89%) rename Assets/Engine/Runtime/UI/{Elements => }/PuzzlePlanEntry.cs.meta (100%) diff --git a/Assets/Engine/Assets/Prefabs/UI/Gamemaster Canvas.prefab b/Assets/Engine/Assets/Prefabs/UI/Gamemaster Canvas.prefab index 158fca6..fe44658 100644 --- a/Assets/Engine/Assets/Prefabs/UI/Gamemaster Canvas.prefab +++ b/Assets/Engine/Assets/Prefabs/UI/Gamemaster Canvas.prefab @@ -29,6 +29,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 6287037411157557552} + - {fileID: 5265268942059203344} - {fileID: 5512969436623976929} - {fileID: 5410716308468796752} - {fileID: 4041894032453896055} @@ -166,6 +167,7 @@ GameObject: m_Component: - component: {fileID: 1820410926439358110} - component: {fileID: 1208278212604960030} + - component: {fileID: 8234728732719160624} m_Layer: 5 m_Name: Length Slider m_TagString: Untagged @@ -246,20 +248,23 @@ MonoBehaviour: m_Value: 4 m_OnValueChanged: m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 6342815206448132038} - m_TargetAssemblyTypeName: EscapeRoomEngine.Engine.Runtime.UI.GameControl, - Engine - m_MethodName: SetRoomSize - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 + m_Calls: [] +--- !u!114 &8234728732719160624 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2504196432302044171} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2efb00aece2e423ba5e141ebf2f7111a, type: 3} + m_Name: + m_EditorClassIdentifier: + key: room_length + defaultValue: 4 + slider: {fileID: 1208278212604960030} + label: {fileID: 8421739936074329983} --- !u!1 &2801345200061880593 GameObject: m_ObjectHideFlags: 0 @@ -298,8 +303,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: 20, y: -205} - m_SizeDelta: {x: 320, y: 385} + m_AnchoredPosition: {x: 20, y: -229} + m_SizeDelta: {x: 320, y: 361} m_Pivot: {x: 0, y: 1} --- !u!114 &6766262628066891748 MonoBehaviour: @@ -313,7 +318,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: ad95894771b8478591e5f5abbe1d0244, type: 3} m_Name: m_EditorClassIdentifier: - entryOffset: {x: 0, y: -54} + entryOffset: {x: 0, y: -28} plan: {fileID: 6774799649923343634} currentPuzzle: {fileID: 2204590716513089870} entryPrefab: {fileID: 286020777690709323, guid: cad05994b2fb37746988912bce5a31f5, @@ -369,6 +374,83 @@ RectTransform: m_AnchoredPosition: {x: 20, y: -10} m_SizeDelta: {x: 110, y: 189} m_Pivot: {x: 0, y: 1} +--- !u!1 &3409796210664512320 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8863132458034001450} + - component: {fileID: 4722077811430021162} + - component: {fileID: 4760308196802381275} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8863132458034001450 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3409796210664512320} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6605681806948858281} + m_Father: {fileID: 5956299623804817548} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -147, y: -3} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 1, y: 1} +--- !u!222 &4722077811430021162 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3409796210664512320} + m_CullTransparentMesh: 1 +--- !u!114 &4760308196802381275 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3409796210664512320} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!1 &3745094239397758703 GameObject: m_ObjectHideFlags: 0 @@ -475,6 +557,7 @@ RectTransform: m_Children: - {fileID: 2787558276881847208} - {fileID: 3462504880841960080} + - {fileID: 5956299623804817548} - {fileID: 2514376435689683197} - {fileID: 6754372771656696047} m_Father: {fileID: 4522052738963994966} @@ -546,7 +629,6 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 - m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 25 m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 @@ -616,12 +698,11 @@ MonoBehaviour: estimateTimeText: {fileID: 5237193151499999206} targetTimeText: {fileID: 7086005505455629096} percentileText: {fileID: 6754372771656696046} - widthText: {fileID: 4041894032453896054} - lengthText: {fileID: 8421739936074329983} - roomWidth: {fileID: 177233965105736907} - roomLength: {fileID: 1208278212604960030} + roomWidth: {fileID: 9150080301006657351} + roomLength: {fileID: 8234728732719160624} roomSizeElement: {fileID: 6000588368100331823} puzzlePlan: {fileID: 6766262628066891748} + preferLessPlayed: {fileID: 4524651472136637311} gameState: 0 --- !u!1 &5089010474724971539 GameObject: @@ -633,6 +714,7 @@ GameObject: m_Component: - component: {fileID: 5410716308468796752} - component: {fileID: 177233965105736907} + - component: {fileID: 9150080301006657351} m_Layer: 5 m_Name: Width Slider m_TagString: Untagged @@ -713,20 +795,23 @@ MonoBehaviour: m_Value: 2 m_OnValueChanged: m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 6342815206448132038} - m_TargetAssemblyTypeName: EscapeRoomEngine.Engine.Runtime.UI.GameControl, - Engine - m_MethodName: SetRoomSize - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 + m_Calls: [] +--- !u!114 &9150080301006657351 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5089010474724971539} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2efb00aece2e423ba5e141ebf2f7111a, type: 3} + m_Name: + m_EditorClassIdentifier: + key: room_width + defaultValue: 2 + slider: {fileID: 177233965105736907} + label: {fileID: 4041894032453896054} --- !u!1 &5267753817356931382 GameObject: m_ObjectHideFlags: 0 @@ -1056,6 +1141,109 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!1 &5994637735959876473 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5956299623804817548} + - component: {fileID: 7970270111734300993} + - component: {fileID: 4524651472136637311} + m_Layer: 5 + m_Name: Prefer Less Played + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5956299623804817548 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5994637735959876473} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8863132458034001450} + - {fileID: 8428584689241295758} + m_Father: {fileID: 9062548758054197003} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: -64} + m_SizeDelta: {x: 180, y: 30} + m_Pivot: {x: 0, y: 1} +--- !u!114 &7970270111734300993 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5994637735959876473} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 4760308196802381275} + toggleTransition: 1 + graphic: {fileID: 4399478501732818778} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_IsOn: 1 +--- !u!114 &4524651472136637311 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5994637735959876473} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9a4faeb3634c42e38fb0c2b5f26bdd5d, type: 3} + m_Name: + m_EditorClassIdentifier: + key: prefer_less_played + defaultValue: 1 + toggle: {fileID: 7970270111734300993} --- !u!1 &6265322034568624917 GameObject: m_ObjectHideFlags: 0 @@ -1243,6 +1431,82 @@ RectTransform: m_AnchoredPosition: {x: -5, y: 0} m_SizeDelta: {x: -20, y: 0} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &8342765830201063432 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6605681806948858281} + - component: {fileID: 3051168202682640106} + - component: {fileID: 4399478501732818778} + m_Layer: 5 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6605681806948858281 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8342765830201063432} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8863132458034001450} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3051168202682640106 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8342765830201063432} + m_CullTransparentMesh: 1 +--- !u!114 &4399478501732818778 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8342765830201063432} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!1 &8563645623372468921 GameObject: m_ObjectHideFlags: 0 @@ -1666,7 +1930,7 @@ PrefabInstance: - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} propertyPath: m_AnchoredPosition.y - value: -64 + value: -94 objectReference: {fileID: 0} - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} @@ -2578,7 +2842,7 @@ PrefabInstance: - target: {fileID: 3093889143253032093, guid: cad05994b2fb37746988912bce5a31f5, type: 3} propertyPath: m_Pivot.x - value: 0 + value: 0.5 objectReference: {fileID: 0} - target: {fileID: 3093889143253032093, guid: cad05994b2fb37746988912bce5a31f5, type: 3} @@ -2593,7 +2857,7 @@ PrefabInstance: - target: {fileID: 3093889143253032093, guid: cad05994b2fb37746988912bce5a31f5, type: 3} propertyPath: m_AnchorMax.x - value: 0 + value: 0.5 objectReference: {fileID: 0} - target: {fileID: 3093889143253032093, guid: cad05994b2fb37746988912bce5a31f5, type: 3} @@ -2603,7 +2867,7 @@ PrefabInstance: - target: {fileID: 3093889143253032093, guid: cad05994b2fb37746988912bce5a31f5, type: 3} propertyPath: m_AnchorMin.x - value: 0 + value: 0.5 objectReference: {fileID: 0} - target: {fileID: 3093889143253032093, guid: cad05994b2fb37746988912bce5a31f5, type: 3} @@ -2618,7 +2882,7 @@ PrefabInstance: - target: {fileID: 3093889143253032093, guid: cad05994b2fb37746988912bce5a31f5, type: 3} propertyPath: m_SizeDelta.y - value: 54 + value: 30 objectReference: {fileID: 0} - target: {fileID: 3093889143253032093, guid: cad05994b2fb37746988912bce5a31f5, type: 3} @@ -3802,6 +4066,145 @@ GameObject: type: 3} m_PrefabInstance: {fileID: 5475628624166606309} m_PrefabAsset: {fileID: 0} +--- !u!1001 &5774235315092685472 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 5956299623804817548} + m_Modifications: + - target: {fileID: 2655555272253868329, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_Name + value: Label + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_Pivot.x + value: 1 + 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: -1 + 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: 141 + 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: 0 + 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: Prefer less played + 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 &8428584689241295758 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + m_PrefabInstance: {fileID: 5774235315092685472} + m_PrefabAsset: {fileID: 0} --- !u!1001 &5781050347048265296 PrefabInstance: m_ObjectHideFlags: 0 @@ -4369,6 +4772,152 @@ RectTransform: type: 3} m_PrefabInstance: {fileID: 7814961547219803849} m_PrefabAsset: {fileID: 0} +--- !u!1001 &7911579105811653182 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 6000588368100331823} + m_Modifications: + - target: {fileID: 2655555272253868329, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_Name + value: Min Size + 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: -1 + 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: 130 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_SizeDelta.y + value: 16 + 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: 80 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -13 + 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: '(at least 8m^2) + +' + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868335, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_FontData.m_MinSize + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2655555272253868335, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + propertyPath: m_FontData.m_FontSize + value: 12 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} +--- !u!224 &5265268942059203344 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, + type: 3} + m_PrefabInstance: {fileID: 7911579105811653182} + m_PrefabAsset: {fileID: 0} --- !u!1001 &8073688616030330156 PrefabInstance: m_ObjectHideFlags: 0 @@ -4554,7 +5103,7 @@ PrefabInstance: - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} propertyPath: m_SizeDelta.x - value: 210 + value: 76 objectReference: {fileID: 0} - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} @@ -4624,7 +5173,7 @@ PrefabInstance: - target: {fileID: 2655555272253868335, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} propertyPath: m_Text - value: 'Room Size (at least 8m^2) + value: 'Room Size ' objectReference: {fileID: 0} @@ -4665,7 +5214,7 @@ PrefabInstance: - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} propertyPath: m_Pivot.y - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} @@ -4680,7 +5229,7 @@ PrefabInstance: - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} propertyPath: m_AnchorMax.y - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} @@ -4690,7 +5239,7 @@ PrefabInstance: - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} propertyPath: m_AnchorMin.y - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} @@ -4745,7 +5294,7 @@ PrefabInstance: - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} propertyPath: m_AnchoredPosition.y - value: -84 + value: 271 objectReference: {fileID: 0} - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} @@ -4885,7 +5434,7 @@ PrefabInstance: - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} propertyPath: m_AnchoredPosition.y - value: -64 + value: -94 objectReference: {fileID: 0} - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} diff --git a/Assets/Engine/Assets/Prefabs/UI/Puzzle Plan Entry.prefab b/Assets/Engine/Assets/Prefabs/UI/Puzzle Plan Entry.prefab index feb0259..6164067 100644 --- a/Assets/Engine/Assets/Prefabs/UI/Puzzle Plan Entry.prefab +++ b/Assets/Engine/Assets/Prefabs/UI/Puzzle Plan Entry.prefab @@ -56,7 +56,7 @@ PrefabInstance: - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} propertyPath: m_SizeDelta.y - value: 54 + value: 30 objectReference: {fileID: 0} - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} @@ -225,7 +225,7 @@ PrefabInstance: - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} propertyPath: m_SizeDelta.x - value: 320 + value: 160 objectReference: {fileID: 0} - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} @@ -270,12 +270,12 @@ PrefabInstance: - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} propertyPath: m_AnchoredPosition.x - value: 0 + value: 160 objectReference: {fileID: 0} - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} propertyPath: m_AnchoredPosition.y - value: -30 + value: 0 objectReference: {fileID: 0} - target: {fileID: 2655555272253868334, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} @@ -295,7 +295,7 @@ PrefabInstance: - target: {fileID: 2655555272253868335, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} propertyPath: m_Text - value: 'Time Estimate: ' + value: 'Est. ' objectReference: {fileID: 0} - target: {fileID: 2655555272253868335, guid: fa44f6047bc35a141a84d1b4e0919ff9, type: 3} diff --git a/Assets/Engine/Runtime/Engine.cs b/Assets/Engine/Runtime/Engine.cs index fe0c5a4..c459441 100644 --- a/Assets/Engine/Runtime/Engine.cs +++ b/Assets/Engine/Runtime/Engine.cs @@ -9,6 +9,7 @@ using NaughtyAttributes; using UnityEngine; using Logger = EscapeRoomEngine.Engine.Runtime.Utilities.Logger; using LogType = EscapeRoomEngine.Engine.Runtime.Utilities.LogType; +using Range = EscapeRoomEngine.Engine.Runtime.Utilities.Range; namespace EscapeRoomEngine.Engine.Runtime { @@ -108,7 +109,7 @@ namespace EscapeRoomEngine.Engine.Runtime Passage exit; // choose a puzzle from the plan and remove it from both the plan and later available puzzles (so it is only chosen once) - var puzzle = _plannedPuzzles.PopRandomElement(); + var puzzle = Measure.PreferLessPlayed ? _plannedPuzzles.Pop() : _plannedPuzzles.PopRandomElement(); _availablePuzzles.Remove(puzzle); GameControl.Instance.CurrentPuzzle = puzzle; @@ -173,6 +174,11 @@ namespace EscapeRoomEngine.Engine.Runtime _plannedPuzzles.Add(_availablePuzzles[i]); } + if (Measure.PreferLessPlayed) + { + _plannedPuzzles.Sort((a, b) => Measure.TimesPlayed(a).CompareTo(Measure.TimesPlayed(b))); + } + EstimatedTimeRemaining = Measure.EstimateTime(_plannedPuzzles); GameControl.Instance.PlannedPuzzles = _plannedPuzzles; } diff --git a/Assets/Engine/Runtime/Measurements/Measure.cs b/Assets/Engine/Runtime/Measurements/Measure.cs index 5ccce17..59639e9 100644 --- a/Assets/Engine/Runtime/Measurements/Measure.cs +++ b/Assets/Engine/Runtime/Measurements/Measure.cs @@ -17,6 +17,7 @@ namespace EscapeRoomEngine.Engine.Runtime.Measurements /// Whether to store the taken measurements in the database. Disable for test runs. /// public static bool Store { get; set; } + public static bool PreferLessPlayed => GameControl.Instance.preferLessPlayed.Value; private static Dictionary _runningMeasurements; private static Session _currentSession; @@ -52,6 +53,12 @@ namespace EscapeRoomEngine.Engine.Runtime.Measurements /// This only counts puzzles already placed in a room. public static float EstimateTime(Room room) => room.puzzles.Sum(puzzle => EstimateTime((PuzzleModuleDescription)puzzle.description)); + + /// + /// How often a specific puzzle has been played before. + /// + public static int TimesPlayed(PuzzleModuleDescription puzzle) => + PuzzleStorage.Instance.LoadOrNew(puzzle).Measurements.Count; /// /// The estimated percentile the current player is placed in. diff --git a/Assets/Engine/Runtime/Space.cs b/Assets/Engine/Runtime/Space.cs index 5c9dc27..378ccd7 100644 --- a/Assets/Engine/Runtime/Space.cs +++ b/Assets/Engine/Runtime/Space.cs @@ -1,14 +1,10 @@ -using System; using System.Collections.Generic; using EscapeRoomEngine.Engine.Runtime.Modules; using EscapeRoomEngine.Engine.Runtime.Modules.Description; using EscapeRoomEngine.Engine.Runtime.UI; using EscapeRoomEngine.Engine.Runtime.Utilities; using UnityEngine; -using Logger = EscapeRoomEngine.Engine.Runtime.Utilities.Logger; -using LogType = EscapeRoomEngine.Engine.Runtime.Utilities.LogType; using Object = UnityEngine.Object; -using Range = EscapeRoomEngine.Engine.Runtime.Utilities.Range; namespace EscapeRoomEngine.Engine.Runtime { diff --git a/Assets/Engine/Runtime/UI/Elements.meta b/Assets/Engine/Runtime/UI/Elements.meta deleted file mode 100644 index a394645..0000000 --- a/Assets/Engine/Runtime/UI/Elements.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: c13c76161df849bfb0bd769d1756a66f -timeCreated: 1683591920 \ No newline at end of file diff --git a/Assets/Engine/Runtime/UI/GameControl.cs b/Assets/Engine/Runtime/UI/GameControl.cs index ec29bba..02a5d7c 100644 --- a/Assets/Engine/Runtime/UI/GameControl.cs +++ b/Assets/Engine/Runtime/UI/GameControl.cs @@ -19,7 +19,7 @@ namespace EscapeRoomEngine.Engine.Runtime.UI /// public class GameControl : MonoBehaviour { - public static readonly Vector2Int DefaultRoomSize = new Vector2Int(2, 4); + private const string TargetTimeKey = "target_time"; /// /// The active instance of the game control. @@ -35,13 +35,15 @@ namespace EscapeRoomEngine.Engine.Runtime.UI [BoxGroup("Internal")] [SerializeField] private Button startButton, stopButton, pauseButton, addTimeButton, removeTimeButton; [BoxGroup("Internal")] [SerializeField] - private Text timeText, roomTimeText, estimateTimeText, targetTimeText, percentileText, widthText, lengthText; + private Text timeText, roomTimeText, estimateTimeText, targetTimeText, percentileText; [BoxGroup("Internal")] [SerializeField] - private Slider roomWidth, roomLength; + private PersistedSlider roomWidth, roomLength; [BoxGroup("Internal")] [SerializeField] private Transform roomSizeElement; [BoxGroup("Internal")] [SerializeField] private PuzzlePlan puzzlePlan; + + [BoxGroup("Internal")] public PersistedToggle preferLessPlayed; [HideInInspector] public GameState gameState = GameState.Stopped; public PuzzleModuleDescription CurrentPuzzle @@ -73,21 +75,20 @@ namespace EscapeRoomEngine.Engine.Runtime.UI /// The estimated total time the player will spend in the experience. /// public float EstimatedTime { get; private set; } - public Vector2Int RoomSize { get; private set; } + public Vector2Int RoomSize => new(roomWidth.Value, roomLength.Value); private float _previousUIUpdate, _previousPlanUpdate; private void Awake() { Instance = this; - - RoomSize = DefaultRoomSize; } private void Start() { - TargetTime = Engine.Instance.initialTargetTime; - + // read preferences + TargetTime = PlayerPrefs.GetFloat(TargetTimeKey, Engine.Instance.initialTargetTime); + SetTimeText(); } @@ -121,10 +122,7 @@ namespace EscapeRoomEngine.Engine.Runtime.UI startButton.interactable = gameState == GameState.Stopped; stopButton.interactable = gameState != GameState.Stopped; pauseButton.interactable = gameState is GameState.Running or GameState.Paused; - addTimeButton.interactable = gameState is GameState.Running or GameState.Paused; - removeTimeButton.interactable = gameState is GameState.Running or GameState.Paused && TargetTime >= TimeElapsed + 60; - roomWidth.interactable = gameState == GameState.Stopped; - roomLength.interactable = gameState == GameState.Stopped; + removeTimeButton.interactable = TargetTime >= TimeElapsed + 60; } #region Time Controls @@ -191,6 +189,8 @@ namespace EscapeRoomEngine.Engine.Runtime.UI if (TargetTime + seconds >= TimeElapsed) { TargetTime += seconds; + PlayerPrefs.SetFloat(TargetTimeKey, TargetTime); + PlayerPrefs.Save(); } } @@ -230,13 +230,6 @@ namespace EscapeRoomEngine.Engine.Runtime.UI #endregion - public void SetRoomSize() - { - RoomSize = new Vector2Int((int)roomWidth.value, (int)roomLength.value); - widthText.text = RoomSize.x.ToString(); - lengthText.text = RoomSize.y.ToString(); - } - public void ExitGame() { StopGame(); diff --git a/Assets/Engine/Runtime/UI/Elements/PauseButton.cs b/Assets/Engine/Runtime/UI/PauseButton.cs similarity index 100% rename from Assets/Engine/Runtime/UI/Elements/PauseButton.cs rename to Assets/Engine/Runtime/UI/PauseButton.cs diff --git a/Assets/Engine/Runtime/UI/Elements/PauseButton.cs.meta b/Assets/Engine/Runtime/UI/PauseButton.cs.meta similarity index 100% rename from Assets/Engine/Runtime/UI/Elements/PauseButton.cs.meta rename to Assets/Engine/Runtime/UI/PauseButton.cs.meta diff --git a/Assets/Engine/Runtime/UI/PersistedSlider.cs b/Assets/Engine/Runtime/UI/PersistedSlider.cs new file mode 100644 index 0000000..d3b3724 --- /dev/null +++ b/Assets/Engine/Runtime/UI/PersistedSlider.cs @@ -0,0 +1,35 @@ +using UnityEngine; +using UnityEngine.UI; + +namespace EscapeRoomEngine.Engine.Runtime.UI +{ + public class PersistedSlider : PersistedUI + { + [SerializeField] private Slider slider; + [SerializeField] private Text label; + + protected override void Start() + { + base.Start(); + + slider.wholeNumbers = true; + + slider.onValueChanged.AddListener(value => + { + Value = (int) value; + DisplayValue(); + PlayerPrefs.SetInt(key, Value); + PlayerPrefs.Save(); + }); + } + + + protected override int RetrieveValue() => PlayerPrefs.GetInt(key, defaultValue); + + protected override void DisplayValue() + { + slider.value = Value; + label.text = Value.ToString(); + } + } +} \ No newline at end of file diff --git a/Assets/Engine/Runtime/UI/PersistedSlider.cs.meta b/Assets/Engine/Runtime/UI/PersistedSlider.cs.meta new file mode 100644 index 0000000..5622b7c --- /dev/null +++ b/Assets/Engine/Runtime/UI/PersistedSlider.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2efb00aece2e423ba5e141ebf2f7111a +timeCreated: 1683968307 \ No newline at end of file diff --git a/Assets/Engine/Runtime/UI/PersistedToggle.cs b/Assets/Engine/Runtime/UI/PersistedToggle.cs new file mode 100644 index 0000000..67f7435 --- /dev/null +++ b/Assets/Engine/Runtime/UI/PersistedToggle.cs @@ -0,0 +1,31 @@ +using System; +using UnityEngine; +using UnityEngine.UI; + +namespace EscapeRoomEngine.Engine.Runtime.UI +{ + public class PersistedToggle : PersistedUI + { + [SerializeField] private Toggle toggle; + + protected override void Start() + { + base.Start(); + + toggle.onValueChanged.AddListener(value => + { + Value = value; + PlayerPrefs.SetInt(key, Convert.ToInt32(Value)); + PlayerPrefs.Save(); + }); + } + + + protected override bool RetrieveValue() => PlayerPrefs.GetInt(key, Convert.ToInt32(defaultValue)) != 0; + + protected override void DisplayValue() + { + toggle.isOn = Value; + } + } +} \ No newline at end of file diff --git a/Assets/Engine/Runtime/UI/PersistedToggle.cs.meta b/Assets/Engine/Runtime/UI/PersistedToggle.cs.meta new file mode 100644 index 0000000..bc5d273 --- /dev/null +++ b/Assets/Engine/Runtime/UI/PersistedToggle.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9a4faeb3634c42e38fb0c2b5f26bdd5d +timeCreated: 1683969579 \ No newline at end of file diff --git a/Assets/Engine/Runtime/UI/PersistedUI.cs b/Assets/Engine/Runtime/UI/PersistedUI.cs new file mode 100644 index 0000000..5b82720 --- /dev/null +++ b/Assets/Engine/Runtime/UI/PersistedUI.cs @@ -0,0 +1,21 @@ +using UnityEngine; + +namespace EscapeRoomEngine.Engine.Runtime.UI +{ + public abstract class PersistedUI : MonoBehaviour + { + public string key; + public T defaultValue; + + public T Value { get; protected set; } + + protected virtual void Start() + { + Value = RetrieveValue(); + DisplayValue(); + } + + protected abstract T RetrieveValue(); + protected abstract void DisplayValue(); + } +} \ No newline at end of file diff --git a/Assets/Engine/Runtime/UI/PersistedUI.cs.meta b/Assets/Engine/Runtime/UI/PersistedUI.cs.meta new file mode 100644 index 0000000..b953aa7 --- /dev/null +++ b/Assets/Engine/Runtime/UI/PersistedUI.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b629c5229b954b5d847e58f9b439607a +timeCreated: 1683965075 \ No newline at end of file diff --git a/Assets/Engine/Runtime/UI/Elements/PuzzlePlan.cs b/Assets/Engine/Runtime/UI/PuzzlePlan.cs similarity index 100% rename from Assets/Engine/Runtime/UI/Elements/PuzzlePlan.cs rename to Assets/Engine/Runtime/UI/PuzzlePlan.cs diff --git a/Assets/Engine/Runtime/UI/Elements/PuzzlePlan.cs.meta b/Assets/Engine/Runtime/UI/PuzzlePlan.cs.meta similarity index 100% rename from Assets/Engine/Runtime/UI/Elements/PuzzlePlan.cs.meta rename to Assets/Engine/Runtime/UI/PuzzlePlan.cs.meta diff --git a/Assets/Engine/Runtime/UI/Elements/PuzzlePlanEntry.cs b/Assets/Engine/Runtime/UI/PuzzlePlanEntry.cs similarity index 89% rename from Assets/Engine/Runtime/UI/Elements/PuzzlePlanEntry.cs rename to Assets/Engine/Runtime/UI/PuzzlePlanEntry.cs index 56a90e5..5d8711f 100644 --- a/Assets/Engine/Runtime/UI/Elements/PuzzlePlanEntry.cs +++ b/Assets/Engine/Runtime/UI/PuzzlePlanEntry.cs @@ -27,7 +27,7 @@ namespace EscapeRoomEngine.Engine.Runtime.UI.Elements set { puzzleName.text = value.puzzleName; - estimatedTime.text = $"Time Estimate: {Measure.EstimateTime(value).ToTimeSpan():mm':'ss}"; + estimatedTime.text = $"Est. {Measure.EstimateTime(value).ToTimeSpan():mm':'ss}"; } } } diff --git a/Assets/Engine/Runtime/UI/Elements/PuzzlePlanEntry.cs.meta b/Assets/Engine/Runtime/UI/PuzzlePlanEntry.cs.meta similarity index 100% rename from Assets/Engine/Runtime/UI/Elements/PuzzlePlanEntry.cs.meta rename to Assets/Engine/Runtime/UI/PuzzlePlanEntry.cs.meta diff --git a/Assets/Engine/Runtime/Utilities/Utilities.cs b/Assets/Engine/Runtime/Utilities/Utilities.cs index 5b718f9..8eb4dd9 100644 --- a/Assets/Engine/Runtime/Utilities/Utilities.cs +++ b/Assets/Engine/Runtime/Utilities/Utilities.cs @@ -33,6 +33,16 @@ namespace EscapeRoomEngine.Engine.Runtime.Utilities public static class ListExtensions { + /// + /// remove the first element from a list and return it. + /// + public static T Pop(this List list) + { + var element = list[0]; + list.RemoveAt(0); + return element; + } + /// /// remove a random element from a list and return it. /// diff --git a/Assets/Station46/Modules/Rings/Scripts/Ring.cs b/Assets/Station46/Modules/Rings/Scripts/Ring.cs index e7b4bc5..5c720de 100644 --- a/Assets/Station46/Modules/Rings/Scripts/Ring.cs +++ b/Assets/Station46/Modules/Rings/Scripts/Ring.cs @@ -1,5 +1,4 @@ -using System; -using NaughtyAttributes; +using NaughtyAttributes; using Station46.Scripts; using UnityEngine;