From 3f1c38a51024bd6e37846ed35d2f17125e38bf03 Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Sun, 10 Mar 2024 10:20:44 +0800 Subject: [PATCH] update conncetors --- src/Connectors/EcsEntityConnect.cs | 55 ++++++++++++++++--- .../Editor/EcsEntityConnectEditor.cs | 2 +- .../UnityGameObjectConnect.cs | 14 ++++- .../UnityGameObjectConnect.cs.meta | 0 .../Editor/PipelineProcessesMonitorEditor.cs | 4 +- 5 files changed, 60 insertions(+), 15 deletions(-) rename src/{Buildin => Connectors}/UnityGameObjectConnect.cs (84%) rename src/{Buildin => Connectors}/UnityGameObjectConnect.cs.meta (100%) diff --git a/src/Connectors/EcsEntityConnect.cs b/src/Connectors/EcsEntityConnect.cs index cc48f06..d05b886 100644 --- a/src/Connectors/EcsEntityConnect.cs +++ b/src/Connectors/EcsEntityConnect.cs @@ -6,6 +6,33 @@ using UnityEngine; namespace DCFApixels.DragonECS { + public static class EcsConnect + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void Connect(GameObject go, entlong entity, bool applyTemplates) + { + Connect(entity, go, applyTemplates); + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void Connect(entlong entity, GameObject go, bool applyTemplates) + { + if (go.TryGetComponent(out EcsEntityConnect connect) == false) + { + connect = go.AddComponent(); + } + connect.ConnectWith(entity, applyTemplates); + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void Connect(EcsEntityConnect connect, entlong entity, bool applyTemplates) + { + Connect(entity, connect, applyTemplates); + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void Connect(entlong entity, EcsEntityConnect connect, bool applyTemplates) + { + connect.ConnectWith(entity, applyTemplates); + } + } [DisallowMultipleComponent] public class EcsEntityConnect : MonoBehaviour { @@ -37,7 +64,7 @@ namespace DCFApixels.DragonECS [MethodImpl(MethodImplOptions.AggressiveInlining)] get { return _world; } } - public bool IsConected + public bool IsConnected { [MethodImpl(MethodImplOptions.AggressiveInlining)] get { return _entity.IsAlive; } @@ -59,22 +86,23 @@ namespace DCFApixels.DragonECS #region Connect public void ConnectWith(entlong entity, bool applyTemplates) { - if (_entity.TryGetID(out int oldEntityID) && _world != null) - { - var a = _world.GetAspect(); - a.unityGameObjects.TryDel(oldEntityID); - } - _world = null; + Disconnect(); if (entity.TryUnpack(out int newEntityID, out EcsWorld world)) { _entity = entity; _world = world; var a = _world.GetAspect(); - if (a.unityGameObjects.Has(newEntityID) == false) + if (a.unityGameObjects.Has(newEntityID)) { - a.unityGameObjects.Add(newEntityID) = new UnityGameObjectConnect(this); + ref readonly var uconnect = ref a.unityGameObjects.Read(newEntityID); + if (uconnect.IsConnected) + { + uconnect.connect.Disconnect(); + } } + + a.unityGameObjects.TryAddOrGet(newEntityID) = new UnityGameObjectConnect(this); if (applyTemplates) { ApplyTemplatesFor(world.id, newEntityID); @@ -85,6 +113,15 @@ namespace DCFApixels.DragonECS _entity = entlong.NULL; } } + public void Disconnect() + { + if (_entity.TryGetID(out int oldEntityID) && _world != null) + { + var a = _world.GetAspect(); + a.unityGameObjects.TryDel(oldEntityID); + } + _world = null; + } #endregion #region ApplyTemplates diff --git a/src/Connectors/Editor/EcsEntityConnectEditor.cs b/src/Connectors/Editor/EcsEntityConnectEditor.cs index ae099a9..453144e 100644 --- a/src/Connectors/Editor/EcsEntityConnectEditor.cs +++ b/src/Connectors/Editor/EcsEntityConnectEditor.cs @@ -109,7 +109,7 @@ namespace DCFApixels.DragonECS.Unity.Editors { for (int i = 0; i < targets.Length; i++) { - if (targets[i].IsConected == true) + if (targets[i].IsConnected == true) { EditorGUILayout.HelpBox("Multiple component editing is not available.", MessageType.Warning); return; diff --git a/src/Buildin/UnityGameObjectConnect.cs b/src/Connectors/UnityGameObjectConnect.cs similarity index 84% rename from src/Buildin/UnityGameObjectConnect.cs rename to src/Connectors/UnityGameObjectConnect.cs index 8b96b2a..be3fdeb 100644 --- a/src/Buildin/UnityGameObjectConnect.cs +++ b/src/Connectors/UnityGameObjectConnect.cs @@ -14,9 +14,19 @@ namespace DCFApixels.DragonECS public string Name { [MethodImpl(MethodImplOptions.AggressiveInlining)] - get => connect.name; + get { return connect.name; } } - public UnityGameObjectConnect(EcsEntityConnect connect) + public bool IsUnidirectional + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get { return connect == null; } + } + public bool IsConnected + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get { return transform != null; } + } + internal UnityGameObjectConnect(EcsEntityConnect connect) { this.connect = connect; transform = connect.transform; diff --git a/src/Buildin/UnityGameObjectConnect.cs.meta b/src/Connectors/UnityGameObjectConnect.cs.meta similarity index 100% rename from src/Buildin/UnityGameObjectConnect.cs.meta rename to src/Connectors/UnityGameObjectConnect.cs.meta diff --git a/src/Debug/Monitors/Editor/PipelineProcessesMonitorEditor.cs b/src/Debug/Monitors/Editor/PipelineProcessesMonitorEditor.cs index 7dffd56..b5b9e0a 100644 --- a/src/Debug/Monitors/Editor/PipelineProcessesMonitorEditor.cs +++ b/src/Debug/Monitors/Editor/PipelineProcessesMonitorEditor.cs @@ -2,9 +2,7 @@ using DCFApixels.DragonECS.Unity.Internal; using System; using System.Collections.Generic; -using System.Diagnostics; using System.Linq; -using System.Reflection; using UnityEditor; using UnityEngine; @@ -181,7 +179,7 @@ namespace DCFApixels.DragonECS.Unity.Editors GUI.EndScrollView(); Rect r = GUILayoutUtility.GetRect(EditorGUIUtility.currentViewWidth, EditorGUIUtility.singleLineHeight); - if(_selectedPointMeta.process != null && _selectedPointMeta.system != null) + if (_selectedPointMeta.process != null && _selectedPointMeta.system != null) { GUI.Label(r, $"{_selectedPointMeta.process.Name}-{_selectedPointMeta.system.Name}"); }