/// <summary> /// Processes fuel consumption /// </summary> /// <param name="vehicle"></param> public void ConsumeFuel(Vehicle vehicle) { float fuel = vehicle.FuelLevel; // Consuming if (fuel > 0 && vehicle.IsEngineRunning) { float normalizedRPMValue = (float)Math.Pow(vehicle.CurrentRPM, 1.5); fuel -= normalizedRPMValue * fuelRPMImpact; fuel -= vehicle.Acceleration * fuelAccelerationImpact; fuel -= vehicle.MaxTraction * fuelTractionImpact; } // Refueling if ( // If we have gas station near us currentGasStation != null && // And ped is in range of sqrt(80) to it Vector3.DistanceSquared(currentGasStation.Position, vehicle.Position) <= 80f ) { if (vehicle.IsEngineRunning) { helpTextTurnOff.Draw(); } else { if (fuelTankCapacity - fuel < 2f) { helpTextTurnOn.Draw(); } else { helpTextRefuel.Draw(); } if (Game.IsControlPressed(0, Control.Jump)) { if (fuel < fuelTankCapacity) { fuel += 0.1f; } if (fuel > fuelTankCapacity) { fuel = fuelTankCapacity; } } } } vehicle.FuelLevel = fuel; EntityDecoration.Set(vehicle, fuelLevelPropertyName, fuel); }
/// <summary> /// Inits fuel for given vehicle /// </summary> /// <param name="vehicle"></param> public void InitFuel(Vehicle vehicle) { initialized = true; if (VehiclesPetrolTanks.Has(vehicle)) { fuelTankCapacity = VehiclesPetrolTanks.Get(vehicle); } else { fuelTankCapacity = 65f; } if (!EntityDecoration.ExistOn(vehicle, fuelLevelPropertyName)) { EntityDecoration.Set( vehicle, fuelLevelPropertyName, RandomizeFuelLevel(vehicle.FuelLevel) ); } vehicle.FuelLevel = EntityDecoration.Get <float>(vehicle, fuelLevelPropertyName); }