Пример #1
0
    //根据服务器GC_MOVE包插入新的路经点
    public void InsertAutoMovePoint(GC_MOVE packet)
    {
        if (Cutscene.CutsceneManager.Instance.IsPlayingCutscene)
        {
            return;
        }

        //if (null == m_posList || null == m_BindObj)
        //{
        //    return;
        //}
        if (null == m_BindObj)
        {
            return;
        }

        //校验ServerID
        if (packet.Serverid != m_BindObj.ServerID)
        {
            return;
        }

        bool isChange = false;

        for (int i = 0; i < packet.posserialCount; ++i)
        {
            AutoMovePos pos = new AutoMovePos();
            pos.m_nPosSerial = packet.posserialList[i];
            pos.m_fDstPosX   = ((float)packet.posxList[i]) / 100;
            pos.m_fDstPosZ   = ((float)packet.poszList[i]) / 100;

            //措施,当发现堆积点过多的时候,清空一下,只插入头一个点
            //if (m_posList.Count >= 32)
            //{
            //    ResetAutoMove();
            //}
            //m_posList.Add(pos);

            if (IsRightPosSerial(pos.m_nPosSerial))
            {
                m_nCurPosSerial = pos.m_nPosSerial;
                m_AutoMovePos   = pos;
                isChange        = true;
            }
        }


        if (isChange && m_AutoMovePos.m_nPosSerial >= 0)
        {
            BeginMove(m_AutoMovePos);
        }
    }
Пример #2
0
    //private bool IsReachPoint(AutoMovePos pos)
    //{
    //    //先判断序列号
    //    if (pos.m_nPosSerial != m_nCurPosSerial)
    //    {
    //        return false;
    //    }

    //    Vector2 dstPos = new Vector2(pos.m_fDstPosX, pos.m_fDstPosZ);
    //    Vector2 curPos = new Vector2(gameObject.transform.position.x, gameObject.transform.position.z);
    //    if (Vector2.Distance(curPos, dstPos) < 0.5f)
    //    {
    //        return true;
    //    }

    //    return false;
    //}

    //到达当前点,删除当前点,向下一个点移动
    //    private void ReachPoint()
    //    {
    //        if (null == m_posList || m_posList.Count <= 0)
    //        {
    //            return;
    //        }

    //#if UNITY_ANDROID

    //        BeginMove(m_posList[0]);
    //        移除当前点
    //        m_posList.RemoveAt(0);

    //#else
    //        移除当前点
    //        m_posList.RemoveAt(0);

    //        判断剩余点
    //        if (m_posList.Count <= 0)
    //        {
    //            已经无点,停止移动
    //            StopMove();
    //        }
    //        else
    //        {
    //            BeginMove(m_posList[0]);
    //        }

    //#endif
    //    }

    //移动开始
    private void BeginMove(AutoMovePos dstPos)
    {
        if (null == m_BindObj)
        {
            return;
        }

        //记录当前点序列号
        m_nCurPosSerial = dstPos.m_nPosSerial;

        //开始移动
        Vector3 dest = new Vector3(dstPos.m_fDstPosX, 0.0f, dstPos.m_fDstPosZ);

        dest = ActiveScene.GetTerrainPosition(dest);
//        m_bIsMove = true;
        m_BindObj.MoveTo(dest, null, 0.0f);
    }