using CommonAI.ZoneClient; using ET; using ET.Client; using ET.EventType; public class BattleObject { protected ZoneObject ZoneObject; public uint Id { get { return ZoneObject.ObjectID; } } public BattleObject() { } public virtual void OnAwake(ZoneObject zo) { ZoneObject = zo; EventSystem.Instance.Publish(CurrentScene, new OnNewZoneObject() { Object = this }); } public virtual void OnSleep() { AsyncSleep().Coroutine(); } protected async ETTask AsyncSleep() { await EventSystem.Instance.PublishAsync(CurrentScene, new OnDestroyZoneObject() { Object = this }); ObjectPool.Instance.Recycle(this); } private static Scene _CurrentSceneCache = null; public static Scene CurrentScene { get { if (_CurrentSceneCache == null) { var cs = ClientSceneManagerComponent.Instance.GetChild(UnitListComponent.Instance.DomainZone()); _CurrentSceneCache = cs.GetComponent().Scene; } return _CurrentSceneCache; } } [Event(SceneType.Current)] public class AfterCreateCurrentScene_Battle : AEvent { protected override async ETTask Run(Scene scene, ET.EventType.AfterCreateCurrentScene args) { _CurrentSceneCache = scene; await ETTask.CompletedTask; } } }