public Engine(EngineSpeedCalc engineCalc, Rigidbody rigidbody, IGearManageable input, IReadOnlyReactiveProperty <GearState> gear) { mEngineCalc = engineCalc; mRigidbody = rigidbody; mGearManager = input; gear .Buffer(2, 1) .Subscribe(x => { //現在のギアデータ GearState currentGear = x.Last(); //1つ前のギアデータ GearState preGear = x.First(); //atの時ギアが下がった時に速度が少し下がる処理 //mtの時度外視 if (input.GetGearManager.IsMT) { return; } //Rの時は度外視 if (currentGear == GearState.REVERSE) { return; } if (preGear == GearState.REVERSE) { return; } //ギアが下げられた場合 if ((int)currentGear < (int)preGear) { mEngineSpeed -= 5.0f; } }); }
private void Initialize() { AccessToResources(); //ユーザーの入力を取得 mPlayerInput = GetComponent <IPlayerInput>(); mRigidbody = GetComponent <Rigidbody>(); mDataUiCarModel = FindObjectOfType <DataUiCarModel>(); mGameSceneManager = FindObjectOfType <GameSceneManager>(); mRigidbody.constraints = RigidbodyConstraints.FreezeRotation; mRigidbody.useGravity = false; mInitializer = new TransformInitializer(transform); //エンジン内で使用する計算クラス EngineSpeedCalc engineCalc = new EngineSpeedCalc(mVehicleSettings.GetEngineSettings, mVehicleSettings.GetPenaltySettings, mGearParam, mPlayerInput.GetCurrentGear); //エンジンを初期化 mEngine = new Engine(engineCalc, mRigidbody, gameObject.FindObjectOfInterface <IGearManageable>(), mPlayerInput.GetCurrentGear); mVehicleMove = new VehicleMove(mRigidbody, transform, mWheelParams, mVehicleSettings.GetDriftSettings, mVehicleSettings.GetSteerSensitivities); mAirRide = new AirRide(transform, mRayConfig.GetAirRideRayConfig, mVehicleSettings.GetAirRideSettings); mDirFix = new DirectionFix(transform, mRayConfig.GetDirectionFixRayConfig); mAIPenaltyRay = new DirectionFixRay(transform, mRayConfig.GetDirectionFixRayConfig); mWallHitCheck = new WallHitCheck(transform, mRayConfig.GetLRRayConfig); }