mirror of
https://github.com/DCFApixels/DragonECS-Unity.git
synced 2025-09-18 01:54:35 +08:00
update
This commit is contained in:
parent
e9ccb3f48e
commit
90cda16424
@ -1,23 +1,27 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.CompilerServices;
|
||||
using UnityEngine;
|
||||
|
||||
namespace DCFApixels.DragonECS
|
||||
{
|
||||
internal static class UnityComponentConsts
|
||||
{
|
||||
private const string UNITY_COMPONENT_NAME = "UnityComponent";
|
||||
internal const string UNITY_COMPONENT_NAME = "UnityComponent";
|
||||
public static readonly MetaGroup BaseGroup = new MetaGroup(UNITY_COMPONENT_NAME);
|
||||
public static readonly MetaGroup ColliderGroup = new MetaGroup($"{UNITY_COMPONENT_NAME}/Collider/");
|
||||
public static readonly MetaGroup JointGroup = new MetaGroup($"{UNITY_COMPONENT_NAME}/Joint/");
|
||||
}
|
||||
[Serializable]
|
||||
[MetaColor(255 / 3, 255, 0)]
|
||||
[MetaDescription("Component-reference to Unity object for EcsPool")]
|
||||
[MetaGroup(UnityComponentConsts.UNITY_COMPONENT_NAME)]
|
||||
public struct UnityComponent<T> : IEcsComponent, IEnumerable<T>//IntelliSense hack
|
||||
where T : Component
|
||||
{
|
||||
public T obj;
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public UnityComponent(T obj)
|
||||
{
|
||||
this.obj = obj;
|
||||
@ -30,6 +34,10 @@ namespace DCFApixels.DragonECS
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static implicit operator T(UnityComponent<T> a) { return a.obj; }
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static implicit operator UnityComponent<T>(T a) { return new UnityComponent<T>(a); }
|
||||
}
|
||||
|
||||
#region Unity Component Templates
|
||||
|
@ -9,11 +9,11 @@ namespace DCFApixels.DragonECS
|
||||
{
|
||||
[SerializeReference, ComponentTemplateReference]
|
||||
private IComponentTemplate _template;
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public ComponentTemplateProperty(IComponentTemplate template)
|
||||
{
|
||||
_template = template;
|
||||
}
|
||||
|
||||
public IComponentTemplate Template
|
||||
{
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
@ -41,27 +41,26 @@ namespace DCFApixels.DragonECS
|
||||
public void OnValidate(UnityEngine.Object obj) { _template.OnValidate(obj); }
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void SetRaw(object raw) { _template.SetRaw(raw); }
|
||||
|
||||
public bool Equals(ComponentTemplateProperty other)
|
||||
{
|
||||
return _template == other._template;
|
||||
}
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
return obj is ComponentTemplateProperty other && Equals(other);
|
||||
}
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return _template.GetHashCode();
|
||||
}
|
||||
public static bool operator ==(ComponentTemplateProperty a, ComponentTemplateProperty b) { return a._template == b._template; }
|
||||
public static bool operator !=(ComponentTemplateProperty a, ComponentTemplateProperty b) { return a._template != b._template; }
|
||||
|
||||
public static bool operator ==(ComponentTemplateProperty a, Null? b) { return a.IsNull; }
|
||||
public static bool operator ==(Null? a, ComponentTemplateProperty b) { return b.IsNull; }
|
||||
|
||||
public static bool operator !=(ComponentTemplateProperty a, Null? b) { return !a.IsNull; }
|
||||
public static bool operator !=(Null? a, ComponentTemplateProperty b) { return !b.IsNull; }
|
||||
|
||||
public readonly struct Null { }
|
||||
}
|
||||
|
||||
|
||||
public sealed class ComponentTemplateReferenceAttribute : PropertyAttribute { }
|
||||
}
|
@ -7,9 +7,23 @@ using UnityEngine;
|
||||
|
||||
namespace DCFApixels.DragonECS.Unity.Editors
|
||||
{
|
||||
|
||||
[CustomPropertyDrawer(typeof(ComponentTemplateProperty), true)]
|
||||
internal class ComponentTemplatePropertyDrawer : PropertyDrawer
|
||||
{
|
||||
private ComponentTemplateReferenceDrawer _drawer = new ComponentTemplateReferenceDrawer();
|
||||
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
|
||||
{
|
||||
property.Next(true);
|
||||
return _drawer.GetPropertyHeight(property, label);
|
||||
}
|
||||
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
||||
{
|
||||
property.Next(true);
|
||||
_drawer.OnGUI(position, property, label);
|
||||
}
|
||||
}
|
||||
[CustomPropertyDrawer(typeof(ComponentTemplateReferenceAttribute), true)]
|
||||
public class ComponentTemplateReferenceDrawer : PropertyDrawer
|
||||
internal class ComponentTemplateReferenceDrawer : PropertyDrawer
|
||||
{
|
||||
private static readonly Rect HeadIconsRect = new Rect(0f, 0f, 19f, 19f);
|
||||
|
||||
@ -19,6 +33,7 @@ namespace DCFApixels.DragonECS.Unity.Editors
|
||||
|
||||
private static bool _isInit;
|
||||
private static GenericMenu _genericMenu;
|
||||
|
||||
#region Init
|
||||
private static void Init()
|
||||
{
|
||||
@ -64,7 +79,6 @@ namespace DCFApixels.DragonECS.Unity.Editors
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
|
||||
{
|
||||
IComponentTemplate template = property.managedReferenceValue as IComponentTemplate;
|
||||
@ -90,19 +104,9 @@ namespace DCFApixels.DragonECS.Unity.Editors
|
||||
return DamagedComponentHeight;
|
||||
}
|
||||
|
||||
var propsCounter = property.Copy();
|
||||
int lastDepth = propsCounter.depth;
|
||||
bool next = propsCounter.Next(true) && lastDepth < propsCounter.depth;
|
||||
int propCount = next ? -1 : 0;
|
||||
while (next)
|
||||
{
|
||||
propCount++;
|
||||
next = propsCounter.Next(false);
|
||||
}
|
||||
bool isEmpty = propCount <= 0;
|
||||
int propCount = EcsGUI.GetChildPropertiesCount(property);
|
||||
|
||||
|
||||
return (isEmpty ? EditorGUIUtility.singleLineHeight : EditorGUI.GetPropertyHeight(property, label)) + Padding * 4f;
|
||||
return (propCount <= 0 ? EditorGUIUtility.singleLineHeight : EditorGUI.GetPropertyHeight(property, label)) + Padding * 4f;
|
||||
}
|
||||
|
||||
|
||||
@ -167,7 +171,7 @@ namespace DCFApixels.DragonECS.Unity.Editors
|
||||
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
GUI.Box(position, "", UnityEditorUtility.GetStyle(alphaPanelColor));
|
||||
EditorGUI.DrawRect(position, alphaPanelColor);
|
||||
|
||||
Rect paddingPosition = RectUtility.AddPadding(position, Padding * 2f);
|
||||
|
||||
@ -233,7 +237,6 @@ namespace DCFApixels.DragonECS.Unity.Editors
|
||||
private void DrawSelectionPopup(Rect position, SerializedProperty componentRefProp, GUIContent label)
|
||||
{
|
||||
EditorGUI.LabelField(position, label);
|
||||
//Rect buttonRect = RectUtility.AddPadding(position, EditorGUIUtility.labelWidth, 20f, 0f, 0f);
|
||||
Rect buttonRect = RectUtility.AddPadding(position, EditorGUIUtility.labelWidth, 0f, 0f, 0f);
|
||||
if (GUI.Button(buttonRect, "Select"))
|
||||
{
|
@ -4,6 +4,8 @@ using System;
|
||||
using System.Reflection;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using UnityObject = UnityEngine.Object;
|
||||
using UnityComponent = UnityEngine.Component;
|
||||
|
||||
namespace DCFApixels.DragonECS.Unity.Editors
|
||||
{
|
||||
@ -339,6 +341,10 @@ namespace DCFApixels.DragonECS.Unity.Editors
|
||||
|
||||
public static class Layout
|
||||
{
|
||||
public static void DrawEmptyComponentProperty(bool isDisplayEmpty)
|
||||
{
|
||||
|
||||
}
|
||||
public static void DrawWorldBaseInfo(EcsWorld world)
|
||||
{
|
||||
bool isNull = world == null || world.IsDestroyed || world.id == 0;
|
||||
@ -436,30 +442,8 @@ namespace DCFApixels.DragonECS.Unity.Editors
|
||||
if (meta.IsHidden == false || IsShowHidden)
|
||||
{
|
||||
object data = pool.GetRaw(entityID);
|
||||
//Color panelColor = meta.Color.ToUnityColor().Desaturate(EscEditorConsts.COMPONENT_DRAWER_DESATURATE);
|
||||
|
||||
Color panelColor;
|
||||
if (meta.IsCustomColor)
|
||||
{
|
||||
panelColor = meta.Color.ToUnityColor();
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (AutoColorMode)
|
||||
{
|
||||
case ComponentColorMode.Auto:
|
||||
panelColor = meta.Color.ToUnityColor().Desaturate(0.48f) / 1.18f; //.Desaturate(0.48f) / 1.18f;
|
||||
break;
|
||||
case ComponentColorMode.Rainbow:
|
||||
Color hsv = Color.HSVToRGB(1f / (Mathf.Max(total, EscEditorConsts.AUTO_COLOR_RAINBOW_MIN_RANGE)) * index, 1, 1);
|
||||
panelColor = hsv.Desaturate(0.48f) / 1.18f;
|
||||
break;
|
||||
default:
|
||||
panelColor = index % 2 == 0 ? new Color(0.40f, 0.40f, 0.40f) : new Color(0.54f, 0.54f, 0.54f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
panelColor = panelColor.Desaturate(EscEditorConsts.COMPONENT_DRAWER_DESATURATE);
|
||||
Color panelColor = SelectPanelColor(meta, index, total).Desaturate(EscEditorConsts.COMPONENT_DRAWER_DESATURATE);
|
||||
|
||||
float padding = EditorGUIUtility.standardVerticalSpacing;
|
||||
Rect removeButtonRect = GUILayoutUtility.GetLastRect();
|
||||
@ -472,7 +456,7 @@ namespace DCFApixels.DragonECS.Unity.Editors
|
||||
removeButtonRect.yMax += RemoveButtonRect.height;
|
||||
removeButtonRect.xMin = removeButtonRect.xMax - RemoveButtonRect.width;
|
||||
removeButtonRect.center += Vector2.up * padding * 2f;
|
||||
if (EcsGUI.CloseButton(removeButtonRect))
|
||||
if (CloseButton(removeButtonRect))
|
||||
{
|
||||
isRemoveComponent = true;
|
||||
}
|
||||
@ -497,7 +481,7 @@ namespace DCFApixels.DragonECS.Unity.Editors
|
||||
Rect tooltipIconRect = TooltipIconRect;
|
||||
tooltipIconRect.center = removeButtonRect.center;
|
||||
tooltipIconRect.center -= Vector2.right * tooltipIconRect.width;
|
||||
EcsGUI.DescriptionIcon(tooltipIconRect, meta.Description.Text);
|
||||
DescriptionIcon(tooltipIconRect, meta.Description.Text);
|
||||
}
|
||||
|
||||
GUILayout.EndVertical();
|
||||
@ -509,7 +493,7 @@ namespace DCFApixels.DragonECS.Unity.Editors
|
||||
outData = data;
|
||||
Type type = data == null ? typeof(void) : data.GetType();
|
||||
|
||||
bool isUnityObject = typeof(UnityEngine.Object).IsAssignableFrom(fieldType);
|
||||
bool isUnityObject = typeof(UnityObject).IsAssignableFrom(fieldType);
|
||||
|
||||
if (isUnityObject == false && data == null)
|
||||
{
|
||||
@ -546,12 +530,12 @@ namespace DCFApixels.DragonECS.Unity.Editors
|
||||
if (isUnityObject)
|
||||
{
|
||||
EditorGUI.BeginChangeCheck();
|
||||
var uobj = (UnityEngine.Object)data;
|
||||
var uobj = (UnityObject)data;
|
||||
|
||||
bool isComponent = (typeof(UnityEngine.Component)).IsAssignableFrom(fieldType);
|
||||
bool isComponent = typeof(UnityComponent).IsAssignableFrom(fieldType);
|
||||
if (isComponent)
|
||||
{
|
||||
uobj = EditorGUILayout.ObjectField(label, uobj, typeof(UnityEngine.Object), true);
|
||||
uobj = EditorGUILayout.ObjectField(label, uobj, typeof(UnityObject), true);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user