From 8bd3b2247b1c697cf051a9f93839ccd3828915c2 Mon Sep 17 00:00:00 2001 From: "ALIENJACK\\alien" Date: Wed, 9 Apr 2025 14:54:21 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E8=BE=93=E5=87=BA=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=8B=AC=E5=8D=A0=E6=9C=BA=E5=88=B6,?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E4=B8=80=E4=B8=AA=E8=AE=BE=E5=A4=87=E7=BB=91?= =?UTF-8?q?=E5=AE=9A=E5=88=B0=E5=A4=9A=E4=B8=AA=E6=89=8B=E6=9F=84=E6=98=A0?= =?UTF-8?q?=E5=B0=84=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../KeyMapperSetting/Model/EmuCoreBinder.cs | 43 ++++++++++++++----- .../Devices/InputDevice_D.cs | 2 + .../InputDevicesManager/Devices/Keyboard_D.cs | 1 + 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/Model/EmuCoreBinder.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/Model/EmuCoreBinder.cs index 4fc1538e..85053a77 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/Model/EmuCoreBinder.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/Model/EmuCoreBinder.cs @@ -3,6 +3,7 @@ using AxibugEmuOnline.Client.InputDevices; using AxibugEmuOnline.Client.Settings; using System; using System.Collections.Generic; +using System.Linq; using UnityEngine; /// @@ -19,7 +20,7 @@ public abstract class EmuCoreBinder : InternalEmuCoreBinder, where T : Enum { //每一个实例代表一个对应模拟器平台的控制器索引 - List m_bindingPages = new List(); + List m_controllerBinders = new List(); public EmuCoreBinder() { @@ -27,13 +28,15 @@ public abstract class EmuCoreBinder : InternalEmuCoreBinder, for (int i = 0; i < ControllerCount; i++) { - m_bindingPages.Add(new ControllerBinder(i, this)); + m_controllerBinders.Add(new ControllerBinder(i, this)); } foreach (var device in App.input.GetDevices()) { - foreach (var binding in m_bindingPages) + foreach (var binding in m_controllerBinders) { + if (device.Exclusive && GetRegistedBinder(device) != null) continue; + binding.RegistInputDevice(device); } } @@ -42,9 +45,23 @@ public abstract class EmuCoreBinder : InternalEmuCoreBinder, App.input.OnDeviceConnected += InputDevicesMgr_OnDeviceConnected; } + /// 获取指定设备的注册Binder对象 + /// + /// 返回首个匹配对象 + public ControllerBinder GetRegistedBinder(InputDevice_D device) + { + foreach (var binding in m_controllerBinders) + { + if (device.Exclusive && GetRegistedBinder(device) != null) continue; + if (binding.IsRegisted(device)) return binding; + } + + return null; + } + private void InputDevicesMgr_OnDeviceConnected(InputDevice_D connectDevice) { - foreach (var binding in m_bindingPages) + foreach (var binding in m_controllerBinders) { binding.RegistInputDevice(connectDevice); } @@ -52,7 +69,7 @@ public abstract class EmuCoreBinder : InternalEmuCoreBinder, private void InputDevicesMgr_OnDeviceLost(InputDevice_D lostDevice) { - foreach (var binding in m_bindingPages) + foreach (var binding in m_controllerBinders) { binding.UnregistInputDevice(lostDevice); } @@ -71,7 +88,7 @@ public abstract class EmuCoreBinder : InternalEmuCoreBinder, public bool Start(T emuControl, int controllerIndex) { - var binding = m_bindingPages[controllerIndex]; + var binding = m_controllerBinders[controllerIndex]; foreach (var key in binding.GetBinding(emuControl)) { if (key.Start) return true; @@ -82,7 +99,7 @@ public abstract class EmuCoreBinder : InternalEmuCoreBinder, public bool Release(T emuControl, int controllerIndex) { - var binding = m_bindingPages[controllerIndex]; + var binding = m_controllerBinders[controllerIndex]; foreach (var key in binding.GetBinding(emuControl)) { if (key.Release) return true; @@ -100,7 +117,7 @@ public abstract class EmuCoreBinder : InternalEmuCoreBinder, /// public bool GetKey(T emuControl, int controllerIndex) { - var binding = m_bindingPages[controllerIndex]; + var binding = m_controllerBinders[controllerIndex]; foreach (var key in binding.GetBinding(emuControl)) { if (key.Performing) return true; @@ -116,7 +133,7 @@ public abstract class EmuCoreBinder : InternalEmuCoreBinder, /// public bool AnyKeyDown(int controllerIndex) { - var binding = m_bindingPages[controllerIndex]; + var binding = m_controllerBinders[controllerIndex]; return binding.AnyKeyDown(); } @@ -130,7 +147,7 @@ public abstract class EmuCoreBinder : InternalEmuCoreBinder, /// public Vector2 GetVector2(T emuControl, int controllerIndex) { - var binding = m_bindingPages[controllerIndex]; + var binding = m_controllerBinders[controllerIndex]; foreach (var control in binding.GetBinding(emuControl)) { if (!control.Performing) continue; @@ -155,7 +172,7 @@ public abstract class EmuCoreBinder : InternalEmuCoreBinder, var totalFloat = 0f; var totalControl = 0; - var binding = m_bindingPages[controllerIndex]; + var binding = m_controllerBinders[controllerIndex]; foreach (var key in binding.GetBinding(emuControl)) { if (!key.Performing) continue; @@ -193,6 +210,10 @@ public abstract class EmuCoreBinder : InternalEmuCoreBinder, { return m_registedDevices.ContainsKey(deviceType); } + internal bool IsRegisted(InputDevice_D device) + { + return m_registedDevices.Values.Contains(device); + } internal void RegistInputDevice(InputDevice_D device) { diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputDevice_D.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputDevice_D.cs index b7d82bea..d6b0fe8c 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputDevice_D.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputDevice_D.cs @@ -6,6 +6,8 @@ namespace AxibugEmuOnline.Client.InputDevices { public abstract class InputDevice_D { + /// 指示该设备是否只能由一个Binder独占 + public virtual bool Exclusive => true; public string UniqueName => m_resolver.GetDeviceName(this); /// 指示该设备是否在线 diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/Keyboard_D.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/Keyboard_D.cs index 35a28897..841a8072 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/Keyboard_D.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/Keyboard_D.cs @@ -112,5 +112,6 @@ namespace AxibugEmuOnline.Client.InputDevices public Button_C ScrollLock; public Keyboard_D(InputResolver resolver) : base(resolver) { } + public override bool Exclusive => false; } } \ No newline at end of file From 209c82da805030647991e6f9cb4d4beb59724982 Mon Sep 17 00:00:00 2001 From: "ALIENJACK\\alien" Date: Thu, 10 Apr 2025 15:39:44 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E4=BE=A7=E8=BE=B9=E6=A0=8F=E5=AD=98?= =?UTF-8?q?=E6=A1=A3=E8=8F=9C=E5=8D=95UI=E5=AE=9E=E7=8E=B0=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Resources/UIPrefabs/OptionUI.prefab | 654 +++++++++++++++++- .../Assets/Scene/AxibugEmuOnline.Client.unity | 2 +- .../Manager/SaveSlotManager/SaveFile.cs | 58 +- .../AppMain/UI/BgSettingsUI/UI_FilterItem.cs | 8 +- .../AppMain/UI/GamesUI/RomListMenuItem.cs | 4 +- .../Script/AppMain/UI/InGameUI/InGameUI.cs | 7 +- .../UI/InGameUI/InGameUI_FilterSetting.cs | 12 +- ...oadState.cs => InGameUI_LoadStateQuick.cs} | 8 +- ...s.meta => InGameUI_LoadStateQuick.cs.meta} | 0 .../UI/InGameUI/InGameUI_SaveStateMenu.cs | 51 ++ .../InGameUI/InGameUI_SaveStateMenu.cs.meta | 2 + ...aveState.cs => InGameUI_SaveStateQuick.cs} | 6 +- ...s.meta => InGameUI_SaveStateQuick.cs.meta} | 0 .../AppMain/UI/InGameUI/InGameUI_Scaler.cs | 4 +- .../Script/AppMain/UI/OptionUI/OptionUI.cs | 60 +- .../UI/OptionUI/OptionUI_ExecuteItem.cs | 2 +- .../AppMain/UI/OptionUI/OptionUI_MenuItem.cs | 10 +- .../UI/OptionUI/OptionUI_SavSlotItem.cs | 67 ++ .../UI/OptionUI/OptionUI_SavSlotItem.cs.meta | 2 + .../UI/OptionUI/OptionUI_ValueEditItem.cs | 2 +- .../AppMain/UI/OverlayUI/OverlayManager.cs | 2 +- 21 files changed, 847 insertions(+), 114 deletions(-) rename AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/{InGameUI_LoadState.cs => InGameUI_LoadStateQuick.cs} (62%) rename AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/{InGameUI_LoadState.cs.meta => InGameUI_LoadStateQuick.cs.meta} (100%) create mode 100644 AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs create mode 100644 AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs.meta rename AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/{InGameUI_SaveState.cs => InGameUI_SaveStateQuick.cs} (80%) rename AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/{InGameUI_SaveState.cs.meta => InGameUI_SaveStateQuick.cs.meta} (100%) create mode 100644 AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs create mode 100644 AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs.meta diff --git a/AxibugEmuOnline.Client/Assets/Resources/UIPrefabs/OptionUI.prefab b/AxibugEmuOnline.Client/Assets/Resources/UIPrefabs/OptionUI.prefab index 73c3cd97..94f5a72d 100644 --- a/AxibugEmuOnline.Client/Assets/Resources/UIPrefabs/OptionUI.prefab +++ b/AxibugEmuOnline.Client/Assets/Resources/UIPrefabs/OptionUI.prefab @@ -35,7 +35,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 143.5, y: -15.666667} + m_AnchoredPosition: {x: 143.5, y: -20} m_SizeDelta: {x: 183, y: 26} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &4761092020446986678 @@ -229,8 +229,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 20, y: -15.666667} - m_SizeDelta: {x: 40, y: 31.333334} + m_AnchoredPosition: {x: 20, y: -20} + m_SizeDelta: {x: 40, y: 40} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &7860273967724122996 CanvasRenderer: @@ -325,8 +325,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 40, y: -25.666668} - m_SizeDelta: {x: 40, y: 31.333336} + m_AnchoredPosition: {x: 40, y: -30} + m_SizeDelta: {x: 40, y: 40} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &6442047476311195174 CanvasRenderer: @@ -555,8 +555,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 175.5, y: -134.66667} - m_SizeDelta: {x: 311, y: 31.333334} + m_AnchoredPosition: {x: 155, y: -165} + m_SizeDelta: {x: 270, y: 40} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &406189280625441644 MonoBehaviour: @@ -625,7 +625,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 321, y: -25.666668} + m_AnchoredPosition: {x: 321, y: -30} m_SizeDelta: {x: 20, y: 20} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &8983615257379814102 @@ -904,8 +904,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 175.5, y: -171.00002} - m_SizeDelta: {x: 311, y: 31.333334} + m_AnchoredPosition: {x: 155, y: -210} + m_SizeDelta: {x: 270, y: 40} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1792874459052106251 MonoBehaviour: @@ -978,8 +978,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 170.5, y: -25.666668} - m_SizeDelta: {x: 341, y: 51.333336} + m_AnchoredPosition: {x: 170.5, y: -146} + m_SizeDelta: {x: 341, y: 60} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &9142037267599823005 MonoBehaviour: @@ -1094,7 +1094,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 284, y: -25.666668} + m_AnchoredPosition: {x: 284, y: -30} m_SizeDelta: {x: 30, y: 30} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &8134207541370216537 @@ -1155,6 +1155,104 @@ MonoBehaviour: m_FlexibleWidth: -1 m_FlexibleHeight: -1 m_LayoutPriority: 1 +--- !u!1 &3474088710924343098 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6878964193873653430} + - component: {fileID: 7910447946506517051} + - component: {fileID: 1245427187698918444} + - component: {fileID: 7858141028076829401} + m_Layer: 5 + m_Name: Name + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6878964193873653430 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3474088710924343098} + 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: 1100500336380202360} + 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 &7910447946506517051 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3474088710924343098} + m_CullTransparentMesh: 1 +--- !u!114 &1245427187698918444 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3474088710924343098} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData: + m_Font: {fileID: 12800000, guid: 33a3bdf8f6bd1ec4eba7c4bc58183212, type: 3} + m_FontSize: 26 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 185 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: '[MenuName]' +--- !u!114 &7858141028076829401 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3474088710924343098} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0848bff101191904ead4bb831f7084db, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BlurFactor: 1 + m_Style: 1 + m_AdditionalShadows: [] + m_EffectColor: {r: 0, g: 0, b: 0, a: 0.5} + m_EffectDistance: {x: 1.5, y: -1.5} + m_UseGraphicAlpha: 1 --- !u!1 &4124172888520656882 GameObject: m_ObjectHideFlags: 0 @@ -1254,6 +1352,65 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &4476720122184876793 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5970282275929291192} + - component: {fileID: 2558056583130529771} + m_Layer: 5 + m_Name: ScreenNode + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5970282275929291192 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4476720122184876793} + 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: 7389645496847632176} + - {fileID: 173892651193427531} + - {fileID: 8150810211498757695} + m_Father: {fileID: 1100500336380202360} + 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 &2558056583130529771 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4476720122184876793} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 300 + m_PreferredHeight: 300 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 --- !u!1 &4478785627166277609 GameObject: m_ObjectHideFlags: 0 @@ -1288,6 +1445,7 @@ RectTransform: m_Children: - {fileID: 8581099496228509946} - {fileID: 2780569438310375802} + - {fileID: 1100500336380202360} - {fileID: 278706555072840209} - {fileID: 2404013603202822047} m_Father: {fileID: 0} @@ -1311,8 +1469,6 @@ MonoBehaviour: m_EditorClassIdentifier: MenuRoot: {fileID: 4478785627166277610} SelectBorder: {fileID: 7857863493876124730} - TEMPLATE_EXECUTEITEM: {fileID: 3721725547312714320} - TEMPLATE_VALUEEDITITEM: {fileID: 2621485483361375335} --- !u!114 &7033441668005100640 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1373,6 +1529,102 @@ MonoBehaviour: m_FlexibleWidth: -1 m_FlexibleHeight: -1 m_LayoutPriority: 1 +--- !u!1 &4531500821505527959 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8450003830307438743} + - component: {fileID: 1589970305948971308} + - component: {fileID: 8043128130230171127} + - component: {fileID: 2233123445426827155} + m_Layer: 5 + m_Name: Icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8450003830307438743 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4531500821505527959} + 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: 1100500336380202360} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 170, y: -240.32788} + m_SizeDelta: {x: 40, y: 40} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1589970305948971308 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4531500821505527959} + m_CullTransparentMesh: 1 +--- !u!114 &8043128130230171127 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4531500821505527959} + m_Enabled: 0 + 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: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &2233123445426827155 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4531500821505527959} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 1 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 40 + m_PreferredHeight: 40 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 --- !u!1 &4565892069299376824 GameObject: m_ObjectHideFlags: 0 @@ -1409,6 +1661,78 @@ RectTransform: m_AnchoredPosition: {x: -5, y: 0} m_SizeDelta: {x: -20, y: 0} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &5162569472849600096 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7389645496847632176} + - component: {fileID: 714994651902078554} + - component: {fileID: 1024458178917207864} + m_Layer: 5 + m_Name: Screen + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7389645496847632176 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5162569472849600096} + 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: 5970282275929291192} + 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 &714994651902078554 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5162569472849600096} + m_CullTransparentMesh: 1 +--- !u!114 &1024458178917207864 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5162569472849600096} + 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!1 &5174902406667317058 GameObject: m_ObjectHideFlags: 0 @@ -1449,8 +1773,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 170.5, y: -149.66667} - m_SizeDelta: {x: 341, y: 196.66667} + m_AnchoredPosition: {x: 150, y: -146} + m_SizeDelta: {x: 300, y: 240} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &2621485483361375335 MonoBehaviour: @@ -1651,8 +1975,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 175.5, y: -98.333336} - m_SizeDelta: {x: 311, y: 31.333334} + m_AnchoredPosition: {x: 155, y: -120} + m_SizeDelta: {x: 270, y: 40} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &9093150501524936851 MonoBehaviour: @@ -1723,8 +2047,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 175.5, y: -25.666668} - m_SizeDelta: {x: 311, y: 31.333334} + m_AnchoredPosition: {x: 155, y: -30} + m_SizeDelta: {x: 270, y: 40} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &6023196883469018230 MonoBehaviour: @@ -1787,8 +2111,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 155.5, y: -15.666667} - m_SizeDelta: {x: 311, y: 31.333334} + m_AnchoredPosition: {x: 135, y: -20} + m_SizeDelta: {x: 270, y: 40} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &6646371810488858664 CanvasRenderer: @@ -1889,8 +2213,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 106.66667, y: -15.666667} - m_SizeDelta: {x: 213.33334, y: 31.333334} + m_AnchoredPosition: {x: 89.58333, y: -20} + m_SizeDelta: {x: 179.16666, y: 40} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &5919193658528722431 MonoBehaviour: @@ -1998,8 +2322,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 175.5, y: -62.000004} - m_SizeDelta: {x: 311, y: 31.333334} + m_AnchoredPosition: {x: 155, y: -75} + m_SizeDelta: {x: 270, y: 40} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &2814991476448031351 MonoBehaviour: @@ -2035,6 +2359,81 @@ MonoBehaviour: m_EditorClassIdentifier: slider: {fileID: 6489571631904078165} txt_value: {fileID: 6176548475786947694} +--- !u!1 &6467406772825416429 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 173892651193427531} + - component: {fileID: 4085094471767132086} + - component: {fileID: 8350228378118296958} + m_Layer: 5 + m_Name: Empty + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &173892651193427531 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6467406772825416429} + 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: 5970282275929291192} + 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 &4085094471767132086 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6467406772825416429} + m_CullTransparentMesh: 1 +--- !u!114 &8350228378118296958 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6467406772825416429} + 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: 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 &6551251729527098609 GameObject: m_ObjectHideFlags: 0 @@ -2070,8 +2469,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 264.6667, y: -15.666667} - m_SizeDelta: {x: 92.66667, y: 31.333334} + m_AnchoredPosition: {x: 227.08331, y: -20} + m_SizeDelta: {x: 85.83333, y: 40} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &7323868397581272064 CanvasRenderer: @@ -2172,8 +2571,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 106.66667, y: -15.666667} - m_SizeDelta: {x: 213.33334, y: 31.333334} + m_AnchoredPosition: {x: 89.58333, y: -20} + m_SizeDelta: {x: 179.16666, y: 40} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &6489571631904078165 MonoBehaviour: @@ -2281,7 +2680,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 164.5, y: -25.666668} + m_AnchoredPosition: {x: 164.5, y: -30} m_SizeDelta: {x: 185, y: 26} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &6532365540230118336 @@ -2344,6 +2743,189 @@ MonoBehaviour: m_EffectColor: {r: 0, g: 0, b: 0, a: 0.5} m_EffectDistance: {x: 1.5, y: -1.5} m_UseGraphicAlpha: 1 +--- !u!1 &7099541800602849681 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1100500336380202360} + - component: {fileID: 20405450890320071} + - component: {fileID: 1975302203658727050} + m_Layer: 5 + m_Name: SavSlotItem_Template + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1100500336380202360 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7099541800602849681} + 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: 5970282275929291192} + - {fileID: 8450003830307438743} + - {fileID: 6878964193873653430} + m_Father: {fileID: 4478785627166277610} + 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 &20405450890320071 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7099541800602849681} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 20 + m_Right: 10 + m_Top: 10 + m_Bottom: 10 + m_ChildAlignment: 0 + m_Spacing: 10 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &1975302203658727050 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7099541800602849681} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 688af9c7251c334489191abcae4e0164, type: 3} + m_Name: + m_EditorClassIdentifier: + m_MenuNameTxt: {fileID: 1245427187698918444} + m_Icon: {fileID: 8043128130230171127} + UI_ScreenShot: {fileID: 1024458178917207864} + UI_Empty: {fileID: 8350228378118296958} + UI_SavTime: {fileID: 13043593624240728} +--- !u!1 &7141318786199574664 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8150810211498757695} + - component: {fileID: 7160219150891895322} + - component: {fileID: 13043593624240728} + - component: {fileID: 6806772567731511000} + m_Layer: 5 + m_Name: SavTime + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8150810211498757695 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7141318786199574664} + 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: 5970282275929291192} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -10, y: -10} + m_SizeDelta: {x: 300, y: 18.613636} + m_Pivot: {x: 1, y: 1} +--- !u!222 &7160219150891895322 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7141318786199574664} + m_CullTransparentMesh: 1 +--- !u!114 &13043593624240728 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7141318786199574664} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData: + m_Font: {fileID: 12800000, guid: 33a3bdf8f6bd1ec4eba7c4bc58183212, type: 3} + m_FontSize: 18 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 185 + m_Alignment: 2 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: '111211 + + ddsadas' +--- !u!114 &6806772567731511000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7141318786199574664} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0848bff101191904ead4bb831f7084db, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BlurFactor: 1 + m_Style: 1 + m_AdditionalShadows: [] + m_EffectColor: {r: 0, g: 0, b: 0, a: 0.5} + m_EffectDistance: {x: 1.5, y: -1.5} + m_UseGraphicAlpha: 1 --- !u!1 &7579340952198812870 GameObject: m_ObjectHideFlags: 0 @@ -2806,8 +3388,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 264.6667, y: -15.666667} - m_SizeDelta: {x: 92.66667, y: 31.333334} + m_AnchoredPosition: {x: 227.08331, y: -20} + m_SizeDelta: {x: 85.83333, y: 40} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &7497419100168238325 CanvasRenderer: @@ -2981,8 +3563,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 155.5, y: -15.666667} - m_SizeDelta: {x: 311, y: 31.333334} + m_AnchoredPosition: {x: 135, y: -20} + m_SizeDelta: {x: 270, y: 40} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &88244861463061753 CanvasRenderer: diff --git a/AxibugEmuOnline.Client/Assets/Scene/AxibugEmuOnline.Client.unity b/AxibugEmuOnline.Client/Assets/Scene/AxibugEmuOnline.Client.unity index a9ce8555..eb2adf4c 100644 --- a/AxibugEmuOnline.Client/Assets/Scene/AxibugEmuOnline.Client.unity +++ b/AxibugEmuOnline.Client/Assets/Scene/AxibugEmuOnline.Client.unity @@ -225,7 +225,7 @@ MonoBehaviour: bUseLocalWebApi: 0 mLocalWebApi: http://localhost:5051 bEditorUUID: 0 - bEditorOpenGUIJoyStick: 1 + bEditorOpenGUIJoyStick: 0 --- !u!1 &1498586261 GameObject: m_ObjectHideFlags: 3 diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs index 97252644..d722627b 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs @@ -1,7 +1,6 @@ using AxibugEmuOnline.Client.ClientCore; using AxibugEmuOnline.Client.Tools; using AxibugProtobuf; -using MAME.Core; using System; using System.IO; using System.Runtime.InteropServices; @@ -23,7 +22,7 @@ namespace AxibugEmuOnline.Client public RomPlatformType EmuPlatform { get; private set; } /// 指示该存档是否为空 - public bool IsEmpty { get; } + public bool IsEmpty { get; private set; } /// 存档文件路径 public string FilePath { @@ -41,7 +40,12 @@ namespace AxibugEmuOnline.Client /// 存档顺序号,用于判断云存档和本地存档的同步状态,是否存在冲突 public uint Sequecen { get; private set; } + SimpleFSM FSM; + byte[] m_savDataCaches; + byte[] m_screenShotCaches; + Header m_headerCache; + bool m_cacheOutdate = true; public SaveFile(int romID, RomPlatformType platform, int slotIndex) { @@ -55,7 +59,7 @@ namespace AxibugEmuOnline.Client FSM.AddState(); FSM.AddState(); - IsEmpty = File.Exists(FilePath); + IsEmpty = !File.Exists(FilePath); if (IsEmpty) Sequecen = 0; else //从文件头读取存储序号 @@ -83,8 +87,28 @@ namespace AxibugEmuOnline.Client { FSM.Update(); } + + /// + /// 获得存档的保存时间(UTC) + /// + /// + public DateTime GetSavTimeUTC() + { + GetSavData(out _, out _); + return new DateTime((long)m_headerCache.SavTicks, DateTimeKind.Utc); + } + public unsafe void GetSavData(out byte[] savData, out byte[] screenShotData) { + if (!m_cacheOutdate) + { + savData = m_savDataCaches; + screenShotData = m_screenShotCaches; + return; + } + + m_cacheOutdate = false; + savData = null; screenShotData = null; @@ -99,15 +123,15 @@ namespace AxibugEmuOnline.Client return; } - var header = new Header(); + m_headerCache = new Header(); IntPtr ptr = Marshal.AllocHGlobal(headerSize); - Marshal.StructureToPtr(header, ptr, false); + Marshal.StructureToPtr(m_headerCache, ptr, false); Marshal.Copy(raw, 0, ptr, headerSize); Marshal.FreeHGlobal(ptr); - savData = new byte[header.DataLength]; + savData = new byte[m_headerCache.DataLength]; Array.Copy(raw, headerSize, savData, 0, savData.Length); - screenShotData = new byte[header.ScreenShotLength]; + screenShotData = new byte[m_headerCache.ScreenShotLength]; Array.Copy(raw, headerSize + savData.Length, screenShotData, 0, screenShotData.Length); return; @@ -121,8 +145,9 @@ namespace AxibugEmuOnline.Client { Sequence = sequence, RomID = RomID, - DataLength = savData.Length, - ScreenShotLength = screenShotData.Length + SavTicks = (ulong)DateTime.UtcNow.Ticks, + DataLength = (uint)savData.Length, + ScreenShotLength = (uint)screenShotData.Length, }; int headerSize = Marshal.SizeOf(typeof(Header)); IntPtr ptr = Marshal.AllocHGlobal(headerSize); @@ -144,6 +169,11 @@ namespace AxibugEmuOnline.Client File.WriteAllBytes(filePath, raw); Sequecen = sequence; + + m_headerCache = header; + IsEmpty = false; + + m_cacheOutdate = true; } /// @@ -157,7 +187,7 @@ namespace AxibugEmuOnline.Client } - [StructLayout(LayoutKind.Explicit, Size = 16)] + [StructLayout(LayoutKind.Explicit, Size = 24)] struct Header { [FieldOffset(0)] @@ -165,9 +195,11 @@ namespace AxibugEmuOnline.Client [FieldOffset(4)] public int RomID; [FieldOffset(8)] - public int DataLength; - [FieldOffset(12)] - public int ScreenShotLength; + public ulong SavTicks; + [FieldOffset(16)] + public uint DataLength; + [FieldOffset(20)] + public uint ScreenShotLength; } public enum EnumState diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/BgSettingsUI/UI_FilterItem.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/BgSettingsUI/UI_FilterItem.cs index c93b4d5b..54f40ec4 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/BgSettingsUI/UI_FilterItem.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/BgSettingsUI/UI_FilterItem.cs @@ -51,7 +51,7 @@ namespace AxibugEmuOnline.Client { if (Datacontext != null && Datacontext.Paramerters.Count > 0) { - var opts = new List(); + var opts = new List(); opts.Add(new Opt_CreatePreset(Datacontext)); opts.AddRange(Datacontext.Presets.Select(p => new Opt_Presets(Datacontext, p))); @@ -101,7 +101,7 @@ namespace AxibugEmuOnline.Client private Filter m_filter; private FilterPreset m_preset; private OptionUI_MenuItem m_ui; - private List m_menu; + private List m_menu; public override string Name => m_preset.Name; @@ -110,7 +110,7 @@ namespace AxibugEmuOnline.Client m_filter = filter; m_preset = preset; - m_menu = new List(); + m_menu = new List(); m_menu.Add(new Opt_Delete(m_filter, m_preset)); foreach (var p in m_filter.Paramerters) { @@ -142,7 +142,7 @@ namespace AxibugEmuOnline.Client App.settings.Filter.EnableFilter(m_filter); } - protected override List GetOptionMenus() + protected override List GetOptionMenus() { return m_menu; } diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/GamesUI/RomListMenuItem.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/GamesUI/RomListMenuItem.cs index 6a7338d3..eba1f4a7 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/GamesUI/RomListMenuItem.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/GamesUI/RomListMenuItem.cs @@ -21,13 +21,13 @@ namespace AxibugEmuOnline.Client } } - private List m_options; + private List m_options; protected override void Awake() { base.Awake(); - m_options = new List() + m_options = new List() { new OptMenu_Search(this), new OptMenu_ShowAll(this), diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI.cs index 08e9b095..dcf73f6e 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI.cs @@ -13,7 +13,7 @@ namespace AxibugEmuOnline.Client private object m_state; private StepPerformer m_stepPerformer; - private readonly List menus = new List(); + private readonly List menus = new List(); public static InGameUI Instance { get; private set; } public RomFile RomFile { get; private set; } @@ -45,8 +45,9 @@ namespace AxibugEmuOnline.Client menus.Add(new InGameUI_FilterSetting(this)); menus.Add(new InGameUI_Scaler(this)); menus.Add(new InGameUI_Reset(this)); - menus.Add(new InGameUI_SaveState(this)); - menus.Add(new InGameUI_LoadState(this)); + menus.Add(new InGameUI_SaveStateQuick(this)); + menus.Add(new InGameUI_LoadStateQuick(this)); + menus.Add(new InGameUI_SaveStateMenu(this)); menus.Add(new InGameUI_QuitGame(this)); base.Awake(); diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_FilterSetting.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_FilterSetting.cs index aaf24689..402032e9 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_FilterSetting.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_FilterSetting.cs @@ -15,11 +15,11 @@ namespace AxibugEmuOnline.Client m_gameUI = gameUI; } - protected override List GetOptionMenus() + protected override List GetOptionMenus() { - List menus = new List(); + List menus = new List(); menus.Add(new FilterNone(m_gameUI.RomFile)); - menus.AddRange(App.settings.Filter.Filters.Select(f => new FilterMenu(m_gameUI.RomFile, f) as OptionMenu)); + menus.AddRange(App.settings.Filter.Filters.Select(f => new FilterMenu(m_gameUI.RomFile, f) as InternalOptionMenu)); return menus; } @@ -44,7 +44,7 @@ namespace AxibugEmuOnline.Client public class FilterMenu : ExpandMenu { private Filter m_filter; - private List m_presetsMenuItems; + private List m_presetsMenuItems; public override bool IsApplied { @@ -62,11 +62,11 @@ namespace AxibugEmuOnline.Client public FilterMenu(RomFile rom, Filter filter) { m_filter = filter; - m_presetsMenuItems = new List { new FilterPresetMenu(rom, m_filter, m_filter.DefaultPreset) }; + m_presetsMenuItems = new List { new FilterPresetMenu(rom, m_filter, m_filter.DefaultPreset) }; m_presetsMenuItems.AddRange(m_filter.Presets.Select(preset => new FilterPresetMenu(rom, m_filter, preset))); } - protected override List GetOptionMenus() + protected override List GetOptionMenus() { return m_presetsMenuItems; } diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_LoadState.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_LoadStateQuick.cs similarity index 62% rename from AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_LoadState.cs rename to AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_LoadStateQuick.cs index 9aa0d1b5..b4b39e24 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_LoadState.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_LoadStateQuick.cs @@ -1,12 +1,12 @@ namespace AxibugEmuOnline.Client { - public class InGameUI_LoadState : ExecuteMenu + public class InGameUI_LoadStateQuick : ExecuteMenu { private InGameUI m_gameUI; - public override bool Visible => !m_gameUI.IsNetPlay; - public override string Name => "读取快照"; + public override bool Visible => !m_gameUI.IsNetPlay && m_gameUI.GetQuickState() != null; + public override string Name => "快速读取"; - public InGameUI_LoadState(InGameUI gameUI) + public InGameUI_LoadStateQuick(InGameUI gameUI) { m_gameUI = gameUI; } diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_LoadState.cs.meta b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_LoadStateQuick.cs.meta similarity index 100% rename from AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_LoadState.cs.meta rename to AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_LoadStateQuick.cs.meta diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs new file mode 100644 index 00000000..1bed10d8 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs @@ -0,0 +1,51 @@ +using AxibugEmuOnline.Client.ClientCore; +using System; +using System.Collections.Generic; + +namespace AxibugEmuOnline.Client +{ + public class InGameUI_SaveStateMenu : ExpandMenu + { + private InGameUI m_gameUI; + + public override string Name => "保存"; + + public InGameUI_SaveStateMenu(InGameUI inGameUI) + { + m_gameUI = inGameUI; + } + + protected override List GetOptionMenus() + { + var saveFiles = App.SavMgr.GetSlotSaves(m_gameUI.RomFile.ID, m_gameUI.RomFile.Platform); + List result = new List(); + foreach (var savFile in saveFiles) + { + if (savFile.AutoSave) continue; + result.Add(new SaveSlotMenu(savFile)); + } + return result; + } + + /// 存档侧边选项UI + public class SaveSlotMenu : ExecuteMenu + { + public override Type MenuUITemplateType => typeof(OptionUI_SavSlotItem); + public SaveFile SavFile { get; private set; } + + public override bool Visible => !SavFile.AutoSave; + + public SaveSlotMenu(SaveFile savFile) + { + SavFile = savFile; + } + + public override void OnExcute(OptionUI optionUI, ref bool cancelHide) + { + cancelHide = true;//保存后不关闭 + } + + public override string Name => SavFile.AutoSave ? "自动存档" : $"存档{SavFile.SlotIndex}"; + } + } +} \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs.meta b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs.meta new file mode 100644 index 00000000..b202a3ea --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 62f9d15054674d646b218039b90d8dd4 \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveState.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateQuick.cs similarity index 80% rename from AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveState.cs rename to AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateQuick.cs index c6cbee4d..f8a51a1b 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveState.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateQuick.cs @@ -3,14 +3,14 @@ using System.Diagnostics; namespace AxibugEmuOnline.Client { - public class InGameUI_SaveState : ExecuteMenu + public class InGameUI_SaveStateQuick : ExecuteMenu { private InGameUI m_gameUI; public override bool Visible => !m_gameUI.IsNetPlay; - public override string Name => "保存快照"; + public override string Name => "快速保存"; - public InGameUI_SaveState(InGameUI gameUI) + public InGameUI_SaveStateQuick(InGameUI gameUI) { m_gameUI = gameUI; } diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveState.cs.meta b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateQuick.cs.meta similarity index 100% rename from AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveState.cs.meta rename to AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateQuick.cs.meta diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_Scaler.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_Scaler.cs index 6e86197e..4c9fad7e 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_Scaler.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_Scaler.cs @@ -7,7 +7,7 @@ namespace AxibugEmuOnline.Client { public class InGameUI_Scaler : ExpandMenu { - private List m_subMenus = new List(); + private List m_subMenus = new List(); public override string Name => "屏幕比例"; public InGameUI_Scaler(InGameUI inGameUI) { @@ -18,7 +18,7 @@ namespace AxibugEmuOnline.Client } } - protected override List GetOptionMenus() + protected override List GetOptionMenus() { return m_subMenus; } diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI.cs index ec5ee71a..6a517274 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI.cs @@ -13,10 +13,7 @@ namespace AxibugEmuOnline.Client [SerializeField] Selector SelectBorder; - [Space] - [Header("模板")] - [SerializeField] OptionUI_ExecuteItem TEMPLATE_EXECUTEITEM; - [SerializeField] OptionUI_ValueEditItem TEMPLATE_VALUEEDITITEM; + Dictionary m_menuUI_templates = new Dictionary(); private OptionUI m_child; private OptionUI m_parent; @@ -67,8 +64,11 @@ namespace AxibugEmuOnline.Client protected override void Awake() { - TEMPLATE_EXECUTEITEM.gameObject.SetActiveEx(false); - TEMPLATE_VALUEEDITITEM.gameObject.SetActiveEx(false); + foreach (var templateIns in GetComponentsInChildren(true)) + { + m_menuUI_templates[templateIns.GetType()] = templateIns; + templateIns.gameObject.SetActiveEx(false); + } SelectBorder.gameObject.SetActiveEx(false); base.Awake(); @@ -117,6 +117,7 @@ namespace AxibugEmuOnline.Client if (m_runtimeMenuItems[currentSelect].Visible) { find = true; + break; } currentSelect++; } @@ -154,7 +155,7 @@ namespace AxibugEmuOnline.Client /// 当菜单弹出时,动态添加一个菜单选项 /// /// - public void AddOptionMenuWhenPoping(OptionMenu menu) + public void AddOptionMenuWhenPoping(InternalOptionMenu menu) { if (!m_bPoped) return; @@ -166,7 +167,7 @@ namespace AxibugEmuOnline.Client SelectBorder.Target = optionUI_MenuItem.transform as RectTransform; } - public void Pop(List menus, int defaultIndex = 0, Action onClose = null) where T : OptionMenu + public void Pop(List menus, int defaultIndex = 0, Action onClose = null) where T : InternalOptionMenu { m_onClose = onClose; ReleaseRuntimeMenus(); @@ -270,25 +271,18 @@ namespace AxibugEmuOnline.Client } } - private void CreateRuntimeMenuItem(OptionMenu menuData) + private void CreateRuntimeMenuItem(InternalOptionMenu menuData) { - if (menuData is ExecuteMenu) + m_menuUI_templates.TryGetValue(menuData.MenuUITemplateType, out var template); + if (template == null) { - ExecuteMenu executeMenu = (ExecuteMenu)menuData; - var menuUI = Instantiate(TEMPLATE_EXECUTEITEM.gameObject, TEMPLATE_EXECUTEITEM.transform.parent).GetComponent(); - menuUI.gameObject.SetActive(true); - menuUI.SetData(this, executeMenu); - m_runtimeMenuItems.Add(menuUI); - } - else if (menuData is ValueSetMenu) - { - var valueSetMenu = (ValueSetMenu)menuData; - var menuUI = Instantiate(TEMPLATE_VALUEEDITITEM.gameObject, TEMPLATE_VALUEEDITITEM.transform.parent).GetComponent(); - menuUI.gameObject.SetActive(true); - menuUI.SetData(this, valueSetMenu); - m_runtimeMenuItems.Add(menuUI); - } - else throw new NotImplementedException($"暂不支持的菜单类型{menuData.GetType().Name}"); + throw new NotImplementedException($"{menuData.GetType().Name}指定的MenuUI类型实例未在OptionUI中找到"); + } + + var menuUI = Instantiate(template.gameObject, template.transform.parent).GetComponent(); + menuUI.gameObject.SetActive(true); + menuUI.SetData(this, menuData); + m_runtimeMenuItems.Add(menuUI); } private void ReleaseRuntimeMenus() @@ -361,7 +355,7 @@ namespace AxibugEmuOnline.Client /// /// /// - public void ExpandSubMenu(List menus, int defaultIndex = 0, Action onClose = null) where T : OptionMenu + public void ExpandSubMenu(List menus, int defaultIndex = 0, Action onClose = null) where T : InternalOptionMenu { if (m_child == null) { @@ -392,8 +386,9 @@ namespace AxibugEmuOnline.Client /// /// 带有执行行为的菜单 /// - public abstract class ExecuteMenu : OptionMenu + public abstract class ExecuteMenu : InternalOptionMenu { + public override Type MenuUITemplateType => typeof(OptionUI_ExecuteItem); /// 设置这个值以控制菜单中显示"已应用"标记 public virtual bool IsApplied { get; } @@ -413,13 +408,14 @@ namespace AxibugEmuOnline.Client optionUI.ExpandSubMenu(GetOptionMenus()); } - protected abstract List GetOptionMenus(); + protected abstract List GetOptionMenus(); } /// /// 带有值类型显示和编辑的菜单 /// - public abstract class ValueSetMenu : OptionMenu + public abstract class ValueSetMenu : InternalOptionMenu { + public override Type MenuUITemplateType => typeof(OptionUI_ValueEditItem); protected ValueSetMenu() : base() { } public abstract Type ValueType { get; } @@ -430,8 +426,9 @@ namespace AxibugEmuOnline.Client } /// 不要直接继承这个类 - public abstract class OptionMenu + public abstract class InternalOptionMenu { + public abstract Type MenuUITemplateType { get; } public abstract string Name { get; } public virtual Sprite Icon { get; } public virtual bool Visible => true; @@ -439,7 +436,6 @@ namespace AxibugEmuOnline.Client public virtual void OnFocus() { } public virtual void OnShow(OptionUI_MenuItem ui) { } - public virtual void OnHide() { } + public virtual void OnHide() { } } - } diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_ExecuteItem.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_ExecuteItem.cs index 8228f985..0fc4e903 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_ExecuteItem.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_ExecuteItem.cs @@ -7,7 +7,7 @@ namespace AxibugEmuOnline.Client public GameObject ExpandFlag; public GameObject ApplyFlag; - protected override void OnSetData(OptionMenu menuData) + protected override void OnSetData(InternalOptionMenu menuData) { base.OnSetData(menuData); diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_MenuItem.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_MenuItem.cs index b492a171..9f1f9ba1 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_MenuItem.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_MenuItem.cs @@ -12,9 +12,9 @@ namespace AxibugEmuOnline.Client public bool Visible => m_Menu.Visible; public OptionUI OptionUI { get; private set; } - protected OptionMenu m_Menu; + protected InternalOptionMenu m_Menu; - public void SetData(OptionUI optionUI, OptionMenu menuData) + public void SetData(OptionUI optionUI, InternalOptionMenu menuData) { OptionUI = optionUI; m_Menu = menuData; @@ -33,7 +33,7 @@ namespace AxibugEmuOnline.Client public bool IsExpandMenu => m_Menu is ExpandMenu; public bool IsApplied => m_Menu is ExecuteMenu om && om.IsApplied; - protected abstract void OnSetData(OptionMenu menuData); + protected abstract void OnSetData(InternalOptionMenu menuData); public abstract void OnExecute(OptionUI optionUI, ref bool cancelHide); public virtual void OnLeft() { } @@ -44,11 +44,11 @@ namespace AxibugEmuOnline.Client } public abstract class OptionUI_MenuItem : OptionUI_MenuItem - where T : OptionMenu + where T : InternalOptionMenu { protected T MenuData => m_Menu as T; - protected override void OnSetData(OptionMenu menuData) + protected override void OnSetData(InternalOptionMenu menuData) { MenuData.OnShow(this); } diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs new file mode 100644 index 00000000..69542533 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs @@ -0,0 +1,67 @@ +using UnityEngine; +using UnityEngine.UI; +using static AxibugEmuOnline.Client.InGameUI_SaveStateMenu; + +namespace AxibugEmuOnline.Client +{ + public class OptionUI_SavSlotItem : OptionUI_MenuItem + { + public RawImage UI_ScreenShot; + public Image UI_Empty; + public Text UI_SavTime; + + Texture2D m_screenTex; + + protected override void OnSetData(InternalOptionMenu menuData) + { + base.OnSetData(menuData); + + RefreshUI(); + } + + private void RefreshUI() + { + bool isEmpty = MenuData.SavFile.IsEmpty; + UI_ScreenShot.gameObject.SetActiveEx(!isEmpty); + UI_Empty.gameObject.SetActiveEx(isEmpty); + UI_SavTime.gameObject.SetActiveEx(true); + + if (isEmpty) + { + UI_SavTime.text = "没有数据"; + if (m_screenTex) + { + Destroy(m_screenTex); + m_screenTex = null; + } + } + else + { + var savTime = MenuData.SavFile.GetSavTimeUTC().ToLocalTime(); + UI_SavTime.text = $"{savTime.Year}/{savTime.Month}/{savTime.Day}\n{savTime.Hour}:{savTime.Minute}:{savTime.Second}"; + MenuData.SavFile.GetSavData(out byte[] savData, out byte[] screenShotData); + + if (!m_screenTex) m_screenTex = new Texture2D(1, 1); + + m_screenTex.LoadImage(screenShotData); + UI_ScreenShot.texture = m_screenTex; + } + } + + public override void OnHide() + { + base.OnHide(); + + if (m_screenTex) + { + Destroy(m_screenTex); + m_screenTex = null; + } + } + + public override void OnExecute(OptionUI optionUI, ref bool cancelHide) + { + MenuData.OnExcute(optionUI, ref cancelHide); + } + } +} diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs.meta b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs.meta new file mode 100644 index 00000000..405dbc8d --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 688af9c7251c334489191abcae4e0164 \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_ValueEditItem.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_ValueEditItem.cs index 2f76e0d3..9f8ff3b4 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_ValueEditItem.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_ValueEditItem.cs @@ -16,7 +16,7 @@ namespace AxibugEmuOnline.Client IValueEditControl m_currentCom; - protected override void OnSetData(OptionMenu menuData) + protected override void OnSetData(InternalOptionMenu menuData) { com_floatEdit.gameObject.SetActive(false); com_intEdit.gameObject.SetActive(false); diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OverlayUI/OverlayManager.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OverlayUI/OverlayManager.cs index 08f2ad08..73fe0bec 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OverlayUI/OverlayManager.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OverlayUI/OverlayManager.cs @@ -34,7 +34,7 @@ namespace AxibugEmuOnline.Client #endif } - public static void PopSideBar(List menus, int defaultIndex = 0, Action onClose = null) where T : OptionMenu + public static void PopSideBar(List menus, int defaultIndex = 0, Action onClose = null) where T : InternalOptionMenu { s_ins.m_OptionUI.Pop(menus, defaultIndex, onClose); } From 4116a05b6cb333ea3726bc911a71ac3a93ab1cdf Mon Sep 17 00:00:00 2001 From: "ALIENJACK\\alien" Date: Thu, 10 Apr 2025 17:00:36 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E5=AD=98=E6=A1=A3UI=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Resources/UIPrefabs/OptionUI.prefab | 2 +- .../Manager/SaveSlotManager/SaveFile.cs | 17 ++++++---- .../UI/InGameUI/InGameUI_SaveStateMenu.cs | 15 +++++++-- .../UI/OptionUI/OptionUI_SavSlotItem.cs | 1 + .../Assets/Script/AppMain/Utility.cs | 33 +++++++++++++++++++ 5 files changed, 58 insertions(+), 10 deletions(-) diff --git a/AxibugEmuOnline.Client/Assets/Resources/UIPrefabs/OptionUI.prefab b/AxibugEmuOnline.Client/Assets/Resources/UIPrefabs/OptionUI.prefab index 94f5a72d..120a9d77 100644 --- a/AxibugEmuOnline.Client/Assets/Resources/UIPrefabs/OptionUI.prefab +++ b/AxibugEmuOnline.Client/Assets/Resources/UIPrefabs/OptionUI.prefab @@ -1688,7 +1688,7 @@ RectTransform: m_GameObject: {fileID: 5162569472849600096} 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_LocalScale: {x: 1, y: -1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 5970282275929291192} diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs index d722627b..d37745bd 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs @@ -124,16 +124,20 @@ namespace AxibugEmuOnline.Client } m_headerCache = new Header(); - IntPtr ptr = Marshal.AllocHGlobal(headerSize); - Marshal.StructureToPtr(m_headerCache, ptr, false); - Marshal.Copy(raw, 0, ptr, headerSize); - Marshal.FreeHGlobal(ptr); + fixed (Header* headPtr = &m_headerCache) + { + var headP=(byte*)headPtr; + Marshal.Copy(raw, 0, (IntPtr)headP, sizeof(Header)); + } savData = new byte[m_headerCache.DataLength]; Array.Copy(raw, headerSize, savData, 0, savData.Length); screenShotData = new byte[m_headerCache.ScreenShotLength]; Array.Copy(raw, headerSize + savData.Length, screenShotData, 0, screenShotData.Length); + m_savDataCaches = savData; + m_screenShotCaches = screenShotData; + return; } @@ -171,9 +175,10 @@ namespace AxibugEmuOnline.Client Sequecen = sequence; m_headerCache = header; - IsEmpty = false; + m_savDataCaches = savData; + m_screenShotCaches = screenShotData; - m_cacheOutdate = true; + IsEmpty = false; } /// diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs index 1bed10d8..90b81e4c 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs @@ -1,6 +1,7 @@ using AxibugEmuOnline.Client.ClientCore; using System; using System.Collections.Generic; +using UnityEngine; namespace AxibugEmuOnline.Client { @@ -22,7 +23,7 @@ namespace AxibugEmuOnline.Client foreach (var savFile in saveFiles) { if (savFile.AutoSave) continue; - result.Add(new SaveSlotMenu(savFile)); + result.Add(new SaveSlotMenu(m_gameUI, savFile)); } return result; } @@ -33,16 +34,24 @@ namespace AxibugEmuOnline.Client public override Type MenuUITemplateType => typeof(OptionUI_SavSlotItem); public SaveFile SavFile { get; private set; } + private InGameUI m_ingameUI; + public override bool Visible => !SavFile.AutoSave; - public SaveSlotMenu(SaveFile savFile) + public SaveSlotMenu(InGameUI inGameui, SaveFile savFile) { SavFile = savFile; + m_ingameUI = inGameui; } public override void OnExcute(OptionUI optionUI, ref bool cancelHide) { - cancelHide = true;//保存后不关闭 + cancelHide = true; + var stateData = m_ingameUI.Core.GetStateBytes(); + var tex = m_ingameUI.Core.OutputPixel; + var screenData = tex.ToJPG(); + + SavFile.Save(SavFile.Sequecen, stateData, screenData); } public override string Name => SavFile.AutoSave ? "自动存档" : $"存档{SavFile.SlotIndex}"; diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs index 69542533..e589bd2c 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs @@ -62,6 +62,7 @@ namespace AxibugEmuOnline.Client public override void OnExecute(OptionUI optionUI, ref bool cancelHide) { MenuData.OnExcute(optionUI, ref cancelHide); + RefreshUI(); } } } diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Utility.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Utility.cs index 99a76630..1a233978 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Utility.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Utility.cs @@ -54,5 +54,38 @@ namespace AxibugEmuOnline.Client })); } + + public static byte[] ToJPG(this Texture texture) + { + Texture2D outputTex = null; + if (texture is RenderTexture rt) + { + outputTex = ConvertFromRenderTexture(rt); + } + else if (texture is Texture2D) + { + outputTex = texture as Texture2D; + } + + return outputTex.EncodeToJPG(); + } + + private static Texture2D ConvertFromRenderTexture(RenderTexture rt) + { + // 创建临时RenderTexture并拷贝内容 + RenderTexture tempRT = RenderTexture.GetTemporary(rt.width, rt.height, 0, RenderTextureFormat.ARGB32); + Graphics.Blit(rt, tempRT); + + // 读取到Texture2D + Texture2D tex = new Texture2D(rt.width, rt.height, TextureFormat.RGBA32, false); + RenderTexture.active = tempRT; + tex.ReadPixels(new Rect(0, 0, tempRT.width, tempRT.height), 0, 0); + tex.Apply(); + + // 释放资源 + RenderTexture.active = null; + RenderTexture.ReleaseTemporary(tempRT); + return tex; + } } } From f325e63e26a4e983d4458c516d6728e4f0ad3b84 Mon Sep 17 00:00:00 2001 From: Alienjack Date: Sun, 13 Apr 2025 18:16:36 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E5=AD=98=E6=A1=A3=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E7=9A=84=E5=AD=98=E6=A1=A3=E6=97=A5=E6=9C=9F=EF=BC=8C=E6=97=A5?= =?UTF-8?q?=E6=9C=88=E6=95=B0=E5=AD=97=E4=BD=BF=E7=94=A80=E8=A1=A5?= =?UTF-8?q?=E5=85=A8=E5=88=B02=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs index e589bd2c..fac8acca 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs @@ -38,8 +38,8 @@ namespace AxibugEmuOnline.Client else { var savTime = MenuData.SavFile.GetSavTimeUTC().ToLocalTime(); - UI_SavTime.text = $"{savTime.Year}/{savTime.Month}/{savTime.Day}\n{savTime.Hour}:{savTime.Minute}:{savTime.Second}"; - MenuData.SavFile.GetSavData(out byte[] savData, out byte[] screenShotData); + UI_SavTime.text = $"{savTime.Year}/{savTime.Month:00}/{savTime.Day:00}\n{savTime.Hour}:{savTime.Minute}:{savTime.Second}"; + MenuData.SavFile.GetSavData(out byte[] _, out byte[] screenShotData); if (!m_screenTex) m_screenTex = new Texture2D(1, 1); From 3dc7e9acd19eda6ba57f141154337e0aa36c2a04 Mon Sep 17 00:00:00 2001 From: Alienjack Date: Sun, 13 Apr 2025 19:03:43 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=AD=98=E6=A1=A3?= =?UTF-8?q?=E4=BB=A5=E5=8F=8A=E8=AF=BB=E5=8F=96=E5=AD=98=E6=A1=A3=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Manager/SaveSlotManager/SaveFile.cs | 6 +- .../UI/InGameUI/InGameUI_SaveStateMenu.cs | 72 +++++++++++++++---- .../Script/AppMain/UI/OptionUI/OptionUI.cs | 9 ++- .../UI/OptionUI/OptionUI_SavSlotItem.cs | 5 +- .../AppMain/UI/OverlayUI/OverlayManager.cs | 6 ++ 5 files changed, 80 insertions(+), 18 deletions(-) diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs index d37745bd..d0077d9d 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs @@ -38,6 +38,8 @@ namespace AxibugEmuOnline.Client } } + public event Action OnSavSuccessed; + /// 存档顺序号,用于判断云存档和本地存档的同步状态,是否存在冲突 public uint Sequecen { get; private set; } @@ -126,7 +128,7 @@ namespace AxibugEmuOnline.Client m_headerCache = new Header(); fixed (Header* headPtr = &m_headerCache) { - var headP=(byte*)headPtr; + var headP = (byte*)headPtr; Marshal.Copy(raw, 0, (IntPtr)headP, sizeof(Header)); } @@ -179,6 +181,8 @@ namespace AxibugEmuOnline.Client m_screenShotCaches = screenShotData; IsEmpty = false; + + OnSavSuccessed?.Invoke(); } /// diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs index 90b81e4c..b20d5c56 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs @@ -9,7 +9,7 @@ namespace AxibugEmuOnline.Client { private InGameUI m_gameUI; - public override string Name => "保存"; + public override string Name => "存档"; public InGameUI_SaveStateMenu(InGameUI inGameUI) { @@ -22,39 +22,81 @@ namespace AxibugEmuOnline.Client List result = new List(); foreach (var savFile in saveFiles) { - if (savFile.AutoSave) continue; result.Add(new SaveSlotMenu(m_gameUI, savFile)); } return result; } /// 存档侧边选项UI - public class SaveSlotMenu : ExecuteMenu + public class SaveSlotMenu : ExpandMenu { public override Type MenuUITemplateType => typeof(OptionUI_SavSlotItem); public SaveFile SavFile { get; private set; } - private InGameUI m_ingameUI; - - public override bool Visible => !SavFile.AutoSave; + List m_subOptions = new List(); + public override string Name => SavFile.AutoSave ? "自动存档" : $"存档{SavFile.SlotIndex}"; public SaveSlotMenu(InGameUI inGameui, SaveFile savFile) { SavFile = savFile; - m_ingameUI = inGameui; + + //非自动存档,增加保存选项 + if (!savFile.AutoSave) m_subOptions.Add(new SaveMenuItem(inGameui, savFile)); + //添加读取选项 + m_subOptions.Add(new LoadMenuItem(inGameui, savFile)); } - public override void OnExcute(OptionUI optionUI, ref bool cancelHide) + protected override List GetOptionMenus() { - cancelHide = true; - var stateData = m_ingameUI.Core.GetStateBytes(); - var tex = m_ingameUI.Core.OutputPixel; - var screenData = tex.ToJPG(); - - SavFile.Save(SavFile.Sequecen, stateData, screenData); + return m_subOptions; } - public override string Name => SavFile.AutoSave ? "自动存档" : $"存档{SavFile.SlotIndex}"; + public class SaveMenuItem : ExecuteMenu + { + SaveFile m_savFile; + InGameUI m_ingameUI; + public override string Name => "保存"; + + public SaveMenuItem(InGameUI inGameui, SaveFile savFile) + { + m_ingameUI = inGameui; + m_savFile = savFile; + } + + public override void OnExcute(OptionUI optionUI, ref bool cancelHide) + { + var stateData = m_ingameUI.Core.GetStateBytes(); + var tex = m_ingameUI.Core.OutputPixel; + var screenData = tex.ToJPG(); + + m_savFile.Save(m_savFile.Sequecen, stateData, screenData); + } + } + + public class LoadMenuItem : ExecuteMenu + { + SaveFile m_savFile; + InGameUI m_ingameUI; + public override string Name => "读取"; + + public LoadMenuItem(InGameUI inGameui, SaveFile savFile) + { + m_ingameUI = inGameui; + m_savFile = savFile; + } + + public override void OnExcute(OptionUI optionUI, ref bool cancelHide) + { + cancelHide = true; + m_savFile.GetSavData(out byte[] savData, out var _); + if (savData != null) + { + m_ingameUI.Core.LoadStateFromBytes(savData); + } + + OverlayManager.HideSideBar(); + } + } } } } \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI.cs index 6a517274..b52e8316 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI.cs @@ -221,14 +221,21 @@ namespace AxibugEmuOnline.Client } + /// + /// 关闭这个侧边栏选项UI + /// public void Hide() { if (m_bPoped) { + if (m_child != null) + { + m_child.Hide(); + } + Vector2 start = new Vector2(-MenuRoot.rect.width, MenuRoot.anchoredPosition.y); Vector2 end = new Vector2(0, MenuRoot.anchoredPosition.y); - ReleaseRuntimeMenus(); m_runtimeMenuItems.Clear(); diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs index fac8acca..d0fc9d20 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs @@ -17,6 +17,8 @@ namespace AxibugEmuOnline.Client base.OnSetData(menuData); RefreshUI(); + + MenuData.SavFile.OnSavSuccessed += RefreshUI; } private void RefreshUI() @@ -57,12 +59,13 @@ namespace AxibugEmuOnline.Client Destroy(m_screenTex); m_screenTex = null; } + + MenuData.SavFile.OnSavSuccessed -= RefreshUI; } public override void OnExecute(OptionUI optionUI, ref bool cancelHide) { MenuData.OnExcute(optionUI, ref cancelHide); - RefreshUI(); } } } diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OverlayUI/OverlayManager.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OverlayUI/OverlayManager.cs index 73fe0bec..44404edc 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OverlayUI/OverlayManager.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OverlayUI/OverlayManager.cs @@ -39,9 +39,15 @@ namespace AxibugEmuOnline.Client s_ins.m_OptionUI.Pop(menus, defaultIndex, onClose); } + public static void HideSideBar() + { + s_ins.m_OptionUI.Hide(); + } + public static void PopTip(string msg) { s_ins.m_popTipsUI.Pop(msg); } + } } From a21be185ce5629f2a04fceb6262c6406515b306f Mon Sep 17 00:00:00 2001 From: Alienjack Date: Sun, 13 Apr 2025 19:05:36 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E7=A7=BB=E9=99=A4PackageManagerSettings.as?= =?UTF-8?q?set=E6=96=87=E4=BB=B6=E7=9A=84=E7=89=88=E6=9C=AC=E7=AE=A1?= =?UTF-8?q?=E7=90=86,=E5=9B=A0=E4=B8=BA=E5=9B=BD=E9=99=85=E7=89=88?= =?UTF-8?q?=E5=92=8C=E5=9B=BD=E5=86=85=E7=89=88=E5=85=B1=E7=94=A8=E5=AE=9E?= =?UTF-8?q?=E5=9C=A8=E6=98=AF=E5=A4=AA=E6=81=B6=E5=BF=83=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PackageManagerSettings.asset | 37 ------------------- 1 file changed, 37 deletions(-) delete mode 100644 AxibugEmuOnline.Client/ProjectSettings/PackageManagerSettings.asset diff --git a/AxibugEmuOnline.Client/ProjectSettings/PackageManagerSettings.asset b/AxibugEmuOnline.Client/ProjectSettings/PackageManagerSettings.asset deleted file mode 100644 index 626261bf..00000000 --- a/AxibugEmuOnline.Client/ProjectSettings/PackageManagerSettings.asset +++ /dev/null @@ -1,37 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &1 -MonoBehaviour: - m_ObjectHideFlags: 53 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} - m_Name: - m_EditorClassIdentifier: - m_EnablePreReleasePackages: 0 - m_AdvancedSettingsExpanded: 1 - m_ScopedRegistriesSettingsExpanded: 1 - m_SeeAllPackageVersions: 0 - m_DismissPreviewPackagesInUse: 0 - oneTimeWarningShown: 0 - oneTimeDeprecatedPopUpShown: 0 - m_Registries: - - m_Id: main - m_Name: - m_Url: https://packages.unity.com - m_Scopes: [] - m_IsDefault: 1 - m_Capabilities: 7 - m_ConfigSource: 0 - m_UserSelectedRegistryName: - m_UserAddingNewScopedRegistry: 0 - m_RegistryInfoDraft: - m_Modified: 0 - m_ErrorMessage: - m_UserModificationsInstanceId: -882 - m_OriginalInstanceId: -884 - m_LoadAssets: 0 From a079947bc413ed6de7adb3831fac8e1ef7824b0f Mon Sep 17 00:00:00 2001 From: Alienjack Date: Sun, 13 Apr 2025 19:06:29 +0800 Subject: [PATCH 7/7] =?UTF-8?q?gitignore=E6=B7=BB=E5=8A=A0=E5=AF=B9?= =?UTF-8?q?=E4=BA=8EAxibugEmuOnline.Client/ProjectSettings/PackageManagerS?= =?UTF-8?q?ettings.asset=E7=9A=84=E5=BF=BD=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 8e779520..6c9b6528 100644 --- a/.gitignore +++ b/.gitignore @@ -48,4 +48,5 @@ AxibugEmuOnline.GameScreenConvert/bin/ AxibugEmuOnline.GameScreenConvert/obj/ -/.vs/ \ No newline at end of file +/.vs/ +AxibugEmuOnline.Client/ProjectSettings/PackageManagerSettings.asset