diff --git a/RPGCore.BackpackEquipment/Runtime/Actions/UseUsableAction.cs b/RPGCore.BackpackEquipment/Runtime/Actions/UseUsableAction.cs index 7b7a8f0..2d319ea 100644 --- a/RPGCore.BackpackEquipment/Runtime/Actions/UseUsableAction.cs +++ b/RPGCore.BackpackEquipment/Runtime/Actions/UseUsableAction.cs @@ -5,7 +5,7 @@ using RPGCore.ObjectModules.ActionObjectModule; namespace RPGCore.BackpackEquipment.Actions { - public class UseUsableAction : BaseActionParallel + public class UseUsableAction : BaseAction { private readonly UsableObject _usable; diff --git a/RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Actions/DropAction.cs b/RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Actions/DropAction.cs index e963f47..7f8d18c 100644 --- a/RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Actions/DropAction.cs +++ b/RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Actions/DropAction.cs @@ -19,12 +19,12 @@ namespace RPGCore.BackpackEquipment.ObjectModules.Content.Actions protected override void OnDoIt() { - var dropEvent = new DropEvent { unit = unit, item = _item }; + var dropEvent = new ActionDropEvent { unit = unit, item = _item }; unit.events.InvokeBefore(dropEvent); Check(!dropEvent.isPrevented, string.Format(ActionWasPreventedMessage, nameof(DropAction))); unit.events.InvokeAfter(dropEvent); - unit.GetComponent().Remove(_item); + unit.GetComponent().Drop(_item); } protected override void OnEndIt() diff --git a/RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Actions/TakeAction.cs b/RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Actions/TakeAction.cs index 908e74f..215ead0 100644 --- a/RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Actions/TakeAction.cs +++ b/RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Actions/TakeAction.cs @@ -19,18 +19,21 @@ namespace RPGCore.BackpackEquipment.ObjectModules.Content.Actions public override void CanDoIt() { - _contentOwner.CanAdd(_item, _index); + Check( + _contentOwner.CanAdd(_item, _index), + "This unit can't take that" + ); } protected override void OnDoIt() { - var takeEvent = new TakeEvent { unit = unit, item = _item }; + var takeEvent = new ActionTakeEvent { unit = unit, item = _item }; unit.events.InvokeBefore(takeEvent); Check(!takeEvent.isPrevented, string.Format(ActionWasPreventedMessage, nameof(TakeAction))); unit.events.InvokeAfter(takeEvent); var content = unit.GetComponent(); - content.Add(_item); + content.Take(_item); content.TransferTo(_contentOwner, _item, _index); } diff --git a/RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/ContentModule.cs b/RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/ContentModule.cs index d4f649e..7362256 100644 --- a/RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/ContentModule.cs +++ b/RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/ContentModule.cs @@ -11,14 +11,26 @@ using UnityEngine; namespace RPGCore.BackpackEquipment.ObjectModules.Content { [Serializable] - [RequireComponent(typeof(BaseObject))] + [ObjectModule( + name: "[Inventory] Content", + description: "Simple content managing attached to any implementation of BaseObject. " + + "By itself allows only: taking, dropping and deciding who manages items. " + + "Attach implementation of "+nameof(IContentOwner)+" to manage content's items." + )] public sealed class ContentModule : ObjectModule { - // TODO: tutaj jakiś domyślny owner? - + // RUNTIME + private GameObject _contentGameObject; private Dictionary _items = new(); - public bool Add(ItemObject item) + private void Awake() + { + _contentGameObject = new GameObject("-- CONTENT --"); + _contentGameObject.transform.SetParent(transform); + _contentGameObject.transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity); + } + + public bool Take(ItemObject item) { if (item.data.Get().carriedBy) return false; if (_items.ContainsKey(item)) return false; @@ -27,26 +39,33 @@ namespace RPGCore.BackpackEquipment.ObjectModules.Content item.data.Get().carriedBy = parent; parent.events.Invoke(new ContentAddEvent{obj = parent, item = item}); item.events.Register(OnItemRemove); + + item.gameObject.SetActive(false); + item.transform.SetParent(_contentGameObject.transform); + item.transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity); return true; } - public bool Remove(ItemObject item) + public bool Drop(ItemObject item) { if (!_items.ContainsKey(item)) return false; _items[item]?.Remove_Internal(item); _items.Remove(item); item.data.Get().carriedBy = null; - parent.events.Invoke(new ContentAddEvent{obj = parent, item = item}); + parent.events.Invoke(new ContentRemoveEvent { obj = parent, item = item }); item.events.Unregister(OnItemRemove); + + item.gameObject.SetActive(true); + item.transform.SetParent(null); return true; } public bool TransferTo(IContentOwner newOwner, ItemObject item, int index = -1) { - if (parent.data.Get().carriedBy != parent) return false; + if (item.data.Get().carriedBy != parent) return false; if (!newOwner.CanAdd(item, index)) return false; @@ -58,9 +77,14 @@ namespace RPGCore.BackpackEquipment.ObjectModules.Content return true; } + public bool TransferFrom(ItemObject item) + { + return _items[item]?.Remove_Internal(item) ?? false; + } + private void OnItemRemove(RemoveEvent removeEvent) { - Remove(removeEvent.obj as ItemObject); + Drop(removeEvent.obj as ItemObject); } } } \ No newline at end of file diff --git a/RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Events/DropEvent.cs b/RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Events/ActionDropEvent.cs similarity index 79% rename from RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Events/DropEvent.cs rename to RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Events/ActionDropEvent.cs index bbca8e6..c30e562 100644 --- a/RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Events/DropEvent.cs +++ b/RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Events/ActionDropEvent.cs @@ -4,7 +4,7 @@ using RPGCore.ObjectModules.EventObjectModule; namespace RPGCore.BackpackEquipment.ObjectModules.Content.Events { - public class DropEvent : BasePreventableEvent + public class ActionDropEvent : BasePreventableEvent { public UnitObject unit; public ItemObject item; diff --git a/RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Events/DropEvent.cs.meta b/RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Events/ActionDropEvent.cs.meta similarity index 100% rename from RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Events/DropEvent.cs.meta rename to RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Events/ActionDropEvent.cs.meta diff --git a/RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Events/TakeEvent.cs b/RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Events/ActionTakeEvent.cs similarity index 79% rename from RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Events/TakeEvent.cs rename to RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Events/ActionTakeEvent.cs index 3da3d35..b4e2880 100644 --- a/RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Events/TakeEvent.cs +++ b/RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Events/ActionTakeEvent.cs @@ -4,7 +4,7 @@ using RPGCore.ObjectModules.EventObjectModule; namespace RPGCore.BackpackEquipment.ObjectModules.Content.Events { - public class TakeEvent : BasePreventableEvent + public class ActionTakeEvent : BasePreventableEvent { public UnitObject unit; public ItemObject item; diff --git a/RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Events/TakeEvent.cs.meta b/RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Events/ActionTakeEvent.cs.meta similarity index 100% rename from RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Events/TakeEvent.cs.meta rename to RPGCore.BackpackEquipment/Runtime/ObjectModules/Content/Events/ActionTakeEvent.cs.meta diff --git a/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitBackpack/UnitBackpackModule.cs b/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitBackpack/UnitBackpackModule.cs index ce0a185..5724f1e 100644 --- a/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitBackpack/UnitBackpackModule.cs +++ b/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitBackpack/UnitBackpackModule.cs @@ -5,14 +5,16 @@ using RPGCore.BackpackEquipment.ObjectModules.UnitBackpack.Events; using RPGCore.BackpackEquipment.Objects; using RPGCore.Core; using RPGCore.Core.Objects; -using RPGCoreCommon.Helpers.PropertyAttributeDrawers; using UnityEngine; namespace RPGCore.BackpackEquipment.ObjectModules.UnitBackpack { - [RequireComponent(typeof(UnitObject))] [RequireComponent(typeof(ContentModule))] [DisallowMultipleComponent] + [ObjectModule( + name: "[Inventory] Backpack", + description: "Requires ContentModule to work. Simple backpack that can be attached to UnitObject." + )] public sealed class UnitBackpackModule : ObjectModule, IContentOwner { // TODO: implementacja stackowania tutaj @@ -53,7 +55,7 @@ namespace RPGCore.BackpackEquipment.ObjectModules.UnitBackpack bool IContentOwner.Add(ItemObject item, int index) { - if (index < 0) index = Array.IndexOf(_items, false); + if (index < 0) index = Array.IndexOf(_items, null); if (index < 0) return false; if (isLimited && index >= itemsLimit) return false; diff --git a/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Actions/EquipAction.cs b/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Actions/EquipAction.cs index f966755..ff709ef 100644 --- a/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Actions/EquipAction.cs +++ b/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Actions/EquipAction.cs @@ -1,3 +1,5 @@ +using RPGCore.BackpackEquipment.ObjectModules.Content; +using RPGCore.BackpackEquipment.ObjectModules.UnitEquipment.Events; using RPGCore.BackpackEquipment.ObjectModules.UnitEquipment.Objects; using RPGCore.ObjectModules.ActionObjectModule; @@ -16,10 +18,22 @@ namespace RPGCore.BackpackEquipment.ObjectModules.UnitEquipment.Actions public override void CanDoIt() { + Check( + unit.GetComponent().CanAdd(_wearable, _index), + "This unit can't equip that" + ); } protected override void OnDoIt() { + var takeEvent = new ActionEquipEvent { unit = unit, wearable = _wearable }; + unit.events.InvokeBefore(takeEvent); + Check(!takeEvent.isPrevented, string.Format(ActionWasPreventedMessage, nameof(EquipAction))); + unit.events.InvokeAfter(takeEvent); + + var content = unit.GetComponent(); + var equipment = unit.GetComponent(); + content.TransferTo(equipment, _wearable, _index); } protected override void OnEndIt() { } diff --git a/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Actions/UnEquipAction.cs b/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Actions/UnEquipAction.cs index 321c0bd..3c10875 100644 --- a/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Actions/UnEquipAction.cs +++ b/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Actions/UnEquipAction.cs @@ -1,27 +1,40 @@ +using RPGCore.BackpackEquipment.ObjectModules.Content; +using RPGCore.BackpackEquipment.ObjectModules.UnitEquipment.Events; +using RPGCore.BackpackEquipment.ObjectModules.UnitEquipment.Objects; using RPGCore.ObjectModules.ActionObjectModule; namespace RPGCore.BackpackEquipment.ObjectModules.UnitEquipment.Actions { public class UnEquipAction : BaseAction { + private readonly WearableObject _wearable; + private readonly int _index; + + public UnEquipAction(WearableObject wearable) + { + _wearable = wearable; + } + public override void CanDoIt() { - throw new System.NotImplementedException(); } protected override void OnDoIt() { - throw new System.NotImplementedException(); + var takeEvent = new ActionUnEquipEvent { unit = unit, wearable = _wearable }; + unit.events.InvokeBefore(takeEvent); + Check(!takeEvent.isPrevented, string.Format(ActionWasPreventedMessage, nameof(UnEquipAction))); + unit.events.InvokeAfter(takeEvent); + + unit.GetComponent().TransferFrom(_wearable); } protected override void OnEndIt() { - throw new System.NotImplementedException(); } protected override void OnCancelIt() { - throw new System.NotImplementedException(); } } } \ No newline at end of file diff --git a/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/ActionEquipEvent.cs b/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/ActionEquipEvent.cs new file mode 100644 index 0000000..fd4b085 --- /dev/null +++ b/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/ActionEquipEvent.cs @@ -0,0 +1,14 @@ +using RPGCore.BackpackEquipment.ObjectModules.UnitEquipment.Objects; +using RPGCore.BackpackEquipment.Objects; +using RPGCore.Core.Objects; +using RPGCore.ObjectModules.EventObjectModule; + +namespace RPGCore.BackpackEquipment.ObjectModules.UnitEquipment.Events +{ + public class ActionEquipEvent : BasePreventableEvent + { + public UnitObject unit; + public WearableObject wearable; + public int index; + } +} \ No newline at end of file diff --git a/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/ActionEquipEvent.cs.meta b/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/ActionEquipEvent.cs.meta new file mode 100644 index 0000000..0ff28aa --- /dev/null +++ b/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/ActionEquipEvent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4de9db105bf64cd98dce43e3ec414e98 +timeCreated: 1780567832 \ No newline at end of file diff --git a/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/ActionUnEquipEvent.cs b/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/ActionUnEquipEvent.cs new file mode 100644 index 0000000..59f7d91 --- /dev/null +++ b/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/ActionUnEquipEvent.cs @@ -0,0 +1,14 @@ +using RPGCore.BackpackEquipment.ObjectModules.UnitEquipment.Objects; +using RPGCore.BackpackEquipment.Objects; +using RPGCore.Core.Objects; +using RPGCore.ObjectModules.EventObjectModule; + +namespace RPGCore.BackpackEquipment.ObjectModules.UnitEquipment.Events +{ + public class ActionUnEquipEvent : BasePreventableEvent + { + public UnitObject unit; + public WearableObject wearable; + public int index; + } +} \ No newline at end of file diff --git a/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/ActionUnEquipEvent.cs.meta b/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/ActionUnEquipEvent.cs.meta new file mode 100644 index 0000000..0e81164 --- /dev/null +++ b/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/ActionUnEquipEvent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 74199cbcfe30426aa9191ea3f9ab0f9c +timeCreated: 1780567872 \ No newline at end of file diff --git a/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/EquipEvent.cs b/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/EquipmentEquipEvent.cs similarity index 85% rename from RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/EquipEvent.cs rename to RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/EquipmentEquipEvent.cs index 4936405..35cbcc2 100644 --- a/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/EquipEvent.cs +++ b/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/EquipmentEquipEvent.cs @@ -5,7 +5,7 @@ using RPGCore.ObjectModules.EventObjectModule; namespace RPGCore.BackpackEquipment.ObjectModules.UnitEquipment.Events { - public class EquipEvent : BaseEvent + public class EquipmentEquipEvent : BaseEvent { public UnitObject unit; public WearableObject wearable; diff --git a/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/EquipEvent.cs.meta b/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/EquipmentEquipEvent.cs.meta similarity index 100% rename from RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/EquipEvent.cs.meta rename to RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/EquipmentEquipEvent.cs.meta diff --git a/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/UnEquipEvent.cs b/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/EquipmentUnEquipEvent.cs similarity index 85% rename from RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/UnEquipEvent.cs rename to RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/EquipmentUnEquipEvent.cs index 7cc399d..cbb31d2 100644 --- a/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/UnEquipEvent.cs +++ b/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/EquipmentUnEquipEvent.cs @@ -5,7 +5,7 @@ using RPGCore.ObjectModules.EventObjectModule; namespace RPGCore.BackpackEquipment.ObjectModules.UnitEquipment.Events { - public class UnEquipEvent : BaseEvent + public class EquipmentUnEquipEvent : BaseEvent { public UnitObject unit; public WearableObject wearable; diff --git a/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/UnEquipEvent.cs.meta b/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/EquipmentUnEquipEvent.cs.meta similarity index 100% rename from RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/UnEquipEvent.cs.meta rename to RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/Events/EquipmentUnEquipEvent.cs.meta diff --git a/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/UnitEquipmentModule.cs b/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/UnitEquipmentModule.cs index f8095b7..26072c5 100644 --- a/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/UnitEquipmentModule.cs +++ b/RPGCore.BackpackEquipment/Runtime/ObjectModules/UnitEquipment/UnitEquipmentModule.cs @@ -11,9 +11,13 @@ using UnityEngine; namespace RPGCore.BackpackEquipment.ObjectModules.UnitEquipment { - [RequireComponent(typeof(UnitObject))] [RequireComponent(typeof(ContentModule))] [DisallowMultipleComponent] + [ObjectModule( + name: "[Inventory] Equipment", + description: "Requires ContentModule to work. Attached to UnitObject. " + + "Allows to define equipment schema which further allows to equip those wearable items." + )] public class UnitEquipmentModule : ObjectModule, IContentOwner { [SerializeField] private EquipmentSchemaSO _schema; @@ -56,7 +60,7 @@ namespace RPGCore.BackpackEquipment.ObjectModules.UnitEquipment { var wearable = (WearableObject)item; - parent.events.Invoke(new EquipEvent { unit = parent, wearable = wearable, index = index }); + parent.events.Invoke(new EquipmentEquipEvent { unit = parent, wearable = wearable, index = index }); _items[index] = wearable; return true; @@ -67,7 +71,7 @@ namespace RPGCore.BackpackEquipment.ObjectModules.UnitEquipment var wearable = (WearableObject)item; var index = Array.IndexOf(_items, wearable); - parent.events.Invoke(new UnEquipEvent { unit = parent, wearable = wearable, index = index }); + parent.events.Invoke(new EquipmentUnEquipEvent { unit = parent, wearable = wearable, index = index }); _items[index] = null; return true; diff --git a/RPGCore.BackpackEquipment/Runtime/RPGCore.BackpackEquipment.asmdef b/RPGCore.BackpackEquipment/Runtime/RPGCore.BackpackEquipment.asmdef index a3ec45b..9662169 100644 --- a/RPGCore.BackpackEquipment/Runtime/RPGCore.BackpackEquipment.asmdef +++ b/RPGCore.BackpackEquipment/Runtime/RPGCore.BackpackEquipment.asmdef @@ -3,7 +3,6 @@ "rootNamespace": "RPGCore.BackpackEquipment", "references": [ "RPGCore", - "RPGCore.StatusEffect", "RPGCoreCommon.Settings", "RPGCoreCommon.Helpers", "RPGCoreCommon.DynamicValues" diff --git a/RPGCore.BackpackEquipment/_integrations.meta b/RPGCore.BackpackEquipment/_integrations.meta new file mode 100644 index 0000000..b361517 --- /dev/null +++ b/RPGCore.BackpackEquipment/_integrations.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 78e047e9e9834fd1ac2cf2546eb2b8c2 +timeCreated: 1780247721 \ No newline at end of file diff --git a/RPGCore.BackpackEquipment/_integrations/Status.meta b/RPGCore.BackpackEquipment/_integrations/Status.meta new file mode 100644 index 0000000..6f7cbe8 --- /dev/null +++ b/RPGCore.BackpackEquipment/_integrations/Status.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6e793636b88348dd8ba6dfef253056cb +timeCreated: 1780247729 \ No newline at end of file diff --git a/RPGCore.BackpackEquipment/_integrations/Status/Editor.meta b/RPGCore.BackpackEquipment/_integrations/Status/Editor.meta new file mode 100644 index 0000000..39318a5 --- /dev/null +++ b/RPGCore.BackpackEquipment/_integrations/Status/Editor.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ea5e3fca9792442d90b5aba2ae37e105 +timeCreated: 1780247773 \ No newline at end of file diff --git a/RPGCore.BackpackEquipment/_integrations/Status/Editor/RPGCore.Inventory2Status.Editor.asmdef b/RPGCore.BackpackEquipment/_integrations/Status/Editor/RPGCore.Inventory2Status.Editor.asmdef new file mode 100644 index 0000000..0e6a124 --- /dev/null +++ b/RPGCore.BackpackEquipment/_integrations/Status/Editor/RPGCore.Inventory2Status.Editor.asmdef @@ -0,0 +1,21 @@ +{ + "name": "RPGCore.BackpackEquipment.StatusEffect.Editor", + "rootNamespace": "RPGCore.BackpackEquipment.StatusEffect.Editor", + "references": [ + "RPGCore", + "RPGCore.Editor", + "RPGCore.BackpackEquipment", + "RPGCore.StatusEffect" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/RPGCore.BackpackEquipment/_integrations/Status/Editor/RPGCore.Inventory2Status.Editor.asmdef.meta b/RPGCore.BackpackEquipment/_integrations/Status/Editor/RPGCore.Inventory2Status.Editor.asmdef.meta new file mode 100644 index 0000000..70e9ee6 --- /dev/null +++ b/RPGCore.BackpackEquipment/_integrations/Status/Editor/RPGCore.Inventory2Status.Editor.asmdef.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 847b1528d6884dccb4e9eca1e9e0002b +timeCreated: 1780247908 \ No newline at end of file diff --git a/RPGCore.BackpackEquipment/_integrations/Status/Runtime.meta b/RPGCore.BackpackEquipment/_integrations/Status/Runtime.meta new file mode 100644 index 0000000..ea8a334 --- /dev/null +++ b/RPGCore.BackpackEquipment/_integrations/Status/Runtime.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 65d922d179214a61905337e8b7815eae +timeCreated: 1780247793 \ No newline at end of file diff --git a/RPGCore.BackpackEquipment/_integrations/Status/Runtime/ObjectModules.meta b/RPGCore.BackpackEquipment/_integrations/Status/Runtime/ObjectModules.meta new file mode 100644 index 0000000..c290519 --- /dev/null +++ b/RPGCore.BackpackEquipment/_integrations/Status/Runtime/ObjectModules.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 658a042ae2aa46a0b66ba1bf4ac209e7 +timeCreated: 1780344247 \ No newline at end of file diff --git a/RPGCore.BackpackEquipment/_integrations/Status/Runtime/ObjectModules/UsableEffectsModule.cs b/RPGCore.BackpackEquipment/_integrations/Status/Runtime/ObjectModules/UsableEffectsModule.cs new file mode 100644 index 0000000..b04c67a --- /dev/null +++ b/RPGCore.BackpackEquipment/_integrations/Status/Runtime/ObjectModules/UsableEffectsModule.cs @@ -0,0 +1,26 @@ +using RPGCore.BackpackEquipment.Events; +using RPGCore.BackpackEquipment.Objects; +using RPGCore.Core; +using RPGCore.StatusEffect.ObjectModules.StatusObjectModule; +using UnityEngine; + +namespace RPGCore.Inventory2Status.ObjectModules +{ + [ObjectModule( + name: "[Integration] Usable with effects", + description: "UsableObjects with definable effects." + )] + public class UsableEffectsModule : ObjectModule + { + [SerializeField] private BaseEffect[] effectsOnUse; + + private void Awake() + { + parent.events.RegisterAfter(OnUseUsable); + } + + private void OnUseUsable(UseUsableEvent ev) + { + } + } +} \ No newline at end of file diff --git a/RPGCore.BackpackEquipment/_integrations/Status/Runtime/ObjectModules/UsableEffectsModule.cs.meta b/RPGCore.BackpackEquipment/_integrations/Status/Runtime/ObjectModules/UsableEffectsModule.cs.meta new file mode 100644 index 0000000..cc7de2a --- /dev/null +++ b/RPGCore.BackpackEquipment/_integrations/Status/Runtime/ObjectModules/UsableEffectsModule.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 68266e6bff4e407ab40c97af05f6da37 +timeCreated: 1782059030 \ No newline at end of file diff --git a/RPGCore.BackpackEquipment/_integrations/Status/Runtime/ObjectModules/WearableEffectsModule.cs b/RPGCore.BackpackEquipment/_integrations/Status/Runtime/ObjectModules/WearableEffectsModule.cs new file mode 100644 index 0000000..540f870 --- /dev/null +++ b/RPGCore.BackpackEquipment/_integrations/Status/Runtime/ObjectModules/WearableEffectsModule.cs @@ -0,0 +1,31 @@ +using RPGCore.BackpackEquipment.ObjectModules.UnitEquipment.Events; +using RPGCore.BackpackEquipment.ObjectModules.UnitEquipment.Objects; +using RPGCore.Core; +using RPGCore.StatusEffect.ObjectModules.StatusObjectModule; +using UnityEngine; + +namespace RPGCore.Inventory2Status.ObjectModules +{ + [ObjectModule( + name: "[Integration] Wearable with effects", + description: "WearableObjects with definable effects." + )] + public class WearableEffectsModule : ObjectModule + { + [SerializeField] private BaseEffect[] effectsOnEquip; + + private void Awake() + { + parent.events.Register(OnEquip); + parent.events.Register(OnUnEquip); + } + + private void OnEquip(EquipmentEquipEvent ev) + { + } + + private void OnUnEquip(EquipmentUnEquipEvent ev) + { + } + } +} \ No newline at end of file diff --git a/RPGCore.BackpackEquipment/_integrations/Status/Runtime/ObjectModules/WearableEffectsModule.cs.meta b/RPGCore.BackpackEquipment/_integrations/Status/Runtime/ObjectModules/WearableEffectsModule.cs.meta new file mode 100644 index 0000000..1e8da64 --- /dev/null +++ b/RPGCore.BackpackEquipment/_integrations/Status/Runtime/ObjectModules/WearableEffectsModule.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 054fa1f205b04842a24d93c6316fe929 +timeCreated: 1782061679 \ No newline at end of file diff --git a/RPGCore.BackpackEquipment/_integrations/Status/Runtime/RPGCore.Inventory2Status.asmdef b/RPGCore.BackpackEquipment/_integrations/Status/Runtime/RPGCore.Inventory2Status.asmdef new file mode 100644 index 0000000..2dab7ac --- /dev/null +++ b/RPGCore.BackpackEquipment/_integrations/Status/Runtime/RPGCore.Inventory2Status.asmdef @@ -0,0 +1,18 @@ +{ + "name": "RPGCore.BackpackEquipment.StatusEffect", + "rootNamespace": "RPGCore.BackpackEquipment.StatusEffect", + "references": [ + "RPGCore", + "RPGCore.BackpackEquipment", + "RPGCore.StatusEffect" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/RPGCore.BackpackEquipment/_integrations/Status/Runtime/RPGCore.Inventory2Status.asmdef.meta b/RPGCore.BackpackEquipment/_integrations/Status/Runtime/RPGCore.Inventory2Status.asmdef.meta new file mode 100644 index 0000000..2c421a1 --- /dev/null +++ b/RPGCore.BackpackEquipment/_integrations/Status/Runtime/RPGCore.Inventory2Status.asmdef.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6b01bf7f791f41d59d0a1dc1e6f164b4 +timeCreated: 1780247930 \ No newline at end of file diff --git a/RPGCore.Movement/Runtime/ObjectModules/UnitAnimator/UnitAnimatorModule.cs b/RPGCore.Movement/Runtime/ObjectModules/UnitAnimator/UnitAnimatorModule.cs index a49c7fc..4e1b69b 100644 --- a/RPGCore.Movement/Runtime/ObjectModules/UnitAnimator/UnitAnimatorModule.cs +++ b/RPGCore.Movement/Runtime/ObjectModules/UnitAnimator/UnitAnimatorModule.cs @@ -10,8 +10,11 @@ using UnityEngine; namespace RPGCore.Movement.ObjectModules.UnitAnimator { [Serializable] - [RequireComponent(typeof(UnitObject))] [RequireComponent(typeof(UnitMovementModule))] + [ObjectModule( + name: "[Movement] Animator", + description: "Attached to UnitObject and requires UnitMovementModule. Updates animator data." + )] public class UnitAnimatorModule : ObjectModule { // CONSTANT (defined in animator) diff --git a/RPGCore.Movement/Runtime/ObjectModules/UnitMovement/Actions/DirectionMoveAction.cs b/RPGCore.Movement/Runtime/ObjectModules/UnitMovement/Actions/DirectionMoveAction.cs index 0899ff0..883b5d0 100644 --- a/RPGCore.Movement/Runtime/ObjectModules/UnitMovement/Actions/DirectionMoveAction.cs +++ b/RPGCore.Movement/Runtime/ObjectModules/UnitMovement/Actions/DirectionMoveAction.cs @@ -9,7 +9,7 @@ using UnityEngine; namespace RPGCore.Movement.ObjectModules.UnitMovement.Actions { - public class DirectionMoveAction : BaseActionParallel + public class DirectionMoveAction : BaseAction { private readonly Func _directionGetter; diff --git a/RPGCore.Movement/Runtime/ObjectModules/UnitMovement/Actions/JumpAction.cs b/RPGCore.Movement/Runtime/ObjectModules/UnitMovement/Actions/JumpAction.cs index 69f4e76..c057337 100644 --- a/RPGCore.Movement/Runtime/ObjectModules/UnitMovement/Actions/JumpAction.cs +++ b/RPGCore.Movement/Runtime/ObjectModules/UnitMovement/Actions/JumpAction.cs @@ -6,7 +6,7 @@ using RPGCoreCommon.Helpers; namespace RPGCore.Movement.ObjectModules.UnitMovement.Actions { - public class JumpAction : BaseActionParallel + public class JumpAction : BaseAction { public override void CanDoIt() { diff --git a/RPGCore.Movement/Runtime/ObjectModules/UnitMovement/Actions/PointMoveAction.cs b/RPGCore.Movement/Runtime/ObjectModules/UnitMovement/Actions/PointMoveAction.cs index cfc9a65..4d3a6aa 100644 --- a/RPGCore.Movement/Runtime/ObjectModules/UnitMovement/Actions/PointMoveAction.cs +++ b/RPGCore.Movement/Runtime/ObjectModules/UnitMovement/Actions/PointMoveAction.cs @@ -8,7 +8,7 @@ using UnityEngine.AI; namespace RPGCore.Movement.ObjectModules.UnitMovement.Actions { - public class PointMoveAction : BaseActionParallel + public class PointMoveAction : BaseAction { private readonly Vector3 _destination; diff --git a/RPGCore.Movement/Runtime/ObjectModules/UnitMovement/Actions/RotateAction.cs b/RPGCore.Movement/Runtime/ObjectModules/UnitMovement/Actions/RotateAction.cs index 74b96ad..14fbbe9 100644 --- a/RPGCore.Movement/Runtime/ObjectModules/UnitMovement/Actions/RotateAction.cs +++ b/RPGCore.Movement/Runtime/ObjectModules/UnitMovement/Actions/RotateAction.cs @@ -5,7 +5,7 @@ using UnityEngine; namespace RPGCore.Movement.ObjectModules.UnitMovement.Actions { - public class RotateAction : BaseActionParallel + public class RotateAction : BaseAction { private Coroutine _rotateCoroutine; diff --git a/RPGCore.Movement/Runtime/ObjectModules/UnitMovement/UnitMovementModule.cs b/RPGCore.Movement/Runtime/ObjectModules/UnitMovement/UnitMovementModule.cs index e168ea9..4c128e9 100644 --- a/RPGCore.Movement/Runtime/ObjectModules/UnitMovement/UnitMovementModule.cs +++ b/RPGCore.Movement/Runtime/ObjectModules/UnitMovement/UnitMovementModule.cs @@ -11,8 +11,11 @@ using UnityEngine.AI; namespace RPGCore.Movement.ObjectModules.UnitMovement { [Serializable] - [RequireComponent(typeof(UnitObject))] [RequireComponent(typeof(CapsuleCollider))] + [ObjectModule( + name: "[Movement] Action Movement", + description: "Attached to UnitObject. Simple movement module that allows movement in given direction. Made with action type movement in mind." + )] public class UnitMovementModule : ObjectModule { // SERIALIZED diff --git a/RPGCore.Movement/Runtime/SceneModules/ActionController/ActionControllerModule.cs b/RPGCore.Movement/Runtime/SceneModules/ActionController/ActionControllerModule.cs index ad0f852..ebe107a 100644 --- a/RPGCore.Movement/Runtime/SceneModules/ActionController/ActionControllerModule.cs +++ b/RPGCore.Movement/Runtime/SceneModules/ActionController/ActionControllerModule.cs @@ -21,7 +21,7 @@ namespace RPGCore.Movement.SceneModules.ActionController [SerializeField] private InputActionReference _jumpInput; private Camera _camera; - private BaseActionParallel _moveAction; + private BaseAction _moveAction; private void Awake() { diff --git a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Effect.cs b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/BaseEffect.cs similarity index 95% rename from RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Effect.cs rename to RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/BaseEffect.cs index d895f75..5ec49ff 100644 --- a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Effect.cs +++ b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/BaseEffect.cs @@ -7,7 +7,7 @@ namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule /// Extend this to make custom effect that can be used by . /// [Serializable] - public class Effect + public abstract class BaseEffect { public BaseObject obj { get; internal set; } public Status status { get; internal set; } diff --git a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Effect.cs.meta b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/BaseEffect.cs.meta similarity index 100% rename from RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Effect.cs.meta rename to RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/BaseEffect.cs.meta diff --git a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Effects/NotControllableEffect.cs b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Effects/NotControllableEffect.cs index ec84b85..be15661 100644 --- a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Effects/NotControllableEffect.cs +++ b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Effects/NotControllableEffect.cs @@ -1,6 +1,6 @@ namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule.Effects { - public class NotControllableEffect : Effect + public class NotControllableEffect : BaseEffect { } } \ No newline at end of file diff --git a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Events/StatusEndEvent.cs b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Events/StatusEndEvent.cs index bab57cf..1753854 100644 --- a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Events/StatusEndEvent.cs +++ b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Events/StatusEndEvent.cs @@ -4,7 +4,7 @@ using RPGCore.ObjectModules.EventObjectModule; namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule.Events { /// - /// Executed when ends normally - by timer or by . + /// Executed when ends normally - by timer or by . /// public class StatusEndEvent : BaseEvent { diff --git a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Events/StatusRemoveEvent.cs b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Events/StatusRemoveEvent.cs index 690b221..1d82d36 100644 --- a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Events/StatusRemoveEvent.cs +++ b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Events/StatusRemoveEvent.cs @@ -4,7 +4,7 @@ using RPGCore.ObjectModules.EventObjectModule; namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule.Events { /// - /// Executed when ends forcefully - by something else than timer or . + /// Executed when ends forcefully - by something else than timer or . /// public class StatusRemoveEvent : BaseEvent { diff --git a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Status.cs b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Status.cs index c5c0754..44fed4f 100644 --- a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Status.cs +++ b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/Status.cs @@ -11,7 +11,7 @@ namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule public StatusModule statusModule { get; private set; } public float timeRemaining { get; private set; } - public List effects { get; private set; } + public List effects { get; private set; } internal Status(StatusDefinitionSO definition, StatusModule statusModule) { @@ -21,7 +21,7 @@ namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule timeRemaining = definition.time; effects = definition.effects.Select(e => { - var copy = JsonUtility.FromJson(JsonUtility.ToJson(e)); + var copy = JsonUtility.FromJson(JsonUtility.ToJson(e)); copy.obj = statusModule.parent; copy.status = this; return copy; diff --git a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/StatusDefinitionSO.cs b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/StatusDefinitionSO.cs index 3dcf885..1a078fb 100644 --- a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/StatusDefinitionSO.cs +++ b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/StatusDefinitionSO.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using RPGCore.Core.Objects; -using RPGCore.StatusEffect.ObjectModules.StatusObjectModule.Effects; using RPGCoreCommon.DynamicValues; using RPGCoreCommon.Helpers.CustomTypes; using UnityEngine; @@ -26,7 +25,7 @@ namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule [Min(0)] public float time; [Header("Effects")] - [SerializeReference] public List effects = new(); + [SerializeReference] public List effects = new(); private void OnValidate() { diff --git a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/StatusModule.cs b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/StatusModule.cs index 9bc1017..2d3accd 100644 --- a/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/StatusModule.cs +++ b/RPGCore.StatusEffect/Runtime/ObjectModules/StatusObjectModule/StatusModule.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Linq; using RPGCore.Core; using RPGCore.Core.Objects; -using RPGCore.ObjectModules.EventObjectModule; using RPGCore.StatusEffect.ObjectModules.StatusObjectModule.Effects; using RPGCore.StatusEffect.ObjectModules.StatusObjectModule.Events; using UnityEngine; @@ -11,7 +10,12 @@ using UnityEngine; namespace RPGCore.StatusEffect.ObjectModules.StatusObjectModule { [Serializable] - [RequireComponent(typeof(BaseObject))] + [ObjectModule( + name: "[Status] Status", + description: "Attached to any implementation of BaseObject. Manages statuses and their effects. " + + "Create scriptable object "+nameof(StatusDefinitionSO)+" to make new status. " + + "For new effect create new implementation of "+nameof(BaseEffect)+"." + )] public class StatusModule : ObjectModule { internal List statuses { get; private set; } = new(); diff --git a/RPGCore/Editor/CoreManager.meta b/RPGCore/Editor/CoreManager.meta new file mode 100644 index 0000000..040b50d --- /dev/null +++ b/RPGCore/Editor/CoreManager.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3bc3378d3d4847e3b8a522fce249109b +timeCreated: 1780745996 \ No newline at end of file diff --git a/RPGCore/Editor/CoreManager/DashboardWindow.cs b/RPGCore/Editor/CoreManager/DashboardWindow.cs new file mode 100644 index 0000000..5c36304 --- /dev/null +++ b/RPGCore/Editor/CoreManager/DashboardWindow.cs @@ -0,0 +1,364 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using RPGCore.Core; +using RPGCore.Core.Objects; +using RPGCoreCommon.Helpers; +using RPGCoreCommon.Helpers.CustomTypes; +using UnityEditor; +using UnityEditor.SceneManagement; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; + +namespace RPGCore.Editor.CoreManager +{ + internal class DashboardWindow : EditorWindow + { + [SerializeField] private VisualTreeAsset _visualTreeAsset; + + // CONST + private const string IsFirstTimeOpenKey = "TheVVaS.RPGCore.isFirstTimeOpen"; + private const string PipeStart = "├─"; + private const string PipeGo = "│\u2007\u2007"; + private const string PipeEnd = "└─"; + private const string PipeNone = "\u2007\u2007\u2007"; + + // CACHE - check CreateCache() + private static Type[] _moduleTypes; + private static Type[] _objectTypes; + private static Dictionary> _objectTypesMap; + private static Dictionary _moduleMonoScripts; + + // TAB - VERIFY + private Button _verifyCheckButton; + private Button _verifyFixButton; + private Button _verifyClearButton; + private MultiColumnListView _verifyListMultiColumnListView; + private List _validations; + + // TAB - MODULES + private ToolbarSearchField _modulesFilterSearchFiled; + private ScrollView _modulesListScrollView; + + // TAB - CONFIG + private PropertyField _configVerifyPathsProperty; + + [InitializeOnLoadMethod] + private static void OnEditorLoad() + { + var isFirstTimeOpen = EditorPrefs.GetBool(IsFirstTimeOpenKey, true); + + if (!isFirstTimeOpen) return; + + ShowDashboard(); + EditorPrefs.SetBool(IsFirstTimeOpenKey, false); + } + + [MenuItem("TheVVaS/RPGCore/Dashboard", priority = -1)] + public static void ShowDashboard() + { + var window = GetWindow(); + window.titleContent = new GUIContent("RPGCore Dashboard"); + window.Show(); + } + + private void CreateGUI() + { + CreateCache(); + UpdateConfigModules(); + + _visualTreeAsset.CloneTree(rootVisualElement); + _verifyCheckButton = rootVisualElement.Q