using CommonAI.ZoneClient; using CommonLang.Geometry; using ET; using ET.Client; using ET.EventType; public class BattleObject { public ZoneObject ZoneObject; public uint Id { get { return ZoneObject.ObjectID; } } public Vector3 LastPos = Vector3.Zero; public float LastRotation = 0; public BattleObject() { } public virtual void OnAwake(ZoneObject zo) { ZoneObject = zo; EventSystem.Instance.Publish(OnNewZoneObject.Static.Clone(Id)); } public virtual void OnSleep() { EventSystem.Instance.Publish(CurrentScene, new OnDestroyZoneObject() { ObjectId = Id }); ObjectPool.Instance.Recycle(this); } private static Scene _CurrentSceneCache = null; public static Scene CurrentScene { get { if (_CurrentSceneCache == null) { var cs = PlayerComponent.Instance.ClientScene(); _CurrentSceneCache = cs.GetComponent<CurrentScenesComponent>()?.Scene; } return _CurrentSceneCache; } } [Event(SceneType.Current)] public class AfterCreateCurrentScene_Battle : AEvent<ET.EventType.AfterCreateCurrentScene> { protected override async ETTask Run(Scene scene, ET.EventType.AfterCreateCurrentScene args) { _CurrentSceneCache = scene; await ETTask.CompletedTask; } } //TODO:监听场景退出事件 }