Пример #1
0
    public void Penalty()
    {
        if (Mathf.Approximately(mWallPenalty, mDriftPenalty) && Mathf.Approximately(mAiPenalty, mDriftPenalty))
        {
            return;
        }
        if (mCurrentGear.Value == GearState.REVERSE)
        {
            return;
        }
        float penalty = new List <float> {
            mWallPenalty, mAiPenalty, mDriftPenalty
        }.OrderBy(x => x).First();

        float penaltyMax = penalty * mMaxSpeed;

        if (Mathf.Approximately(penalty, mWallPenalty))
        {
            mCurrentMaxSpeed = SpeedLimitController.DecreaseMaxSpeed(penaltyMax, mCurrentMaxSpeed, mCurrentMaxSpeed, mPenaltySettings.WallPenaltyDecreaseSpeed);
        }
        else if (Mathf.Approximately(penalty, mDriftPenalty))
        {
            mCurrentMaxSpeed = SpeedLimitController.DecreaseMaxSpeed(penaltyMax, mCurrentMaxSpeed, mCurrentMaxSpeed, mPenaltySettings.DriftPenaltyDecreaseSpeed);
        }
        else if (Mathf.Approximately(penalty, mAiPenalty))
        {
            mCurrentMaxSpeed = SpeedLimitController.DecreaseMaxSpeed(penaltyMax, mCurrentMaxSpeed, mCurrentMaxSpeed, mPenaltySettings.AiPenaltyDecreaseSpeed);
        }
    }
Пример #2
0
 void Start()
 {
     speedLimitController = new SpeedLimitController();
     scoreController      = new ScoreController();
     gameOverUI           = GameObject.Find("GameOverPanel");
     gameOverUI.SetActive(false);
     activeRoadIndex = -1;
 }
Пример #3
0
    /*■■■PUBLIC■■■*/
    /// <summary>
    /// 速度を増減させる処理
    /// </summary>
    /// <param name="engineSpeed"></param>
    /// <param name="accel"></param>
    /// <returns></returns>
    public float CalcEngineSpeed(float engineSpeed, float accel)
    {
        accel = Mathf.Clamp01(accel);
        bool isNeutral = (mCurrentGear.Value == GearState.NEUTRAL);
        bool isReverse = (mCurrentGear.Value == GearState.REVERSE);
        bool isStop    = (Mathf.Approximately(engineSpeed, 0.0f));

        if (isNeutral)
        {
            accel = 0.0f;
        }

        /*ギア変更後速度が現在の最高速度より高い場合、accelを0にする*/
        if (!isReverse && engineSpeed > mMaxSpeed)
        {
            accel = 0.0f;
        }

        /*ギアがニュートラル"でない"かつ、エンジン回転数が0以下だった場合、
         * 値を代入する。0だと動かなくなる為*/
        if (!isNeutral && isStop)
        {
            engineSpeed = VehicleSettings.EngineSettings.LOWEST_ENGINE_SPEED;
        }

        //回転数上げる処理。リバースギアのときはアクセル踏むと逆に進む
        if (!isReverse)
        {
            engineSpeed += SpeedCalculator.CalcRotToAdd(engineSpeed, mAccPow, accel, mNeedSpeed);
        }
        else
        {
            engineSpeed -= SpeedCalculator.CalcRotToAdd(engineSpeed, mAccPow, accel, mNeedSpeed);
        }

        //アクセルにあわせて回転数の限界を調節する処理

        /*リバースギアに入れた時に減速が早すぎる為。
         * engine brakeの値を0にするとリバースギアで下がったら止まらなくなる*/
        if (!(isReverse && (engineSpeed > 0.0f)))
        {
            engineSpeed = SpeedLimitController.EngineBrake(engineSpeed, accel, mMaxSpeed, mEngineBrakePow);
        }

        //ギアを下げたとき最大回転数をlerpで逓減する処理
        mCurrentMaxSpeed = SpeedLimitController.DecreaseMaxSpeed(mMaxSpeed, mPreMaxSpeed, mCurrentMaxSpeed, mEngineSettings.DecreaseSpeed);

        //ペナルティ用
        Penalty();

        mCurrentMaxSpeed = Mathf.Abs(mCurrentMaxSpeed);
        //範囲内に収める処理
        return(Mathf.Clamp(engineSpeed, mLowestSpeed, mCurrentMaxSpeed));
    }