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); } }
void Start() { speedLimitController = new SpeedLimitController(); scoreController = new ScoreController(); gameOverUI = GameObject.Find("GameOverPanel"); gameOverUI.SetActive(false); activeRoadIndex = -1; }
/*■■■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)); }