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.Clone(Id));
    }

    public virtual void OnSleep()
    {
        EventSystem.Instance.Publish( OnDestroyZoneObject.Clone(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]
    public class AfterCreateCurrentScene_Battle : BEvent<AfterCreateCurrentScene>
    {
        protected override async ETTask OnEvent(AfterCreateCurrentScene a)
        {
            _CurrentSceneCache = a.scene;
            await ETTask.CompletedTask;
        }
    }
    //TODO:监听场景退出事件

}