예제 #1
0
    IEnumerator MovePlayerByMarkSpeed()
    {
        bool isStopMove   = false;
        int  countNode    = 0;
        int  maxCountNode = PathNodes.Length;

        EndPos = PathNodes[1];

//		Debug.Log("Unity:"+"MovePlayerByMarkSpeed -> start time "+Time.realtimeSinceStartup);
        float timeLastVal     = Time.realtimeSinceStartup;
        float timeRotationVal = 0f;

        do
        {
            if (JiFenJieMianCtrl.GetInstance().GetIsShowFinishTask() && XkGameCtrl.IsLoadingLevel)
            {
                Debug.Log("Unity:" + "MovePlayerByMarkSpeed -> IsLoadingLevel " + XkGameCtrl.IsLoadingLevel
                          + ", IsShowFinishTask " + JiFenJieMianCtrl.GetInstance().GetIsShowFinishTask());
                yield break;
            }

            if (PlayerSt == PlayerTypeEnum.CartoonCamera)
            {
                if (XkGameCtrl.GetInstance().IsCartoonShootTest)
                {
                    Debug.Log("Unity:" + "MovePlayerByMarkSpeed -> IsCartoonShootTest "
                              + XkGameCtrl.GetInstance().IsCartoonShootTest);
                    yield break;
                }

                if (!PlayerCamera.GetActiveCamera())
                {
                    PlayerObj.SetActive(false);
                    isStopMove       = true;
                    IsStopMovePlayer = true;
                    yield break;
                }
            }
            else
            {
                if (XKPlayerHeTiData.IsActiveHeTiPlayer)
                {
                    IsStopMovePlayer = true;
                    yield break;
                }
            }

            if (IsMoveToAiMark)
            {
                countNode = 0;
                yield return(new WaitForSeconds(0.1f));

                continue;
            }

            if (XKTriggerStopMovePlayer.IsActiveTrigger)
            {
                yield return(new WaitForSeconds(0.1f));

                continue;
            }

            if (pcvr.GetInstance().m_SSMiGuTvCheck != null &&
                pcvr.GetInstance().m_SSMiGuTvCheck.IsDisplayMiGuPayUI)
            {
                //咪咕电视游戏支付界面显示时,停止镜头的运动.
                yield return(new WaitForSeconds(0.1f));

                continue;
            }

            if (XkGameCtrl.GetInstance().m_GameUICom != null &&
                XkGameCtrl.GetInstance().m_GameUICom.IsShowGameBaoYueUI)
            {
                //游戏包月UI界面显示时,停止镜头的运动.
                yield return(new WaitForSeconds(0.1f));

                continue;
            }

            if (XkGameCtrl.PlayerActiveNum <= 0)
            {
                //玩家激活数量小于1时,镜头停止前进.
                if (PlayerSt == PlayerTypeEnum.FeiJi)
                {
                    yield return(new WaitForSeconds(0.1f));

                    continue;
                }
            }

            if (XkGameCtrl.PlayerActiveNum <= 0 &&
                PlayerSt != PlayerTypeEnum.CartoonCamera)
            {
                if (!XkGameCtrl.IsMoveOnPlayerDeath)
                {
                    XkGameCtrl.PlayerYouLiangCur = 0;
                    timeLastVal = Time.realtimeSinceStartup;
                    yield return(new WaitForSeconds(0.1f));

                    continue;
                }
            }
            else
            {
                if (IsDelayMovePlayer)
                {
                    IsDelayMovePlayer = false;
                    ResetIsPlayerTingLiu();
                    yield return(new WaitForSeconds(TimeDelayMove));

                    continue;
                }
            }

            float ds    = 0f;
            float dTime = Time.realtimeSinceStartup - timeLastVal;
            if (dTime > 1f)
            {
                dTime = TimeUnitMove;
            }

            /*else {
             *      float minTimeUnit = 0.03f;
             *      dTime = dTime > minTimeUnit ? minTimeUnit : dTime;
             * }*/

            bool isRecordDTime = false;
            if (XkGameCtrl.GameJiTaiSt == GameJiTaiType.FeiJiJiTai)
            {
                if (PlayerSt == PlayerTypeEnum.FeiJi)
                {
                    isRecordDTime = true;
                }
            }
            else if (XkGameCtrl.GameJiTaiSt == GameJiTaiType.TanKeJiTai)
            {
                if (PlayerSt == PlayerTypeEnum.TanKe)
                {
                    isRecordDTime = true;
                }
            }

            if (isRecordDTime)
            {
                TestDTimeVal = dTime;
            }

            //dTime = TimeUnitMove; //test
            timeLastVal = Time.realtimeSinceStartup;
            float disAimNode = Vector3.Distance(transform.position, EndPos);
            if (JiaSuDuVal == 0)
            {
                ds = SpeedA * dTime;
            }
            else
            {
                ds = (SpeedA * dTime) + (0.5f * JiaSuDuVal * Mathf.Pow(dTime, 2f));
                if ((SpeedA >= SpeedB && JiaSuDuVal >= 0f) ||
                    (SpeedA <= SpeedB && JiaSuDuVal <= 0f))
                {
                    SpeedA = SpeedB;
                }
                else
                {
                    if (disAimNode >= ds)
                    {
                        SpeedA = SpeedA + (JiaSuDuVal * dTime);
                    }
                    else
                    {
                        float speedValTmp = 2f * JiaSuDuVal * disAimNode + Mathf.Pow(SpeedA, 2f);
                        if (speedValTmp > 0)
                        {
                            SpeedA = Mathf.Sqrt(speedValTmp);
                        }
                    }

                    if ((SpeedA >= SpeedB && JiaSuDuVal >= 0f) ||
                        (SpeedA <= SpeedB && JiaSuDuVal <= 0f))
                    {
                        SpeedA = SpeedB;
                    }
                }
            }

            if (XkGameCtrl.GameJiTaiSt == GameJiTaiType.FeiJiJiTai && PlayerSt == PlayerTypeEnum.FeiJi)
            {
                TestSpeed = SpeedA;
            }
            else if (XkGameCtrl.GameJiTaiSt == GameJiTaiType.TanKeJiTai && PlayerSt == PlayerTypeEnum.TanKe)
            {
                TestSpeed = SpeedA;
            }

            if (PlayerSt == PlayerTypeEnum.FeiJi ||
                PlayerSt == PlayerTypeEnum.CartoonCamera)
            {
                timeRotationVal += dTime;
                if (timeRotationVal <= TimeRotation)
                {
                    float perRot = timeRotationVal / TimeRotation;
                    perRot             = perRot > 1f ? 1f : perRot;
                    transform.rotation = Quaternion.Lerp(RotationStart, RotationEnd, perRot);
                }
            }
            else
            {
                if (Vector3.Distance(EndPos, transform.position) > 0.01f)
                {
                    Vector3 forwardVal = Vector3.Normalize(EndPos - transform.position);
                    transform.forward = Vector3.Lerp(transform.forward, forwardVal, dTime * SpeedA * 0.5f);
                }
            }
//			Debug.Log("Unity:"+"SpeedA "+SpeedA+", ds "+ds+", dTime "+dTime);

            if (disAimNode <= ds)
            {
//				Debug.Log("Unity:"+"Over, ds "+ds+", realDis "+Vector3.Distance(transform.position, EndPos)+", time "+dTime);
                countNode++;
                float disVal  = ds - disAimNode;
                float disNode = 0f;
                int   count   = 0;
                for (int i = countNode; i < (maxCountNode - 2); i++)
                {
                    if ((i + 1) >= PathNodes.Length)
                    {
                        break;
                    }

                    disNode = Vector3.Distance(PathNodes[i], PathNodes[i + 1]);
                    if (disVal > disNode)
                    {
                        disVal = disVal - disNode;
                        count++;
                        transform.position = PathNodes[countNode];
                        SmothMovePlayerCamera();
                    }
                    else
                    {
                        break;
                    }
                }
                countNode += count;

                /*if (count > 0) {
                 *      string outPut = PlayerSt == PlayerTypeEnum.FeiJi ? "feiJi: " : "tanKe: ";
                 *      outPut += "countNode "+countNode+",count "+count+", maxCountNode "+maxCountNode;
                 *      Debug.Log("Unity:"+outPut);
                 * }*/

                if (countNode < (maxCountNode - 1) && (countNode + 1) < PathNodes.Length)
                {
                    transform.position = EndPos;
                    SmothMovePlayerCamera();
                    EndPos         = PathNodes[countNode + 1];                       //更新EndPos.
                    ForwardMoveVal = Vector3.Normalize(EndPos - transform.position); //更新ForwardMoveVal.

//					Debug.Log("Unity:"+"***realDis "+Vector3.Distance(transform.position, EndPos));
//					Debug.Log("Unity:"+"***ForwardMoveVal "+Vector3.Distance(ForwardMoveVal, Vector3.zero));
                    yield return(new WaitForSeconds(TimeUnitMove));

                    continue;
                }
                else
                {
                    if (IsPlayerTingLiu)
                    {
                        TimeTingLiuValStart = Time.realtimeSinceStartup;
                        yield return(new WaitForSeconds(TimeTingLiuVal));

                        if (!XkGameCtrl.IsMoveOnPlayerDeath)
                        {
                            if (XkGameCtrl.IsActivePlayerOne || XkGameCtrl.IsActivePlayerTwo)
                            {
                                if (!IsDelayMovePlayer)
                                {
                                    ResetIsPlayerTingLiu();
                                }
                            }
                        }
                        else
                        {
                            if (!IsDelayMovePlayer)
                            {
                                ResetIsPlayerTingLiu();
                            }
                        }
                    }

                    timeLastVal        = Time.realtimeSinceStartup;
                    timeRotationVal    = 0f;
                    SpeedA             = SpeedB;
                    transform.position = EndPos;
                    SmothMovePlayerCamera();

                    if (!MovePlayerOnCompelteITween())
                    {
                        isStopMove = true;
                        break;
                    }
                    countNode    = 0;
                    maxCountNode = PathNodes.Length;
                    yield return(new WaitForSeconds(TimeUnitMove));

                    continue;
                }
            }

            transform.position += (ForwardMoveVal * ds);
            SmothMovePlayerCamera();
            yield return(new WaitForSeconds(TimeUnitMove));
        } while (!isStopMove);
    }