From d5f6295e5990a9ecdd235a8eb0c394967f84fcce Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Sat, 19 Oct 2024 00:05:07 +0800 Subject: [PATCH] Update Editors --- src/Buildin/DragonEcsRootUnity.cs | 63 --------- src/Buildin/EcsRootUnity.cs | 124 +++++++++++++++++ ...RootUnity.cs.meta => EcsRootUnity.cs.meta} | 0 src/Buildin/Editor.meta | 8 ++ src/Buildin/Editor/EcsRootUnityEditor.cs | 128 ++++++++++++++++++ src/Buildin/Editor/EcsRootUnityEditor.cs.meta | 11 ++ src/Buildin/UnityComponent.cs | 18 +++ src/Connectors/AutoEntityCreator.cs | 6 +- src/Connectors/EcsEntityConnect.cs | 7 +- .../Editor/EcsEntityConnectEditor.cs | 29 ++-- src/Internal/Editor/EcsGUI.cs | 5 + src/Internal/Icons/Icons.cs | 3 + src/Internal/Icons/Icons.cs.meta | 1 + src/Internal/Icons/RepaireIcon.png | Bin 0 -> 2400 bytes src/Internal/Icons/RepaireIcon.png.meta | 122 +++++++++++++++++ src/Internal/Icons/Resources/Icons.asset | 1 + .../Editor/PipelineTemplateEditorBase.cs | 3 + .../MonoBehaviourSystemWrapper.cs | 6 +- .../ScriptableObjectSystemWrapper.cs | 6 +- .../Templates/MonoPipelineTemplate.cs | 10 +- .../Templates/ScriptablePipelineTemplate.cs | 10 +- 21 files changed, 470 insertions(+), 91 deletions(-) delete mode 100644 src/Buildin/DragonEcsRootUnity.cs create mode 100644 src/Buildin/EcsRootUnity.cs rename src/Buildin/{DragonEcsRootUnity.cs.meta => EcsRootUnity.cs.meta} (100%) create mode 100644 src/Buildin/Editor.meta create mode 100644 src/Buildin/Editor/EcsRootUnityEditor.cs create mode 100644 src/Buildin/Editor/EcsRootUnityEditor.cs.meta create mode 100644 src/Internal/Icons/RepaireIcon.png create mode 100644 src/Internal/Icons/RepaireIcon.png.meta diff --git a/src/Buildin/DragonEcsRootUnity.cs b/src/Buildin/DragonEcsRootUnity.cs deleted file mode 100644 index f276073..0000000 --- a/src/Buildin/DragonEcsRootUnity.cs +++ /dev/null @@ -1,63 +0,0 @@ -using UnityEngine; - -namespace DCFApixels.DragonECS -{ - public class DragonEcsRootUnity : MonoBehaviour - { - [SerializeReference] - [ReferenceButton(false, typeof(IEcsModule))] - //[ArrayElement] - private IEcsModule _module = new MonoBehaviourSystemWrapper(); - [SerializeField] - private AddParams _parameters; - - private EcsPipeline _pipeline; - - public IEcsModule Module - { - get { return _module; } - } - public AddParams AddParams - { - get { return _parameters; } - } - public EcsPipeline Pipeline - { - get { return _pipeline; } - } - public bool IsInit - { - get { return _pipeline != null && _pipeline.IsInit; } - } - - private void Start() - { - _pipeline = EcsPipeline.New().AddModule(_module, _parameters).BuildAndInit(); - } - - private void Update() - { - _pipeline.Run(); - } - - private void LateUpdate() - { - _pipeline.LateRun(); - } - - private void FixedUpdate() - { - _pipeline.FixedRun(); - } - - private void OnDrawGizmos() - { - _pipeline?.DrawGizmos(); - } - - private void OnDestroy() - { - _pipeline.Destroy(); - } - } -} diff --git a/src/Buildin/EcsRootUnity.cs b/src/Buildin/EcsRootUnity.cs new file mode 100644 index 0000000..a7c23c1 --- /dev/null +++ b/src/Buildin/EcsRootUnity.cs @@ -0,0 +1,124 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEngine; + +namespace DCFApixels.DragonECS +{ + [DisallowMultipleComponent] + [AddComponentMenu(EcsConsts.FRAMEWORK_NAME + "/" + nameof(EcsRootUnity), 30)] + public class EcsRootUnity : MonoBehaviour + { + [SerializeField] + private ScriptablePipelineTemplateBase[] _scriptableTemplates; + [SerializeField] + private MonoPipelineTemplateBase[] _monoTemplates; + + private EcsPipeline _pipeline; + + public IEnumerable ScriptableTemplates + { + get { return _scriptableTemplates; } + } + public IEnumerable MonoTemplates + { + get { return _monoTemplates; } + } + public EcsPipeline Pipeline + { + get { return _pipeline; } + } + public bool IsInit + { + get { return _pipeline != null && _pipeline.IsInit; } + } + + private void Start() + { + var pipelineBuilder = EcsPipeline.New(); + foreach (var template in _scriptableTemplates) + { + if (template == null) { continue; } + pipelineBuilder.Add(template); + } + foreach (var template in _monoTemplates) + { + if (template == null) { continue; } + pipelineBuilder.Add(template); + } + _pipeline = pipelineBuilder.BuildAndInit(); + } + + private void Update() + { + _pipeline.Run(); + } + + private void LateUpdate() + { + _pipeline.LateRun(); + } + + private void FixedUpdate() + { + _pipeline.FixedRun(); + } + + private void OnDrawGizmos() + { + _pipeline?.DrawGizmos(); + } + + private void OnDestroy() + { + _pipeline.Destroy(); + } + + #region Editor +#if UNITY_EDITOR + [ContextMenu("Autoset")] + internal void Autoset_Editor() + { + Autoset(this); + } + [ContextMenu("Validate")] + internal void Validate_Editor() + { + _scriptableTemplates = _scriptableTemplates.Where(o => o != null).ToArray(); + _monoTemplates = _monoTemplates.Where(o => o != null).ToArray(); + EditorUtility.SetDirty(this); + } + + private static void Autoset(EcsRootUnity target) + { + IEnumerable result; + if (target.MonoTemplates != null && target.MonoTemplates.Count() > 0) + { + result = target.MonoTemplates.Where(o => o != null).Union(GetTemplatesFor(target.transform)); + } + else + { + result = GetTemplatesFor(target.transform); + } + + target._monoTemplates = result.ToArray(); + EditorUtility.SetDirty(target); + } + private static IEnumerable GetTemplatesFor(Transform parent) + { + IEnumerable result = parent.GetComponents(); + for (int i = 0; i < parent.childCount; i++) + { + var child = parent.GetChild(i); + if (child.TryGetComponent(out _)) + { + return Enumerable.Empty(); + } + result = result.Concat(GetTemplatesFor(child)); + } + return result; + } +#endif + #endregion + } +} diff --git a/src/Buildin/DragonEcsRootUnity.cs.meta b/src/Buildin/EcsRootUnity.cs.meta similarity index 100% rename from src/Buildin/DragonEcsRootUnity.cs.meta rename to src/Buildin/EcsRootUnity.cs.meta diff --git a/src/Buildin/Editor.meta b/src/Buildin/Editor.meta new file mode 100644 index 0000000..bc355b5 --- /dev/null +++ b/src/Buildin/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a05eab751afe96d408cfe00ba94603f1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/Buildin/Editor/EcsRootUnityEditor.cs b/src/Buildin/Editor/EcsRootUnityEditor.cs new file mode 100644 index 0000000..d7e7a55 --- /dev/null +++ b/src/Buildin/Editor/EcsRootUnityEditor.cs @@ -0,0 +1,128 @@ +#if UNITY_EDITOR +using DCFApixels.DragonECS.Unity.Internal; +using UnityEditor; +using UnityEngine; + +namespace DCFApixels.DragonECS.Unity.Editors +{ + [CustomEditor(typeof(EcsRootUnity))] + internal class EcsRootUnityEditor : ExtendedEditor + { + protected override void DrawCustom() + { + DrawStatus(); + DrawTemplates(); + DrawControlButtons(); + } + + + private enum Status + { + Undefined, + NotInitialized, + Disable, + Run, + } + private Status GetStatus(EcsRootUnity target) + { + Status status; + if (target.IsInit) + { + status = Target.enabled ? Status.Run : Status.Disable; + } + else + { + status = Status.NotInitialized; + } + return status; + } + private void DrawStatus() + { + Status status = GetStatus(Target); + + if (IsMultipleTargets) + { + foreach (var target in Targets) + { + if (status != GetStatus(target)) + { + status = Status.Undefined; + break; + } + } + } + + Color color = default; + string text = default; + + switch (status) + { + case Status.Undefined: + color = Color.gray; + text = "-"; + break; + case Status.NotInitialized: + color = Color.red; + text = "Not Initialized"; + break; + case Status.Disable: + color = Color.yellow; + text = "Disable"; + break; + case Status.Run: + color = Color.green; + text = "Run"; + break; + } + + Rect rect = GUILayoutUtility.GetRect(EditorGUIUtility.currentViewWidth, EditorGUIUtility.singleLineHeight); + + EditorGUI.DrawRect(rect, color.SetAlpha(0.2f)); + GUI.Label(rect, text); + } + + private void DrawTemplates() + { + using (EcsGUI.CheckChanged()) + { + var iterator = serializedObject.GetIterator(); + iterator.NextVisible(true); + while (iterator.NextVisible(false)) + { + EditorGUILayout.PropertyField(iterator, true); + } + + if (EcsGUI.Changed) + { + serializedObject.ApplyModifiedProperties(); + } + } + } + + + private void DrawControlButtons() + { + float height = EcsGUI.EntityBarHeight; + Rect rect = GUILayoutUtility.GetRect(EditorGUIUtility.currentViewWidth, height); + EditorGUI.DrawRect(rect, new Color(0f, 0f, 0f, 0.1f)); + rect = rect.AddPadding(2f, 0f); + var (_, buttonRect) = rect.HorizontalSliceRight(height); + if (EcsGUI.ValidateButton(buttonRect)) + { + foreach (var target in Targets) + { + target.Validate_Editor(); + } + } + buttonRect = RectUtility.Move(buttonRect, -height, 0); + if (EcsGUI.AutosetButton(buttonRect)) + { + foreach (var target in Targets) + { + target.Autoset_Editor(); + } + } + } + } +} +#endif \ No newline at end of file diff --git a/src/Buildin/Editor/EcsRootUnityEditor.cs.meta b/src/Buildin/Editor/EcsRootUnityEditor.cs.meta new file mode 100644 index 0000000..32aab28 --- /dev/null +++ b/src/Buildin/Editor/EcsRootUnityEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8e88d839647795145973d4327272c6e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/Buildin/UnityComponent.cs b/src/Buildin/UnityComponent.cs index a6b97bc..b8f80c8 100644 --- a/src/Buildin/UnityComponent.cs +++ b/src/Buildin/UnityComponent.cs @@ -50,6 +50,7 @@ namespace DCFApixels.DragonECS [MetaID("13DAACF9910155DD27F822442987E0AE")] [MetaColor(MetaColor.DragonCyan)] [MetaGroup(EcsUnityConsts.PACK_GROUP, OTHER_GROUP)] + [MetaDescription(AUTHOR, "Template for UnityComponent")] public abstract class UnityComponentTemplate : ComponentTemplateBase> where T : Component { public override string Name @@ -81,24 +82,28 @@ namespace DCFApixels.DragonECS [MetaID("843B8EF991013F1BFD9133437E1AFE9C")] [MetaColor(MetaColor.DragonCyan)] [MetaGroup(EcsUnityConsts.PACK_GROUP, TEMPLATES_GROUP)] + [MetaDescription(AUTHOR, "...")] public sealed class UnityComponentTransformTemplate : UnityComponentTemplate { } [Serializable] [MetaTags(MetaTags.HIDDEN)] [MetaID("9A4B8EF99101396C44BF789C3215E9A9")] [MetaColor(MetaColor.DragonCyan)] [MetaGroup(EcsUnityConsts.PACK_GROUP, TEMPLATES_GROUP)] + [MetaDescription(AUTHOR, "...")] public sealed class UnityComponentRigitBodyInitializer : UnityComponentTemplate { } [Serializable] [MetaTags(MetaTags.HIDDEN)] [MetaID("52598EF991016655335F234F20F44526")] [MetaColor(MetaColor.DragonCyan)] [MetaGroup(EcsUnityConsts.PACK_GROUP, TEMPLATES_GROUP)] + [MetaDescription(AUTHOR, "...")] public sealed class UnityComponentAnimatorInitializer : UnityComponentTemplate { } [Serializable] [MetaTags(MetaTags.HIDDEN)] [MetaID("AD658EF99101E8E38BB575D5353E7B1E")] [MetaColor(MetaColor.DragonCyan)] [MetaGroup(EcsUnityConsts.PACK_GROUP, TEMPLATES_GROUP)] + [MetaDescription(AUTHOR, "...")] public sealed class UnityComponentCharacterControllerInitializer : UnityComponentTemplate { } #endregion @@ -108,6 +113,7 @@ namespace DCFApixels.DragonECS [MetaID("6C6CA0F99101E80E013BCCCB5DA78FA5")] [MetaColor(MetaColor.DragonCyan)] [MetaGroup(EcsUnityConsts.PACK_GROUP, TEMPLATES_GROUP)] + [MetaDescription(AUTHOR, "...")] public sealed class UnityComponentMeshRendererTemplate : UnityComponentTemplate { public override MetaGroup Group { get { return UnityComponentConsts.RenderGroup; } } @@ -117,6 +123,7 @@ namespace DCFApixels.DragonECS [MetaID("5475A1F9910109A138F609268B697A62")] [MetaColor(MetaColor.DragonCyan)] [MetaGroup(EcsUnityConsts.PACK_GROUP, TEMPLATES_GROUP)] + [MetaDescription(AUTHOR, "...")] public sealed class UnityComponentMeshFilterTemplate : UnityComponentTemplate { public override MetaGroup Group { get { return UnityComponentConsts.RenderGroup; } } @@ -126,6 +133,7 @@ namespace DCFApixels.DragonECS [MetaID("2C13A2F99101FAA3EA21BD351BF3B169")] [MetaColor(MetaColor.DragonCyan)] [MetaGroup(EcsUnityConsts.PACK_GROUP, TEMPLATES_GROUP)] + [MetaDescription(AUTHOR, "...")] public sealed class UnityComponentSkinnedMeshRendererTemplate : UnityComponentTemplate { public override MetaGroup Group { get { return UnityComponentConsts.RenderGroup; } } @@ -135,6 +143,7 @@ namespace DCFApixels.DragonECS [MetaID("8B57A1F991016B2E1FC57D16F2D20A64")] [MetaColor(MetaColor.DragonCyan)] [MetaGroup(EcsUnityConsts.PACK_GROUP, TEMPLATES_GROUP)] + [MetaDescription(AUTHOR, "...")] public sealed class UnityComponentSpriteRendererTemplate : UnityComponentTemplate { public override MetaGroup Group { get { return UnityComponentConsts.RenderGroup; } } @@ -147,6 +156,7 @@ namespace DCFApixels.DragonECS [MetaID("557F8EF9910132FE990CF50CBF368412")] [MetaColor(MetaColor.DragonCyan)] [MetaGroup(EcsUnityConsts.PACK_GROUP, TEMPLATES_GROUP)] + [MetaDescription(AUTHOR, "...")] public sealed class UnityComponentColliderTemplate : UnityComponentTemplate { public override MetaGroup Group { get { return UnityComponentConsts.ColliderGroup; } } @@ -156,6 +166,7 @@ namespace DCFApixels.DragonECS [MetaID("43669CF99101E94AB9EC19DC8EA3878B")] [MetaColor(MetaColor.DragonCyan)] [MetaGroup(EcsUnityConsts.PACK_GROUP, TEMPLATES_GROUP)] + [MetaDescription(AUTHOR, "...")] public sealed class UnityComponentBoxColliderTemplate : UnityComponentTemplate { public override MetaGroup Group { get { return UnityComponentConsts.ColliderGroup; } } @@ -165,6 +176,7 @@ namespace DCFApixels.DragonECS [MetaID("749F9CF991017792E288D4E3B5BFE340")] [MetaColor(MetaColor.DragonCyan)] [MetaGroup(EcsUnityConsts.PACK_GROUP, TEMPLATES_GROUP)] + [MetaDescription(AUTHOR, "...")] public sealed class UnityComponentSphereColliderTemplate : UnityComponentTemplate { public override MetaGroup Group { get { return UnityComponentConsts.ColliderGroup; } } @@ -174,6 +186,7 @@ namespace DCFApixels.DragonECS [MetaID("72B09CF99101A33EBC4410B0FD8375E0")] [MetaColor(MetaColor.DragonCyan)] [MetaGroup(EcsUnityConsts.PACK_GROUP, TEMPLATES_GROUP)] + [MetaDescription(AUTHOR, "...")] public sealed class UnityComponentCapsuleColliderTemplate : UnityComponentTemplate { public override MetaGroup Group { get { return UnityComponentConsts.ColliderGroup; } } @@ -183,6 +196,7 @@ namespace DCFApixels.DragonECS [MetaID("3BBC9CF99101F7C00989D2E55A40EF1B")] [MetaColor(MetaColor.DragonCyan)] [MetaGroup(EcsUnityConsts.PACK_GROUP, TEMPLATES_GROUP)] + [MetaDescription(AUTHOR, "...")] public sealed class UnityComponentMeshColliderTemplate : UnityComponentTemplate { public override MetaGroup Group { get { return UnityComponentConsts.ColliderGroup; } } @@ -195,6 +209,7 @@ namespace DCFApixels.DragonECS [MetaID("1AC79CF99101C4279852BB6AE12DC61B")] [MetaColor(MetaColor.DragonCyan)] [MetaGroup(EcsUnityConsts.PACK_GROUP, TEMPLATES_GROUP)] + [MetaDescription(AUTHOR, "...")] public sealed class UnityComponentJointTemplate : UnityComponentTemplate { public override MetaGroup Group { get { return UnityComponentConsts.JointGroup; } } @@ -204,6 +219,7 @@ namespace DCFApixels.DragonECS [MetaID("E3D99CF991016428C6688672052C6F4E")] [MetaColor(MetaColor.DragonCyan)] [MetaGroup(EcsUnityConsts.PACK_GROUP, TEMPLATES_GROUP)] + [MetaDescription(AUTHOR, "...")] public sealed class UnityComponentFixedJointTemplate : UnityComponentTemplate { public override MetaGroup Group { get { return UnityComponentConsts.JointGroup; } } @@ -213,6 +229,7 @@ namespace DCFApixels.DragonECS [MetaID("7BE59CF99101322AE307229E1466B225")] [MetaColor(MetaColor.DragonCyan)] [MetaGroup(EcsUnityConsts.PACK_GROUP, TEMPLATES_GROUP)] + [MetaDescription(AUTHOR, "...")] public sealed class UnityComponentCharacterJointTemplate : UnityComponentTemplate { public override MetaGroup Group { get { return UnityComponentConsts.JointGroup; } } @@ -222,6 +239,7 @@ namespace DCFApixels.DragonECS [MetaID("FBF29CF99101EE07543CFF460854B1F6")] [MetaColor(MetaColor.DragonCyan)] [MetaGroup(EcsUnityConsts.PACK_GROUP, TEMPLATES_GROUP)] + [MetaDescription(AUTHOR, "...")] public sealed class UnityComponentConfigurableJointTemplate : UnityComponentTemplate { public override MetaGroup Group { get { return UnityComponentConsts.JointGroup; } } diff --git a/src/Connectors/AutoEntityCreator.cs b/src/Connectors/AutoEntityCreator.cs index 3de74bd..9043695 100644 --- a/src/Connectors/AutoEntityCreator.cs +++ b/src/Connectors/AutoEntityCreator.cs @@ -3,11 +3,13 @@ using UnityEngine; namespace DCFApixels.DragonECS { + using static EcsConsts; + [DisallowMultipleComponent] - [AddComponentMenu(EcsConsts.FRAMEWORK_NAME + "/" + nameof(AutoEntityCreator), 30)] + [AddComponentMenu(FRAMEWORK_NAME + "/" + nameof(AutoEntityCreator), 30)] [MetaColor(MetaColor.DragonCyan)] [MetaGroup(EcsUnityConsts.PACK_GROUP, EcsUnityConsts.ENTITY_BUILDING_GROUP)] - [MetaDescription(EcsConsts.AUTHOR, nameof(MonoBehaviour) + ". Automatically creates an entity in the selected world and connects it to EcsEntityConnect.")] + [MetaDescription(AUTHOR, nameof(MonoBehaviour) + ". Automatically creates an entity in the selected world and connects it to EcsEntityConnect.")] [MetaID("D699B3809201285A46DDF91BCF0540A7")] public class AutoEntityCreator : MonoBehaviour { diff --git a/src/Connectors/EcsEntityConnect.cs b/src/Connectors/EcsEntityConnect.cs index ba461ee..e6d7372 100644 --- a/src/Connectors/EcsEntityConnect.cs +++ b/src/Connectors/EcsEntityConnect.cs @@ -10,6 +10,8 @@ using UnityEditor; namespace DCFApixels.DragonECS { + using static EcsConsts; + public static class EcsConnect { [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -56,10 +58,10 @@ namespace DCFApixels.DragonECS [SelectionBase] [DisallowMultipleComponent] - [AddComponentMenu(EcsConsts.FRAMEWORK_NAME + "/" + nameof(EcsEntityConnect), 30)] + [AddComponentMenu(FRAMEWORK_NAME + "/" + nameof(EcsEntityConnect), 30)] [MetaColor(MetaColor.DragonCyan)] [MetaGroup(EcsUnityConsts.PACK_GROUP, EcsUnityConsts.ENTITY_BUILDING_GROUP)] - [MetaDescription(EcsConsts.AUTHOR, nameof(MonoBehaviour) + ". Responsible for connecting the entity and GameObject using the EcsEntityConnect.ConnectWith method.")] + [MetaDescription(AUTHOR, nameof(MonoBehaviour) + ". Responsible for connecting the entity and GameObject using the EcsEntityConnect.ConnectWith method.")] [MetaID("FF7EB3809201DEC2F1977C00D3B3443B")] public class EcsEntityConnect : MonoBehaviour { @@ -210,7 +212,6 @@ namespace DCFApixels.DragonECS internal void Autoset_Editor() { Autoset(this); - } [ContextMenu("Autoset Cascade")] internal void AutosetCascade_Editor() diff --git a/src/Connectors/Editor/EcsEntityConnectEditor.cs b/src/Connectors/Editor/EcsEntityConnectEditor.cs index 8f196e8..d80dc74 100644 --- a/src/Connectors/Editor/EcsEntityConnectEditor.cs +++ b/src/Connectors/Editor/EcsEntityConnectEditor.cs @@ -11,20 +11,15 @@ namespace DCFApixels.DragonECS.Unity.Editors { protected override void DrawCustom() { - EcsEntityConnect[] targets = new EcsEntityConnect[this.targets.Length]; - for (int i = 0; i < targets.Length; i++) - { - targets[i] = (EcsEntityConnect)this.targets[i]; - } - DrawEntityInfo(targets); + DrawEntityInfo(); DrawTemplates(); - DrawControlButtons(targets); - DrawComponents(targets); + DrawControlButtons(); + DrawComponents(); } - private void DrawEntityInfo(EcsEntityConnect[] targets) + private void DrawEntityInfo() { bool isConnected = Target.Entity.TryUnpackForUnityEditor(out int id, out short gen, out short worldID, out EcsWorld world); EcsGUI.EntityStatus status = IsMultipleTargets ? EcsGUI.EntityStatus.Undefined : isConnected ? EcsGUI.EntityStatus.Alive : EcsGUI.EntityStatus.NotAlive; @@ -49,7 +44,7 @@ namespace DCFApixels.DragonECS.Unity.Editors } } - private void DrawControlButtons(EcsEntityConnect[] targets) + private void DrawControlButtons() { float height = EcsGUI.EntityBarHeight; Rect rect = GUILayoutUtility.GetRect(EditorGUIUtility.currentViewWidth, height); @@ -58,7 +53,7 @@ namespace DCFApixels.DragonECS.Unity.Editors var (_, buttonRect) = rect.HorizontalSliceRight(height); if (EcsGUI.AutosetCascadeButton(buttonRect)) { - foreach (var target in targets) + foreach (var target in Targets) { target.AutosetCascade_Editor(); } @@ -66,7 +61,7 @@ namespace DCFApixels.DragonECS.Unity.Editors buttonRect = RectUtility.Move(buttonRect, -height, 0); if (EcsGUI.AutosetButton(buttonRect)) { - foreach (var target in targets) + foreach (var target in Targets) { target.Autoset_Editor(); } @@ -76,7 +71,7 @@ namespace DCFApixels.DragonECS.Unity.Editors buttonRect = buttonRect.Move(-height, 0); if (EcsGUI.DelEntityButton(buttonRect)) { - foreach (var target in targets) + foreach (var target in Targets) { target.DeleteEntity_Editor(); } @@ -84,7 +79,7 @@ namespace DCFApixels.DragonECS.Unity.Editors buttonRect = buttonRect.Move(-height, 0); if (EcsGUI.UnlinkButton(buttonRect)) { - foreach (var target in targets) + foreach (var target in Targets) { target.UnlinkEntity_Editor(); } @@ -92,13 +87,13 @@ namespace DCFApixels.DragonECS.Unity.Editors } } - private void DrawComponents(EcsEntityConnect[] targets) + private void DrawComponents() { if (IsMultipleTargets) { - for (int i = 0; i < targets.Length; i++) + for (int i = 0; i < Targets.Length; i++) { - if (targets[i].IsConnected == true) + if (Targets[i].IsConnected == true) { EditorGUILayout.HelpBox("Multiple component editing is not available.", MessageType.Warning); return; diff --git a/src/Internal/Editor/EcsGUI.cs b/src/Internal/Editor/EcsGUI.cs index e4d4e17..2ba390c 100644 --- a/src/Internal/Editor/EcsGUI.cs +++ b/src/Internal/Editor/EcsGUI.cs @@ -424,6 +424,11 @@ namespace DCFApixels.DragonECS.Unity.Editors return click; } } + + public static bool ValidateButton(Rect position) + { + return IconButton(position, Icons.Instance.RepaireIcon, 2f, "Validate"); + } public static bool AutosetCascadeButton(Rect position) { return IconButton(position, Icons.Instance.AutosetCascadeIcon, 0f, "Autoset Cascade"); diff --git a/src/Internal/Icons/Icons.cs b/src/Internal/Icons/Icons.cs index 6c7b2ef..519cbec 100644 --- a/src/Internal/Icons/Icons.cs +++ b/src/Internal/Icons/Icons.cs @@ -12,6 +12,8 @@ namespace DCFApixels.DragonECS.Unity.Internal private Texture _fileIcon = null; [SerializeField] private Texture _metaIDIcon = null; + [SerializeField] + private Texture _repaireIcon = null; [SerializeField] private Texture _errorIcon = null; @@ -45,6 +47,7 @@ namespace DCFApixels.DragonECS.Unity.Internal internal Texture HelpIcon { get { return _helpIcon; } } internal Texture FileIcon { get { return _fileIcon; } } internal Texture MetaIDIcon { get { return _metaIDIcon; } } + internal Texture RepaireIcon { get { return _repaireIcon; } } internal Texture ErrorIcon { get { return _errorIcon; } } internal Texture WarningIcon { get { return _warningIcon; } } diff --git a/src/Internal/Icons/Icons.cs.meta b/src/Internal/Icons/Icons.cs.meta index 8ef087a..c0e2920 100644 --- a/src/Internal/Icons/Icons.cs.meta +++ b/src/Internal/Icons/Icons.cs.meta @@ -7,6 +7,7 @@ MonoImporter: - _helpIcon: {fileID: 2800000, guid: e135cf23a5d53ce48a75e163b41e39d5, type: 3} - _fileIcon: {fileID: 2800000, guid: 4f1ca6aa9d407844485856184c785946, type: 3} - _metaIDIcon: {fileID: 2800000, guid: d3c6215cfdc36cb448661398160560a7, type: 3} + - _repaireIcon: {fileID: 2800000, guid: 561fcfb28d73d7c4f8c9fac36e8ece86, type: 3} - _errorIcon: {fileID: 2800000, guid: c67e8a1d6cb0e904590c7847368fe794, type: 3} - _warningIcon: {fileID: 2800000, guid: 223d96e24d4b49f468b628cf9839584c, type: 3} - _passIcon: {fileID: 2800000, guid: 0df5856dbbe53494aae23b959ca05ecc, type: 3} diff --git a/src/Internal/Icons/RepaireIcon.png b/src/Internal/Icons/RepaireIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..e81d4132ab0d8fb4ec6d742f8b344918dac5a348 GIT binary patch literal 2400 zcmcImdvMcq94|0Ow-XpQUgD6D@=}&2Y0_6%2kSbv$qI~h&W8#71 zu~G1N$|>r2$@DhZ(Bm!B8w^ii=%J3&Q(&B&pa{DG2gt- z_mf{zF>Oj_pZKBiDwV2Fc9v~A*h9*ujs^cxY3VJnixaa7Byhh)*?L&Vz8zAjVhebO zQ+C>OC`RyUX;yG?+K^8KXq75uLP(^U`J4>7I1lf)z&DOGz!1+`;F)?mW*5`BB0j4$ zz~z-raWJLx88Zt{NQF{D6d>?%G7W`%UcW?zEN~|;1&)==C=7K%wZkrS-2F@&S zkt~Z8iUxy0ZII9k0S}6s&1MwSp*kG`5QwzMFVi8!FKMC-Hcny!yeRX6A5s`;mrx>G zU?86(6RGq7N6SLM zAqd`Rr=~?KLON1wgvQR~{j3m_UQ`rC25>f7<}5Ji8j0W-f}0#Vg2FM1FpmT6!>}%> z9Rz`;W%}vB0?WG>Jq^@ur?UN$O#2xw+h&1*C@s&kpgfDY8M6+-jBXaeY0`+e7?S~U z6K$1|w$TSe>3AT!80M z-E_e#1ndF}+$CU$Whl20@X;VYypQ&9sOa}7X$I_I7FoOmTDK_jeB^NpB1c{x>I@x4 zGfLJiFrze?W8uhU{vX_XI-Om#!6FWjKB4(tFiCLBK{~*td4SXZ87}nS#7p$TCrf|2 z#{ZAfBepU{wBN&ll@o=P$)L&-)72F8@BMnz?`USyK$?|qN)a2Zw5QvU)M%ItGy}4X zn-SK?84wl+p)?uwdW6Q!ZWo3bOm5QDRoBZ$6?74yPp;Uh^|9qKIvA|E%3=3v4^Fz@ z7n~nVH2~fQi3yE}O4YMA+m_~VEub$iI(M9UXw3@O z;C5}eacld#!GSFklA2EwXH(iI5bb4K-`}%GtEtG<9KPQ%ao#QLN=kTl+km&~;*2+* zS$gtjYT@zA>&oJ1^m%ilCiAAgaPpv)GwYxo4GGBYuwh@Xew)I>ng+?2`yX9;)wKG= z-P`_z>I1U`j@=+8oh!aUCpy9;>ldJ%fHzK%U6i8Mo{C_cA;7R*v2sb0vPAwy8FLB-Lhx7o){zYhJ#1 zDBRpoQ4c5Q-0yX__S?crbG~}^=RcE|G^6I`HhvKPb#L_#NKEzgp0nEe#%c;ay14$; z(EfRC@9X!6RoV}l!hsirz7v>CXz9TnHT3PnT!85*7@TGOtpG+~W81mZTj&NSmiM8Pe6Z3oK?YLt~ zO8)8$oglb8Bgd~I^3~zSCYzz(@0)i2lvH?fur;(~{IF!WE-O$_>|D{%woSZ~SUh!i zcy)$zgv0Ub)rom&1*!eVlzW{kw!Kn!=uYa$;iuzsKkn7by8YhX<_A}b7FfxYX;t4R z^sv^q?Yy`?{ru`+{p1B}LoZxt{pzKdYx%a0WyYhGjP<&)+;=x4l{-7|x29dCF&{ck zwA{?zXBrV(lf$;u@10cDu { + private SerializedProperty _parametersProp; private SerializedProperty _layersProp; private SerializedProperty _recordsProp; private ReorderableList _reorderableLayersList; @@ -82,6 +83,7 @@ namespace DCFApixels.DragonECS.Unity.Editors protected override void OnStaticInit() { } protected override void OnInit() { + _parametersProp = FindProperty("_parameters"); _layersProp = FindProperty("_layers"); _recordsProp = FindProperty("_records"); @@ -200,6 +202,7 @@ namespace DCFApixels.DragonECS.Unity.Editors { EcsGUI.Changed = GUILayout.Button("Validate"); + EditorGUILayout.PropertyField(_parametersProp, UnityEditorUtility.GetLabel(_parametersProp.displayName)); DrawLayoutNameList(_layersProp); DrawRecordList(_recordsProp); diff --git a/src/Templates/EcsPipelineTemplate/MonoBehaviourSystemWrapper.cs b/src/Templates/EcsPipelineTemplate/MonoBehaviourSystemWrapper.cs index 1883a37..655b1c5 100644 --- a/src/Templates/EcsPipelineTemplate/MonoBehaviourSystemWrapper.cs +++ b/src/Templates/EcsPipelineTemplate/MonoBehaviourSystemWrapper.cs @@ -3,11 +3,13 @@ using UnityEngine; namespace DCFApixels.DragonECS { + using static EcsConsts; + [MetaName("MonoBehaviourSystem")] [MetaColor(MetaColor.DragonCyan)] - [MetaDescription("Wrapper for MonoBehaviour systems")] + [MetaDescription(AUTHOR, "Wrapper for MonoBehaviour systems")] [MetaID("2877029E9201347B4F58E1EC0A4BCD1B")] - [MetaGroup(EcsUnityConsts.PACK_GROUP, EcsConsts.OTHER_GROUP)] + [MetaGroup(EcsUnityConsts.PACK_GROUP, OTHER_GROUP)] public class MonoBehaviourSystemWrapper : IEcsModule { public MonoBehaviour system; diff --git a/src/Templates/EcsPipelineTemplate/ScriptableObjectSystemWrapper.cs b/src/Templates/EcsPipelineTemplate/ScriptableObjectSystemWrapper.cs index 53f6fe9..7fbac94 100644 --- a/src/Templates/EcsPipelineTemplate/ScriptableObjectSystemWrapper.cs +++ b/src/Templates/EcsPipelineTemplate/ScriptableObjectSystemWrapper.cs @@ -3,11 +3,13 @@ using UnityEngine; namespace DCFApixels.DragonECS { + using static EcsConsts; + [MetaName("ScriptableObjectSystem")] [MetaColor(MetaColor.DragonCyan)] - [MetaDescription("Wrapper for ScriptableObject systems")] + [MetaDescription(AUTHOR, "Wrapper for ScriptableObject systems")] [MetaID("F5A94C5F92015B4D9286E76809311AF4")] - [MetaGroup(EcsUnityConsts.PACK_GROUP, EcsConsts.OTHER_GROUP)] + [MetaGroup(EcsUnityConsts.PACK_GROUP, OTHER_GROUP)] public class ScriptableObjectSystemWrapper : IEcsModule { public ScriptableObject system; diff --git a/src/Templates/EcsPipelineTemplate/Templates/MonoPipelineTemplate.cs b/src/Templates/EcsPipelineTemplate/Templates/MonoPipelineTemplate.cs index a28dd36..91a00ee 100644 --- a/src/Templates/EcsPipelineTemplate/Templates/MonoPipelineTemplate.cs +++ b/src/Templates/EcsPipelineTemplate/Templates/MonoPipelineTemplate.cs @@ -15,12 +15,15 @@ namespace DCFApixels.DragonECS [DisallowMultipleComponent] [AddComponentMenu(EcsConsts.FRAMEWORK_NAME + "/" + nameof(MonoPipelineTemplate), 30)] - public class MonoPipelineTemplate : MonoPipelineTemplateBase, IPipelineTemplate + public class MonoPipelineTemplate : MonoPipelineTemplateBase, IPipelineTemplate, IEcsDefaultAddParams { [SerializeField] [ArrayElement] private string[] _layers = DefaultLayers.ToArray(); + [SerializeField] + private AddParams _parameters; + [SerializeField] [ArrayElement] private Record[] _records; @@ -29,6 +32,10 @@ namespace DCFApixels.DragonECS { get { return _layers; } } + public AddParams AddParams + { + get { return _parameters; } + } public ReadOnlySpan Records { get { return _records; } @@ -56,6 +63,7 @@ namespace DCFApixels.DragonECS } } + [ContextMenu("Validate")] public bool Validate() { bool resutl = ValidateLayers(ref _layers); diff --git a/src/Templates/EcsPipelineTemplate/Templates/ScriptablePipelineTemplate.cs b/src/Templates/EcsPipelineTemplate/Templates/ScriptablePipelineTemplate.cs index 9cfb638..0c4d1fa 100644 --- a/src/Templates/EcsPipelineTemplate/Templates/ScriptablePipelineTemplate.cs +++ b/src/Templates/EcsPipelineTemplate/Templates/ScriptablePipelineTemplate.cs @@ -14,12 +14,15 @@ namespace DCFApixels.DragonECS } [CreateAssetMenu(fileName = nameof(ScriptablePipelineTemplate), menuName = EcsConsts.FRAMEWORK_NAME + "/" + nameof(ScriptablePipelineTemplate), order = 1)] - public sealed class ScriptablePipelineTemplate : ScriptablePipelineTemplateBase, IPipelineTemplate + public sealed class ScriptablePipelineTemplate : ScriptablePipelineTemplateBase, IPipelineTemplate, IEcsDefaultAddParams { [SerializeField] [ArrayElement] private string[] _layers = DefaultLayers.ToArray(); + [SerializeField] + private AddParams _parameters; + [SerializeField] [ArrayElement] private Record[] _records; @@ -28,6 +31,10 @@ namespace DCFApixels.DragonECS { get { return _layers; } } + public AddParams AddParams + { + get { return _parameters; } + } public ReadOnlySpan Records { get { return _records; } @@ -55,6 +62,7 @@ namespace DCFApixels.DragonECS } } + [ContextMenu("Validate")] public bool Validate() { bool resutl = ValidateLayers(ref _layers);