diff --git a/Assets/Code/Gameplay/RaceManager.cs b/Assets/Code/Gameplay/RaceManager.cs index b70d072..72a4b57 100644 --- a/Assets/Code/Gameplay/RaceManager.cs +++ b/Assets/Code/Gameplay/RaceManager.cs @@ -1,5 +1,6 @@ using Code.DI; using Code.Input; +using Code.Records; using TMPro; using UnityEngine; using UnityEngine.SceneManagement; @@ -112,13 +113,24 @@ namespace Code.Gameplay _toMenuButton.onClick.AddListener(LoadMainMenu); } + private void SaveResult() + { + var totalMs = (long)(_elapsedTime * 1000f); + var player = _nameField?.text?.Trim() ?? "Player"; + if (string.IsNullOrWhiteSpace(player)) player = "Player"; + + RecordsService.AddRecord(player, totalMs); + } + private void RestartRace() { + SaveResult(); SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); } private void LoadMainMenu() { + SaveResult(); SceneManager.LoadScene("MainMenu"); } } diff --git a/Assets/Code/Records.meta b/Assets/Code/Records.meta new file mode 100644 index 0000000..8590848 --- /dev/null +++ b/Assets/Code/Records.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 149512b826944d56852239a378b204b7 +timeCreated: 1769530513 \ No newline at end of file diff --git a/Assets/Code/Records/Record.cs b/Assets/Code/Records/Record.cs new file mode 100644 index 0000000..5dd9adb --- /dev/null +++ b/Assets/Code/Records/Record.cs @@ -0,0 +1,27 @@ +using System; + +namespace Code.Records +{ + [Serializable] + public class Record + { + public string name; + public long totalMilliseconds; + + public Record(string name, long ms) + { + this.name = name; + totalMilliseconds = ms; + } + + public string formattedTime => FormatTime(totalMilliseconds); + + private string FormatTime(long ms) + { + var minutes = ms / 60000; + var seconds = ms % 60000 / 1000; + var milliseconds = ms % 1000; + return $"{minutes:D2}:{seconds:D2}:{milliseconds:D2}"; + } + } +} \ No newline at end of file diff --git a/Assets/Code/Records/Record.cs.meta b/Assets/Code/Records/Record.cs.meta new file mode 100644 index 0000000..5ed8d9c --- /dev/null +++ b/Assets/Code/Records/Record.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8f08515aa1b1499d99937107933f7a9b +timeCreated: 1769530713 \ No newline at end of file diff --git a/Assets/Code/Records/RecordsService.cs b/Assets/Code/Records/RecordsService.cs new file mode 100644 index 0000000..1652070 --- /dev/null +++ b/Assets/Code/Records/RecordsService.cs @@ -0,0 +1,41 @@ +using System.Collections.Generic; +using System.Linq; +using Newtonsoft.Json; +using UnityEngine; + +namespace Code.Records +{ + public class RecordsService + { + private const string Key = "RaceRecords"; + + public static List Load() + { + var json = PlayerPrefs.GetString(Key, "[]"); + try + { + return JsonConvert.DeserializeObject>(json) ?? new List(); + } + catch + { + return new List(); + } + } + + public static void Save(List records) + { + var json = JsonConvert.SerializeObject(records); + PlayerPrefs.SetString(Key, json); + PlayerPrefs.Save(); + } + + public static void AddRecord(string name, long totalMs) + { + var records = Load(); + records.Add(new Record(name, totalMs)); + records = records.OrderBy(r => r.totalMilliseconds).ToList(); + records = records.Take(5).ToList(); + Save(records); + } + } +} \ No newline at end of file diff --git a/Assets/Code/Records/RecordsService.cs.meta b/Assets/Code/Records/RecordsService.cs.meta new file mode 100644 index 0000000..51549ce --- /dev/null +++ b/Assets/Code/Records/RecordsService.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c8fc6666dae743c5abb11a5fba8b495b +timeCreated: 1769530671 \ No newline at end of file diff --git a/Assets/Code/UI/GameplayController.cs b/Assets/Code/UI/GameplayController.cs index f622840..a1ed5f5 100644 --- a/Assets/Code/UI/GameplayController.cs +++ b/Assets/Code/UI/GameplayController.cs @@ -14,7 +14,7 @@ namespace Code.UI private void Start() { var seed = Random.Range(0, 10000); - _currentTrack = TrackGenerator.Generate(seed, 2000, segmentCount: 30); + _currentTrack = TrackGenerator.Generate(seed, 500, segmentCount: 30); trackBuilder.Build(_currentTrack); diff --git a/Assets/Code/UI/MainMenuController.cs b/Assets/Code/UI/MainMenuController.cs index eb764ed..0cba8e9 100644 --- a/Assets/Code/UI/MainMenuController.cs +++ b/Assets/Code/UI/MainMenuController.cs @@ -1,5 +1,6 @@ using Code.DI; using Code.Input; +using Code.Records; using DG.Tweening; using TMPro; using UnityEngine; @@ -19,6 +20,10 @@ namespace Code.UI [SerializeField] private Image fader; [SerializeField] private Image backgroundImage; + [SerializeField] private Transform resultsWrapper; + [SerializeField] private TMP_Text resultsText; + [SerializeField] private Button closeResultsButton; + [SerializeField] private float parallaxStrength = 15f; [SerializeField] private float parallaxSmoothTime = 0.1f; @@ -26,14 +31,16 @@ namespace Code.UI private Vector3 _currentParallaxOffset; private IInputService _inputService; private AudioSource _audioSource; - + private void Start() { var container = FindFirstObjectByType(); _inputService = container.Resolve(); _inputService.EnableMap(ActionMapping.MainMenu); _audioSource = FindFirstObjectByType(); - + + resultsWrapper.gameObject.SetActive(false); + SetupButtons(); AnimateLogo(); AnimateBackground(); @@ -100,7 +107,7 @@ namespace Code.UI private void HandleParallax() { - if (parallaxRoot == null) return; + if (!parallaxRoot) return; var mousePos = _inputService.MainMenuParalax; var center = new Vector2(Screen.width / 2f, Screen.height / 2f); @@ -124,7 +131,20 @@ namespace Code.UI } private void OnStartGameClicked() => FadeOutAndLoad("Gameplay"); - private void OnShowResultsClicked() => Debug.Log("Show results"); + + private void OnShowResultsClicked() + { + resultsWrapper.gameObject.SetActive(true); + closeResultsButton.onClick.AddListener(HideResults); + UpdateResultsDisplay(); + } + + private void HideResults() + { + closeResultsButton.onClick.RemoveAllListeners(); + resultsWrapper.gameObject.SetActive(false); + } + private void OnExitButtonClicked() => FadeOutAndQuit(); private void FadeOutAndLoad(string sceneName) @@ -159,5 +179,24 @@ namespace Code.UI showResultsButton?.onClick.RemoveListener(OnShowResultsClicked); exitButton?.onClick.RemoveListener(OnExitButtonClicked); } + + private void UpdateResultsDisplay() + { + var records = RecordsService.Load(); + if (records.Count == 0) + { + resultsText.text = "RESULTS\n\nNo records yet."; + return; + } + + var lines = new System.Text.StringBuilder(); + lines.AppendLine("RESULTS"); + for (var i = 0; i < records.Count; i++) + { + var r = records[i]; + lines.AppendLine($"{i + 1}. {r.name} - {r.formattedTime}"); + } + resultsText.text = lines.ToString(); + } } } \ No newline at end of file diff --git a/Assets/Resources/Scenes/MainMenu.unity b/Assets/Resources/Scenes/MainMenu.unity index 21b4f49..a733ca9 100644 --- a/Assets/Resources/Scenes/MainMenu.unity +++ b/Assets/Resources/Scenes/MainMenu.unity @@ -289,6 +289,7 @@ RectTransform: - {fileID: 276536515} - {fileID: 949956272} - {fileID: 1379910030} + - {fileID: 740801239} m_Father: {fileID: 1082687091} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -911,6 +912,220 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 607322245} m_CullTransparentMesh: 1 +--- !u!1 &726608536 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 726608537} + - component: {fileID: 726608539} + - component: {fileID: 726608538} + m_Layer: 5 + m_Name: ResultsText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &726608537 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 726608536} + 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: 740801239} + 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: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &726608538 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 726608536} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + 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: Results + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 455fab60d8654c315baae5983dd772cb, type: 2} + m_sharedMaterial: {fileID: 2132471366458363271, guid: 455fab60d8654c315baae5983dd772cb, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278190080 + m_fontColor: {r: 0, g: 0, b: 0, 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: 1 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_characterHorizontalScale: 1 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 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 &726608539 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 726608536} + m_CullTransparentMesh: 1 +--- !u!1 &740801238 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 740801239} + - component: {fileID: 740801241} + - component: {fileID: 740801240} + m_Layer: 5 + m_Name: ResultsWrapper + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &740801239 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 740801238} + 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: 726608537} + - {fileID: 1773887972} + m_Father: {fileID: 150185180} + 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: -600, y: -400} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &740801240 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 740801238} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.43137255} + 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 &740801241 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 740801238} + m_CullTransparentMesh: 1 --- !u!1 &949956271 GameObject: m_ObjectHideFlags: 0 @@ -1326,6 +1541,9 @@ MonoBehaviour: parallaxRoot: {fileID: 150185180} fader: {fileID: 1698987782} backgroundImage: {fileID: 440274560} + resultsWrapper: {fileID: 740801239} + resultsText: {fileID: 726608538} + closeResultsButton: {fileID: 1773887973} parallaxStrength: 15 parallaxSmoothTime: 0.2 --- !u!82 &1223299657 @@ -1638,6 +1856,143 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1379910029} m_CullTransparentMesh: 1 +--- !u!1 &1426306725 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1426306726} + - component: {fileID: 1426306728} + - component: {fileID: 1426306727} + 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 &1426306726 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1426306725} + 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: 1773887972} + 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 &1426306727 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1426306725} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + 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: X + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 455fab60d8654c315baae5983dd772cb, type: 2} + m_sharedMaterial: {fileID: 2132471366458363271, guid: 455fab60d8654c315baae5983dd772cb, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, 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_characterHorizontalScale: 1 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 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 &1426306728 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1426306725} + m_CullTransparentMesh: 1 --- !u!1 &1698987781 GameObject: m_ObjectHideFlags: 0 @@ -1713,6 +2068,127 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1773887971 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1773887972} + - component: {fileID: 1773887975} + - component: {fileID: 1773887974} + - component: {fileID: 1773887973} + m_Layer: 5 + m_Name: CloseWrapperButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1773887972 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1773887971} + 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: 1426306726} + m_Father: {fileID: 740801239} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 20, y: 20} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 1, y: 1} +--- !u!114 &1773887973 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1773887971} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Button + 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: 1773887974} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1773887974 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1773887971} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + 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: -896484843, guid: ff9c70969675bfb31b97df7dd4bf2564, 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: 2 +--- !u!222 &1773887975 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1773887971} + m_CullTransparentMesh: 1 --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 diff --git a/Packages/manifest.json b/Packages/manifest.json index 9aac3fe..b5b6090 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -7,6 +7,7 @@ "com.unity.ide.visualstudio": "2.0.26", "com.unity.inputsystem": "1.17.0", "com.unity.multiplayer.center": "1.0.1", + "com.unity.nuget.newtonsoft-json": "3.2.2", "com.unity.render-pipelines.universal": "17.3.0", "com.unity.sdk.linux-x86_64": "1.0.2", "com.unity.test-framework": "1.6.0", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index edd87af..e51cb0f 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -100,6 +100,13 @@ "dependencies": {}, "url": "https://packages.unity.com" }, + "com.unity.nuget.newtonsoft-json": { + "version": "3.2.2", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, "com.unity.render-pipelines.core": { "version": "17.3.0", "depth": 1,