From 89f343780a58fd99af1c65272734140c4228466a Mon Sep 17 00:00:00 2001 From: Dries Van Schuylenbergh Date: Thu, 4 May 2023 09:09:49 +0000 Subject: [PATCH] Resolve WES-192 "Fix progress screen" --- .../Accounts/Prefabs/Axes Tick Marker.prefab | 137 + .../Prefabs/Axes Tick Marker.prefab.meta | 7 + .../Accounts/Prefabs/Highscore Marker.prefab | 4 +- .../Prefabs/LearnableProgressCard.prefab | 515 ++++ .../Prefabs/LearnableProgressCard.prefab.meta | 7 + .../Accounts/Scenes/UserProgressScreen.unity | 2600 +++++++++++++++-- Assets/Accounts/Scripts/ChangeUserScreen.cs | 2 - Assets/Accounts/Scripts/CourseProgressCard.cs | 2 +- .../Accounts/Scripts/LearnableProgressCard.cs | 40 + .../Scripts/LearnableProgressCard.cs.meta | 11 + .../Accounts/Scripts/MinigameProgressCard.cs | 9 +- .../Accounts/Scripts/PanelCourseProgress.cs | 130 + .../Scripts/PanelCourseProgress.cs.meta | 11 + .../Accounts/Scripts/PanelMinigameProgress.cs | 127 + .../Scripts/PanelMinigameProgress.cs.meta | 11 + Assets/Accounts/Scripts/ProgressGraph.cs | 263 ++ Assets/Accounts/Scripts/ProgressGraph.cs.meta | 11 + Assets/Accounts/Scripts/User.cs | 10 +- Assets/Accounts/Scripts/UserProgressScreen.cs | 153 +- .../Tests/PlayMode/CourseProgressCardTests.cs | 5 +- .../PlayMode/LearnableProgressCardTests.cs | 78 + .../LearnableProgressCardTests.cs.meta | 11 + .../PlayMode/MinigameProgressCardTests.cs | 59 +- .../PlayMode/PanelCourseProgressTests.cs | 162 + .../PlayMode/PanelCourseProgressTests.cs.meta | 11 + .../PlayMode/PanelMinigamesProgressTests.cs | 191 ++ .../PanelMinigamesProgressTests.cs.meta | 11 + .../Tests/PlayMode/ProgressGraphTests.cs | 128 + .../Tests/PlayMode/ProgressGraphTests.cs.meta | 11 + .../Accounts/Tests/PlayMode/UserCardTests.cs | 2 +- .../Tests/PlayMode/UserCreationScreenTests.cs | 2 +- .../Tests/PlayMode/UserProgressScreenTests.cs | 101 +- Assets/Common/Scripts/CourseActivityScreen.cs | 2 +- Assets/Common/Scripts/CourseItem.cs | 2 +- 34 files changed, 4330 insertions(+), 496 deletions(-) create mode 100644 Assets/Accounts/Prefabs/Axes Tick Marker.prefab create mode 100644 Assets/Accounts/Prefabs/Axes Tick Marker.prefab.meta create mode 100644 Assets/Accounts/Prefabs/LearnableProgressCard.prefab create mode 100644 Assets/Accounts/Prefabs/LearnableProgressCard.prefab.meta create mode 100644 Assets/Accounts/Scripts/LearnableProgressCard.cs create mode 100644 Assets/Accounts/Scripts/LearnableProgressCard.cs.meta create mode 100644 Assets/Accounts/Scripts/PanelCourseProgress.cs create mode 100644 Assets/Accounts/Scripts/PanelCourseProgress.cs.meta create mode 100644 Assets/Accounts/Scripts/PanelMinigameProgress.cs create mode 100644 Assets/Accounts/Scripts/PanelMinigameProgress.cs.meta create mode 100644 Assets/Accounts/Scripts/ProgressGraph.cs create mode 100644 Assets/Accounts/Scripts/ProgressGraph.cs.meta create mode 100644 Assets/Accounts/Tests/PlayMode/LearnableProgressCardTests.cs create mode 100644 Assets/Accounts/Tests/PlayMode/LearnableProgressCardTests.cs.meta create mode 100644 Assets/Accounts/Tests/PlayMode/PanelCourseProgressTests.cs create mode 100644 Assets/Accounts/Tests/PlayMode/PanelCourseProgressTests.cs.meta create mode 100644 Assets/Accounts/Tests/PlayMode/PanelMinigamesProgressTests.cs create mode 100644 Assets/Accounts/Tests/PlayMode/PanelMinigamesProgressTests.cs.meta create mode 100644 Assets/Accounts/Tests/PlayMode/ProgressGraphTests.cs create mode 100644 Assets/Accounts/Tests/PlayMode/ProgressGraphTests.cs.meta diff --git a/Assets/Accounts/Prefabs/Axes Tick Marker.prefab b/Assets/Accounts/Prefabs/Axes Tick Marker.prefab new file mode 100644 index 0000000..537b09a --- /dev/null +++ b/Assets/Accounts/Prefabs/Axes Tick Marker.prefab @@ -0,0 +1,137 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &7141392721760992647 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7141392721760992646} + - component: {fileID: 7141392721760992644} + - component: {fileID: 2518831828376613321} + m_Layer: 5 + m_Name: Axes Tick Marker + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7141392721760992646 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7141392721760992647} + 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: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 50, y: 50} + m_Pivot: {x: 0, y: 0} +--- !u!222 &7141392721760992644 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7141392721760992647} + m_CullTransparentMesh: 1 +--- !u!114 &2518831828376613321 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7141392721760992647} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: 0 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4279242768 + m_fontColor: {r: 0.0627451, g: 0.0627451, b: 0.0627451, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 36 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 36 + m_fontStyle: 0 + m_HorizontalAlignment: 4 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 0 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} diff --git a/Assets/Accounts/Prefabs/Axes Tick Marker.prefab.meta b/Assets/Accounts/Prefabs/Axes Tick Marker.prefab.meta new file mode 100644 index 0000000..83f344f --- /dev/null +++ b/Assets/Accounts/Prefabs/Axes Tick Marker.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9d96609216a825843b33f6af9cdfa29b +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Accounts/Prefabs/Highscore Marker.prefab b/Assets/Accounts/Prefabs/Highscore Marker.prefab index f69a5f0..b4842e4 100644 --- a/Assets/Accounts/Prefabs/Highscore Marker.prefab +++ b/Assets/Accounts/Prefabs/Highscore Marker.prefab @@ -33,8 +33,8 @@ RectTransform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 50, y: 50} m_Pivot: {x: 0, y: 0} diff --git a/Assets/Accounts/Prefabs/LearnableProgressCard.prefab b/Assets/Accounts/Prefabs/LearnableProgressCard.prefab new file mode 100644 index 0000000..b9c29d6 --- /dev/null +++ b/Assets/Accounts/Prefabs/LearnableProgressCard.prefab @@ -0,0 +1,515 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &758255480231791509 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 758255480231791508} + - component: {fileID: 758255480231791506} + - component: {fileID: 758255480231791507} + - component: {fileID: 8445851122681183268} + m_Layer: 0 + m_Name: LearnableProgressCard + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &758255480231791508 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758255480231791509} + 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: 758255481422566555} + - {fileID: 758255481061489079} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &758255480231791506 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758255480231791509} + m_CullTransparentMesh: 1 +--- !u!114 &758255480231791507 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758255480231791509} + 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: 0} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &8445851122681183268 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758255480231791509} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7835fc450a6bbf24d95f0a19491fb8c1, type: 3} + m_Name: + m_EditorClassIdentifier: + progress: + entries: [] + index: 0 + inUse: 0 + name: + progress: 0 + course: {fileID: 0} + thumbnail: {fileID: 758255481422566554} + stars: + - {fileID: 758255481653936988} + - {fileID: 758255481997431046} + - {fileID: 758255482122419822} +--- !u!1 &758255481061489032 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 758255481061489079} + - component: {fileID: 758255481061489077} + - component: {fileID: 758255481061489078} + - component: {fileID: 758255481061489076} + m_Layer: 0 + m_Name: Status + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &758255481061489079 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758255481061489032} + 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: 758255481653936989} + - {fileID: 758255481997431047} + - {fileID: 758255482122419823} + m_Father: {fileID: 758255480231791508} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: -32} + m_SizeDelta: {x: -20, y: 45} + m_Pivot: {x: 0.5, y: 0} +--- !u!222 &758255481061489077 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758255481061489032} + m_CullTransparentMesh: 1 +--- !u!114 &758255481061489078 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758255481061489032} + 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: 0.5803922, g: 0.58431375, b: 0.6, 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: 0} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &758255481061489076 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758255481061489032} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &758255481422566556 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 758255481422566555} + - component: {fileID: 758255481422566553} + - component: {fileID: 758255481422566554} + m_Layer: 0 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &758255481422566555 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758255481422566556} + 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: 758255480231791508} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &758255481422566553 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758255481422566556} + m_CullTransparentMesh: 1 +--- !u!114 &758255481422566554 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758255481422566556} + 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: 21300000, guid: 5e3c345e006acf74791d272061159b89, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &758255481653936990 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 758255481653936989} + - component: {fileID: 758255481653936987} + - component: {fileID: 758255481653936988} + m_Layer: 0 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &758255481653936989 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758255481653936990} + 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: 758255481061489079} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &758255481653936987 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758255481653936990} + m_CullTransparentMesh: 1 +--- !u!114 &758255481653936988 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758255481653936990} + 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: -2086278073, guid: 4d6d852f751f20046ae733db5bdb1af1, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &758255481997431064 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 758255481997431047} + - component: {fileID: 758255481997431045} + - component: {fileID: 758255481997431046} + m_Layer: 0 + m_Name: Image (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &758255481997431047 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758255481997431064} + 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: 758255481061489079} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &758255481997431045 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758255481997431064} + m_CullTransparentMesh: 1 +--- !u!114 &758255481997431046 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758255481997431064} + 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: 0, g: 0, b: 0, 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: -2086278073, guid: 4d6d852f751f20046ae733db5bdb1af1, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &758255482122419808 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 758255482122419823} + - component: {fileID: 758255482122419821} + - component: {fileID: 758255482122419822} + m_Layer: 0 + m_Name: Image (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &758255482122419823 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758255482122419808} + 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: 758255481061489079} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &758255482122419821 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758255482122419808} + m_CullTransparentMesh: 1 +--- !u!114 &758255482122419822 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758255482122419808} + 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: 0, g: 0, b: 0, 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: -2086278073, guid: 4d6d852f751f20046ae733db5bdb1af1, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 diff --git a/Assets/Accounts/Prefabs/LearnableProgressCard.prefab.meta b/Assets/Accounts/Prefabs/LearnableProgressCard.prefab.meta new file mode 100644 index 0000000..d60cc92 --- /dev/null +++ b/Assets/Accounts/Prefabs/LearnableProgressCard.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b7a9a8ccb77a37740bfdf5579cb179ca +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Accounts/Scenes/UserProgressScreen.unity b/Assets/Accounts/Scenes/UserProgressScreen.unity index 1f2ba9e..462909a 100644 --- a/Assets/Accounts/Scenes/UserProgressScreen.unity +++ b/Assets/Accounts/Scenes/UserProgressScreen.unity @@ -343,14 +343,14 @@ RectTransform: m_Children: - {fileID: 1341560885} - {fileID: 1252913993} - m_Father: {fileID: 909961606} - m_RootOrder: 2 + m_Father: {fileID: 919169250} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 520, y: 600} - m_Pivot: {x: 1, y: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 300, y: -115} + m_SizeDelta: {x: 520, y: 650} + m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &67107108 MonoBehaviour: m_ObjectHideFlags: 0 @@ -394,14 +394,14 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_Color: {r: 0.78431374, g: 0.78431374, b: 0.78431374, 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: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Sprite: {fileID: 0} m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 @@ -487,6 +487,407 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &178910879 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 178910880} + - component: {fileID: 178910883} + - component: {fileID: 178910882} + - component: {fileID: 178910881} + m_Layer: 5 + m_Name: CourseTab Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &178910880 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 178910879} + 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: 1051765290} + m_Father: {fileID: 1928223986} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &178910881 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 178910879} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, 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: 178910882} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 400519679} + m_TargetAssemblyTypeName: UserProgressScreen, AccountsScripts + m_MethodName: DisplayCourses + 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 +--- !u!114 &178910882 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 178910879} + 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: 0.5803922, g: 0.58431375, b: 0.6, 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: 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!222 &178910883 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 178910879} + m_CullTransparentMesh: 1 +--- !u!1 &284241815 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 284241816} + - component: {fileID: 284241819} + - component: {fileID: 284241818} + - component: {fileID: 284241817} + m_Layer: 0 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &284241816 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 284241815} + 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: 1785877244} + m_Father: {fileID: 784615363} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -17, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &284241817 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 284241815} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!114 &284241818 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 284241815} + 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: 10917, 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!222 &284241819 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 284241815} + m_CullTransparentMesh: 1 +--- !u!1 &370766209 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 370766210} + - component: {fileID: 370766212} + - component: {fileID: 370766211} + m_Layer: 0 + m_Name: Info + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &370766210 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 370766209} + 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: 1497565176} + - {fileID: 540252894} + - {fileID: 784615363} + m_Father: {fileID: 1461595301} + m_RootOrder: 2 + 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: -460, y: -90} + m_SizeDelta: {x: 800, y: 700} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &370766211 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 370766209} + 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: 0.78431374, g: 0.78431374, b: 0.78431374, 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: 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!222 &370766212 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 370766209} + m_CullTransparentMesh: 1 +--- !u!1 &389931639 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 389931640} + - component: {fileID: 389931643} + - component: {fileID: 389931642} + - component: {fileID: 389931641} + m_Layer: 5 + m_Name: Circle (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &389931640 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 389931639} + 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: 906197777} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 270, y: 100} + m_SizeDelta: {x: 470, y: 470} + m_Pivot: {x: 1, y: 0.5} +--- !u!95 &389931641 +Animator: + serializedVersion: 5 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 389931639} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: 47b8ff2adcd4fa64981587b8490f907b, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorStateOnDisable: 0 +--- !u!114 &389931642 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 389931639} + 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: 21300000, guid: 357b7d5d4e2bc504db44ea6e6f4b3f9a, type: 3} + 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!222 &389931643 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 389931639} + m_CullTransparentMesh: 1 --- !u!1 &400519678 GameObject: m_ObjectHideFlags: 0 @@ -518,15 +919,11 @@ MonoBehaviour: m_EditorClassIdentifier: username: {fileID: 1021209698} avatar: {fileID: 1873954004} - playtime: {fileID: 1716832605} - highscoreMarker: {fileID: 7141392721760992647, guid: c54186c4d7aafd5459b0097d481b8fbf, type: 3} - courseCardPrefab: {fileID: 5101881939626277738, guid: b953de8778612cd449ba1999c4f7b8c4, type: 3} - coursesContainer: {fileID: 1487493400} - emptyCourses: {fileID: 494202816} - minigameCardPrefab: {fileID: 5101881939626277738, guid: af026fa8050694c4f816aa0c615e1992, type: 3} - minigamesContainer: {fileID: 67107106} - emptyMinigames: {fileID: 505387970} - progressGraph: {fileID: 913667425} + playtime: {fileID: 0} + coursesPanel: {fileID: 1461595298} + minigamesPanel: {fileID: 919169246} + coursesTabButton: {fileID: 178910882} + minigamesTabButton: {fileID: 830910122} --- !u!4 &400519680 Transform: m_ObjectHideFlags: 0 @@ -554,12 +951,12 @@ GameObject: - component: {fileID: 494202819} - component: {fileID: 494202818} m_Layer: 5 - m_Name: Empty Courses + m_Name: Text (TMP) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!224 &494202817 RectTransform: m_ObjectHideFlags: 0 @@ -567,18 +964,18 @@ RectTransform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 494202816} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + 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: 909961606} - m_RootOrder: 1 + m_Father: {fileID: 1227045448} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 1380, y: 200} - m_SizeDelta: {x: 520, y: 600} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &494202818 MonoBehaviour: @@ -602,8 +999,8 @@ MonoBehaviour: m_Calls: [] m_text: Nog geen lessen gestart m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 3602bedf0ebe5b64596873f09eddf57b, type: 2} - m_sharedMaterial: {fileID: -1030930060397404263, guid: 3602bedf0ebe5b64596873f09eddf57b, type: 2} + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 0} m_fontMaterials: [] @@ -689,12 +1086,12 @@ GameObject: - component: {fileID: 505387973} - component: {fileID: 505387972} m_Layer: 5 - m_Name: Empty Minigames + m_Name: Text (TMP) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!224 &505387971 RectTransform: m_ObjectHideFlags: 0 @@ -702,18 +1099,18 @@ RectTransform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 505387970} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + 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: 909961606} - m_RootOrder: 3 + m_Father: {fileID: 1586958978} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 2420, y: 200} - m_SizeDelta: {x: 520, y: 600} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &505387972 MonoBehaviour: @@ -737,8 +1134,8 @@ MonoBehaviour: m_Calls: [] m_text: Nog geen spelletjes gestart m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 3602bedf0ebe5b64596873f09eddf57b, type: 2} - m_sharedMaterial: {fileID: -1030930060397404263, guid: 3602bedf0ebe5b64596873f09eddf57b, type: 2} + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 0} m_fontMaterials: [] @@ -896,6 +1293,83 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &540252893 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 540252894} + - component: {fileID: 540252896} + - component: {fileID: 540252895} + m_Layer: 5 + m_Name: Progress + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &540252894 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 540252893} + 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: 1 + m_Children: + - {fileID: 1360441470} + m_Father: {fileID: 370766210} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -100} + m_SizeDelta: {x: 650, y: 25} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &540252895 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 540252893} + 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: 21300000, guid: 42d6d4c291d8a8a46bd0d545fd445c3d, type: 3} + 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!222 &540252896 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 540252893} + m_CullTransparentMesh: 1 --- !u!1001 &737692049 PrefabInstance: m_ObjectHideFlags: 0 @@ -998,6 +1472,255 @@ RectTransform: m_CorrespondingSourceObject: {fileID: 8299246693487308515, guid: 3bccdf365a4fbea4d8fa1aa461d3dc5c, type: 3} m_PrefabInstance: {fileID: 737692049} m_PrefabAsset: {fileID: 0} +--- !u!1 &784615362 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 784615363} + - component: {fileID: 784615365} + - component: {fileID: 784615364} + m_Layer: 0 + m_Name: Learnables + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &784615363 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 784615362} + 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: 284241816} + - {fileID: 1560311632} + m_Father: {fileID: 370766210} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -65} + m_SizeDelta: {x: 650, y: -170} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &784615364 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 784615362} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 1785877244} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 2 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 50 + m_Viewport: {fileID: 284241816} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 1560311633} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 0 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!222 &784615365 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 784615362} + m_CullTransparentMesh: 1 +--- !u!1 &797061418 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 797061419} + m_Layer: 0 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &797061419 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 797061418} + 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: 2087764284} + m_Father: {fileID: 1560311632} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &830910119 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 830910120} + - component: {fileID: 830910123} + - component: {fileID: 830910122} + - component: {fileID: 830910121} + m_Layer: 5 + m_Name: MinigameTab Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &830910120 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 830910119} + 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: 2007755913} + m_Father: {fileID: 1928223986} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &830910121 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 830910119} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, 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: 830910122} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 400519679} + m_TargetAssemblyTypeName: UserProgressScreen, AccountsScripts + m_MethodName: DisplayMinigames + 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 +--- !u!114 &830910122 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 830910119} + 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: 0.5803922, g: 0.58431375, b: 0.6, 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: 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!222 &830910123 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 830910119} + m_CullTransparentMesh: 1 --- !u!1 &906197776 GameObject: m_ObjectHideFlags: 0 @@ -1032,8 +1755,11 @@ RectTransform: - {fileID: 26280997} - {fileID: 1873954003} - {fileID: 1021209697} - - {fileID: 1716832604} - - {fileID: 909961606} + - {fileID: 1928223986} + - {fileID: 1461595301} + - {fileID: 919169250} + - {fileID: 389931640} + - {fileID: 1592855770} m_Father: {fileID: 1768150806} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -1080,7 +1806,7 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 906197776} m_CullTransparentMesh: 1 ---- !u!1 &909961605 +--- !u!1 &919169246 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1088,139 +1814,58 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 909961606} - - component: {fileID: 909961607} - m_Layer: 5 - m_Name: Activities + - component: {fileID: 919169250} + - component: {fileID: 919169249} + m_Layer: 0 + m_Name: Progress Minigames Panel m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &909961606 + m_IsActive: 0 +--- !u!114 &919169249 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 919169246} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8c17533febddc854f8b01bacf617d45f, type: 3} + m_Name: + m_EditorClassIdentifier: + minigameList: {fileID: 11400000, guid: 51453f9b41bc72f468ba3e67ab622f8f, type: 2} + minigameCardPrefab: {fileID: 5101881939626277738, guid: af026fa8050694c4f816aa0c615e1992, type: 3} + minigamesContainer: {fileID: 1338988554} + minigameInfo: {fileID: 2009685188} + emptyMinigames: {fileID: 1586958977} + progressGraph: {fileID: 2074276201} + minigameTitle: {fileID: 1109336718} + emptyHighscore: {fileID: 1360777392} +--- !u!224 &919169250 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 909961605} + m_GameObject: {fileID: 919169246} 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: 1487493401} - - {fileID: 494202817} - {fileID: 67107107} - - {fileID: 505387971} - - {fileID: 913667424} + - {fileID: 1586958978} + - {fileID: 2009685189} m_Father: {fileID: 906197777} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0} - m_AnchorMax: {x: 0.5, y: 0} - m_AnchoredPosition: {x: 0, y: 100} - m_SizeDelta: {x: 1800, y: 100} - m_Pivot: {x: 0.5, y: 0} ---- !u!114 &909961607 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 909961605} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 7 - m_Spacing: 0 - m_ChildForceExpandWidth: 1 - m_ChildForceExpandHeight: 1 - m_ChildControlWidth: 0 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 - m_ReverseArrangement: 0 ---- !u!1 &913667423 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 913667424} - - component: {fileID: 913667426} - - component: {fileID: 913667425} - m_Layer: 5 - m_Name: Graph - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &913667424 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 913667423} - 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: 909961606} - m_RootOrder: 4 + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 600, y: 600} - m_Pivot: {x: 0, y: 0} ---- !u!114 &913667425 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 913667423} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, 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_Texture: {fileID: 0} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!222 &913667426 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 913667423} - m_CullTransparentMesh: 1 + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &1021209696 GameObject: m_ObjectHideFlags: 0 @@ -1256,8 +1901,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 1} m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 200, y: -50} - m_SizeDelta: {x: 700, y: 100} + m_AnchoredPosition: {x: -235, y: -20} + m_SizeDelta: {x: 700, y: 250} m_Pivot: {x: 0.5, y: 1} --- !u!114 &1021209698 MonoBehaviour: @@ -1279,7 +1924,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_text: QQQQQQQQQQQQ + m_text: USERNAME m_isRightToLeft: 0 m_fontAsset: {fileID: 11400000, guid: 1baf2eae62f542f4585aaf3c9c3e229a, type: 2} m_sharedMaterial: {fileID: -2577534979213189211, guid: 1baf2eae62f542f4585aaf3c9c3e229a, type: 2} @@ -1306,8 +1951,8 @@ MonoBehaviour: m_faceColor: serializedVersion: 2 rgba: 4294967295 - m_fontSize: 92 - m_fontSizeBase: 92 + m_fontSize: 120 + m_fontSizeBase: 120 m_fontWeight: 400 m_enableAutoSizing: 0 m_fontSizeMin: 18 @@ -1356,6 +2001,141 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1021209696} m_CullTransparentMesh: 1 +--- !u!1 &1051765289 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1051765290} + - component: {fileID: 1051765292} + - component: {fileID: 1051765291} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1051765290 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1051765289} + 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: 178910880} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1051765291 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1051765289} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: Lessen + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 1baf2eae62f542f4585aaf3c9c3e229a, type: 2} + m_sharedMaterial: {fileID: -2577534979213189211, guid: 1baf2eae62f542f4585aaf3c9c3e229a, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294309365 + m_fontColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 36 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1051765292 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1051765289} + m_CullTransparentMesh: 1 --- !u!1 &1070872525 GameObject: m_ObjectHideFlags: 0 @@ -1432,6 +2212,218 @@ MonoBehaviour: m_Spacing: {x: 0, y: 0} m_Constraint: 1 m_ConstraintCount: 1 +--- !u!1 &1109336716 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1109336717} + - component: {fileID: 1109336719} + - component: {fileID: 1109336718} + m_Layer: 0 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1109336717 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1109336716} + 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: 2009685189} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 100} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1109336718 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1109336716} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: Minigame + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 1baf2eae62f542f4585aaf3c9c3e229a, type: 2} + m_sharedMaterial: {fileID: -2577534979213189211, guid: 1baf2eae62f542f4585aaf3c9c3e229a, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4279242768 + m_fontColor: {r: 0.0627451, g: 0.0627451, b: 0.0627451, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 72 + m_fontSizeBase: 72 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1109336719 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1109336716} + m_CullTransparentMesh: 1 +--- !u!1 &1227045447 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1227045448} + - component: {fileID: 1227045450} + - component: {fileID: 1227045449} + m_Layer: 0 + m_Name: Empty Courses + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1227045448 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1227045447} + 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: 494202817} + m_Father: {fileID: 1461595301} + 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: -460, y: -90} + m_SizeDelta: {x: 800, y: 700} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1227045449 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1227045447} + 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: 0.78431374, g: 0.78431374, b: 0.78431374, 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: 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!222 &1227045450 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1227045447} + m_CullTransparentMesh: 1 --- !u!1 &1252913992 GameObject: m_ObjectHideFlags: 0 @@ -1541,8 +2533,8 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 + m_Sprite: {fileID: 0} + m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 @@ -1632,7 +2624,7 @@ RectTransform: m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} + m_SizeDelta: {x: -3, y: 0} m_Pivot: {x: 0, y: 1} --- !u!114 &1338988555 MonoBehaviour: @@ -1763,7 +2755,7 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1341560884} m_CullTransparentMesh: 1 ---- !u!1 &1487493400 +--- !u!1 &1360441469 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1771,108 +2763,70 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1487493401} - - component: {fileID: 1487493404} - - component: {fileID: 1487493403} - - component: {fileID: 1487493402} + - component: {fileID: 1360441470} + - component: {fileID: 1360441472} + - component: {fileID: 1360441471} m_Layer: 5 - m_Name: Progress Courses + m_Name: Slider m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &1487493401 +--- !u!224 &1360441470 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1487493400} + m_GameObject: {fileID: 1360441469} 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: 2075803020} - - {fileID: 2087890449} - m_Father: {fileID: 909961606} + m_Children: [] + m_Father: {fileID: 540252894} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 520, y: 600} - m_Pivot: {x: 1, y: 0} ---- !u!114 &1487493402 + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1360441471 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1487493400} + m_GameObject: {fileID: 1360441469} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Content: {fileID: 1070872526} - m_Horizontal: 0 - m_Vertical: 1 - m_MovementType: 2 - m_Elasticity: 0.1 - m_Inertia: 1 - m_DecelerationRate: 0.135 - m_ScrollSensitivity: 1 - m_Viewport: {fileID: 2075803020} - m_HorizontalScrollbar: {fileID: 0} - m_VerticalScrollbar: {fileID: 2087890450} - m_HorizontalScrollbarVisibility: 2 - m_VerticalScrollbarVisibility: 0 - m_HorizontalScrollbarSpacing: -3 - m_VerticalScrollbarSpacing: -3 - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] ---- !u!114 &1487493403 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1487493400} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: 11500000, guid: b69b55aa2ac2e0e4592740cf1269d52c, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 0.392} + 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: 10907, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 + m_Sprite: {fileID: 21300000, guid: 02283f528ead8084db69c7d8a459f0af, type: 3} + m_FillDirection: 0 + m_FillAmount: 0 m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!222 &1487493404 +--- !u!222 &1360441472 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1487493400} + m_GameObject: {fileID: 1360441469} m_CullTransparentMesh: 1 ---- !u!1 &1716832603 +--- !u!1 &1360777392 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1880,43 +2834,43 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1716832604} - - component: {fileID: 1716832606} - - component: {fileID: 1716832605} + - component: {fileID: 1360777393} + - component: {fileID: 1360777395} + - component: {fileID: 1360777394} m_Layer: 5 - m_Name: Active Time + m_Name: Text (TMP) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &1716832604 +--- !u!224 &1360777393 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1716832603} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_GameObject: {fileID: 1360777392} + 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: 906197777} - m_RootOrder: 4 + m_Father: {fileID: 2009685189} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 1} - m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 100, y: -150} - m_SizeDelta: {x: 500, y: 100} - m_Pivot: {x: 0.5, y: 1} ---- !u!114 &1716832605 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1360777394 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1716832603} + m_GameObject: {fileID: 1360777392} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} @@ -1930,10 +2884,10 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_text: 'Totale speeltijd: ' + m_text: Nog geen topscore geregistreerd m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 1baf2eae62f542f4585aaf3c9c3e229a, type: 2} - m_sharedMaterial: {fileID: -2577534979213189211, guid: 1baf2eae62f542f4585aaf3c9c3e229a, type: 2} + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 0} m_fontMaterials: [] @@ -1957,15 +2911,15 @@ MonoBehaviour: m_faceColor: serializedVersion: 2 rgba: 4294967295 - m_fontSize: 40 - m_fontSizeBase: 40 + m_fontSize: 48 + m_fontSizeBase: 48 m_fontWeight: 400 m_enableAutoSizing: 0 m_fontSizeMin: 18 m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 1 - m_VerticalAlignment: 256 + m_fontStyle: 2 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 m_wordSpacing: 0 @@ -1999,13 +2953,619 @@ MonoBehaviour: m_hasFontAssetChanged: 0 m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!222 &1716832606 +--- !u!222 &1360777395 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1716832603} + m_GameObject: {fileID: 1360777392} + m_CullTransparentMesh: 1 +--- !u!1 &1461595298 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1461595301} + - component: {fileID: 1461595300} + m_Layer: 0 + m_Name: Progress Courses Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1461595300 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1461595298} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ba7d548c45e9ade4593922d9530cd56d, type: 3} + m_Name: + m_EditorClassIdentifier: + courseList: {fileID: 11400000, guid: a7ab583094b7897468bbca9243717608, type: 2} + courseCardPrefab: {fileID: 5101881939626277738, guid: b953de8778612cd449ba1999c4f7b8c4, type: 3} + coursesContainer: {fileID: 1070872526} + courseInfo: {fileID: 370766209} + emptyCourses: {fileID: 1227045447} + courseTitle: {fileID: 1497565177} + learnableCardPrefab: {fileID: 758255480231791509, guid: b7a9a8ccb77a37740bfdf5579cb179ca, type: 3} + learnablesContainer: {fileID: 1785877244} + progressBar: {fileID: 1360441471} +--- !u!224 &1461595301 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1461595298} + 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: 1487493401} + - {fileID: 1227045448} + - {fileID: 370766210} + m_Father: {fileID: 906197777} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1487493400 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1487493401} + - component: {fileID: 1487493404} + - component: {fileID: 1487493403} + - component: {fileID: 1487493402} + m_Layer: 5 + m_Name: Progress Courses + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1487493401 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1487493400} + 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: 2075803020} + - {fileID: 2087890449} + m_Father: {fileID: 1461595301} + m_RootOrder: 0 + 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: 300, y: -115} + m_SizeDelta: {x: 520, y: 650} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1487493402 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1487493400} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 1070872526} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 2 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 50 + m_Viewport: {fileID: 2075803020} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 2087890450} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 0 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1487493403 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1487493400} + 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: 0.78431374, g: 0.78431374, b: 0.78431374, 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: 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!222 &1487493404 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1487493400} + m_CullTransparentMesh: 1 +--- !u!1 &1497565175 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1497565176} + - component: {fileID: 1497565178} + - component: {fileID: 1497565177} + m_Layer: 0 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1497565176 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1497565175} + 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: 370766210} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 100} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1497565177 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1497565175} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: Course + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 1baf2eae62f542f4585aaf3c9c3e229a, type: 2} + m_sharedMaterial: {fileID: -2577534979213189211, guid: 1baf2eae62f542f4585aaf3c9c3e229a, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4279242768 + m_fontColor: {r: 0.0627451, g: 0.0627451, b: 0.0627451, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 72 + m_fontSizeBase: 72 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1497565178 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1497565175} + m_CullTransparentMesh: 1 +--- !u!1 &1560311631 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1560311632} + - component: {fileID: 1560311635} + - component: {fileID: 1560311634} + - component: {fileID: 1560311633} + m_Layer: 0 + m_Name: Scrollbar Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1560311632 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1560311631} + 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: 797061419} + m_Father: {fileID: 784615363} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!114 &1560311633 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1560311631} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, 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: 2087764285} + m_HandleRect: {fileID: 2087764284} + m_Direction: 2 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1560311634 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1560311631} + 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: 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!222 &1560311635 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1560311631} + m_CullTransparentMesh: 1 +--- !u!1 &1586958977 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1586958978} + - component: {fileID: 1586958980} + - component: {fileID: 1586958979} + m_Layer: 0 + m_Name: Empty Minigames + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1586958978 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586958977} + 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: 505387971} + m_Father: {fileID: 919169250} + 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: -460, y: -90} + m_SizeDelta: {x: 800, y: 700} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1586958979 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586958977} + 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: 0.78431374, g: 0.78431374, b: 0.78431374, 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: 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!222 &1586958980 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586958977} + m_CullTransparentMesh: 1 +--- !u!1 &1592855769 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1592855770} + - component: {fileID: 1592855773} + - component: {fileID: 1592855772} + - component: {fileID: 1592855771} + m_Layer: 5 + m_Name: Circle (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1592855770 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1592855769} + 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: 906197777} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 230, y: -215} + m_SizeDelta: {x: 360, y: 360} + m_Pivot: {x: 1, y: 0.5} +--- !u!95 &1592855771 +Animator: + serializedVersion: 5 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1592855769} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: 51c408377313b474fa55f6c01c841728, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorStateOnDisable: 0 +--- !u!114 &1592855772 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1592855769} + 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: 21300000, guid: 88410b681ed1df3499ff0660fe5706b4, type: 3} + 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!222 &1592855773 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1592855769} m_CullTransparentMesh: 1 --- !u!1 &1768150802 GameObject: @@ -2142,7 +3702,7 @@ RectTransform: m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 20, y: 20} m_Pivot: {x: 0.5, y: 0.5} @@ -2159,14 +3719,14 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Color: {r: 0.9019608, g: 0.9019608, b: 0.9019608, 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_Sprite: {fileID: 0} m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 @@ -2184,6 +3744,82 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1784911950} m_CullTransparentMesh: 1 +--- !u!1 &1785877243 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1785877244} + - component: {fileID: 1785877245} + - component: {fileID: 1785877246} + m_Layer: 0 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1785877244 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1785877243} + 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: 284241816} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &1785877245 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1785877243} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8a8695521f0d02e499659fee002a26c2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 40 + m_ChildAlignment: 0 + m_StartCorner: 0 + m_StartAxis: 0 + m_CellSize: {x: 150, y: 150} + m_Spacing: {x: 10, y: 40} + m_Constraint: 1 + m_ConstraintCount: 4 +--- !u!114 &1785877246 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1785877243} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 1 --- !u!1 &1873954002 GameObject: m_ObjectHideFlags: 0 @@ -2219,7 +3855,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 1} m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: -300, y: -20} + m_AnchoredPosition: {x: -735, y: -20} m_SizeDelta: {x: 250, y: 250} m_Pivot: {x: 0.5, y: 1} --- !u!114 &1873954004 @@ -2260,6 +3896,71 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1873954002} m_CullTransparentMesh: 1 +--- !u!1 &1928223985 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1928223986} + - component: {fileID: 1928223987} + m_Layer: 5 + m_Name: PanelTabs + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1928223986 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1928223985} + 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: 178910880} + - {fileID: 830910120} + m_Father: {fileID: 906197777} + m_RootOrder: 4 + 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: 300, y: 235} + m_SizeDelta: {x: 520, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1928223987 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1928223985} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 3 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!1 &1943469979 GameObject: m_ObjectHideFlags: 0 @@ -2311,14 +4012,14 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Color: {r: 0.9019608, g: 0.9019608, b: 0.9019608, 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_Sprite: {fileID: 0} m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 @@ -2336,6 +4037,313 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1943469979} m_CullTransparentMesh: 1 +--- !u!1 &2007755912 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2007755913} + - component: {fileID: 2007755915} + - component: {fileID: 2007755914} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2007755913 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2007755912} + 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: 830910120} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2007755914 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2007755912} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: Spelletjes + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 1baf2eae62f542f4585aaf3c9c3e229a, type: 2} + m_sharedMaterial: {fileID: -2577534979213189211, guid: 1baf2eae62f542f4585aaf3c9c3e229a, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294309365 + m_fontColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 36 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &2007755915 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2007755912} + m_CullTransparentMesh: 1 +--- !u!1 &2009685188 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2009685189} + - component: {fileID: 2009685191} + - component: {fileID: 2009685190} + m_Layer: 0 + m_Name: Info + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2009685189 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2009685188} + 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: 1109336717} + - {fileID: 2074276198} + - {fileID: 1360777393} + m_Father: {fileID: 919169250} + m_RootOrder: 2 + 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: -460, y: -90} + m_SizeDelta: {x: 800, y: 700} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2009685190 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2009685188} + 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: 0.78431374, g: 0.78431374, b: 0.78431374, 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: 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!222 &2009685191 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2009685188} + m_CullTransparentMesh: 1 +--- !u!1 &2074276197 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2074276198} + - component: {fileID: 2074276200} + - component: {fileID: 2074276199} + - component: {fileID: 2074276201} + m_Layer: 5 + m_Name: Graph + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2074276198 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2074276197} + 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: 2009685189} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 600, y: 600} + m_Pivot: {x: 0.5, y: 0} +--- !u!114 &2074276199 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2074276197} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, 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_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &2074276200 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2074276197} + m_CullTransparentMesh: 1 +--- !u!114 &2074276201 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2074276197} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 73c708fbc5395aa4b9765d4b6985bacc, type: 3} + m_Name: + m_EditorClassIdentifier: + progressGraph: {fileID: 2074276199} + highscoreMarker: {fileID: 7141392721760992647, guid: c54186c4d7aafd5459b0097d481b8fbf, type: 3} + axesTickMarker: {fileID: 7141392721760992647, guid: 9d96609216a825843b33f6af9cdfa29b, type: 3} + lineColor: {r: 0.25882354, g: 0.61960787, b: 0.7411765, a: 1} + backgroundColor: {r: 1, g: 1, b: 1, a: 0} + textColor: {r: 0.0627451, g: 0.0627451, b: 0.0627451, a: 1} + highscoreColor: {r: 0.96862745, g: 0.6784314, b: 0.09803922, a: 1} --- !u!1 &2075803019 GameObject: m_ObjectHideFlags: 0 @@ -2427,6 +4435,82 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2075803019} m_CullTransparentMesh: 1 +--- !u!1 &2087764283 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2087764284} + - component: {fileID: 2087764286} + - component: {fileID: 2087764285} + m_Layer: 0 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2087764284 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2087764283} + 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: 797061419} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2087764285 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2087764283} + 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: 0.9019608, g: 0.9019608, b: 0.9019608, 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: 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!222 &2087764286 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2087764283} + m_CullTransparentMesh: 1 --- !u!1 &2087890448 GameObject: m_ObjectHideFlags: 0 @@ -2536,7 +4620,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Sprite: {fileID: 0} m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 diff --git a/Assets/Accounts/Scripts/ChangeUserScreen.cs b/Assets/Accounts/Scripts/ChangeUserScreen.cs index 3bacfde..ade0a55 100644 --- a/Assets/Accounts/Scripts/ChangeUserScreen.cs +++ b/Assets/Accounts/Scripts/ChangeUserScreen.cs @@ -48,9 +48,7 @@ public class ChangeUserScreen : MonoBehaviour private void DisplayUsers() { foreach (Transform child in usersContainer) - { Destroy(child.gameObject); - } List users = UserList.GetUsers(); currentUserIndex = UserList.IndexOf(UserList.GetCurrentUser().GetUsername()); diff --git a/Assets/Accounts/Scripts/CourseProgressCard.cs b/Assets/Accounts/Scripts/CourseProgressCard.cs index 2c6522b..eb77cbf 100644 --- a/Assets/Accounts/Scripts/CourseProgressCard.cs +++ b/Assets/Accounts/Scripts/CourseProgressCard.cs @@ -24,7 +24,7 @@ public class CourseProgressCard : MonoBehaviour public PersistentDataController.SavedCourseProgress courseProgress; /// - /// Reference to the list of courses so we can query the correct course + /// Reference to the list of minigameCards so we can query the correct course /// public CourseList courseList; diff --git a/Assets/Accounts/Scripts/LearnableProgressCard.cs b/Assets/Accounts/Scripts/LearnableProgressCard.cs new file mode 100644 index 0000000..41f5b3a --- /dev/null +++ b/Assets/Accounts/Scripts/LearnableProgressCard.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +/// +/// Class to handle learnable progress card display +/// +public class LearnableProgressCard : MonoBehaviour +{ + /// + /// Reference to the progress so we can display a progress bar + /// + public PersistentDataController.SavedLearnableProgress progress; + + /// + /// Reference to the list of minigameCards so we can query the correct course + /// + public Learnable learnable; + + /// + /// UI reference to the thumbnail of the course + /// + public Image thumbnail; + + /// + /// UI refeerence to the title of the course + /// + public List stars; + + /// + /// Start is called before the first frame update + /// + void Start() + { + thumbnail.sprite = learnable.image; + var starRewards = new float[] { 1.0f, 2.5f, 4.0f, }; + for (int i = 0; i < 3; i++) + stars[i].color = starRewards[i] < progress.progress ? Color.white : Color.black; + } +} diff --git a/Assets/Accounts/Scripts/LearnableProgressCard.cs.meta b/Assets/Accounts/Scripts/LearnableProgressCard.cs.meta new file mode 100644 index 0000000..4f5687c --- /dev/null +++ b/Assets/Accounts/Scripts/LearnableProgressCard.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7835fc450a6bbf24d95f0a19491fb8c1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Accounts/Scripts/MinigameProgressCard.cs b/Assets/Accounts/Scripts/MinigameProgressCard.cs index aca0b4b..e5a9257 100644 --- a/Assets/Accounts/Scripts/MinigameProgressCard.cs +++ b/Assets/Accounts/Scripts/MinigameProgressCard.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Linq; using TMPro; using UnityEngine; using UnityEngine.Events; @@ -53,9 +54,11 @@ public class MinigameProgressCard : MonoBehaviour thumbnail.sprite = minigame.thumbnail; title.text = minigame.title; - List highscores = minigameProgress.highestScores; - int score = highscores.Count > 0 ? highscores[0].scoreValue : 0; - highscore.text = $"Topscore: {score}"; button.onClick.AddListener(selectActivity); + List highscores = minigameProgress.highestScores; + if (0 < highscores.Count) + highscore.text = $"TOPSCORE: {highscores.Max((s) => s.scoreValue)}"; + else + highscore.text = "(NOG) GEEN TOPSCORE"; } } diff --git a/Assets/Accounts/Scripts/PanelCourseProgress.cs b/Assets/Accounts/Scripts/PanelCourseProgress.cs new file mode 100644 index 0000000..955e0bf --- /dev/null +++ b/Assets/Accounts/Scripts/PanelCourseProgress.cs @@ -0,0 +1,130 @@ +using System; +using System.Collections.Generic; +using TMPro; +using UnityEngine; +using UnityEngine.UI; + +/// +/// Class to handle course list progress display +/// +public class PanelCourseProgress : MonoBehaviour +{ + /// + /// Reference to the current user + /// + private User user; + + /// + /// Reference to the courses list + /// + public CourseList courseList; + + /// + /// Prefab of a course card + /// + public GameObject courseCardPrefab; + + /// + /// UI reference to the container holding all course cards + /// + public Transform coursesContainer; + + /// + /// UI reference to the course info panel + /// + public GameObject courseInfo; + + /// + /// UI reference to the message that displays when no course progress is present + /// + public GameObject emptyCourses; + + /// + /// Reference to the title on the info panel + /// + public TMP_Text courseTitle; + + /// + /// Reference to the learnable card prefab + /// + public GameObject learnableCardPrefab; + + /// + /// Reference to the container for holding the learnable cards + /// + public Transform learnablesContainer; + + /// + /// Reference to the course progress bar on the info panel + /// + public SlicedSlider progressBar; + + /// + /// Current selected course + /// + private int selectedCourse = 0; + + /// + /// List of course backgrounds and indices + /// + private List> courseCards = new List>(); + + /// + /// Start is called before the first frame update + /// + void Start() + { + PersistentDataController.GetInstance().Load(); + user = UserList.GetCurrentUser(); + + var courses = user.GetCourses(); + courseInfo.SetActive(0 < courses.Count); + emptyCourses.SetActive(courses.Count <= 0); + int i = 0; + foreach (var courseProgress in courses) + { + // Create instance of prefab + GameObject instance = GameObject.Instantiate(courseCardPrefab, coursesContainer); + int j = i++; + + // Initialize card + CourseProgressCard cpc = instance.GetComponent(); + cpc.courseProgress = courseProgress; + cpc.selectActivity = () => UpdateSelection(j); + + // Store reference to background so we can apply fancy coloring + Image background = instance.GetComponent(); + background.color = Color.gray; + this.courseCards.Add(Tuple.Create(background, courseProgress.courseIndex)); + } + if (0 < courses.Count) + UpdateSelection(0); + } + + /// + /// Update the current selected course + /// + /// Index to the new course + private void UpdateSelection(int newCourse) + { + courseCards[selectedCourse].Item1.color = Color.gray; + selectedCourse = newCourse; + courseCards[selectedCourse].Item1.color = Color.blue; + + var progress = user.GetCourseProgress(courseCards[selectedCourse].Item2); + var course = courseList.GetCourseByIndex(progress.courseIndex); + courseTitle.text = course.title; + progressBar.fillAmount = progress.progress; + + foreach (Transform child in learnablesContainer) + Destroy(child.gameObject); + + for (int i = 0; i < course.theme.learnables.Count; i++) + { + GameObject instance = GameObject.Instantiate(learnableCardPrefab, learnablesContainer); + var script = instance.GetComponent(); + script.learnable = course.theme.learnables[i]; + script.progress = progress.learnables[i]; + } + } +} diff --git a/Assets/Accounts/Scripts/PanelCourseProgress.cs.meta b/Assets/Accounts/Scripts/PanelCourseProgress.cs.meta new file mode 100644 index 0000000..2ef4533 --- /dev/null +++ b/Assets/Accounts/Scripts/PanelCourseProgress.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ba7d548c45e9ade4593922d9530cd56d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Accounts/Scripts/PanelMinigameProgress.cs b/Assets/Accounts/Scripts/PanelMinigameProgress.cs new file mode 100644 index 0000000..dc04260 --- /dev/null +++ b/Assets/Accounts/Scripts/PanelMinigameProgress.cs @@ -0,0 +1,127 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using TMPro; +using UnityEngine; +using UnityEngine.UI; + +/// +/// Class to handle minigame list progress display +/// +public class PanelMinigameProgress : MonoBehaviour +{ + /// + /// Reference to the current user + /// + private User user; + + /// + /// Reference to the minigames list + /// + public MinigameList minigameList; + + /// + /// Prefab of a minigame card + /// + public GameObject minigameCardPrefab; + + /// + /// UI reference to the container holding all the minigame cards + /// + public Transform minigamesContainer; + + /// + /// UI reference to the minigame info panel + /// + public GameObject minigameInfo; + + /// + /// UI reference to the message that displays when no minigame progress is present + /// + public GameObject emptyMinigames; + + /// + /// UI reference to the plot + /// + public ProgressGraph progressGraph; + + /// + /// Reference to the title of the minigame of the info panel + /// + public TMP_Text minigameTitle; + + /// + /// Reference to the text that will display when an empty minigame progress object is selected + /// + public GameObject emptyHighscore; + + /// + /// Current selected course + /// + private int selectedMinigame = 0; + + /// + /// List of course backgrounds and indices + /// + private List> minigameCards = new List>(); + + /// + /// Start is called before the first frame update + /// + void Start() + { + PersistentDataController.GetInstance().Load(); + user = UserList.GetCurrentUser(); + + var minigames = user.GetMinigames(); + minigameInfo.SetActive(minigames.Count > 0); + emptyMinigames.SetActive(minigames.Count <= 0); + int i = 0; + foreach (var minigameProgress in minigames) + { + // Create instance of prefab + GameObject instance = GameObject.Instantiate(minigameCardPrefab, minigamesContainer); + int j = i++; + + // Initialize card + MinigameProgressCard mpc = instance.GetComponent(); + mpc.minigameProgress = minigameProgress; + mpc.selectActivity = () => UpdateSelection(j); + + // Store reference to background so we can apply fancy coloring + Image background = instance.GetComponent(); + background.color = Color.gray; + minigameCards.Add(Tuple.Create(background, minigameProgress.minigameIndex)); + } + if (0 < minigames.Count) + UpdateSelection(0); + } + + /// + /// Update the current selected course + /// + /// Index to the new course + private void UpdateSelection(int newMinigame) + { + minigameCards[selectedMinigame].Item1.color = Color.gray; + selectedMinigame = newMinigame; + minigameCards[selectedMinigame].Item1.color = Color.blue; + + var progress = user.GetMinigameProgress(minigameCards[selectedMinigame].Item2); + minigameTitle.text = minigameList.GetMinigameByIndex(progress.minigameIndex).title; + + List latestScores = progress.latestScores; + List highestScores = progress.highestScores; + if (0 < highestScores.Count) + { + emptyHighscore.SetActive(false); + progressGraph.gameObject.SetActive(true); + progressGraph.Plot(latestScores.ConvertAll((s) => (double)s.scoreValue), highestScores.Max((s) => s.scoreValue)); + } + else + { + emptyHighscore.SetActive(true); + progressGraph.gameObject.SetActive(false); + } + } +} diff --git a/Assets/Accounts/Scripts/PanelMinigameProgress.cs.meta b/Assets/Accounts/Scripts/PanelMinigameProgress.cs.meta new file mode 100644 index 0000000..8d93eec --- /dev/null +++ b/Assets/Accounts/Scripts/PanelMinigameProgress.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8c17533febddc854f8b01bacf617d45f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Accounts/Scripts/ProgressGraph.cs b/Assets/Accounts/Scripts/ProgressGraph.cs new file mode 100644 index 0000000..d62bcaf --- /dev/null +++ b/Assets/Accounts/Scripts/ProgressGraph.cs @@ -0,0 +1,263 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using TMPro; +using UnityEngine; +using UnityEngine.UI; + +/// +/// Class to handle and draw a nice line graph to a Texture2D +/// +public class ProgressGraph : MonoBehaviour +{ + /// + /// UI reference to the plot + /// + public RawImage progressGraph; + + /// + /// Prefab of the highscore marker to display on the graph + /// + public GameObject highscoreMarker; + + /// + /// Prefab of the axes tick marker to display on the graph + /// + public GameObject axesTickMarker; + + /// + /// Color of the graph line + /// + public Color lineColor; + + /// + /// Bckground color + /// + public Color backgroundColor; + + /// + /// Color of the text and axes grid + /// + public Color textColor; + + /// + /// Color of the highscore line + /// + public Color highscoreColor; + + /// + /// Left and right padding of the graph + /// + private const int GRAPH_PADDING_X_PX = 50; + + /// + /// Top and bottom padding of the graph + /// + private const int GRAPH_PADDING_Y_PX = 50; + + /// + /// Radius of the point on the graph + /// + private const int GRAPH_POINT_RADIUS = 10; + + /// + /// Size of the line on the graph + /// + private const int GRAPH_LINE_SIZE = 4; + + /// + /// Plot points and a highscore on the graph + /// + /// List of score values to plot + /// Highscore value (this will be plotted in a fancy color) + public void Plot(List scores, double highscore) + { + // Remove previous marker(s) + foreach (Transform child in progressGraph.gameObject.transform) + Destroy(child.gameObject); + + // Get texture reference + Texture2D tex = progressGraph.texture as Texture2D; + RectTransform rect = progressGraph.gameObject.transform as RectTransform; + if (tex == null) + { + tex = new Texture2D( + width: (int)rect.sizeDelta.x, + height: (int)rect.sizeDelta.y, + textureFormat: TextureFormat.ARGB32, + mipCount: 3, + linear: true + ); + } + tex.filterMode = FilterMode.Point; + FillTexture(tex, backgroundColor); + + // calculate positions and offsets + int x0 = GRAPH_PADDING_X_PX, x1 = tex.width - GRAPH_PADDING_X_PX; + int y0 = GRAPH_PADDING_Y_PX, y1 = tex.height - GRAPH_PADDING_Y_PX; + double min = scores.Min(); + double max = scores.Max(); + + List> points = new List>(); + for (int i = 0; i < scores.Count; i++) + { + int _x = x0 + (scores.Count > 1 ? i * ((x1 - x0) / (scores.Count - 1)) : (x1 - x0) / 2); + int _y = y0 + (int)((y1 - y0) * (min != max ? (scores[i] - min) / (max - min) : 0.5)); + points.Add(Tuple.Create(_x, _y)); + } + + // Calculate scaling + const int NUMBER_OF_AXES = 5; + + double spacing = 0.0; + if (min == max) + { + spacing = CalculateSpacing(highscore, NUMBER_OF_AXES); + max = highscore + 2 * spacing; + min = highscore - 2 * spacing; + } + + spacing = CalculateSpacing(max - min, NUMBER_OF_AXES); + double begin = spacing * Math.Round(min / spacing); + + // Draw axes + double pixels_per_unit = (y1 - y0) / (max - min); + double Y = begin; + int y = y0 + (int)(pixels_per_unit * (Y - min)); + int total = 0; + do + { + if (y0 <= y) + { + DrawLine(tex, x0, y, x1, y, 2, textColor); + + GameObject tick = GameObject.Instantiate(axesTickMarker, rect); + tick.GetComponent().localPosition = new Vector3(-10 - rect.sizeDelta.y * rect.pivot.x, y - 25 - rect.sizeDelta.y * rect.pivot.y, 0); + TMP_Text txt = tick.GetComponent(); + txt.text = $"{Y}"; + txt.color = textColor; + } + total += 1; + Y += spacing; + y = y0 + (int)(pixels_per_unit * (Y - min)); + + // Fail save + if (2 * NUMBER_OF_AXES < total) + break; + } while (y <= y1); + + + // Draw highscore + if (min <= highscore && highscore <= max) + { + y = y0 + (int)(pixels_per_unit * (highscore - min)); + DrawLine(tex, x0, y, x1, y, GRAPH_LINE_SIZE, highscoreColor); + GameObject marker = GameObject.Instantiate(highscoreMarker, rect); + marker.GetComponent().localPosition = new Vector3(tex.width - 50 - rect.sizeDelta.x * rect.pivot.x, y - 25 - rect.sizeDelta.y * rect.pivot.y, 0); + } + + // Draw points + for (int i = 0; i < points.Count; i++) + { + Tuple p = points[i]; + if (0 < i) + { + Tuple q = points[i - 1]; + DrawLine(tex, p.Item1, p.Item2, q.Item1, q.Item2, GRAPH_LINE_SIZE, lineColor); + } + DrawPoint(tex, p.Item1, p.Item2, GRAPH_POINT_RADIUS, lineColor); + } + + // Apply to graph GameObject + tex.Apply(); + progressGraph.texture = tex; + } + + /// + /// Calculate nice spacing + /// + /// Either `max - min` if max != min, otherwise `highscore` + /// Number of horizontal axes grid lines shown on the graph + /// Spacing between each axes grid line + private double CalculateSpacing(double mu, int numberOfAxes) + { + if (mu == 0) + return 1.0; + + double[] otherSpacings = { 0.5, 1.0, 2.0, 5.0 }; + + int mag = (int)Math.Floor(Math.Log10(Math.Abs(mu))); + int MAG = (int)Math.Pow(10, mag); + double spacing = MAG; + foreach (double o in otherSpacings) + { + if (Math.Abs(mu - numberOfAxes * spacing) <= Math.Abs(mu - numberOfAxes * o * MAG)) + continue; + spacing = o * MAG; + } + return spacing; + } + + /// + /// Set all the pixels of a texture to a given color + /// + /// Texture to fill + /// Color to set the texture to + private void FillTexture(Texture2D tex, Color color) + { + for (int y = 0; y < tex.height; y++) + for (int x = 0; x < tex.width; x++) + tex.SetPixel(x, y, color); + } + + /// + /// Draw a point to a texture + /// + /// Texture2D to plot point on + /// Center x-pos + /// Center y-pos + /// Radius (aka width and height) + /// Color of the point + private void DrawPoint(Texture2D tex, int xc, int yc, int r, Color color) + { + for (int y = yc - r; y < yc + r; y++) + for (int x = xc - r; x < xc + r; x++) + tex.SetPixel(x, y, color); + } + + /// + /// Draw a line to a texture + /// + /// Texture2D to plot line on + /// Starting x-pos + /// Strating y-pos + /// Ending x-pos + /// Ending y-pos + /// Size of the line (width) + /// Color of the line + private void DrawLine(Texture2D tex, int x0, int y0, int x1, int y1, int size, Color color) + { + int w = x1 - x0; + int h = y1 - y0; + + int length = Mathf.Abs(x1 - x0); + if (Mathf.Abs(y1 - y0) > length) + length = Mathf.Abs(h); + + double dx = w / (double)length; + double dy = h / (double)length; + + double x = x0; + double y = y0; + double r = size / 2; + for (int i = 0; i <= length; i++) + { + for (int j = (int)(y - r); j < y + r; j++) + for (int k = (int)(x - r); k < x + r; k++) + tex.SetPixel(k, j, color); + + x += dx; + y += dy; + } + } +} diff --git a/Assets/Accounts/Scripts/ProgressGraph.cs.meta b/Assets/Accounts/Scripts/ProgressGraph.cs.meta new file mode 100644 index 0000000..79113f0 --- /dev/null +++ b/Assets/Accounts/Scripts/ProgressGraph.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 73c708fbc5395aa4b9765d4b6985bacc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Accounts/Scripts/User.cs b/Assets/Accounts/Scripts/User.cs index 79d20b1..11cfbb3 100644 --- a/Assets/Accounts/Scripts/User.cs +++ b/Assets/Accounts/Scripts/User.cs @@ -40,13 +40,13 @@ public class User /// - /// Get a list of all recently started courses + /// Get a list of all recently started minigameCards /// /// A List of Tuples, containing the CourseIndex /// and a float holding the progress (value between 0 and 1) of the user in this course public List> GetRecentCourses() { - // TODO: return better results (for now only return all courses) + // TODO: return better results (for now only return all minigameCards) List> recentCourses = new List>(); foreach (var courseProgress in storedUserData.courses) { @@ -58,7 +58,7 @@ public class User } /// - /// Get a list of all recommended courses + /// Get a list of all recommended minigameCards /// /// A List of Tuples, containing the CourseIndex /// and a float holding the progress (value between 0 and 1) of the user in this course @@ -71,7 +71,7 @@ public class User } else { - // TODO: return better results (for now only return all courses) + // TODO: return better results (for now only return all minigameCards) foreach (var courseProgress in storedUserData.courses) { CourseIndex idx = courseProgress.courseIndex; @@ -83,7 +83,7 @@ public class User } /// - /// Get the progress of all courses the user did + /// Get the progress of all minigameCards the user did /// /// public List GetCourses() diff --git a/Assets/Accounts/Scripts/UserProgressScreen.cs b/Assets/Accounts/Scripts/UserProgressScreen.cs index d5fac81..3f9d639 100644 --- a/Assets/Accounts/Scripts/UserProgressScreen.cs +++ b/Assets/Accounts/Scripts/UserProgressScreen.cs @@ -1,5 +1,3 @@ -using System; -using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; @@ -25,60 +23,24 @@ public class UserProgressScreen : MonoBehaviour public Image avatar; /// - /// UI reference to the user total playtime + /// Reference to the courses panel /// - public TMP_Text playtime; + public GameObject coursesPanel; /// - /// Prefab of the highscore marker to display on the graph + /// Reference to the minigame panel /// - public GameObject highscoreMarker; + public GameObject minigamesPanel; /// - /// Prefab of a course card + /// Reference to the courses tab button (to set nice color) /// - public GameObject courseCardPrefab; + public Image coursesTabButton; /// - /// UI reference to the container holding all course cards + /// Reference to the minigames tab button (to set nice color) /// - public GameObject coursesContainer; - - /// - /// UI reference to the message that displays when no course progress is present - /// - public GameObject emptyCourses; - - /// - /// Prefab of a minigame card - /// - public GameObject minigameCardPrefab; - - /// - /// UI reference to the container holding all the minigame cards - /// - public GameObject minigamesContainer; - - /// - /// UI reference to the message that displays when no minigame progress is present - /// - public GameObject emptyMinigames; - - /// - /// UI reference to the plot - /// - public RawImage progressGraph; - - /// - /// Current selected activity draw to the graph - /// - private int selectedActivity = -1; - - /// - /// List of activity backgrounds and indices - /// - private List> activities = new List>(); - + public Image minigamesTabButton; /// /// Start is called before the first frame update @@ -92,98 +54,29 @@ public class UserProgressScreen : MonoBehaviour // Set correct displayed items username.text = user.GetUsername(); avatar.sprite = user.GetAvatar(); - playtime.text = $"Totale speeltijd: {user.GetPlaytime().ToString("0.00")}"; - // Set graph inactive - progressGraph.gameObject.SetActive(false); - - int i = 0; - // Display courses - var courses = user.GetCourses(); - coursesContainer.SetActive(courses.Count > 0); - emptyCourses.SetActive(courses.Count <= 0); - foreach (var courseProgress in courses) - { - // Create instance of prefab - GameObject instance = GameObject.Instantiate(courseCardPrefab, coursesContainer.transform.Find("Viewport").Find("Content").transform); - int j = i++; - - // Initialize card - CourseProgressCard cpc = instance.GetComponent(); - cpc.courseProgress = courseProgress; - cpc.selectActivity = () => UpdateSelection(j); - - // Store reference to background so we can apply fancy coloring - Image background = instance.GetComponent(); - background.color = Color.gray; - activities.Add(Tuple.Create(background, (int)courseProgress.courseIndex)); - } - - // Display minigames - var minigames = user.GetMinigames(); - minigamesContainer.SetActive(minigames.Count > 0); - emptyMinigames.SetActive(minigames.Count <= 0); - foreach (var minigameProgress in minigames) - { - // Create instance of prefab - GameObject instance = GameObject.Instantiate(minigameCardPrefab, minigamesContainer.transform.Find("Viewport").Find("Content").transform); - int j = i++; - - // Initialize card - MinigameProgressCard mpc = instance.GetComponent(); - mpc.minigameProgress = minigameProgress; - mpc.selectActivity = () => UpdateSelection(j); - - // Store reference to background so we can apply fancy coloring - Image background = instance.GetComponent(); - background.color = Color.gray; - activities.Add(Tuple.Create(background, (int)minigameProgress.minigameIndex)); - } + DisplayCourses(); } /// - /// Update the current selected activity + /// Switch to displaying the courses /// - /// Index to the new activity - private void UpdateSelection(int newActivity) + public void DisplayCourses() { - if (selectedActivity < 0) - { - progressGraph.gameObject.SetActive(true); - } - else - { - activities[selectedActivity].Item1.color = Color.gray; - } - - selectedActivity = newActivity; - activities[selectedActivity].Item1.color = Color.blue; - if (selectedActivity < user.GetCourses().Count) - { - // TODO: create a better graph - //DisplayCourseGraph((CourseIndex)activities[selectedActivity].Item2); - // For now: just deactivate graph rendering - progressGraph.gameObject.SetActive(false); - } - else - { - DisplayMinigameGraph((MinigameIndex)activities[selectedActivity].Item2); - // TODO: remove line, this is only because courses deactivates the graph - progressGraph.gameObject.SetActive(true); - } + coursesPanel.SetActive(true); + coursesTabButton.color = Color.blue; + minigamesPanel.SetActive(false); + minigamesTabButton.color = Color.gray; } /// - /// Plot the graph of a course + /// Switch to displaying the minigames /// - /// Index of the course - /// TODO: create a better plot - private void DisplayCourseGraph(CourseIndex index) { } - - /// - /// Plot the graph of a minigame - /// - /// Index of the minigame - /// TODO: reworking - private void DisplayMinigameGraph(MinigameIndex minigameIndex) { } + public void DisplayMinigames() + { + coursesPanel.SetActive(false); + coursesTabButton.color = Color.gray; + minigamesPanel.SetActive(true); + minigamesTabButton.color = Color.blue; + } } diff --git a/Assets/Accounts/Tests/PlayMode/CourseProgressCardTests.cs b/Assets/Accounts/Tests/PlayMode/CourseProgressCardTests.cs index 48754ce..d275dfb 100644 --- a/Assets/Accounts/Tests/PlayMode/CourseProgressCardTests.cs +++ b/Assets/Accounts/Tests/PlayMode/CourseProgressCardTests.cs @@ -33,13 +33,16 @@ public class CourseProgressCardTests SystemController.GetInstance().SwapScene("Accounts/Scenes/UserProgressScreen"); yield return new WaitForSeconds(WAIT_TIME); + + GameObject.FindObjectOfType().DisplayCourses(); + yield return new WaitForSeconds(WAIT_TIME); } /// /// Cleanup after testing /// [TearDown] - public void TearDown_ChangeUserScreen() + public void TearDown_MinigameProgressCard() { PersistentDataController.PATH = null; } diff --git a/Assets/Accounts/Tests/PlayMode/LearnableProgressCardTests.cs b/Assets/Accounts/Tests/PlayMode/LearnableProgressCardTests.cs new file mode 100644 index 0000000..ca4b14a --- /dev/null +++ b/Assets/Accounts/Tests/PlayMode/LearnableProgressCardTests.cs @@ -0,0 +1,78 @@ +using NUnit.Framework; +using System.Collections; +using System.IO; +using UnityEditor; +using UnityEngine; +using UnityEngine.TestTools; + +/// +/// Test the LearnableProgressCard class +/// +[TestFixture] +public class LearnableProgressCardTests +{ + /// + /// Wait time between scene transitions + /// + private const float WAIT_TIME = 0.2f; + + /// + /// Setup the LearnableProgressCard tests + /// + [UnitySetUp] + public IEnumerator Setup_CourseProgressCard() + { + string path = $"{Application.persistentDataPath}/wesign_unit_test.json"; + string course = "{\"entries\":[],\"courseIndex\":0,\"progress\":0.03846153989434242,\"completedLearnables\":1,\"inUseLearnables\":7,\"totalLearnables\":26,\"learnables\":[{\"entries\":[],\"index\":0,\"inUse\":true,\"name\":\"A\",\"progress\":3.0},{\"entries\":[],\"index\":1,\"inUse\":true,\"name\":\"B\",\"progress\":4.5},{\"entries\":[],\"index\":2,\"inUse\":true,\"name\":\"C\",\"progress\":1.5},{\"entries\":[],\"index\":3,\"inUse\":true,\"name\":\"D\",\"progress\":1.5},{\"entries\":[],\"index\":4,\"inUse\":true,\"name\":\"E\",\"progress\":1.5},{\"entries\":[],\"index\":5,\"inUse\":true,\"name\":\"F\",\"progress\":1.5},{\"entries\":[],\"index\":6,\"inUse\":true,\"name\":\"G\",\"progress\":0.0},{\"entries\":[],\"index\":7,\"inUse\":false,\"name\":\"H\",\"progress\":0.0},{\"entries\":[],\"index\":8,\"inUse\":false,\"name\":\"I\",\"progress\":0.0},{\"entries\":[],\"index\":9,\"inUse\":false,\"name\":\"J\",\"progress\":0.0},{\"entries\":[],\"index\":10,\"inUse\":false,\"name\":\"K\",\"progress\":0.0},{\"entries\":[],\"index\":11,\"inUse\":false,\"name\":\"L\",\"progress\":0.0},{\"entries\":[],\"index\":12,\"inUse\":false,\"name\":\"M\",\"progress\":0.0},{\"entries\":[],\"index\":13,\"inUse\":false,\"name\":\"N\",\"progress\":0.0},{\"entries\":[],\"index\":14,\"inUse\":false,\"name\":\"O\",\"progress\":0.0},{\"entries\":[],\"index\":15,\"inUse\":false,\"name\":\"P\",\"progress\":0.0},{\"entries\":[],\"index\":16,\"inUse\":false,\"name\":\"Q\",\"progress\":0.0},{\"entries\":[],\"index\":17,\"inUse\":false,\"name\":\"R\",\"progress\":0.0},{\"entries\":[],\"index\":18,\"inUse\":false,\"name\":\"S\",\"progress\":0.0},{\"entries\":[],\"index\":19,\"inUse\":false,\"name\":\"T\",\"progress\":0.0},{\"entries\":[],\"index\":20,\"inUse\":false,\"name\":\"U\",\"progress\":0.0},{\"entries\":[],\"index\":21,\"inUse\":false,\"name\":\"V\",\"progress\":0.0},{\"entries\":[],\"index\":22,\"inUse\":false,\"name\":\"W\",\"progress\":0.0},{\"entries\":[],\"index\":23,\"inUse\":false,\"name\":\"X\",\"progress\":0.0},{\"entries\":[],\"index\":24,\"inUse\":false,\"name\":\"Y\",\"progress\":0.0},{\"entries\":[],\"index\":25,\"inUse\":false,\"name\":\"Z\",\"progress\":0.0}]}"; + string oneUser = $"{{\"version\":1027,\"users\":[{{\"entries\":[],\"username\":\"Tester0\",\"avatarIndex\":0,\"playtime\":0.0,\"minigames\":[],\"courses\":[{course}]}}],\"currentUser\":0,\"currentMinigame\":0,\"currentCourse\":0,\"currentTheme\":0}}"; + + File.WriteAllText(path, oneUser); + PersistentDataController.PATH = path; + PersistentDataController.GetInstance().Load(); + AssetDatabase.LoadAssetAtPath("Assets/Accounts/ScriptableObjects/UserAvatarList.asset").Awake(); + + SystemController.GetInstance().SwapScene("Accounts/Scenes/UserProgressScreen"); + yield return new WaitForSeconds(WAIT_TIME); + + GameObject.FindObjectOfType().DisplayCourses(); + yield return new WaitForSeconds(WAIT_TIME); + } + + /// + /// Cleanup after testing + /// + [TearDown] + public void TearDown_MinigameProgressCard() + { + PersistentDataController.PATH = null; + } + + /// + /// Test whether every item that needs to be assign in the editor, is assigned + /// + [Test] + public void Test_EditorAssignments() + { + var card = GameObject.FindObjectOfType(); + Assert.IsNotNull(card); + Assert.IsNotNull(card.learnable); + Assert.IsNotNull(card.thumbnail); + Assert.IsNotNull(card.stars); + Assert.AreEqual(3, card.stars.Count); + } + + /// + /// Test whether the card is correctly initialized + /// + [Test] + public void Test_Start() + { + var card = GameObject.FindObjectOfType(); + + Assert.AreEqual(card.learnable.image, card.thumbnail.sprite); + var starRewards = new float[] { 1.0f, 2.5f, 4.0f, }; + for (int i = 0; i < 3; i++) + Assert.AreEqual(starRewards[i] < card.progress.progress ? Color.white : Color.black, card.stars[i].color); + } +} + diff --git a/Assets/Accounts/Tests/PlayMode/LearnableProgressCardTests.cs.meta b/Assets/Accounts/Tests/PlayMode/LearnableProgressCardTests.cs.meta new file mode 100644 index 0000000..d41e71b --- /dev/null +++ b/Assets/Accounts/Tests/PlayMode/LearnableProgressCardTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 238c4a8454aff2744ac782a49d2fbbd6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Accounts/Tests/PlayMode/MinigameProgressCardTests.cs b/Assets/Accounts/Tests/PlayMode/MinigameProgressCardTests.cs index 320255a..4a88c1c 100644 --- a/Assets/Accounts/Tests/PlayMode/MinigameProgressCardTests.cs +++ b/Assets/Accounts/Tests/PlayMode/MinigameProgressCardTests.cs @@ -19,8 +19,7 @@ public class MinigameProgressCardTests /// /// Setup the MinigameProgressCard tests /// - [UnitySetUp] - public IEnumerator Setup_MinigameProgressCard() + private IEnumerator Setup_MinigameProgressCard() { string path = $"{Application.persistentDataPath}/wesign_unit_test.json"; string minigame = "{\"entries\":[],\"minigameIndex\":1,\"latestScores\":[{\"scoreValue\":70,\"time\":\"19/04/2023 22:32:39\"},{\"scoreValue\":55,\"time\":\"20/04/2023 11:50:10\"},{\"scoreValue\":55,\"time\":\"20/04/2023 13:27:15\"}],\"highestScores\":[{\"scoreValue\":70,\"time\":\"19/04/2023 22:32:39\"},{\"scoreValue\":55,\"time\":\"20/04/2023 11:50:10\"},{\"scoreValue\":55,\"time\":\"20/04/2023 13:27:15\"}]}"; @@ -33,13 +32,37 @@ public class MinigameProgressCardTests SystemController.GetInstance().SwapScene("Accounts/Scenes/UserProgressScreen"); yield return new WaitForSeconds(WAIT_TIME); + + GameObject.FindObjectOfType().DisplayMinigames(); + yield return new WaitForSeconds(WAIT_TIME); + } + + /// + /// Setup the MinigameProgressCard tests + /// + private IEnumerator Setup_MinigameProgressCard_Empty() + { + string path = $"{Application.persistentDataPath}/wesign_unit_test.json"; + string minigame = "{\"entries\":[],\"minigameIndex\":0,\"latestScores\":[],\"highestScores\":[]}"; + string oneUser = $"{{\"version\":1027,\"users\":[{{\"entries\":[],\"username\":\"Tester0\",\"avatarIndex\":0,\"playtime\":0.0,\"minigames\":[{minigame}],\"courses\":[]}}],\"currentUser\":0,\"currentMinigame\":0,\"currentCourse\":0,\"currentTheme\":0}}"; + + File.WriteAllText(path, oneUser); + PersistentDataController.PATH = path; + PersistentDataController.GetInstance().Load(); + AssetDatabase.LoadAssetAtPath("Assets/Accounts/ScriptableObjects/UserAvatarList.asset").Awake(); + + SystemController.GetInstance().SwapScene("Accounts/Scenes/UserProgressScreen"); + yield return new WaitForSeconds(WAIT_TIME); + + GameObject.FindObjectOfType().DisplayMinigames(); + yield return new WaitForSeconds(WAIT_TIME); } /// /// Cleanup after testing /// [TearDown] - public void TearDown_ChangeUserScreen() + public void TearDown_MinigameProgressCard() { PersistentDataController.PATH = null; } @@ -47,9 +70,11 @@ public class MinigameProgressCardTests /// /// Test whether every item that needs to be assign in the editor, is assigned /// - [Test] - public void Test_EditorAssignments() + [UnityTest] + public IEnumerator Test_EditorAssignments() { + yield return Setup_MinigameProgressCard(); + var card = GameObject.FindObjectOfType(); Assert.IsNotNull(card); Assert.IsNotNull(card.button); @@ -63,15 +88,33 @@ public class MinigameProgressCardTests /// /// Test whether the card is correctly initialized /// - [Test] - public void Test_Start() + [UnityTest] + public IEnumerator Test_Start() { + yield return Setup_MinigameProgressCard(); + var card = GameObject.FindObjectOfType(); Minigame minigame = card.minigameList.GetMinigameByIndex(card.minigameProgress.minigameIndex); Assert.AreEqual(minigame.thumbnail, card.thumbnail.sprite); Assert.AreEqual(minigame.title, card.title.text); - Assert.AreEqual(card.highscore.text, $"Topscore: {card.minigameProgress.highestScores[0].scoreValue}"); + Assert.AreEqual($"TOPSCORE: {card.minigameProgress.highestScores[0].scoreValue}", card.highscore.text); + } + + /// + /// Test whether an empty card is correctly initialized + /// + [UnityTest] + public IEnumerator Test_Start_Empty() + { + yield return Setup_MinigameProgressCard_Empty(); + + var card = GameObject.FindObjectOfType(); + Minigame minigame = card.minigameList.GetMinigameByIndex(card.minigameProgress.minigameIndex); + + Assert.AreEqual(minigame.thumbnail, card.thumbnail.sprite); + Assert.AreEqual(minigame.title, card.title.text); + Assert.AreEqual("(NOG) GEEN TOPSCORE", card.highscore.text); } } diff --git a/Assets/Accounts/Tests/PlayMode/PanelCourseProgressTests.cs b/Assets/Accounts/Tests/PlayMode/PanelCourseProgressTests.cs new file mode 100644 index 0000000..90e8b61 --- /dev/null +++ b/Assets/Accounts/Tests/PlayMode/PanelCourseProgressTests.cs @@ -0,0 +1,162 @@ +using NUnit.Framework; +using System.Collections; +using System.IO; +using UnityEditor; +using UnityEngine; +using UnityEngine.TestTools; +using UnityEngine.UI; + +/// +/// Test the PanelCourseProgress class +/// +[TestFixture] +public class PanelCourseProgressTests +{ + /// + /// Wait time between scene transitions + /// + private const float WAIT_TIME = 0.2f; + + /// + /// Setup the PanelCourseProgress tests + /// + private IEnumerator Setup_PanelCourseProgress() + { + string path = $"{Application.persistentDataPath}/wesign_unit_test.json"; + string course = "{\"entries\":[],\"courseIndex\":0,\"progress\":0.03846153989434242,\"completedLearnables\":1,\"inUseLearnables\":7,\"totalLearnables\":26,\"learnables\":[{\"entries\":[],\"index\":0,\"inUse\":true,\"name\":\"A\",\"progress\":3.0},{\"entries\":[],\"index\":1,\"inUse\":true,\"name\":\"B\",\"progress\":4.5},{\"entries\":[],\"index\":2,\"inUse\":true,\"name\":\"C\",\"progress\":1.5},{\"entries\":[],\"index\":3,\"inUse\":true,\"name\":\"D\",\"progress\":1.5},{\"entries\":[],\"index\":4,\"inUse\":true,\"name\":\"E\",\"progress\":1.5},{\"entries\":[],\"index\":5,\"inUse\":true,\"name\":\"F\",\"progress\":1.5},{\"entries\":[],\"index\":6,\"inUse\":true,\"name\":\"G\",\"progress\":0.0},{\"entries\":[],\"index\":7,\"inUse\":false,\"name\":\"H\",\"progress\":0.0},{\"entries\":[],\"index\":8,\"inUse\":false,\"name\":\"I\",\"progress\":0.0},{\"entries\":[],\"index\":9,\"inUse\":false,\"name\":\"J\",\"progress\":0.0},{\"entries\":[],\"index\":10,\"inUse\":false,\"name\":\"K\",\"progress\":0.0},{\"entries\":[],\"index\":11,\"inUse\":false,\"name\":\"L\",\"progress\":0.0},{\"entries\":[],\"index\":12,\"inUse\":false,\"name\":\"M\",\"progress\":0.0},{\"entries\":[],\"index\":13,\"inUse\":false,\"name\":\"N\",\"progress\":0.0},{\"entries\":[],\"index\":14,\"inUse\":false,\"name\":\"O\",\"progress\":0.0},{\"entries\":[],\"index\":15,\"inUse\":false,\"name\":\"P\",\"progress\":0.0},{\"entries\":[],\"index\":16,\"inUse\":false,\"name\":\"Q\",\"progress\":0.0},{\"entries\":[],\"index\":17,\"inUse\":false,\"name\":\"R\",\"progress\":0.0},{\"entries\":[],\"index\":18,\"inUse\":false,\"name\":\"S\",\"progress\":0.0},{\"entries\":[],\"index\":19,\"inUse\":false,\"name\":\"T\",\"progress\":0.0},{\"entries\":[],\"index\":20,\"inUse\":false,\"name\":\"U\",\"progress\":0.0},{\"entries\":[],\"index\":21,\"inUse\":false,\"name\":\"V\",\"progress\":0.0},{\"entries\":[],\"index\":22,\"inUse\":false,\"name\":\"W\",\"progress\":0.0},{\"entries\":[],\"index\":23,\"inUse\":false,\"name\":\"X\",\"progress\":0.0},{\"entries\":[],\"index\":24,\"inUse\":false,\"name\":\"Y\",\"progress\":0.0},{\"entries\":[],\"index\":25,\"inUse\":false,\"name\":\"Z\",\"progress\":0.0}]}"; + string oneUser = $"{{\"version\":1027,\"users\":[{{\"entries\":[],\"username\":\"Tester0\",\"avatarIndex\":0,\"playtime\":0.0,\"minigames\":[],\"courses\":[{course}]}}],\"currentUser\":0,\"currentMinigame\":0,\"currentCourse\":0,\"currentTheme\":0}}"; + + File.WriteAllText(path, oneUser); + PersistentDataController.PATH = path; + PersistentDataController.GetInstance().Load(); + AssetDatabase.LoadAssetAtPath("Assets/Accounts/ScriptableObjects/UserAvatarList.asset").Awake(); + + SystemController.GetInstance().SwapScene("Accounts/Scenes/UserProgressScreen"); + yield return new WaitForSeconds(WAIT_TIME); + + GameObject.FindObjectOfType().DisplayCourses(); + yield return new WaitForSeconds(WAIT_TIME); + } + + /// + /// Setup the PanelCourseProgress tests + /// + private IEnumerator Setup_PanelCourseProgress_Empty() + { + string path = $"{Application.persistentDataPath}/wesign_unit_test.json"; + string oneUser = $"{{\"version\":1027,\"users\":[{{\"entries\":[],\"username\":\"Tester0\",\"avatarIndex\":0,\"playtime\":0.0,\"minigames\":[],\"courses\":[]}}],\"currentUser\":0,\"currentMinigame\":0,\"currentCourse\":0,\"currentTheme\":0}}"; + + File.WriteAllText(path, oneUser); + PersistentDataController.PATH = path; + PersistentDataController.GetInstance().Load(); + AssetDatabase.LoadAssetAtPath("Assets/Accounts/ScriptableObjects/UserAvatarList.asset").Awake(); + + SystemController.GetInstance().SwapScene("Accounts/Scenes/UserProgressScreen"); + yield return new WaitForSeconds(WAIT_TIME); + + GameObject.FindObjectOfType().DisplayCourses(); + yield return new WaitForSeconds(WAIT_TIME); + } + + /// + /// Setup the PanelCourseProgress tests + /// + private IEnumerator Setup_PanelCourseProgress_Multiple() + { + string path = $"{Application.persistentDataPath}/wesign_unit_test.json"; + string courses = "[{\"entries\":[],\"courseIndex\":1,\"progress\":-1.0,\"completedLearnables\":0,\"inUseLearnables\":1,\"totalLearnables\":15,\"learnables\":[{\"entries\":[],\"index\":0,\"inUse\":true,\"name\":\"Tot ziens\",\"progress\":0.0},{\"entries\":[],\"index\":1,\"inUse\":false,\"name\":\"Saluut\",\"progress\":0.0},{\"entries\":[],\"index\":2,\"inUse\":false,\"name\":\"Goedemorgen\",\"progress\":0.0},{\"entries\":[],\"index\":3,\"inUse\":false,\"name\":\"Goedemiddag\",\"progress\":0.0},{\"entries\":[],\"index\":4,\"inUse\":false,\"name\":\"Goed\",\"progress\":0.0},{\"entries\":[],\"index\":5,\"inUse\":false,\"name\":\"Slecht\",\"progress\":0.0},{\"entries\":[],\"index\":6,\"inUse\":false,\"name\":\"Ja\",\"progress\":0.0},{\"entries\":[],\"index\":7,\"inUse\":false,\"name\":\"Links\",\"progress\":0.0},{\"entries\":[],\"index\":8,\"inUse\":false,\"name\":\"Rechts\",\"progress\":0.0},{\"entries\":[],\"index\":9,\"inUse\":false,\"name\":\"Bedanken\",\"progress\":0.0},{\"entries\":[],\"index\":10,\"inUse\":false,\"name\":\"Sorry\",\"progress\":0.0},{\"entries\":[],\"index\":11,\"inUse\":false,\"name\":\"Goedenacht\",\"progress\":0.0},{\"entries\":[],\"index\":12,\"inUse\":false,\"name\":\"Smakelijk\",\"progress\":0.0},{\"entries\":[],\"index\":13,\"inUse\":false,\"name\":\"Goedenavond\",\"progress\":0.0},{\"entries\":[],\"index\":14,\"inUse\":false,\"name\":\"Nee\",\"progress\":0.0}]},{\"entries\":[],\"courseIndex\":0,\"progress\":0.07692307978868485,\"completedLearnables\":2,\"inUseLearnables\":8,\"totalLearnables\":26,\"learnables\":[{\"entries\":[],\"index\":0,\"inUse\":true,\"name\":\"A\",\"progress\":1.5},{\"entries\":[],\"index\":1,\"inUse\":true,\"name\":\"B\",\"progress\":3.0},{\"entries\":[],\"index\":2,\"inUse\":true,\"name\":\"C\",\"progress\":4.5},{\"entries\":[],\"index\":3,\"inUse\":true,\"name\":\"D\",\"progress\":0.0},{\"entries\":[],\"index\":4,\"inUse\":true,\"name\":\"E\",\"progress\":4.5},{\"entries\":[],\"index\":5,\"inUse\":true,\"name\":\"F\",\"progress\":1.5},{\"entries\":[],\"index\":6,\"inUse\":true,\"name\":\"G\",\"progress\":3.0},{\"entries\":[],\"index\":7,\"inUse\":true,\"name\":\"H\",\"progress\":1.5},{\"entries\":[],\"index\":8,\"inUse\":false,\"name\":\"I\",\"progress\":0.0},{\"entries\":[],\"index\":9,\"inUse\":false,\"name\":\"J\",\"progress\":0.0},{\"entries\":[],\"index\":10,\"inUse\":false,\"name\":\"K\",\"progress\":0.0},{\"entries\":[],\"index\":11,\"inUse\":false,\"name\":\"L\",\"progress\":0.0},{\"entries\":[],\"index\":12,\"inUse\":false,\"name\":\"M\",\"progress\":0.0},{\"entries\":[],\"index\":13,\"inUse\":false,\"name\":\"N\",\"progress\":0.0},{\"entries\":[],\"index\":14,\"inUse\":false,\"name\":\"O\",\"progress\":0.0},{\"entries\":[],\"index\":15,\"inUse\":false,\"name\":\"P\",\"progress\":0.0},{\"entries\":[],\"index\":16,\"inUse\":false,\"name\":\"Q\",\"progress\":0.0},{\"entries\":[],\"index\":17,\"inUse\":false,\"name\":\"R\",\"progress\":0.0},{\"entries\":[],\"index\":18,\"inUse\":false,\"name\":\"S\",\"progress\":0.0},{\"entries\":[],\"index\":19,\"inUse\":false,\"name\":\"T\",\"progress\":0.0},{\"entries\":[],\"index\":20,\"inUse\":false,\"name\":\"U\",\"progress\":0.0},{\"entries\":[],\"index\":21,\"inUse\":false,\"name\":\"V\",\"progress\":0.0},{\"entries\":[],\"index\":22,\"inUse\":false,\"name\":\"W\",\"progress\":0.0},{\"entries\":[],\"index\":23,\"inUse\":false,\"name\":\"X\",\"progress\":0.0},{\"entries\":[],\"index\":24,\"inUse\":false,\"name\":\"Y\",\"progress\":0.0},{\"entries\":[],\"index\":25,\"inUse\":false,\"name\":\"Z\",\"progress\":0.0}]},{\"entries\":[],\"courseIndex\":3,\"progress\":0.04545454680919647,\"completedLearnables\":1,\"inUseLearnables\":7,\"totalLearnables\":22,\"learnables\":[{\"entries\":[],\"index\":0,\"inUse\":true,\"name\":\"Aardappel\",\"progress\":4.5},{\"entries\":[],\"index\":1,\"inUse\":true,\"name\":\"Aardbei\",\"progress\":1.5},{\"entries\":[],\"index\":2,\"inUse\":true,\"name\":\"Ajuin\",\"progress\":1.5},{\"entries\":[],\"index\":3,\"inUse\":true,\"name\":\"Appel\",\"progress\":1.5},{\"entries\":[],\"index\":4,\"inUse\":true,\"name\":\"Appelsien\",\"progress\":3.0},{\"entries\":[],\"index\":5,\"inUse\":true,\"name\":\"Banaan\",\"progress\":3.0},{\"entries\":[],\"index\":6,\"inUse\":true,\"name\":\"Bessen\",\"progress\":0.0},{\"entries\":[],\"index\":7,\"inUse\":false,\"name\":\"Bloemkool\",\"progress\":0.0},{\"entries\":[],\"index\":8,\"inUse\":false,\"name\":\"Bonen\",\"progress\":0.0},{\"entries\":[],\"index\":9,\"inUse\":false,\"name\":\"Broccoli\",\"progress\":0.0},{\"entries\":[],\"index\":10,\"inUse\":false,\"name\":\"Champignon\",\"progress\":0.0},{\"entries\":[],\"index\":11,\"inUse\":false,\"name\":\"Erwt\",\"progress\":0.0},{\"entries\":[],\"index\":12,\"inUse\":false,\"name\":\"Kers\",\"progress\":0.0},{\"entries\":[],\"index\":13,\"inUse\":false,\"name\":\"Kiwi\",\"progress\":0.0},{\"entries\":[],\"index\":14,\"inUse\":false,\"name\":\"Komkommer\",\"progress\":0.0},{\"entries\":[],\"index\":15,\"inUse\":false,\"name\":\"Meloen\",\"progress\":0.0},{\"entries\":[],\"index\":16,\"inUse\":false,\"name\":\"Peer\",\"progress\":0.0},{\"entries\":[],\"index\":17,\"inUse\":false,\"name\":\"Perzik\",\"progress\":0.0},{\"entries\":[],\"index\":18,\"inUse\":false,\"name\":\"Pompoen\",\"progress\":0.0},{\"entries\":[],\"index\":19,\"inUse\":false,\"name\":\"Prei\",\"progress\":0.0},{\"entries\":[],\"index\":20,\"inUse\":false,\"name\":\"Tomaat\",\"progress\":0.0},{\"entries\":[],\"index\":21,\"inUse\":false,\"name\":\"Wortel\",\"progress\":0.0}]},{\"entries\":[],\"courseIndex\":2,\"progress\":-1.0,\"completedLearnables\":0,\"inUseLearnables\":4,\"totalLearnables\":22,\"learnables\":[{\"entries\":[],\"index\":0,\"inUse\":true,\"name\":\"Walvis\",\"progress\":0.0},{\"entries\":[],\"index\":1,\"inUse\":true,\"name\":\"Konijn\",\"progress\":0.0},{\"entries\":[],\"index\":2,\"inUse\":true,\"name\":\"Giraf\",\"progress\":0.0},{\"entries\":[],\"index\":3,\"inUse\":true,\"name\":\"Vis\",\"progress\":0.0},{\"entries\":[],\"index\":4,\"inUse\":false,\"name\":\"Schildpad\",\"progress\":0.0},{\"entries\":[],\"index\":5,\"inUse\":false,\"name\":\"Lama\",\"progress\":0.0},{\"entries\":[],\"index\":6,\"inUse\":false,\"name\":\"Dolfijn\",\"progress\":0.0},{\"entries\":[],\"index\":7,\"inUse\":false,\"name\":\"Haai\",\"progress\":0.0},{\"entries\":[],\"index\":8,\"inUse\":false,\"name\":\"Kangoeroe\",\"progress\":0.0},{\"entries\":[],\"index\":9,\"inUse\":false,\"name\":\"Kat\",\"progress\":0.0},{\"entries\":[],\"index\":10,\"inUse\":false,\"name\":\"Hond\",\"progress\":0.0},{\"entries\":[],\"index\":11,\"inUse\":false,\"name\":\"Kip\",\"progress\":0.0},{\"entries\":[],\"index\":12,\"inUse\":false,\"name\":\"Leeuw\",\"progress\":0.0},{\"entries\":[],\"index\":13,\"inUse\":false,\"name\":\"Olifant\",\"progress\":0.0},{\"entries\":[],\"index\":14,\"inUse\":false,\"name\":\"Paard\",\"progress\":0.0},{\"entries\":[],\"index\":15,\"inUse\":false,\"name\":\"Panda\",\"progress\":0.0},{\"entries\":[],\"index\":16,\"inUse\":false,\"name\":\"Papegaai\",\"progress\":0.0},{\"entries\":[],\"index\":17,\"inUse\":false,\"name\":\"Ram\",\"progress\":0.0},{\"entries\":[],\"index\":18,\"inUse\":false,\"name\":\"Tijger\",\"progress\":0.0},{\"entries\":[],\"index\":19,\"inUse\":false,\"name\":\"Varken\",\"progress\":0.0},{\"entries\":[],\"index\":20,\"inUse\":false,\"name\":\"Vos\",\"progress\":0.0},{\"entries\":[],\"index\":21,\"inUse\":false,\"name\":\"Zebra\",\"progress\":0.0}]},{\"entries\":[],\"courseIndex\":6,\"progress\":-1.0,\"completedLearnables\":0,\"inUseLearnables\":4,\"totalLearnables\":16,\"learnables\":[{\"entries\":[],\"index\":0,\"inUse\":true,\"name\":\"Broer\",\"progress\":0.0},{\"entries\":[],\"index\":1,\"inUse\":true,\"name\":\"Dochter\",\"progress\":0.0},{\"entries\":[],\"index\":2,\"inUse\":true,\"name\":\"Echtgenoot\",\"progress\":0.0},{\"entries\":[],\"index\":3,\"inUse\":true,\"name\":\"Familie\",\"progress\":0.0},{\"entries\":[],\"index\":4,\"inUse\":false,\"name\":\"Generatie\",\"progress\":0.0},{\"entries\":[],\"index\":5,\"inUse\":false,\"name\":\"Gezin\",\"progress\":0.0},{\"entries\":[],\"index\":6,\"inUse\":false,\"name\":\"Kind\",\"progress\":0.0},{\"entries\":[],\"index\":7,\"inUse\":false,\"name\":\"Moeder\",\"progress\":0.0},{\"entries\":[],\"index\":8,\"inUse\":false,\"name\":\"Neef\",\"progress\":0.0},{\"entries\":[],\"index\":9,\"inUse\":false,\"name\":\"Nicht\",\"progress\":0.0},{\"entries\":[],\"index\":10,\"inUse\":false,\"name\":\"Oom\",\"progress\":0.0},{\"entries\":[],\"index\":11,\"inUse\":false,\"name\":\"Ouders\",\"progress\":0.0},{\"entries\":[],\"index\":12,\"inUse\":false,\"name\":\"Tante\",\"progress\":0.0},{\"entries\":[],\"index\":13,\"inUse\":false,\"name\":\"Vader\",\"progress\":0.0},{\"entries\":[],\"index\":14,\"inUse\":false,\"name\":\"Zoon\",\"progress\":0.0},{\"entries\":[],\"index\":15,\"inUse\":false,\"name\":\"Zus\",\"progress\":0.0}]}]"; + string oneUser = $"{{\"version\":1027,\"users\":[{{\"entries\":[],\"username\":\"Tester0\",\"avatarIndex\":0,\"playtime\":0.0,\"minigames\":[],\"courses\":{courses}}}],\"currentUser\":0,\"currentMinigame\":0,\"currentCourse\":0,\"currentTheme\":0}}"; + + File.WriteAllText(path, oneUser); + PersistentDataController.PATH = path; + PersistentDataController.GetInstance().Load(); + AssetDatabase.LoadAssetAtPath("Assets/Accounts/ScriptableObjects/UserAvatarList.asset").Awake(); + + SystemController.GetInstance().SwapScene("Accounts/Scenes/UserProgressScreen"); + yield return new WaitForSeconds(WAIT_TIME); + + GameObject.FindObjectOfType().DisplayCourses(); + yield return new WaitForSeconds(WAIT_TIME); + } + + /// + /// Cleanup after testing + /// + [TearDown] + public void TearDown_PanelCourseProgress() + { + PersistentDataController.PATH = null; + } + + + /// + /// Test whether every item that needs to be assign in the editor, is assigned + /// + [UnityTest] + public IEnumerator Test_EditorAssignments() + { + yield return Setup_PanelCourseProgress(); + + var panel = GameObject.FindObjectOfType(); + Assert.IsNotNull(panel); + Assert.IsNotNull(panel.courseList); + Assert.IsNotNull(panel.courseCardPrefab); + Assert.IsNotNull(panel.coursesContainer); + Assert.IsNotNull(panel.courseInfo); + Assert.IsNotNull(panel.emptyCourses); + Assert.IsNotNull(panel.courseTitle); + Assert.IsNotNull(panel.learnableCardPrefab); + Assert.IsNotNull(panel.learnablesContainer); + Assert.IsNotNull(panel.progressBar); + } + + [UnityTest] + public IEnumerator Test_Start() + { + yield return Setup_PanelCourseProgress(); + + var panel = GameObject.FindObjectOfType(); + Assert.IsTrue(panel.courseInfo.gameObject.activeSelf); + Assert.IsFalse(panel.emptyCourses.gameObject.activeSelf); + + var course = panel.courseList.GetCourseByIndex(CourseIndex.FINGERSPELLING); + var progress = UserList.GetCurrentUser().GetCourseProgress(CourseIndex.FINGERSPELLING); + Assert.AreEqual(course.title, panel.courseTitle.text); + Assert.AreEqual(progress.progress, panel.progressBar.fillAmount); + Assert.AreEqual(course.theme.learnables.Count, panel.learnablesContainer.childCount); + } + + [UnityTest] + public IEnumerator Test_Start_Empty() + { + yield return Setup_PanelCourseProgress_Empty(); + + var panel = GameObject.FindObjectOfType(); + Assert.IsFalse(panel.courseInfo.gameObject.activeSelf); + Assert.IsTrue(panel.emptyCourses.gameObject.activeSelf); + } + + /// + /// Test whether we can select a course + /// + [UnityTest] + public IEnumerator Test_UpdateSelection() + { + yield return Setup_PanelCourseProgress_Multiple(); + + var panel = GameObject.FindObjectOfType(); + var courses = GameObject.FindObjectsOfType(); + + var currentCourse = courses[0]; + currentCourse.selectActivity.Invoke(); + yield return new WaitForSeconds(WAIT_TIME); + + Assert.AreEqual(Color.blue, currentCourse.GetComponent().color); + for (int i = 1; i < courses.Length; i++) + Assert.AreEqual(Color.gray, courses[i].GetComponent().color); + + Assert.AreEqual(currentCourse.title.text, panel.courseTitle.text); + Assert.AreEqual(0.0f, panel.progressBar.fillAmount); + Assert.AreEqual(currentCourse.courseProgress.learnables.Count, panel.learnablesContainer.childCount); + } +} diff --git a/Assets/Accounts/Tests/PlayMode/PanelCourseProgressTests.cs.meta b/Assets/Accounts/Tests/PlayMode/PanelCourseProgressTests.cs.meta new file mode 100644 index 0000000..1cff172 --- /dev/null +++ b/Assets/Accounts/Tests/PlayMode/PanelCourseProgressTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 20981edad710f544984afd94847fa502 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Accounts/Tests/PlayMode/PanelMinigamesProgressTests.cs b/Assets/Accounts/Tests/PlayMode/PanelMinigamesProgressTests.cs new file mode 100644 index 0000000..0e5a02e --- /dev/null +++ b/Assets/Accounts/Tests/PlayMode/PanelMinigamesProgressTests.cs @@ -0,0 +1,191 @@ +using NUnit.Framework; +using System.Collections; +using System.IO; +using UnityEditor; +using UnityEngine; +using UnityEngine.TestTools; +using UnityEngine.UI; + +/// +/// Test the PanelMinigameProgress class +/// +[TestFixture] +public class PanelMinigameProgressTests +{ + /// + /// Wait time between scene transitions + /// + private const float WAIT_TIME = 0.2f; + + /// + /// Setup the PanelMinigameProgress tests + /// + private IEnumerator Setup_PanelMinigameProgress() + { + string path = $"{Application.persistentDataPath}/wesign_unit_test.json"; + string minigame = "{\"entries\":[],\"minigameIndex\":1,\"latestScores\":[{\"scoreValue\":70,\"time\":\"19/04/2023 22:32:39\"},{\"scoreValue\":55,\"time\":\"20/04/2023 11:50:10\"},{\"scoreValue\":55,\"time\":\"20/04/2023 13:27:15\"}],\"highestScores\":[{\"scoreValue\":70,\"time\":\"19/04/2023 22:32:39\"},{\"scoreValue\":55,\"time\":\"20/04/2023 11:50:10\"},{\"scoreValue\":55,\"time\":\"20/04/2023 13:27:15\"}]}"; + string oneUser = $"{{\"version\":1027,\"users\":[{{\"entries\":[],\"username\":\"Tester0\",\"avatarIndex\":0,\"playtime\":0.0,\"minigames\":[{minigame}],\"courses\":[]}}],\"currentUser\":0,\"currentMinigame\":0,\"currentCourse\":0,\"currentTheme\":0}}"; + + File.WriteAllText(path, oneUser); + PersistentDataController.PATH = path; + PersistentDataController.GetInstance().Load(); + AssetDatabase.LoadAssetAtPath("Assets/Accounts/ScriptableObjects/UserAvatarList.asset").Awake(); + + SystemController.GetInstance().SwapScene("Accounts/Scenes/UserProgressScreen"); + yield return new WaitForSeconds(WAIT_TIME); + + GameObject.FindObjectOfType().DisplayMinigames(); + yield return new WaitForSeconds(WAIT_TIME); + } + + /// + /// Setup the PanelMinigameProgress tests + /// + private IEnumerator Setup_PanelMinigameProgress_Empty() + { + string path = $"{Application.persistentDataPath}/wesign_unit_test.json"; + string oneUser = $"{{\"version\":1027,\"users\":[{{\"entries\":[],\"username\":\"Tester0\",\"avatarIndex\":0,\"playtime\":0.0,\"minigames\":[],\"courses\":[]}}],\"currentUser\":0,\"currentMinigame\":0,\"currentCourse\":0,\"currentTheme\":0}}"; + + File.WriteAllText(path, oneUser); + PersistentDataController.PATH = path; + PersistentDataController.GetInstance().Load(); + AssetDatabase.LoadAssetAtPath("Assets/Accounts/ScriptableObjects/UserAvatarList.asset").Awake(); + + SystemController.GetInstance().SwapScene("Accounts/Scenes/UserProgressScreen"); + yield return new WaitForSeconds(WAIT_TIME); + + GameObject.FindObjectOfType().DisplayMinigames(); + yield return new WaitForSeconds(WAIT_TIME); + } + + /// + /// Setup the PanelMinigameProgress tests + /// + private IEnumerator Setup_PanelMinigameProgress_NoScorePresent() + { + string path = $"{Application.persistentDataPath}/wesign_unit_test.json"; + string minigame = "{\"entries\":[],\"minigameIndex\":1,\"latestScores\":[],\"highestScores\":[]}"; + string oneUser = $"{{\"version\":1027,\"users\":[{{\"entries\":[],\"username\":\"Tester0\",\"avatarIndex\":0,\"playtime\":0.0,\"minigames\":[{minigame}],\"courses\":[]}}],\"currentUser\":0,\"currentMinigame\":0,\"currentCourse\":0,\"currentTheme\":0}}"; + + File.WriteAllText(path, oneUser); + PersistentDataController.PATH = path; + PersistentDataController.GetInstance().Load(); + AssetDatabase.LoadAssetAtPath("Assets/Accounts/ScriptableObjects/UserAvatarList.asset").Awake(); + + SystemController.GetInstance().SwapScene("Accounts/Scenes/UserProgressScreen"); + yield return new WaitForSeconds(WAIT_TIME); + + GameObject.FindObjectOfType().DisplayMinigames(); + yield return new WaitForSeconds(WAIT_TIME); + } + + /// + /// Setup the PanelMinigameProgress tests + /// + private IEnumerator Setup_PanelMinigameProgress_Multiple() + { + string path = $"{Application.persistentDataPath}/wesign_unit_test.json"; + string minigame = "[{\"entries\":[],\"minigameIndex\":1,\"latestScores\":[{\"scoreValue\":70,\"time\":\"20/04/2023 16:08:43\"},{\"scoreValue\":20,\"time\":\"20/04/2023 16:11:53\"}],\"highestScores\":[{\"scoreValue\":70,\"time\":\"20/04/2023 16:08:43\"},{\"scoreValue\":20,\"time\":\"20/04/2023 16:11:53\"}]},{\"entries\":[],\"minigameIndex\":2,\"latestScores\":[{\"scoreValue\":194,\"time\":\"20/04/2023 15:27:41\"},{\"scoreValue\":155,\"time\":\"20/04/2023 15:28:56\"},{\"scoreValue\":84,\"time\":\"20/04/2023 15:42:10\"},{\"scoreValue\":465,\"time\":\"20/04/2023 16:14:22\"}],\"highestScores\":[{\"scoreValue\":465,\"time\":\"20/04/2023 16:14:22\"},{\"scoreValue\":194,\"time\":\"20/04/2023 15:27:41\"},{\"scoreValue\":155,\"time\":\"20/04/2023 15:28:56\"},{\"scoreValue\":84,\"time\":\"20/04/2023 15:42:10\"}]},{\"entries\":[],\"minigameIndex\":0,\"latestScores\":[{\"scoreValue\":1090,\"time\":\"20/04/2023 16:02:14\"},{\"scoreValue\":1180,\"time\":\"20/04/2023 16:07:02\"}],\"highestScores\":[{\"scoreValue\":1180,\"time\":\"20/04/2023 16:07:02\"},{\"scoreValue\":1090,\"time\":\"20/04/2023 16:02:14\"}]}]"; + string oneUser = $"{{\"version\":1027,\"users\":[{{\"entries\":[],\"username\":\"Tester0\",\"avatarIndex\":0,\"playtime\":0.0,\"minigames\":{minigame},\"courses\":[]}}],\"currentUser\":0,\"currentMinigame\":0,\"currentCourse\":0,\"currentTheme\":0}}"; + + File.WriteAllText(path, oneUser); + PersistentDataController.PATH = path; + PersistentDataController.GetInstance().Load(); + AssetDatabase.LoadAssetAtPath("Assets/Accounts/ScriptableObjects/UserAvatarList.asset").Awake(); + + SystemController.GetInstance().SwapScene("Accounts/Scenes/UserProgressScreen"); + yield return new WaitForSeconds(WAIT_TIME); + + GameObject.FindObjectOfType().DisplayMinigames(); + yield return new WaitForSeconds(WAIT_TIME); + } + + /// + /// Cleanup after testing + /// + [TearDown] + public void TearDown_PanelMinigameProgress() + { + PersistentDataController.PATH = null; + } + + + /// + /// Test whether every item that needs to be assign in the editor, is assigned + /// + [UnityTest] + public IEnumerator Test_EditorAssignments() + { + yield return Setup_PanelMinigameProgress(); + + var panel = GameObject.FindObjectOfType(); + Assert.IsNotNull(panel); + Assert.IsNotNull(panel.minigameList); + Assert.IsNotNull(panel.minigameCardPrefab); + Assert.IsNotNull(panel.minigamesContainer); + Assert.IsNotNull(panel.minigameInfo); + Assert.IsNotNull(panel.emptyMinigames); + Assert.IsNotNull(panel.minigameTitle); + Assert.IsNotNull(panel.progressGraph); + Assert.IsNotNull(panel.emptyHighscore); + } + + [UnityTest] + public IEnumerator Test_Start() + { + yield return Setup_PanelMinigameProgress(); + + var panel = GameObject.FindObjectOfType(); + Assert.IsTrue(panel.minigameInfo.gameObject.activeSelf); + Assert.IsFalse(panel.emptyMinigames.gameObject.activeSelf); + Assert.IsFalse(panel.emptyHighscore.gameObject.activeSelf); + Assert.IsTrue(panel.progressGraph.gameObject.activeSelf); + + var minigame = panel.minigameList.GetMinigameByIndex(MinigameIndex.HANGMAN); + Assert.AreEqual(minigame.title, panel.minigameTitle.text); + } + + [UnityTest] + public IEnumerator Test_Start_Empty() + { + yield return Setup_PanelMinigameProgress_Empty(); + + var panel = GameObject.FindObjectOfType(); + Assert.IsFalse(panel.minigameInfo.gameObject.activeSelf); + Assert.IsTrue(panel.emptyMinigames.gameObject.activeSelf); + } + + [UnityTest] + public IEnumerator Test_Start_NoScorePresent() + { + yield return Setup_PanelMinigameProgress_NoScorePresent(); + + var panel = GameObject.FindObjectOfType(); + Assert.IsTrue(panel.minigameInfo.gameObject.activeSelf); + Assert.IsFalse(panel.emptyMinigames.gameObject.activeSelf); + Assert.IsTrue(panel.emptyHighscore.gameObject.activeSelf); + Assert.IsFalse(panel.progressGraph.gameObject.activeSelf); + } + + /// + /// Test whether we can select a minigame + /// + [UnityTest] + public IEnumerator Test_UpdateSelection() + { + yield return Setup_PanelMinigameProgress_Multiple(); + + var panel = GameObject.FindObjectOfType(); + var minigames = GameObject.FindObjectsOfType(); + + var currentMinigame = minigames[0]; + currentMinigame.selectActivity.Invoke(); + yield return new WaitForSeconds(WAIT_TIME); + + Assert.AreEqual(Color.blue, currentMinigame.GetComponent().color); + for (int i = 1; i < minigames.Length; i++) + Assert.AreEqual(Color.gray, minigames[i].GetComponent().color); + + Assert.AreEqual(currentMinigame.title.text, panel.minigameTitle.text); + } +} diff --git a/Assets/Accounts/Tests/PlayMode/PanelMinigamesProgressTests.cs.meta b/Assets/Accounts/Tests/PlayMode/PanelMinigamesProgressTests.cs.meta new file mode 100644 index 0000000..ac04eb2 --- /dev/null +++ b/Assets/Accounts/Tests/PlayMode/PanelMinigamesProgressTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f046d113e8709db438b49af46e271111 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Accounts/Tests/PlayMode/ProgressGraphTests.cs b/Assets/Accounts/Tests/PlayMode/ProgressGraphTests.cs new file mode 100644 index 0000000..e6c37d1 --- /dev/null +++ b/Assets/Accounts/Tests/PlayMode/ProgressGraphTests.cs @@ -0,0 +1,128 @@ +using NUnit.Framework; +using System; +using System.Collections; +using System.IO; +using UnityEditor; +using UnityEngine; +using UnityEngine.TestTools; + +/// +/// Test the ProgressGraph class +/// +[TestFixture] +public class ProgressGraphTests +{ + /// + /// Wait time between scene transitions + /// + private const float WAIT_TIME = 0.2f; + + /// + /// Setup the ProgressGraph tests + /// + private IEnumerator Setup_ProgressGraph(int amount, Func f) + { + string path = $"{Application.persistentDataPath}/wesign_unit_test.json"; + string score = ""; + for (int i = 0; i < amount; i++) + { + score += $"{{\"scoreValue\":{f(i)},\"time\":\"19/04/2023 22:32:39\"}}"; + if (i < amount - 1) + score += ","; + } + + string minigame = $"{{\"entries\":[],\"minigameIndex\":1,\"latestScores\":[{score}],\"highestScores\":[{score}]}}"; + string oneUser = $"{{\"version\":1027,\"users\":[{{\"entries\":[],\"username\":\"Tester0\",\"avatarIndex\":0,\"playtime\":0.0,\"minigames\":[{minigame}],\"courses\":[]}}],\"currentUser\":0,\"currentMinigame\":0,\"currentCourse\":0,\"currentTheme\":0}}"; + + File.WriteAllText(path, oneUser); + PersistentDataController.PATH = path; + PersistentDataController.GetInstance().Load(); + AssetDatabase.LoadAssetAtPath("Assets/Accounts/ScriptableObjects/UserAvatarList.asset").Awake(); + + SystemController.GetInstance().SwapScene("Accounts/Scenes/UserProgressScreen"); + yield return new WaitForSeconds(WAIT_TIME); + + GameObject.FindObjectOfType().DisplayMinigames(); + yield return new WaitForSeconds(WAIT_TIME); + } + + + /// + /// Test whether every item that needs to be assign in the editor, is assigned + /// + [UnityTest] + public IEnumerator Test_EditorAssignments() + { + yield return Setup_ProgressGraph(1, (i) => i); + + var graph = GameObject.FindObjectOfType(); + Assert.IsNotNull(graph); + Assert.IsNotNull(graph.progressGraph); + Assert.IsNotNull(graph.highscoreMarker); + Assert.IsNotNull(graph.axesTickMarker); + } + + [UnityTest] + public IEnumerator Test_PlotGraph_Negative() + { + yield return Setup_ProgressGraph(4, (i) => -5 * (i + 1)); + yield return new WaitForSeconds(5.0f); + Assert.IsTrue(true); + } + + [UnityTest] + public IEnumerator Test_PlotGraph_SmallerThen1() + { + yield return Setup_ProgressGraph(4, (i) => (3 * i + 20) / 100); + yield return new WaitForSeconds(5.0f); + Assert.IsTrue(true); + } + + [UnityTest] + public IEnumerator Test_PlotGraph_AroundZero() + { + yield return Setup_ProgressGraph(4, (i) => 5 * i - 10); + yield return new WaitForSeconds(5.0f); + Assert.IsTrue(true); + } + + [UnityTest] + public IEnumerator Test_PlotGraph_AllZeros() + { + yield return Setup_ProgressGraph(4, (i) => 0); + yield return new WaitForSeconds(5.0f); + Assert.IsTrue(true); + } + + [UnityTest] + public IEnumerator Test_PlotGraph_BetweenPos1AndNeg1() + { + yield return Setup_ProgressGraph(10, (i) => (i % 3) - 1); + yield return new WaitForSeconds(5.0f); + Assert.IsTrue(true); + } + + [UnityTest] + public IEnumerator Test_PlotGraph_Single() + { + yield return Setup_ProgressGraph(1, (i) => i + 500); + yield return new WaitForSeconds(5.0f); + Assert.IsTrue(true); + } + + [UnityTest] + public IEnumerator Test_PlotGraph_Multiple() + { + yield return Setup_ProgressGraph(5, (i) => 5 * i); + yield return new WaitForSeconds(5.0f); + Assert.IsTrue(true); + } + + [UnityTest] + public IEnumerator Test_PlotGraph_TooMany() + { + yield return Setup_ProgressGraph(10, (i) => 5 * i); + yield return new WaitForSeconds(5.0f); + Assert.IsTrue(true); + } +} diff --git a/Assets/Accounts/Tests/PlayMode/ProgressGraphTests.cs.meta b/Assets/Accounts/Tests/PlayMode/ProgressGraphTests.cs.meta new file mode 100644 index 0000000..c9eea24 --- /dev/null +++ b/Assets/Accounts/Tests/PlayMode/ProgressGraphTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be53c4208fff73845b85978e1ecae7d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Accounts/Tests/PlayMode/UserCardTests.cs b/Assets/Accounts/Tests/PlayMode/UserCardTests.cs index 2e8a397..c004c09 100644 --- a/Assets/Accounts/Tests/PlayMode/UserCardTests.cs +++ b/Assets/Accounts/Tests/PlayMode/UserCardTests.cs @@ -38,7 +38,7 @@ public class UserCardTests /// Cleanup after testing /// [TearDown] - public void TearDown_ChangeUserScreen() + public void TearDown_UserCard() { PersistentDataController.PATH = null; } diff --git a/Assets/Accounts/Tests/PlayMode/UserCreationScreenTests.cs b/Assets/Accounts/Tests/PlayMode/UserCreationScreenTests.cs index 785c001..1283427 100644 --- a/Assets/Accounts/Tests/PlayMode/UserCreationScreenTests.cs +++ b/Assets/Accounts/Tests/PlayMode/UserCreationScreenTests.cs @@ -40,7 +40,7 @@ public class UserCreationScreenTests /// Cleanup after testing /// [TearDown] - public void TearDown_ChangeUserScreen() + public void TearDown_UserCreationScreen() { PersistentDataController.PATH = null; } diff --git a/Assets/Accounts/Tests/PlayMode/UserProgressScreenTests.cs b/Assets/Accounts/Tests/PlayMode/UserProgressScreenTests.cs index 96d8237..24cd807 100644 --- a/Assets/Accounts/Tests/PlayMode/UserProgressScreenTests.cs +++ b/Assets/Accounts/Tests/PlayMode/UserProgressScreenTests.cs @@ -5,7 +5,6 @@ using System.Linq; using UnityEditor; using UnityEngine; using UnityEngine.TestTools; -using UnityEngine.UI; /// /// Test the UserProgressScreen class @@ -42,7 +41,7 @@ public class UserProgressScreenTests /// Cleanup after testing /// [TearDown] - public void TearDown_ChangeUserScreen() + public void TearDown_UserProgressScreen() { PersistentDataController.PATH = null; } @@ -58,15 +57,10 @@ public class UserProgressScreenTests var userProgressController = GameObject.FindObjectOfType(); Assert.IsNotNull(userProgressController.username); Assert.IsNotNull(userProgressController.avatar); - Assert.IsNotNull(userProgressController.playtime); - Assert.IsNotNull(userProgressController.highscoreMarker); - Assert.IsNotNull(userProgressController.courseCardPrefab); - Assert.IsNotNull(userProgressController.coursesContainer); - Assert.IsNotNull(userProgressController.emptyCourses); - Assert.IsNotNull(userProgressController.minigameCardPrefab); - Assert.IsNotNull(userProgressController.minigamesContainer); - Assert.IsNotNull(userProgressController.emptyMinigames); - Assert.IsNotNull(userProgressController.progressGraph); + Assert.IsNotNull(userProgressController.coursesPanel); + Assert.IsNotNull(userProgressController.coursesTabButton); + Assert.IsNotNull(userProgressController.minigamesPanel); + Assert.IsNotNull(userProgressController.minigamesTabButton); } /// @@ -82,17 +76,10 @@ public class UserProgressScreenTests Assert.AreEqual(user.GetUsername(), userProgressController.username.text); Assert.AreEqual(user.GetAvatar(), userProgressController.avatar.sprite); - Assert.AreEqual($"Totale speeltijd: {user.GetPlaytime().ToString("0.00")}", userProgressController.playtime.text); - Assert.IsFalse(userProgressController.progressGraph.gameObject.activeSelf); - - Assert.IsTrue(userProgressController.emptyCourses.gameObject.activeSelf); - Assert.IsFalse(userProgressController.coursesContainer.gameObject.activeSelf); + Assert.IsTrue(userProgressController.coursesPanel.activeSelf); Assert.Zero(GameObject.FindObjectsOfType().Length); - - Assert.IsTrue(userProgressController.emptyMinigames.gameObject.activeSelf); - Assert.IsFalse(userProgressController.minigamesContainer.gameObject.activeSelf); - Assert.Zero(GameObject.FindObjectsOfType().Length); + Assert.IsFalse(userProgressController.minigamesPanel.activeSelf); } /// @@ -108,87 +95,37 @@ public class UserProgressScreenTests Assert.AreEqual(user.GetUsername(), userProgressController.username.text); Assert.AreEqual(user.GetAvatar(), userProgressController.avatar.sprite); - Assert.AreEqual($"Totale speeltijd: {user.GetPlaytime().ToString("0.00")}", userProgressController.playtime.text); - Assert.IsFalse(userProgressController.progressGraph.gameObject.activeSelf); - - Assert.IsFalse(userProgressController.emptyCourses.gameObject.activeSelf); - Assert.IsTrue(userProgressController.coursesContainer.gameObject.activeSelf); + Assert.IsTrue(userProgressController.coursesPanel.activeSelf); var courses = GameObject.FindObjectsOfType().ToList(); Assert.AreEqual(user.GetCourses().Count, courses.Count); - foreach (var course in courses) - Assert.AreEqual(Color.gray, course.GetComponent().color); - - Assert.IsFalse(userProgressController.emptyMinigames.gameObject.activeSelf); - Assert.IsTrue(userProgressController.minigamesContainer.gameObject.activeSelf); - var minigames = GameObject.FindObjectsOfType().ToList(); - Assert.AreEqual(user.GetMinigames().Count, minigames.Count); - foreach (var minigame in minigames) - Assert.AreEqual(Color.gray, minigame.GetComponent().color); + Assert.IsFalse(userProgressController.minigamesPanel.activeSelf); } - /// - /// Test whether we can select a course - /// [UnityTest] - public IEnumerator Test_UpdateSelection_Course() + public IEnumerator Test_DisplayCourses() { yield return Setup_UserProgressScreen(); var userProgressController = GameObject.FindObjectOfType(); - var course = GameObject.FindObjectOfType(); - var minigame = GameObject.FindObjectOfType(); - Assert.IsFalse(userProgressController.progressGraph.gameObject.activeSelf); - Assert.AreEqual(Color.gray, course.GetComponent().color); - Assert.AreEqual(Color.gray, minigame.GetComponent().color); + userProgressController.DisplayCourses(); + yield return new WaitForSeconds(WAIT_TIME); - course.selectActivity.Invoke(); - Assert.IsFalse(userProgressController.progressGraph.gameObject.activeSelf); - Assert.AreEqual(Color.blue, course.GetComponent().color); - Assert.AreEqual(Color.gray, minigame.GetComponent().color); + Assert.IsTrue(userProgressController.coursesPanel.activeSelf); + Assert.IsFalse(userProgressController.minigamesPanel.activeSelf); } - /// - /// Test whether we can select a minigame - /// [UnityTest] - public IEnumerator Test_UpdateSelection_Minigame() + public IEnumerator Test_DisplayMinigames() { yield return Setup_UserProgressScreen(); var userProgressController = GameObject.FindObjectOfType(); - var course = GameObject.FindObjectOfType(); - var minigame = GameObject.FindObjectOfType(); - Assert.IsFalse(userProgressController.progressGraph.gameObject.activeSelf); - Assert.AreEqual(Color.gray, course.GetComponent().color); - Assert.AreEqual(Color.gray, minigame.GetComponent().color); + userProgressController.DisplayMinigames(); + yield return new WaitForSeconds(WAIT_TIME); - minigame.selectActivity.Invoke(); - Assert.IsTrue(userProgressController.progressGraph.gameObject.activeSelf); - Assert.AreEqual(Color.gray, course.GetComponent().color); - Assert.AreEqual(Color.blue, minigame.GetComponent().color); - } - - /// - /// Test whether the course graph is correctly displayed - /// - /// Code is not implemented yet - [UnityTest] - public IEnumerator Test_DisplayCourseGraph() - { - // TODO: not implemented yet - yield return null; - } - - /// - /// Test whether the minigame graph is correctly displayed - /// - /// Code is not implemented yet - [UnityTest] - public IEnumerator Test_DisplayMinigameGraph() - { - // TODO: not implemented yet - yield return null; + Assert.IsFalse(userProgressController.coursesPanel.activeSelf); + Assert.IsTrue(userProgressController.minigamesPanel.activeSelf); } } diff --git a/Assets/Common/Scripts/CourseActivityScreen.cs b/Assets/Common/Scripts/CourseActivityScreen.cs index c589316..c4194d7 100644 --- a/Assets/Common/Scripts/CourseActivityScreen.cs +++ b/Assets/Common/Scripts/CourseActivityScreen.cs @@ -76,7 +76,7 @@ public class CourseActivityScreen : MonoBehaviour title.text = course.title; description.text = course.description; courseImage.sprite = course.thumbnail; - //slider.value = progressValue; + //progressBar.value = progressValue; // Set progress PersistentDataController.GetInstance().Load(); diff --git a/Assets/Common/Scripts/CourseItem.cs b/Assets/Common/Scripts/CourseItem.cs index c23625b..27a2db7 100644 --- a/Assets/Common/Scripts/CourseItem.cs +++ b/Assets/Common/Scripts/CourseItem.cs @@ -38,7 +38,7 @@ public class CourseItem : MonoBehaviour public Button button; /// - /// Reference to the slider that displays the progress of the user + /// Reference to the progressBar that displays the progress of the user /// public GameObject slider;