From a1af4b9165529d445f3dbc932c7920fad8094815 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=80=9D=E6=B5=B7?= <1464576565@qq.com> Date: Fri, 14 Nov 2025 11:38:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BA=8B=E4=BB=B6=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EventSourceGenerator.dll | Bin 27648 -> 18432 bytes Runtime/ABase/Event/EventContainer.cs | 163 ++++++++++++++++++ Runtime/ABase/Event/EventContainer.cs.meta | 3 + Runtime/ABase/Event/EventPublisher.cs | 37 ++++ Runtime/ABase/Event/EventPublisher.cs.meta | 3 + Runtime/ABase/Event/EventRuntimeHandle.cs | 1 - .../ABase/Event/EventRuntimeHandle.cs.meta | 4 +- Runtime/ABase/Event/IEventArgs.cs | 15 ++ Runtime/ABase/Event/IEventArgs.cs.meta | 3 + .../Event/Il2CppSetOptionAttribute.cs.meta | 3 +- .../Event/LocalizationChangeEvent.cs | 1 - Runtime/UI/EventListenerProxy.cs | 20 ++- 12 files changed, 239 insertions(+), 14 deletions(-) create mode 100644 Runtime/ABase/Event/EventContainer.cs create mode 100644 Runtime/ABase/Event/EventContainer.cs.meta create mode 100644 Runtime/ABase/Event/EventPublisher.cs create mode 100644 Runtime/ABase/Event/EventPublisher.cs.meta create mode 100644 Runtime/ABase/Event/IEventArgs.cs create mode 100644 Runtime/ABase/Event/IEventArgs.cs.meta diff --git a/Plugins/EventSourcecGenerator/EventSourceGenerator.dll b/Plugins/EventSourcecGenerator/EventSourceGenerator.dll index 4d79b82037ca6fe45045257c72587bfbaa630b39..45ce149b88feb3640611977f13ec5da63d8939b7 100644 GIT binary patch literal 18432 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 I|EGcf3zK<-F#rGn diff --git a/Runtime/ABase/Event/EventContainer.cs b/Runtime/ABase/Event/EventContainer.cs new file mode 100644 index 0000000..845104e --- /dev/null +++ b/Runtime/ABase/Event/EventContainer.cs @@ -0,0 +1,163 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using Unity.IL2CPP.CompilerServices; +using UnityEngine; + +namespace AlicizaX +{ + [Il2CppSetOption(Option.NullChecks, false)] + [Il2CppSetOption(Option.DivideByZeroChecks, false)] + [Il2CppSetOption(Option.ArrayBoundsChecks, false)] + public static class EventContainer where TPayload : struct, IEventArgs + { + private static readonly int InitialSize = EventInitialSize.Size; + private static Handler[] _handlers = new Handler[InitialSize]; + private static int[] _freeSlots = new int[InitialSize]; + private static int _freeCount = InitialSize; + private static int[] _activeIndices = new int[InitialSize]; + private static int _activeCount; + private static int _version; + +#if Event_StrickCheck + private static System.Collections.Generic.HashSet> _activeHandlers = new(); +#endif + + static EventContainer() + { + Debug.Log(InitialSize); + for (int i = 0; i < InitialSize; i++) + { + _freeSlots[i] = i; + } + } + + [Il2CppSetOption(Option.NullChecks, false)] + [Il2CppSetOption(Option.DivideByZeroChecks, false)] + [Il2CppSetOption(Option.ArrayBoundsChecks, false)] + [StructLayout(LayoutKind.Sequential, Pack = 4)] + private struct Handler + { + public Action Callback; + public int Version; + public int ActiveSlot; + } + + [Il2CppSetOption(Option.NullChecks, false)] + [Il2CppSetOption(Option.DivideByZeroChecks, false)] + [Il2CppSetOption(Option.ArrayBoundsChecks, false)] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static EventRuntimeHandle Subscribe(Action callback) + { +#if Event_StrickCheck + if (_activeHandlers.Contains(callback)) + { + Log.Warning($"重复订阅事件处理程序: {callback.Method.Name}"); + return default; + } + else + { + _activeHandlers.Add(callback); + } +#endif + + int handlerIndex = GetFreeSlot(); + if (_activeCount >= _activeIndices.Length) + { + Array.Resize(ref _activeIndices, _activeIndices.Length * 2); + } + + int activeIndex = _activeCount++; + _activeIndices[activeIndex] = handlerIndex; + + int version = ++_version; + _handlers[handlerIndex] = new Handler + { + Callback = callback, + Version = version, + ActiveSlot = activeIndex + }; + + return new EventRuntimeHandle(Unsubscribe, handlerIndex, version); + } + + [Il2CppSetOption(Option.NullChecks, false)] + [Il2CppSetOption(Option.DivideByZeroChecks, false)] + [Il2CppSetOption(Option.ArrayBoundsChecks, false)] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static int GetFreeSlot() + { + if (_freeCount > 0) return _freeSlots[--_freeCount]; + + int oldLen = _handlers.Length; + int newSize = oldLen == 0 ? 64 : oldLen * 2; + Array.Resize(ref _handlers, newSize); + Array.Resize(ref _freeSlots, newSize); + + for (int i = newSize - 1; i >= oldLen; i--) + { + _freeSlots[_freeCount++] = i; + } + + return _freeSlots[--_freeCount]; + } + + [Il2CppSetOption(Option.NullChecks, false)] + [Il2CppSetOption(Option.DivideByZeroChecks, false)] + [Il2CppSetOption(Option.ArrayBoundsChecks, false)] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void Unsubscribe(int handlerIndex, int version) + { + ref Handler handler = ref _handlers[handlerIndex]; + if (handler.Version != version) return; + + int lastActiveIndex = --_activeCount; + int lastHandlerIndex = _activeIndices[lastActiveIndex]; + int currentActiveIndex = handler.ActiveSlot; + + _activeIndices[currentActiveIndex] = lastHandlerIndex; + _handlers[lastHandlerIndex].ActiveSlot = currentActiveIndex; + +#if Event_StrickCheck + _activeHandlers.Remove(handler.Callback); +#endif + + handler.Callback = null; + handler.Version = 0; + + if (_freeCount >= _freeSlots.Length) + { + Array.Resize(ref _freeSlots, _freeSlots.Length * 2); + } + + _freeSlots[_freeCount++] = handlerIndex; + + } + + + [Il2CppSetOption(Option.NullChecks, false)] + [Il2CppSetOption(Option.DivideByZeroChecks, false)] + [Il2CppSetOption(Option.ArrayBoundsChecks, false)] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void Publish(in TPayload payload) + { + int count = _activeCount; + int[] indices = _activeIndices; + Handler[] handlers = _handlers; + + int i = 0; + for (; i <= count - 4; i += 4) + { + handlers[indices[i]].Callback(payload); + handlers[indices[i + 1]].Callback(payload); + handlers[indices[i + 2]].Callback(payload); + handlers[indices[i + 3]].Callback(payload); + } + + for (; i < count; i++) + { + handlers[indices[i]].Callback(payload); + } + } + } +} diff --git a/Runtime/ABase/Event/EventContainer.cs.meta b/Runtime/ABase/Event/EventContainer.cs.meta new file mode 100644 index 0000000..3639743 --- /dev/null +++ b/Runtime/ABase/Event/EventContainer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0b7c9a97647245b0a2e0a52e81a466db +timeCreated: 1763091204 \ No newline at end of file diff --git a/Runtime/ABase/Event/EventPublisher.cs b/Runtime/ABase/Event/EventPublisher.cs new file mode 100644 index 0000000..9ad163f --- /dev/null +++ b/Runtime/ABase/Event/EventPublisher.cs @@ -0,0 +1,37 @@ +using System; +using System.Runtime.CompilerServices; +using Unity.IL2CPP.CompilerServices; + +namespace AlicizaX +{ + public static class EventPublisher + { + [Il2CppSetOption(Option.NullChecks, false)] + [Il2CppSetOption(Option.DivideByZeroChecks, false)] + [Il2CppSetOption(Option.ArrayBoundsChecks, false)] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static EventRuntimeHandle Subscribe(Action handler) where T : struct, IEventArgs + { + return EventContainer.Subscribe(handler); + } + + [Il2CppSetOption(Option.NullChecks, false)] + [Il2CppSetOption(Option.DivideByZeroChecks, false)] + [Il2CppSetOption(Option.ArrayBoundsChecks, false)] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void Publish(in T evt) where T : struct, IEventArgs + { + EventContainer.Publish(evt); + } + + [Il2CppSetOption(Option.NullChecks, false)] + [Il2CppSetOption(Option.DivideByZeroChecks, false)] + [Il2CppSetOption(Option.ArrayBoundsChecks, false)] + public static void Publish(Action init) where T : struct, IEventArgs + { + var evt = default(T); + init(evt); + Publish(in evt); + } + } +} \ No newline at end of file diff --git a/Runtime/ABase/Event/EventPublisher.cs.meta b/Runtime/ABase/Event/EventPublisher.cs.meta new file mode 100644 index 0000000..8d84340 --- /dev/null +++ b/Runtime/ABase/Event/EventPublisher.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9376e522d00a4ddab67f7972174e565d +timeCreated: 1763091204 \ No newline at end of file diff --git a/Runtime/ABase/Event/EventRuntimeHandle.cs b/Runtime/ABase/Event/EventRuntimeHandle.cs index 6438bfe..c5beed1 100644 --- a/Runtime/ABase/Event/EventRuntimeHandle.cs +++ b/Runtime/ABase/Event/EventRuntimeHandle.cs @@ -4,7 +4,6 @@ using Unity.IL2CPP.CompilerServices; namespace AlicizaX { - public interface IEventArgs { } [AttributeUsage(AttributeTargets.Struct)] public sealed class PrewarmAttribute : Attribute diff --git a/Runtime/ABase/Event/EventRuntimeHandle.cs.meta b/Runtime/ABase/Event/EventRuntimeHandle.cs.meta index 6539b7d..4f47c50 100644 --- a/Runtime/ABase/Event/EventRuntimeHandle.cs.meta +++ b/Runtime/ABase/Event/EventRuntimeHandle.cs.meta @@ -1,3 +1,3 @@ fileFormatVersion: 2 -guid: d85feee75c2d4b54bd6b593fe55145d7 -timeCreated: 1740488369 \ No newline at end of file +guid: 39414de97b024c4dab09730a52a9de8e +timeCreated: 1763091204 \ No newline at end of file diff --git a/Runtime/ABase/Event/IEventArgs.cs b/Runtime/ABase/Event/IEventArgs.cs new file mode 100644 index 0000000..6a4d8b1 --- /dev/null +++ b/Runtime/ABase/Event/IEventArgs.cs @@ -0,0 +1,15 @@ +using System; +using System.Runtime.CompilerServices; +using Unity.IL2CPP.CompilerServices; + +namespace AlicizaX +{ + public interface IEventArgs { } + + public static class EventInitialSize where T : struct, IEventArgs + { + public static int Size = 4; // default + } + + +} \ No newline at end of file diff --git a/Runtime/ABase/Event/IEventArgs.cs.meta b/Runtime/ABase/Event/IEventArgs.cs.meta new file mode 100644 index 0000000..75d9b6c --- /dev/null +++ b/Runtime/ABase/Event/IEventArgs.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 31d1ce58a44948f4811a2e98aac18ec3 +timeCreated: 1763091204 \ No newline at end of file diff --git a/Runtime/ABase/Event/Il2CppSetOptionAttribute.cs.meta b/Runtime/ABase/Event/Il2CppSetOptionAttribute.cs.meta index 691658c..c06fc38 100644 --- a/Runtime/ABase/Event/Il2CppSetOptionAttribute.cs.meta +++ b/Runtime/ABase/Event/Il2CppSetOptionAttribute.cs.meta @@ -1,2 +1,3 @@ fileFormatVersion: 2 -guid: 997668ad76a5387428e679240d659155 \ No newline at end of file +guid: 98d81dd28e344b28aa08c53c92ae6257 +timeCreated: 1763091204 \ No newline at end of file diff --git a/Runtime/Localization/Event/LocalizationChangeEvent.cs b/Runtime/Localization/Event/LocalizationChangeEvent.cs index 784c94a..c25e2d5 100644 --- a/Runtime/Localization/Event/LocalizationChangeEvent.cs +++ b/Runtime/Localization/Event/LocalizationChangeEvent.cs @@ -1,4 +1,3 @@ -using AlicizaX.Framework.Runtime.Event.Generated; namespace AlicizaX.Localization { diff --git a/Runtime/UI/EventListenerProxy.cs b/Runtime/UI/EventListenerProxy.cs index f08689d..7131d58 100644 --- a/Runtime/UI/EventListenerProxy.cs +++ b/Runtime/UI/EventListenerProxy.cs @@ -1,5 +1,7 @@ - +using System; using System.Collections.Generic; +using System.Runtime.CompilerServices; +using Unity.IL2CPP.CompilerServices; namespace AlicizaX { @@ -10,16 +12,17 @@ namespace AlicizaX { private readonly List _eventHandles = new(); - public EventRuntimeHandle Subscribe + + [Il2CppSetOption(Option.NullChecks, false)] + [Il2CppSetOption(Option.DivideByZeroChecks, false)] + [Il2CppSetOption(Option.ArrayBoundsChecks, false)] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void AddUIEvent(Action handler) where T : struct, IEventArgs { - set => _eventHandles.Add(value); + EventRuntimeHandle handle = EventContainer.Subscribe(handler); + _eventHandles.Add(handle); } - public EventListenerProxy Add(EventRuntimeHandle handle) - { - _eventHandles.Add(handle); - return this; - } public void Clear() { @@ -27,6 +30,5 @@ namespace AlicizaX _eventHandles[i].Dispose(); _eventHandles.Clear(); } - } }