From 6e718691cdb075b4801575036406d4a1b663cb51 Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Wed, 6 Mar 2024 23:29:54 +0800 Subject: [PATCH] update --- src/Buildin/UnityComponents.cs | 34 ++++++++++----- .../Editor/EntityTemplateEditor.cs | 38 ++++++++-------- .../Templates/ComponentTemplateBase.cs | 43 ++++++++++--------- 3 files changed, 64 insertions(+), 51 deletions(-) diff --git a/src/Buildin/UnityComponents.cs b/src/Buildin/UnityComponents.cs index c645acb..5a531c8 100644 --- a/src/Buildin/UnityComponents.cs +++ b/src/Buildin/UnityComponents.cs @@ -5,6 +5,13 @@ using UnityEngine; namespace DCFApixels.DragonECS { + internal static class UnityComponentConsts + { + private const string UNITY_COMPONENT_NAME = "UnityComponent"; + public static readonly MetaGroup BaseGroup = new MetaGroupRef(UNITY_COMPONENT_NAME); + public static readonly MetaGroup ColliderGroup = new MetaGroupRef($"{UNITY_COMPONENT_NAME}/Collider/"); + public static readonly MetaGroup JointGroup = new MetaGroupRef($"{UNITY_COMPONENT_NAME}/Joint/"); + } [Serializable] [MetaColor(255 / 3, 255, 0)] public struct UnityComponent : IEcsComponent, IEnumerable//IntelliSense hack @@ -22,7 +29,14 @@ namespace DCFApixels.DragonECS #region Unity Component Templates public class UnityComponentTemplate : ComponentTemplateBase> where T : Component { - public override string Name => "UnityComponent/" + typeof(T).Name; + public override string Name + { + get { return typeof(T).Name; } + } + public override MetaGroup Group + { + get { return UnityComponentConsts.BaseGroup; } + } public sealed override void Apply(int worldID, int entityID) { EcsWorld.GetPool>>(worldID).TryAddOrGet(entityID) = component; @@ -51,27 +65,27 @@ namespace DCFApixels.DragonECS [Serializable] public sealed class UnityComponentColliderTemplate : UnityComponentTemplate { - public override string Name => "UnityComponent/Collider/" + nameof(Collider); + public override MetaGroup Group { get { return UnityComponentConsts.ColliderGroup; } } } [Serializable] public sealed class UnityComponentBoxColliderTemplate : UnityComponentTemplate { - public override string Name => "UnityComponent/Collider/" + nameof(BoxCollider); + public override MetaGroup Group { get { return UnityComponentConsts.ColliderGroup; } } } [Serializable] public sealed class UnityComponentSphereColliderTemplate : UnityComponentTemplate { - public override string Name => "UnityComponent/Collider/" + nameof(SphereCollider); + public override MetaGroup Group { get { return UnityComponentConsts.ColliderGroup; } } } [Serializable] public sealed class UnityComponentCapsuleColliderTemplate : UnityComponentTemplate { - public override string Name => "UnityComponent/Collider/" + nameof(CapsuleCollider); + public override MetaGroup Group { get { return UnityComponentConsts.ColliderGroup; } } } [Serializable] public sealed class UnityComponentMeshColliderTemplate : UnityComponentTemplate { - public override string Name => "UnityComponent/Collider/" + nameof(MeshCollider); + public override MetaGroup Group { get { return UnityComponentConsts.ColliderGroup; } } } #endregion @@ -79,22 +93,22 @@ namespace DCFApixels.DragonECS [Serializable] public sealed class UnityComponentJointTemplate : UnityComponentTemplate { - public override string Name => "UnityComponent/Joint/" + nameof(Joint); + public override MetaGroup Group { get { return UnityComponentConsts.JointGroup; } } } [Serializable] public sealed class UnityComponentFixedJointTemplate : UnityComponentTemplate { - public override string Name => "UnityComponent/Joint/" + nameof(FixedJoint); + public override MetaGroup Group { get { return UnityComponentConsts.JointGroup; } } } [Serializable] public sealed class UnityComponentCharacterJointTemplate : UnityComponentTemplate { - public override string Name => "UnityComponent/Joint/" + nameof(CharacterJoint); + public override MetaGroup Group { get { return UnityComponentConsts.JointGroup; } } } [Serializable] public sealed class UnityComponentConfigurableJointTemplate : UnityComponentTemplate { - public override string Name => "UnityComponent/Joint/" + nameof(ConfigurableJoint); + public override MetaGroup Group { get { return UnityComponentConsts.JointGroup; } } } #endregion } diff --git a/src/EntityTemplate/Editor/EntityTemplateEditor.cs b/src/EntityTemplate/Editor/EntityTemplateEditor.cs index b403085..cfc04cb 100644 --- a/src/EntityTemplate/Editor/EntityTemplateEditor.cs +++ b/src/EntityTemplate/Editor/EntityTemplateEditor.cs @@ -42,11 +42,19 @@ namespace DCFApixels.DragonECS.Unity.Editors genericMenu = new GenericMenu(); - var dummies = ComponentTemplateTypeCache.Dummies; - foreach (var dummy in dummies) + var componentTemplateDummies = ComponentTemplateTypeCache.Dummies; + foreach (var dummy in componentTemplateDummies) { - string name = dummy.Name; - string description = dummy.Description; + ITypeMeta meta = dummy is ITypeMeta metaOverride ? metaOverride : dummy.Type.ToMeta(); + string name = meta.Name; + string description = meta.Description; + MetaGroup group = meta.Group; + + if(group.Name.Length > 0) + { + name = group.Name + name; + } + if (string.IsNullOrEmpty(description) == false) { name = $"{name} {EcsUnityConsts.INFO_MARK}"; @@ -156,10 +164,11 @@ namespace DCFApixels.DragonECS.Unity.Editors { componentType = componentProperty.managedReferenceValue.GetType(); ; } - - string name = template.Name; - string description = template.Description; - Color panelColor = template.Color.Desaturate(EscEditorConsts.COMPONENT_DRAWER_DESATURATE); + + ITypeMeta meta = template is ITypeMeta metaOverride ? metaOverride : template.Type.ToMeta(); + string name = meta.Name; + string description = meta.Description; + Color panelColor = meta.Color.ToUnityColor().Desaturate(EscEditorConsts.COMPONENT_DRAWER_DESATURATE); Rect removeButtonRect = GUILayoutUtility.GetLastRect(); @@ -231,19 +240,6 @@ namespace DCFApixels.DragonECS.Unity.Editors GUILayout.EndHorizontal(); } - - public string GetLastPathComponent(string input) - { - int lastSlashIndex = input.LastIndexOfAny(new char[] { '/', '\\' }); - if (lastSlashIndex == -1) - { - return input; - } - else - { - return input.Substring(lastSlashIndex + 1); - } - } } [CustomEditor(typeof(ScriptableEntityTemplate), true)] diff --git a/src/EntityTemplate/Templates/ComponentTemplateBase.cs b/src/EntityTemplate/Templates/ComponentTemplateBase.cs index 0b5691e..845a1d8 100644 --- a/src/EntityTemplate/Templates/ComponentTemplateBase.cs +++ b/src/EntityTemplate/Templates/ComponentTemplateBase.cs @@ -1,4 +1,5 @@ -using System; +using Codice.Utils; +using System; using System.Collections.Generic; using System.Linq; using System.Reflection; @@ -11,11 +12,6 @@ namespace DCFApixels.DragonECS { #region Properties Type Type { get; } - string Name { get; } - MetaGroup Group { get; } - string Description { get; } - IReadOnlyCollection Tags { get; } - Color Color { get; } #endregion #region Methods @@ -31,17 +27,18 @@ namespace DCFApixels.DragonECS Selected } } + public interface IComponentTemplateWithMetaOverride : IComponentTemplate, ITypeMeta { } [Serializable] - public abstract class ComponentTemplateBase : IComponentTemplate + public abstract class ComponentTemplateBase : IComponentTemplateWithMetaOverride { #region Properties public abstract Type Type { get; } public virtual string Name { get { return string.Empty; } } - public virtual MetaGroup Group { get { return default; } } + public virtual MetaColor Color { get { return new MetaColor(MetaColor.Black); } } + public virtual MetaGroup Group { get { return MetaGroup.Empty; } } public virtual string Description { get { return string.Empty; } } public virtual IReadOnlyCollection Tags { get { return Array.Empty(); } } - public virtual Color Color { get { return Color.black; } } #endregion #region Methods @@ -54,19 +51,19 @@ namespace DCFApixels.DragonECS #endregion } [Serializable] - public abstract class ComponentTemplateBase : ComponentTemplateBase, IComponentTemplate + public abstract class ComponentTemplateBase : ComponentTemplateBase { - private static TypeMeta _meta = EcsDebugUtility.GetTypeMeta(); + protected static TypeMeta Meta = EcsDebugUtility.GetTypeMeta(); [SerializeField] protected T component; #region Properties public override Type Type { get { return typeof(T); } } - public override string Name { get { return _meta.Name; } } - public override MetaGroup Group { get { return _meta.Group; } } - public override string Description { get { return _meta.Description; } } - public override IReadOnlyCollection Tags { get { return _meta.Tags; } } - public override Color Color { get { return _meta.Color.ToUnityColor(); } } + public override string Name { get { return Meta.Name; } } + public override MetaGroup Group { get { return Meta.Group; } } + public override string Description { get { return Meta.Description; } } + public override IReadOnlyCollection Tags { get { return Meta.Tags; } } + public override MetaColor Color { get { return Meta.Color; } } #endregion #region Methods @@ -81,7 +78,7 @@ namespace DCFApixels.DragonECS #endregion } - public abstract class ComponentTemplate : ComponentTemplateBase, IComponentTemplate + public abstract class ComponentTemplate : ComponentTemplateBase where T : struct, IEcsComponent { public override void Apply(int worldID, int entityID) @@ -89,7 +86,7 @@ namespace DCFApixels.DragonECS EcsWorld.GetPool>(worldID).TryAddOrGet(entityID) = component; } } - public abstract class TagComponentTemplate : ComponentTemplateBase, IComponentTemplate + public abstract class TagComponentTemplate : ComponentTemplateBase where T : struct, IEcsTagComponent { public override void Apply(int worldID, int entityID) @@ -118,8 +115,14 @@ namespace DCFApixels.DragonECS.Unity.Editors { private static Type[] _types; private static IComponentTemplate[] _dummies; - internal static ReadOnlySpan Types => _types; - internal static ReadOnlySpan Dummies => _dummies; + internal static ReadOnlySpan Types + { + get { return _types; } + } + internal static ReadOnlySpan Dummies + { + get { return _dummies; } + } static ComponentTemplateTypeCache() {