diff options
Diffstat (limited to 'src/train_cmd.cpp')
-rw-r--r-- | src/train_cmd.cpp | 128 |
1 files changed, 0 insertions, 128 deletions
diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 90ff4dd1c..39ef3c33f 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -88,75 +88,6 @@ byte FreightWagonMult(CargoID cargo) return _settings_game.vehicle.freight_trains; } - -/** - * Recalculates the cached total power of a train. Should be called when the consist is changed - */ -void Train::PowerChanged() -{ - assert(this->First() == this); - - uint32 total_power = 0; - uint32 max_te = 0; - uint32 number_of_parts = 0; - uint16 max_track_speed = this->GetInitialMaxSpeed(); - - for (const Train *u = this; u != NULL; u = u->Next()) { - uint32 current_power = u->GetPower(); - total_power += current_power; - - /* Only powered parts add tractive effort */ - if (current_power > 0) max_te += u->GetWeight() * u->GetTractiveEffort(); - total_power += u->GetPoweredPartPower(this); - number_of_parts++; - - /* Get minimum max speed for this track */ - uint16 track_speed = u->GetMaxTrackSpeed(); - if (track_speed > 0) max_track_speed = min(max_track_speed, track_speed); - } - - this->acc_cache.cached_axle_resistance = 60 * number_of_parts; - this->acc_cache.cached_air_drag = 20 + 3 * number_of_parts; - - max_te *= 10000; // Tractive effort in (tonnes * 1000 * 10 =) N - max_te /= 256; // Tractive effort is a [0-255] coefficient - if (this->acc_cache.cached_power != total_power || this->acc_cache.cached_max_te != max_te) { - /* Stop the vehicle if it has no power */ - if (total_power == 0) this->vehstatus |= VS_STOPPED; - - this->acc_cache.cached_power = total_power; - this->acc_cache.cached_max_te = max_te; - SetWindowDirty(WC_VEHICLE_DETAILS, this->index); - SetWindowWidgetDirty(WC_VEHICLE_VIEW, this->index, VVW_WIDGET_START_STOP_VEH); - } - - this->acc_cache.cached_max_track_speed = max_track_speed; -} - - -/** - * Recalculates the cached weight of a train and its vehicles. Should be called each time the cargo on - * the consist changes. - */ -void Train::CargoChanged() -{ - assert(this->First() == this); - uint32 weight = 0; - - for (Train *u = this; u != NULL; u = u->Next()) { - uint32 current_weight = u->GetWeight(); - weight += current_weight; - u->acc_cache.cached_slope_resistance = current_weight * u->GetSlopeSteepness(); - } - - /* store consist weight in cache */ - this->acc_cache.cached_weight = weight; - - /* Now update train power (tractive effort is dependent on weight) */ - this->PowerChanged(); -} - - /** Logs a bug in GRF and shows a warning message if this * is for the first time this happened. * @param u first vehicle of chain @@ -501,65 +432,6 @@ int Train::GetCurrentMaxSpeed() const return min(max_speed, this->acc_cache.cached_max_track_speed); } -/** - * Calculates the acceleration of the vehicle under its current conditions. - * @return Current acceleration of the vehicle. - */ - -int Train::GetAcceleration() const -{ - int32 speed = this->GetCurrentSpeed(); - - /* Weight is stored in tonnes */ - int32 mass = this->acc_cache.cached_weight; - - /* Power is stored in HP, we need it in watts. */ - int32 power = this->acc_cache.cached_power * 746; - - int32 resistance = 0; - - bool maglev = this->GetAccelerationType() == 2; - - const int area = 120; - if (!maglev) { - resistance = (13 * mass) / 10; - resistance += this->acc_cache.cached_axle_resistance; - resistance += (this->GetRollingFriction() * mass * speed) / 1000; - resistance += (area * this->acc_cache.cached_air_drag * speed * speed) / 10000; - } else { - resistance += (area * this->acc_cache.cached_air_drag * speed * speed) / 20000; - } - - resistance += this->GetSlopeResistance(); - resistance *= 4; //[N] - - /* This value allows to know if the vehicle is accelerating or braking. */ - AccelStatus mode = this->GetAccelerationStatus(); - - const int max_te = this->acc_cache.cached_max_te; // [N] - int force; - if (speed > 0) { - if (!maglev) { - force = power / speed; //[N] - force *= 22; - force /= 10; - if (mode == AS_ACCEL && force > max_te) force = max_te; - } else { - force = power / 25; - } - } else { - /* "kickoff" acceleration */ - force = (mode == AS_ACCEL && !maglev) ? min(max_te, power) : power; - force = max(force, (mass * 8) + resistance); - } - - if (mode == AS_ACCEL) { - return (force - resistance) / (mass * 2); - } else { - return min(-force - resistance, -10000) / mass; - } -} - void Train::UpdateAcceleration() { assert(this->IsFrontEngine()); |