Allow station cargo histories to record larger values than 64k
See: #414
This commit is contained in:
@@ -23,6 +23,7 @@
|
||||
#include "currency.h"
|
||||
#include "zoom_func.h"
|
||||
#include "unit_conversion.h"
|
||||
#include "core/math_func.hpp"
|
||||
|
||||
#include "widgets/graph_widget.h"
|
||||
|
||||
@@ -1847,7 +1848,7 @@ struct StationCargoGraphWindow final : BaseGraphWindow {
|
||||
|
||||
uint offset = station->station_cargo_history_offset;
|
||||
for (uint j = 0; j < MAX_STATION_CARGO_HISTORY_DAYS; j++) {
|
||||
this->cost[i][j] = history[offset];
|
||||
this->cost[i][j] = RXDecompressUint(history[offset]);
|
||||
offset++;
|
||||
if (offset == MAX_STATION_CARGO_HISTORY_DAYS) offset = 0;
|
||||
}
|
||||
|
@@ -156,7 +156,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = {
|
||||
{ XSLFI_WATER_FLOODING, XSCF_NULL, 2, 2, "water_flooding", nullptr, nullptr, nullptr },
|
||||
{ XSLFI_MORE_HOUSES, XSCF_NULL, 2, 2, "more_houses", nullptr, nullptr, nullptr },
|
||||
{ XSLFI_CUSTOM_TOWN_ZONE, XSCF_IGNORABLE_UNKNOWN, 1, 1, "custom_town_zone", nullptr, nullptr, nullptr },
|
||||
{ XSLFI_STATION_CARGO_HISTORY, XSCF_NULL, 1, 1, "station_cargo_history", nullptr, nullptr, nullptr },
|
||||
{ XSLFI_STATION_CARGO_HISTORY, XSCF_NULL, 2, 2, "station_cargo_history", nullptr, nullptr, nullptr },
|
||||
{ XSLFI_TRAIN_SPEED_ADAPTATION, XSCF_NULL, 2, 2, "train_speed_adaptation", nullptr, nullptr, "TSAS" },
|
||||
{ XSLFI_EXTRA_STATION_NAMES, XSCF_NULL, 1, 1, "extra_station_names", nullptr, nullptr, nullptr },
|
||||
{ XSLFI_DEPOT_ORDER_EXTRA_FLAGS,XSCF_IGNORABLE_UNKNOWN, 1, 1, "depot_order_extra_flags", nullptr, nullptr, nullptr },
|
||||
|
@@ -14,6 +14,7 @@
|
||||
#include "../vehicle_base.h"
|
||||
#include "../newgrf_station.h"
|
||||
#include "../newgrf_roadstop.h"
|
||||
#include "../core/math_func.hpp"
|
||||
|
||||
#include "saveload.h"
|
||||
#include "saveload_buffer.h"
|
||||
@@ -680,6 +681,13 @@ static void Load_STNN()
|
||||
amount = buffer->RawReadUint16();
|
||||
}
|
||||
}
|
||||
if (SlXvIsFeaturePresent(XSLFI_STATION_CARGO_HISTORY, 1, 1)) {
|
||||
for (auto &history : st->station_cargo_history) {
|
||||
for (uint16 &amount : history) {
|
||||
amount = RXCompressUint(amount);
|
||||
}
|
||||
}
|
||||
}
|
||||
st->station_cargo_history_offset = 0;
|
||||
}
|
||||
|
||||
|
@@ -839,7 +839,7 @@ public:
|
||||
|
||||
CargoTypes station_cargo_history_cargoes; ///< Bitmask of cargoes in station_cargo_history
|
||||
uint8 station_cargo_history_offset; ///< Start offset in station_cargo_history cargo ring buffer
|
||||
std::vector<std::array<uint16, MAX_STATION_CARGO_HISTORY_DAYS>> station_cargo_history; ///< Station history of waiting cargo.
|
||||
std::vector<std::array<uint16, MAX_STATION_CARGO_HISTORY_DAYS>> station_cargo_history; ///< Station history of waiting cargo, dynamic range compressed (see RXCompressUint)
|
||||
|
||||
Station(TileIndex tile = INVALID_TILE);
|
||||
~Station();
|
||||
|
@@ -59,6 +59,7 @@
|
||||
#include "tunnelbridge_map.h"
|
||||
#include "cheat_type.h"
|
||||
#include "newgrf_roadstop.h"
|
||||
#include "core/math_func.hpp"
|
||||
|
||||
#include "table/strings.h"
|
||||
|
||||
@@ -475,7 +476,7 @@ void Station::UpdateCargoHistory()
|
||||
this->station_cargo_history.emplace(this->station_cargo_history.begin() + storage_offset);
|
||||
}
|
||||
}
|
||||
this->station_cargo_history[storage_offset][this->station_cargo_history_offset] = static_cast<uint16>(std::clamp<uint>(amount, (uint)0, (uint)UINT16_MAX));
|
||||
this->station_cargo_history[storage_offset][this->station_cargo_history_offset] = RXCompressUint(amount);
|
||||
storage_offset++;
|
||||
}
|
||||
this->station_cargo_history_offset++;
|
||||
|
Reference in New Issue
Block a user