From 86157ee5d84147978a765f61f9fdd463c689ef77 Mon Sep 17 00:00:00 2001 From: wsh Date: Thu, 3 Apr 2025 11:41:16 +0900 Subject: [PATCH] 1 --- Assets/Scripts/Assets/Gizmo/RTGController.cs | 2 +- .../Studio/AssetTool/CustomAssetConnector.cs | 6 +-- .../Studio/AssetTool/RenderObjectHandler.cs | 4 +- Assets/Scripts/Studio/Core.meta | 8 +++ .../UnitySingleton.cs} | 51 +++++-------------- .../UnitySingleton.cs.meta} | 0 .../Scripts/Studio/Managers/CommandInvoker.cs | 24 +++++++++ .../Studio/Managers/CommandInvoker.cs.meta | 2 + .../Scripts/Studio/Managers/EventConnector.cs | 7 +-- .../Scripts/Studio/Managers/ProjectManager.cs | 4 +- Assets/Scripts/Studio/Managers/SystemMain.cs | 18 +++++++ .../Studio/Managers/SystemMain.cs.meta | 2 + .../Studio/UI/Panel/Panel_ObjectInfo.cs | 2 +- .../Studio/UI/TreeView/PooledScrollView.cs | 12 ++--- 14 files changed, 86 insertions(+), 56 deletions(-) create mode 100644 Assets/Scripts/Studio/Core.meta rename Assets/Scripts/Studio/{Common/SingletonBase.cs => Core/UnitySingleton.cs} (55%) rename Assets/Scripts/Studio/{Common/SingletonBase.cs.meta => Core/UnitySingleton.cs.meta} (100%) create mode 100644 Assets/Scripts/Studio/Managers/CommandInvoker.cs create mode 100644 Assets/Scripts/Studio/Managers/CommandInvoker.cs.meta create mode 100644 Assets/Scripts/Studio/Managers/SystemMain.cs create mode 100644 Assets/Scripts/Studio/Managers/SystemMain.cs.meta diff --git a/Assets/Scripts/Assets/Gizmo/RTGController.cs b/Assets/Scripts/Assets/Gizmo/RTGController.cs index a1daf683..25e6dab8 100644 --- a/Assets/Scripts/Assets/Gizmo/RTGController.cs +++ b/Assets/Scripts/Assets/Gizmo/RTGController.cs @@ -135,7 +135,7 @@ namespace XED.RuntimeGizmo RTUndoRedo.Get.Undo(); onTransformChanged?.Invoke(transformObjects); }); - CommandManager.I.AddCommand(command); + CommandManager.instance.AddCommand(command); } } } diff --git a/Assets/Scripts/Studio/AssetTool/CustomAssetConnector.cs b/Assets/Scripts/Studio/AssetTool/CustomAssetConnector.cs index 8063be6b..9c4c3c61 100644 --- a/Assets/Scripts/Studio/AssetTool/CustomAssetConnector.cs +++ b/Assets/Scripts/Studio/AssetTool/CustomAssetConnector.cs @@ -88,7 +88,7 @@ namespace XED.Asset siblingIndex.Add(searchAsset.hierarchyItem.GetSiblingIndex()); } var command = new RemoveObjectCommand(removeList, siblingIndex, this); - CommandManager.I.ExecuteCommand(command); + CommandManager.instance.ExecuteCommand(command); } private void OnCopyObject(List objects) @@ -108,7 +108,7 @@ namespace XED.Asset connectedAssets.Add(copyAsset); } var command = new CopyObjectCommand(copySources, copyList, this); - CommandManager.I.ExecuteCommand(command); + CommandManager.instance.ExecuteCommand(command); } // Update is called once per frame @@ -175,7 +175,7 @@ namespace XED.Asset }; connectedAsset.renderObject.onTransformChanged = connectedAsset.assetData.OnTransformDataChanged; var command = new CreateConnectedAssetCommand(connectedAsset, this); - CommandManager.I.ExecuteCommand(command); + CommandManager.instance.ExecuteCommand(command); } public void OnParentChanged(HierarchyItem parentItem, HierarchyItem childItem) { diff --git a/Assets/Scripts/Studio/AssetTool/RenderObjectHandler.cs b/Assets/Scripts/Studio/AssetTool/RenderObjectHandler.cs index 8b824215..879215af 100644 --- a/Assets/Scripts/Studio/AssetTool/RenderObjectHandler.cs +++ b/Assets/Scripts/Studio/AssetTool/RenderObjectHandler.cs @@ -293,7 +293,7 @@ namespace XED.Util ActionCommand command = new ActionCommand( () => Align(objectsToAlign, primary, primaryDir, secondaryDir), () => UndoAlign(objectsToAlign, originalPos)); - CommandManager.I.ExecuteCommand(command); + CommandManager.instance.ExecuteCommand(command); } @@ -401,7 +401,7 @@ namespace XED.Util { fromObject.transform.position -= dir[0]; }); - CommandManager.I.ExecuteCommand(command); + CommandManager.instance.ExecuteCommand(command); } } } diff --git a/Assets/Scripts/Studio/Core.meta b/Assets/Scripts/Studio/Core.meta new file mode 100644 index 00000000..b72675cd --- /dev/null +++ b/Assets/Scripts/Studio/Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eefa95bccca3b324db3ce4c6b1d4ee44 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Studio/Common/SingletonBase.cs b/Assets/Scripts/Studio/Core/UnitySingleton.cs similarity index 55% rename from Assets/Scripts/Studio/Common/SingletonBase.cs rename to Assets/Scripts/Studio/Core/UnitySingleton.cs index 4ea3b9b5..330d2c2d 100644 --- a/Assets/Scripts/Studio/Common/SingletonBase.cs +++ b/Assets/Scripts/Studio/Core/UnitySingleton.cs @@ -5,7 +5,7 @@ namespace XED.Core { public abstract class UnitySingleton : UnityEngine.MonoBehaviour where T : UnitySingleton { - private static T instance; + private static T _instance; private static object _lock = new object(); protected static bool applicationIsQuitting = false; public static bool IsApplicationQuitting @@ -16,7 +16,7 @@ namespace XED.Core } } - public static T I + public static T instance { get { @@ -30,19 +30,19 @@ namespace XED.Core lock (_lock) { - if (instance == null) + if (_instance == null) { - instance = FindFirstObjectByType(typeof(T)) as T; - if (instance == null) + _instance = FindFirstObjectByType(typeof(T)) as T; + if (_instance == null) { GameObject singleton = new GameObject(typeof(T).Name); - instance = singleton.AddComponent(); - instance.Init(); - instance.name = typeof(T).ToString(); - DontDestroyOnLoad(instance.gameObject); + _instance = singleton.AddComponent(); + _instance.Init(); + _instance.name = typeof(T).ToString(); + DontDestroyOnLoad(_instance.gameObject); } } - return instance; + return _instance; } } } @@ -51,12 +51,12 @@ namespace XED.Core { lock (_lock) { - if (instance == null) + if (_instance == null) { - instance = this as T; + _instance = this as T; } - else if (instance != this) + else if (_instance != this) { Debug.LogError(this.name + " Destroy !!!"); Destroy(this.gameObject); @@ -77,29 +77,4 @@ namespace XED.Core #endif } } - - public abstract class ISingleton where T : class, new() - { - static volatile T instance = default(T); - static readonly object padlock = new object(); - protected ISingleton() - { - } - public static T I - { - get - { - lock (padlock) - { - if (instance == null) - { - instance = new T(); - (instance as ISingleton).Init(); - } - return instance; - } - } - } - public virtual void Init() { } - } } \ No newline at end of file diff --git a/Assets/Scripts/Studio/Common/SingletonBase.cs.meta b/Assets/Scripts/Studio/Core/UnitySingleton.cs.meta similarity index 100% rename from Assets/Scripts/Studio/Common/SingletonBase.cs.meta rename to Assets/Scripts/Studio/Core/UnitySingleton.cs.meta diff --git a/Assets/Scripts/Studio/Managers/CommandInvoker.cs b/Assets/Scripts/Studio/Managers/CommandInvoker.cs new file mode 100644 index 00000000..e6a14733 --- /dev/null +++ b/Assets/Scripts/Studio/Managers/CommandInvoker.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; + +namespace XED.Command +{ + public class CommandInvoker + { + public Stack commandStack = new Stack(); + public void Invoke(T command) where T : IReversibleCommand + { + command.Execute(); + commandStack.Push(command); + } + + public void Undo() + { + if (commandStack.Count == 0) + { + return; + } + var command = commandStack.Pop(); + (command as IReversibleCommand) .Undo(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Studio/Managers/CommandInvoker.cs.meta b/Assets/Scripts/Studio/Managers/CommandInvoker.cs.meta new file mode 100644 index 00000000..fea2f952 --- /dev/null +++ b/Assets/Scripts/Studio/Managers/CommandInvoker.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 460b7535dba2a4347a78cc24adcdee96 \ No newline at end of file diff --git a/Assets/Scripts/Studio/Managers/EventConnector.cs b/Assets/Scripts/Studio/Managers/EventConnector.cs index cb05caa8..aa79630f 100644 --- a/Assets/Scripts/Studio/Managers/EventConnector.cs +++ b/Assets/Scripts/Studio/Managers/EventConnector.cs @@ -78,10 +78,11 @@ namespace XED.Manage //Panel_ShortCut canvas_static.panel_shortcuts.onClickOpenAssetWindow += (() => assetWindow.SetActive(!assetWindow.activeSelf)); canvas_static.panel_shortcuts.onClickOpenComponentWindow += (() => componentWindow.SetActive(!componentWindow.activeSelf)); - canvas_static.panel_shortcuts.onClickUndo += CommandManager.I.Undo; - canvas_static.panel_shortcuts.onClickRedo += CommandManager.I.Redo; + canvas_static.panel_shortcuts.onClickUndo += CommandManager.instance.Undo; + canvas_static.panel_shortcuts.onClickRedo += CommandManager.instance.Redo; canvas_static.panel_shortcuts.onclickSave += projectManager.SaveProject; + //Panel Header canvas_static.panel_topbar.onClickSaveProject += projectManager.SaveProject; canvas_static.panel_topbar.onClickLoadProject += projectManager.LoadProject; @@ -131,7 +132,7 @@ namespace XED.Manage void DefaultActionSetting() { - var commandHandler = CommandManager.I.GetInputHandler(); + var commandHandler = CommandManager.instance.GetInputHandler(); userInputManager.SetHandler(GetDefaultInputHandler()); userInputManager.SetHandler(commandHandler); canvas_static.panel_modecontrol.onClickObjectMode += () => statusPanel.SetMode(ModePanel.ProgramMode.ObjectLayout); diff --git a/Assets/Scripts/Studio/Managers/ProjectManager.cs b/Assets/Scripts/Studio/Managers/ProjectManager.cs index eb58ece3..be4f59ba 100644 --- a/Assets/Scripts/Studio/Managers/ProjectManager.cs +++ b/Assets/Scripts/Studio/Managers/ProjectManager.cs @@ -105,7 +105,7 @@ namespace XED.Manage onRestoreHierarchy?.Invoke(parent, child); } } - CommandManager.I.Clear(); + CommandManager.instance.Clear(); } public void NewProject() @@ -115,7 +115,7 @@ namespace XED.Manage curProjectPath = string.Empty; curSceneData = null; connector.connectedAssets.Clear(); - CommandManager.I.Clear(); + CommandManager.instance.Clear(); } } diff --git a/Assets/Scripts/Studio/Managers/SystemMain.cs b/Assets/Scripts/Studio/Managers/SystemMain.cs new file mode 100644 index 00000000..1824d6ac --- /dev/null +++ b/Assets/Scripts/Studio/Managers/SystemMain.cs @@ -0,0 +1,18 @@ +using XED.Command; + +namespace XED.Core +{ + public class SystemMain : UnitySingleton + { + public CommandInvoker commandInvoker + { + get; + private set; + } + + private void Awake() + { + commandInvoker = new CommandInvoker(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Studio/Managers/SystemMain.cs.meta b/Assets/Scripts/Studio/Managers/SystemMain.cs.meta new file mode 100644 index 00000000..dc2ea6c8 --- /dev/null +++ b/Assets/Scripts/Studio/Managers/SystemMain.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 2778cc56cc78c8a46846112e3aad69d2 \ No newline at end of file diff --git a/Assets/Scripts/Studio/UI/Panel/Panel_ObjectInfo.cs b/Assets/Scripts/Studio/UI/Panel/Panel_ObjectInfo.cs index 0153cec7..46e0ded8 100644 --- a/Assets/Scripts/Studio/UI/Panel/Panel_ObjectInfo.cs +++ b/Assets/Scripts/Studio/UI/Panel/Panel_ObjectInfo.cs @@ -189,7 +189,7 @@ namespace XED.UI } onTransformChanged?.Invoke(transformsChanged); }); - CommandManager.I.AddCommand(command); + CommandManager.instance.AddCommand(command); } void ChangeTransformValue(Transform t, InputFieldType type, float v) { diff --git a/Assets/Scripts/Studio/UI/TreeView/PooledScrollView.cs b/Assets/Scripts/Studio/UI/TreeView/PooledScrollView.cs index f4471944..42ddafca 100644 --- a/Assets/Scripts/Studio/UI/TreeView/PooledScrollView.cs +++ b/Assets/Scripts/Studio/UI/TreeView/PooledScrollView.cs @@ -363,7 +363,7 @@ namespace XED.HierarchyTree oldParent.AddChild(selectedItem, oldIndex); ResetData(); }); - CommandManager.I.ExecuteCommand(command); + CommandManager.instance.ExecuteCommand(command); } } else @@ -386,7 +386,7 @@ namespace XED.HierarchyTree oldParent.AddChild(srcItem, oldIndex); ResetData(); }); - CommandManager.I.ExecuteCommand(command); + CommandManager.instance.ExecuteCommand(command); } } public void SetToNextSiblingItem(HierarchyItem srcItem, HierarchyItem destItem) @@ -416,7 +416,7 @@ namespace XED.HierarchyTree oldParent.AddChild(selectedItem, oldIndex); ResetData(); }); - CommandManager.I.ExecuteCommand(command); + CommandManager.instance.ExecuteCommand(command); } } else @@ -439,7 +439,7 @@ namespace XED.HierarchyTree oldParent.AddChild(srcItem, oldIndex); ResetData(); }); - CommandManager.I.ExecuteCommand(command); + CommandManager.instance.ExecuteCommand(command); } } public void SetToPriorSiblingItem(HierarchyItem srcItem, HierarchyItem destItem) @@ -469,7 +469,7 @@ namespace XED.HierarchyTree oldParent.AddChild(selectedItem, oldIndex); ResetData(); }); - CommandManager.I.ExecuteCommand(command); + CommandManager.instance.ExecuteCommand(command); } } else @@ -492,7 +492,7 @@ namespace XED.HierarchyTree oldParent.AddChild(srcItem, oldIndex); ResetData(); }); - CommandManager.I.ExecuteCommand(command); + CommandManager.instance.ExecuteCommand(command); } } public void SearchData(string name)