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:监听场景退出事件

}