diff --git a/Assets/Resources/Prefabs/Editor/SettingsMenu/EditorSettings.prefab b/Assets/Resources/Prefabs/Editor/SettingsMenu/EditorSettings.prefab index 6f610cd21..f591d56df 100644 --- a/Assets/Resources/Prefabs/Editor/SettingsMenu/EditorSettings.prefab +++ b/Assets/Resources/Prefabs/Editor/SettingsMenu/EditorSettings.prefab @@ -1,5 +1,388 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1 &4020318567940760538 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 14539832792667216} + - component: {fileID: 5747906335205313162} + - component: {fileID: 3256322431154591709} + m_Layer: 5 + m_Name: RPCLabel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &14539832792667216 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4020318567940760538} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000798, y: 1.0000798, z: 1.0000798} + m_Children: + - {fileID: 7785783802733199037} + m_Father: {fileID: 9208581106298752703} + 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: 1165, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5747906335205313162 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4020318567940760538} + m_CullTransparentMesh: 1 +--- !u!114 &3256322431154591709 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4020318567940760538} + 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: Discord Rich Presence + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8597c35f18a008c428fc5870aec75766, type: 2} + m_sharedMaterial: {fileID: -6562250930271150993, guid: 8597c35f18a008c428fc5870aec75766, 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: 32 + m_fontSizeBase: 32 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + 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!1 &6125627487853319211 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3358182036527372524} + - component: {fileID: 5999213011864573693} + - component: {fileID: 230129683945334152} + m_Layer: 5 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3358182036527372524 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6125627487853319211} + 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_Children: [] + m_Father: {fileID: 4915438607901596292} + 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 &5999213011864573693 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6125627487853319211} + m_CullTransparentMesh: 1 +--- !u!114 &230129683945334152 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6125627487853319211} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &7720499959914799361 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4915438607901596292} + - component: {fileID: 2671519573279941359} + - component: {fileID: 4195792031845100646} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4915438607901596292 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7720499959914799361} + 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_Children: + - {fileID: 3358182036527372524} + m_Father: {fileID: 7785783802733199037} + 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 &2671519573279941359 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7720499959914799361} + m_CullTransparentMesh: 1 +--- !u!114 &4195792031845100646 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7720499959914799361} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &9072467464455491899 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7785783802733199037} + - component: {fileID: 7046810222813886660} + m_Layer: 5 + m_Name: Toggle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7785783802733199037 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9072467464455491899} + 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_Children: + - {fileID: 4915438607901596292} + m_Father: {fileID: 14539832792667216} + 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: -181.5, y: -0.0000030994} + m_SizeDelta: {x: 30, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &7046810222813886660 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9072467464455491899} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 4195792031845100646} + toggleTransition: 1 + graphic: {fileID: 230129683945334152} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 9208581106079180837} + m_TargetAssemblyTypeName: HeavenStudio.Editor.EditorSettings, Assembly-CSharp + m_MethodName: OnRPCCheckboxChanged + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_IsOn: 1 --- !u!1 &9208581105990529506 GameObject: m_ObjectHideFlags: 0 @@ -301,6 +684,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: cursorCheckbox: {fileID: 9208581106828673704} + discordRPCCheckbox: {fileID: 7046810222813886660} --- !u!1 &9208581106298752702 GameObject: m_ObjectHideFlags: 0 @@ -331,6 +715,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - {fileID: 9208581106704273180} + - {fileID: 14539832792667216} m_Father: {fileID: 9208581106987031240} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Scripts/GlobalGameManager.cs b/Assets/Scripts/GlobalGameManager.cs index be453af1a..552d72c86 100644 --- a/Assets/Scripts/GlobalGameManager.cs +++ b/Assets/Scripts/GlobalGameManager.cs @@ -5,6 +5,8 @@ using UnityEngine.SceneManagement; using UnityEngine.UI; using DG.Tweening; +using HeavenStudio.Common; + namespace HeavenStudio { public class GlobalGameManager : MonoBehaviour @@ -48,11 +50,23 @@ namespace HeavenStudio loadedScene = 0; fadeDuration = 0; - /*GameObject ui = new GameObject(); - ui.AddComponent().sprite = Resources.Load("tempBuildUI"); - ui.GetComponent().sortingOrder = 1000; - ui.layer = 5; - ui.name = "tempBuildUI";*/ + PersistentDataManager.LoadSettings(); + + ScreenSizeIndex = PersistentDataManager.gameSettings.resolutionIndex; + CustomScreenWidth = PersistentDataManager.gameSettings.resolutionWidth; + CustomScreenHeight = PersistentDataManager.gameSettings.resolutionHeight; + + ChangeMasterVolume(PersistentDataManager.gameSettings.masterVolume); + if (PersistentDataManager.gameSettings.isFullscreen) + { + Screen.SetResolution(Display.main.systemWidth, Display.main.systemHeight, FullScreenMode.FullScreenWindow); + Screen.fullScreen = true; + } + else + { + Screen.fullScreen = false; + ChangeScreenSize(); + } } public void Awake() @@ -124,11 +138,13 @@ namespace HeavenStudio // Set the resolution to the display's current resolution Screen.SetResolution(Display.main.systemWidth, Display.main.systemHeight, FullScreenMode.FullScreenWindow); Screen.fullScreen = true; + PersistentDataManager.gameSettings.isFullscreen = true; } else { Screen.SetResolution(1280, 720, FullScreenMode.Windowed); Screen.fullScreen = false; + PersistentDataManager.gameSettings.isFullscreen = false; } } @@ -138,10 +154,16 @@ namespace HeavenStudio if (ScreenSizeIndex == DEFAULT_SCREEN_SIZES_STRING.Length - 1) { Screen.SetResolution(CustomScreenWidth, CustomScreenHeight, mode); + PersistentDataManager.gameSettings.resolutionWidth = CustomScreenWidth; + PersistentDataManager.gameSettings.resolutionHeight = CustomScreenHeight; + PersistentDataManager.gameSettings.resolutionIndex = DEFAULT_SCREEN_SIZES_STRING.Length - 1; } else { Screen.SetResolution(DEFAULT_SCREEN_SIZES[ScreenSizeIndex].width, DEFAULT_SCREEN_SIZES[ScreenSizeIndex].height, mode); + PersistentDataManager.gameSettings.resolutionWidth = DEFAULT_SCREEN_SIZES[ScreenSizeIndex].width; + PersistentDataManager.gameSettings.resolutionHeight = DEFAULT_SCREEN_SIZES[ScreenSizeIndex].height; + PersistentDataManager.gameSettings.resolutionIndex = ScreenSizeIndex; } } @@ -149,10 +171,12 @@ namespace HeavenStudio { MasterVolume = value; AudioListener.volume = MasterVolume; + PersistentDataManager.gameSettings.masterVolume = MasterVolume; } void OnApplicationQuit() { + PersistentDataManager.SaveSettings(); Debug.Log("Disconnecting JoyShocks..."); PlayerInput.DisconnectJoyshocks(); } diff --git a/Assets/Scripts/LevelEditor/Editor.cs b/Assets/Scripts/LevelEditor/Editor.cs index c7cd0a7aa..56bc61319 100644 --- a/Assets/Scripts/LevelEditor/Editor.cs +++ b/Assets/Scripts/LevelEditor/Editor.cs @@ -13,7 +13,7 @@ using TMPro; using Starpelly; using SFB; -using HeavenStudio.Editor; +using HeavenStudio.Common; using HeavenStudio.Editor.Track; using HeavenStudio.Util; using HeavenStudio.StudioDance; @@ -77,6 +77,7 @@ namespace HeavenStudio.Editor public bool editingInputField = false; public bool inAuthorativeMenu = false; public bool isCursorEnabled = true; + public bool isDiscordEnabled = true; public bool isShortcutsEnabled { get { return (!inAuthorativeMenu) && (!editingInputField); } } @@ -121,6 +122,8 @@ namespace HeavenStudio.Editor UpdateEditorStatus(true); BuildDateDisplay.text = GlobalGameManager.buildTime; + isCursorEnabled = PersistentDataManager.gameSettings.editorCursorEnable; + isDiscordEnabled = PersistentDataManager.gameSettings.discordRPCEnable; } public void AddIcon(Minigames.Minigame minigame) @@ -523,7 +526,12 @@ namespace HeavenStudio.Editor private void UpdateEditorStatus(bool updateTime) { if (discordDuringTesting || !Application.isEditor) - DiscordRPC.DiscordRPC.UpdateActivity("In Editor", $"{remixName}", updateTime); + { + if (isDiscordEnabled) + { DiscordRPC.DiscordRPC.UpdateActivity("In Editor", $"{remixName}", updateTime); + Debug.Log("Discord status updated"); + } + } } public string GetJson() diff --git a/Assets/Scripts/LevelEditor/EditorTheme.cs b/Assets/Scripts/LevelEditor/EditorTheme.cs index a28e057f6..3053275d3 100644 --- a/Assets/Scripts/LevelEditor/EditorTheme.cs +++ b/Assets/Scripts/LevelEditor/EditorTheme.cs @@ -1,5 +1,6 @@ using System.Collections; using System.Collections.Generic; +using System.IO; using UnityEngine; using UnityEngine.UI; @@ -8,6 +9,7 @@ using TMPro; using Starpelly; +using HeavenStudio.Common; using HeavenStudio.Editor.Track; namespace HeavenStudio.Editor @@ -26,7 +28,16 @@ namespace HeavenStudio.Editor private void Awake() { - theme = JsonConvert.DeserializeObject(ThemeTXT.text); + if (File.Exists(Application.persistentDataPath + "/editorTheme.json")) + { + string json = File.ReadAllText(Application.persistentDataPath + "/editorTheme.json"); + theme = JsonConvert.DeserializeObject(json); + } + else + { + PersistentDataManager.SaveTheme(ThemeTXT.text); + theme = JsonConvert.DeserializeObject(ThemeTXT.text); + } } private void Start() diff --git a/Assets/Scripts/LevelEditor/SettingsDialog/SettingsDialog.cs b/Assets/Scripts/LevelEditor/SettingsDialog/SettingsDialog.cs index 58b8c3de1..f93c3331f 100644 --- a/Assets/Scripts/LevelEditor/SettingsDialog/SettingsDialog.cs +++ b/Assets/Scripts/LevelEditor/SettingsDialog/SettingsDialog.cs @@ -3,6 +3,8 @@ using UnityEngine; using UnityEngine.UI; using TMPro; +using HeavenStudio.Common; + namespace HeavenStudio.Editor { public class SettingsDialog : Dialog @@ -19,6 +21,8 @@ namespace HeavenStudio.Editor Editor.instance.canSelect = true; Editor.instance.inAuthorativeMenu = false; dialog.SetActive(false); + + PersistentDataManager.SaveSettings(); tabsManager.CleanTabs(); } else { ResetAllDialogs(); diff --git a/Assets/Scripts/LevelEditor/SettingsDialog/Tabs/DispAudioSettings.cs b/Assets/Scripts/LevelEditor/SettingsDialog/Tabs/DispAudioSettings.cs index af5460c67..3527bf430 100644 --- a/Assets/Scripts/LevelEditor/SettingsDialog/Tabs/DispAudioSettings.cs +++ b/Assets/Scripts/LevelEditor/SettingsDialog/Tabs/DispAudioSettings.cs @@ -46,6 +46,9 @@ namespace HeavenStudio.Editor heightInputField.text = GlobalGameManager.CustomScreenHeight.ToString(); }); + widthInputField.text = GlobalGameManager.CustomScreenWidth.ToString(); + heightInputField.text = GlobalGameManager.CustomScreenHeight.ToString(); + volSlider.value = GlobalGameManager.MasterVolume; volLabel.text = System.Math.Round(volSlider.value * 100, 2).ToString(); } diff --git a/Assets/Scripts/LevelEditor/SettingsDialog/Tabs/EditorSettings.cs b/Assets/Scripts/LevelEditor/SettingsDialog/Tabs/EditorSettings.cs index 26b084e78..6ce93f30f 100644 --- a/Assets/Scripts/LevelEditor/SettingsDialog/Tabs/EditorSettings.cs +++ b/Assets/Scripts/LevelEditor/SettingsDialog/Tabs/EditorSettings.cs @@ -2,21 +2,36 @@ using UnityEngine; using UnityEngine.UI; using TMPro; +using HeavenStudio.Common; + namespace HeavenStudio.Editor { public class EditorSettings : TabsContent { public Toggle cursorCheckbox; + public Toggle discordRPCCheckbox; + + private void Start() { + cursorCheckbox.isOn = PersistentDataManager.gameSettings.editorCursorEnable; + discordRPCCheckbox.isOn = PersistentDataManager.gameSettings.discordRPCEnable; + } public void OnCursorCheckboxChanged() { Editor.instance.isCursorEnabled = cursorCheckbox.isOn; + PersistentDataManager.gameSettings.editorCursorEnable = cursorCheckbox.isOn; if (!Editor.instance.fullscreen) { GameManager.instance.CursorCam.enabled = Editor.instance.isCursorEnabled; } } + public void OnRPCCheckboxChanged() + { + PersistentDataManager.gameSettings.discordRPCEnable = discordRPCCheckbox.isOn; + Editor.instance.isDiscordEnabled = discordRPCCheckbox.isOn; + } + public override void OnOpenTab() { } diff --git a/Assets/Scripts/PersistentDataManager.cs b/Assets/Scripts/PersistentDataManager.cs new file mode 100644 index 000000000..8f6b21a63 --- /dev/null +++ b/Assets/Scripts/PersistentDataManager.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using UnityEngine; + +using Newtonsoft.Json; + +namespace HeavenStudio.Common +{ + public static class PersistentDataManager + { + [NonSerialized] public static GameSettings gameSettings; + + public static void CreateDefaultSettings() + { + gameSettings = new GameSettings(); + + gameSettings.isFullscreen = false; + + gameSettings.resolutionIndex = 0; + gameSettings.resolutionWidth = GlobalGameManager.DEFAULT_SCREEN_SIZES[gameSettings.resolutionIndex].width; + gameSettings.resolutionHeight = GlobalGameManager.DEFAULT_SCREEN_SIZES[gameSettings.resolutionIndex].height; + + gameSettings.masterVolume = 0.8f; + + gameSettings.editorCursorEnable = true; + + // disable if platform is mac + if (Application.platform == RuntimePlatform.OSXPlayer || Application.platform == RuntimePlatform.OSXEditor) + gameSettings.discordRPCEnable = false; + else + gameSettings.discordRPCEnable = true; + + SaveSettings(); + } + + public static void LoadSettings() + { + if (File.Exists(Application.persistentDataPath + "/settings.json")) + { + string json = File.ReadAllText(Application.persistentDataPath + "/settings.json"); + gameSettings = JsonUtility.FromJson(json); + } + else + { + CreateDefaultSettings(); + } + } + + public static void SaveSettings() + { + string json = JsonUtility.ToJson(gameSettings); + // save json to persistentDataPath + FileStream file = File.Create(Application.persistentDataPath + "/settings.json"); + file.Write(System.Text.Encoding.ASCII.GetBytes(json), 0, json.Length); + file.Close(); + } + + public static void SaveTheme(string json) + { + // save json to persistentDataPath + FileStream file = File.Create(Application.persistentDataPath + "/editorTheme.json"); + file.Write(System.Text.Encoding.ASCII.GetBytes(json), 0, json.Length); + file.Close(); + } + + [Serializable] + public struct GameSettings + { + // Display / Audio Settings + public bool isFullscreen; + + public int resolutionIndex; + public int resolutionWidth; + public int resolutionHeight; + + public float masterVolume; + + // Editor Settings + public bool editorCursorEnable; + public bool discordRPCEnable; + } + } + +} \ No newline at end of file diff --git a/Assets/Scripts/PersistentDataManager.cs.meta b/Assets/Scripts/PersistentDataManager.cs.meta new file mode 100644 index 000000000..2bcca0efc --- /dev/null +++ b/Assets/Scripts/PersistentDataManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e29b9a69a32fdb44a8f5311a492fe508 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: