37 lines
1.4 KiB
C#
37 lines
1.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace Activity.EventSubscriber
|
|
{
|
|
public class ActivitySubscriberManager
|
|
{
|
|
private static List<IActivityEventSubscriber> _activityEventSubscribers;
|
|
|
|
// 已注册的订阅者类型,用于防止重复初始化
|
|
private static readonly HashSet<Type> _registeredSubscriberTypes = new();
|
|
|
|
public static List<IActivityEventSubscriber> ActivityEventSubscribers =>
|
|
_activityEventSubscribers ??= new List<IActivityEventSubscriber>();
|
|
|
|
public static void InitEventSubscriber(Type type)
|
|
{
|
|
try
|
|
{
|
|
var res = typeof(IActivityEventSubscriber).IsAssignableFrom(type) && type.IsClass;
|
|
if (!res) return;
|
|
|
|
// 同一个订阅者类型只初始化一次,避免 Stage 重进导致重复订阅
|
|
if (_registeredSubscriberTypes.Contains(type)) return;
|
|
|
|
_activityEventSubscribers ??= new List<IActivityEventSubscriber>();
|
|
_activityEventSubscribers.Add((IActivityEventSubscriber)Activator.CreateInstance(type));
|
|
_registeredSubscriberTypes.Add(type);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Debug.LogError($"[ActivitySubscriberManager] Error processing type {type.Name}: {e.Message}");
|
|
}
|
|
}
|
|
}
|
|
} |