//This code create by CodeEngine

using System;
using Module.Log;
using Google.ProtocolBuffers;
using System.Collections;
using Games.GlobeDefine;
using Games.LogicObj;
using UnityEngine;
using Games.Scene;

namespace SPacket.SocketInstance
{
    public class GC_MOVEHandler : Ipacket
    {
        public uint Execute(PacketDistributed ipacket)
        {
            GC_MOVE packet = (GC_MOVE)ipacket;
            if (null == packet) 
                return (uint)PACKET_EXE.PACKET_EXE_ERROR;
            //临时代码,先返回,调试的时候打开
            //return (uint)PACKET_EXE.PACKET_EXE_CONTINUE;
            if(packet.posxList.Count<=0 && packet.poszList.Count<=0)
               return (uint)PACKET_EXE.PACKET_EXE_CONTINUE;
            //判断ServerID
            if (packet.Serverid == GlobeVar.INVALID_ID)
            {
                return (uint)PACKET_EXE.PACKET_EXE_CONTINUE;
            }
            //查找该NPC
            Obj_Character obj = Singleton<ObjManager>.GetInstance().FindObjCharacterInScene(packet.Serverid);
            if (null == obj)
            {
                //if (packet.posxList.Count > 0 && packet.poszList.Count > 0)
                //    ObjManager.Instance.MoveHidePlayer(packet.Serverid, packet.posxList[0].ToClientPos(), packet.poszList[0].ToClientPos());
                return (uint) PACKET_EXE.PACKET_EXE_CONTINUE;
            }

            //主玩家仅在跟随队伍时响应Move协议
            if (obj.ObjType == GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER &&
                GameManager.gameManager.PlayerDataPool.TeamInfo.GetFollowState() != TeamFollowState.followMove)
            {
                return (uint)PACKET_EXE.PACKET_EXE_CONTINUE;
            }
            var destPos = Vector2.zero;
            if (packet.posxList.Count > 0)
                destPos.x = packet.posxList[0];
            if (packet.poszList.Count > 0)
                destPos.y = packet.poszList[0];
            destPos = destPos.ToClientPos();
            Vector2? startPos = null;
            if (packet.HasSposx && packet.HasSposz)
            {
                startPos = new Vector2(packet.Sposx, packet.Sposz);
                startPos = startPos.Value.ToClientPos();
            }

            obj.SyncMove(startPos, destPos, MoveState.Move);
            return (uint)PACKET_EXE.PACKET_EXE_CONTINUE;
        }
    }
}