using ET.Client;
using ET.EventType;

namespace ET
{
    [Event]
    public class ReOpenGame : BEvent<ReOpenGame>
    {
        protected override async ETTask OnEvent(ReOpenGame a)
        {
            UnitMgr.Instance.RecycleUnits();
            BattleMgr.Instance.InitBattleLayer();
            BattleUnit.Reset();

            var session = PlayerComponent.Instance.ClientScene().GetComponent<SessionComponent>().Session;

            var ret = await session.Call(new C2G_BindPlayer() { PlayerId = PlayerComponent.Instance.PlayerId }) as G2C_BindPlayer;
            if(ret.Error != ErrorCode.ERR_Success)
            {
                Log.Error($"login error: {ret.Error}:{ret.Message}");
                return;
            }

            G2C_EnterMap g2CEnterMap = await session.Call(new C2G_EnterMap() { InstanceId = ret.Player.instanceId }) as G2C_EnterMap;
            if (g2CEnterMap.Error != 0)
            {
                Log.Error(g2CEnterMap.Message);
                return;
            }

            //告诉战斗服 i am ready,然后战斗服才会在场景创建其它单位
            session.Send(new BattleClientReady());
            EventSystem.Instance.Publish<ShowHUDEvent>();
        }
    }
}