using System; using System.Collections.Generic; using System.Reflection; using Cal; using ET.EventType; namespace ET { public class SkillOptionFactoryComponentAwakeSystem : AwakeSystem { public override void Awake(SkillOptionFactoryComponent self) { self.Awake(); } } public class SkillOptionFactoryComponentUpdateSystem : LoadSystem { public override void Load(SkillOptionFactoryComponent self) { self.Load(); } } public class SkillOptionFactoryComponentDestroySystem : DestroySystem { public override void Destroy(SkillOptionFactoryComponent self) { self.allBuffSystemTypes.Clear(); } } public static class SkillOptionFactorySystem { public class SkillOptionAquireInfo : AEvent { public override async ETTask Run(UpdatePer1MinuteOfDay args) { foreach (var info in ReferencePool.GetAllReferencePoolInfos()) { Log.Warning($"[{info.Type}] acq:{info.AcquireReferenceCount} release:{info.ReleaseReferenceCount} using:{info.UsingReferenceCount} unuse{info.UnusedReferenceCount}"); } await ETTask.CompletedTask; } } public static void Awake(this SkillOptionFactoryComponent self) { SkillOptionFactoryComponent.inatnce = self; self.Load(); } public static void Load(this SkillOptionFactoryComponent self) { self.allBuffSystemTypes.Clear(); ReferencePool.ClearAll(); Assembly assembly = typeof(SkillOptionLogic_伤害).Assembly; var types = assembly.GetTypes(); foreach (var type in types) { if (type.IsSubclassOf(typeof(SkillOptionLogicBase))) { SkillOptionLogicBase t = System.Activator.CreateInstance(type) as SkillOptionLogicBase; self.allBuffSystemTypes.TryAdd(t.skillOptionType, type); } } } public static SkillOptionLogicBase AcquireSkillOptionLogic(this SkillOptionFactoryComponent self,SkillOptionBase skillOption) { var skillOptionLogic = AcquireSkillOptionLogic(self,skillOption.optionType); skillOptionLogic.skillOptionBase = skillOption; return skillOptionLogic; } public static SkillOptionLogicBase AcquireSkillOptionLogic(this SkillOptionFactoryComponent self,SkillOptionType skillOptionType) { if (!self.allBuffSystemTypes.TryGetValue(skillOptionType, out var type)) return null; SkillOptionLogicBase skillOptionLogic = System.Activator.CreateInstance(type) as SkillOptionLogicBase; //SkillOptionLogicBase skillOptionLogic = ReferencePool.Acquire(type) as SkillOptionLogicBase; return skillOptionLogic; } } }