Example #1
0
        public void ReceiveSetPos(S2CNwarSetPos pack)
        {
            if (mOwner.MoveImplement != null)
            {
                Vector3 pos    = RoleHelp.GetPositionInScene(mOwner.ActorId, pack.move.pos.px * GlobalConst.UnitScale, pack.move.pos.py * GlobalConst.UnitScale);
                bool    result = false;
                pos = InstanceHelper.ClampInWalkableRange(pos, pos, out result);
                mOwner.MoveImplement.SetPosition(pos);
            }

            bool isWalking = mOwner.ActorMachine.IsWalking();

            mOwner.Stop();
            TryWalkAlongStop();

            // 如果当前正在寻路,则重新寻路,因为需要重新计算路径
            if (isWalking == true && mOwner.ActorMachine.DestList.size > 0)
            {
                int newWalkId = 0;
                if (mReachCallbacks != null && mReachCallbacks.ContainsKey(m_WalkId) == true)
                {
                    newWalkId = TryWalkToAlong(mOwner.ActorMachine.DestList[mOwner.ActorMachine.DestList.size - 1], mReachCallbacks[m_WalkId]);
                }
                else
                {
                    newWalkId = TryWalkToAlong(mOwner.ActorMachine.DestList[mOwner.ActorMachine.DestList.size - 1]);
                }

                // 如果当前正在任务寻路,则赋值给最新的walk id
                if (TargetPathManager.Instance.IsNavigating == true && TargetPathManager.Instance.PathWalker != null)
                {
                    TargetPathManager.Instance.PathWalker.WalkId = newWalkId;
                }
            }

            // 本地是否要激活自动战斗
            if (pack.move.id == LocalPlayerManager.Instance.LocalActorAttribute.UnitId.obj_idx)
            {
                if (SceneHelp.Instance.IsAutoFightingAfterSwitchInstance == true)
                {
                    SceneHelp.Instance.IsAutoFightingAfterSwitchInstance = false;
                    InstanceManager.Instance.IsAutoFighting = true;
                }
                mIsMoving = false;
            }
        }
Example #2
0
        // 强制位置同步
        public static void ReceiveSetPos(byte[] data)
        {
            S2CNwarSetPos pack = S2CPackBase.DeserializePack <S2CNwarSetPos>(data);

            Actor actor = ActorManager.Instance.GetPlayer(pack.move.id);

            if (null == actor)
            {
                return;
            }

            MoveCtrl ctrl = actor.MoveCtrl;

            if (null != ctrl)
            {
                ctrl.ReceiveSetPos(pack);
            }
        }