Move conversion of station object to TD4/6 import/export

This commit is contained in:
Gymnasiast 2023-12-10 20:10:39 +01:00
parent cfff3c53f9
commit 7df3b22e14
No known key found for this signature in database
GPG Key ID: DBFFF47AB2CA3EDD
7 changed files with 19 additions and 10 deletions

View File

@ -241,8 +241,7 @@ GameActions::Result TrackDesignAction::Execute() const
ride->lifecycle_flags |= RIDE_LIFECYCLE_NOT_CUSTOM_DESIGN;
ride->colour_scheme_type = _td.colour_scheme;
auto stationIdentifier = GetStationIdentifierFromStyle(_td.entrance_style);
ride->entrance_style = objManager.GetLoadedObjectEntryIndex(stationIdentifier);
ride->entrance_style = objManager.GetLoadedObjectEntryIndex(_td.StationObjectIdentifier);
if (ride->entrance_style == OBJECT_ENTRY_INDEX_NULL)
{
ride->entrance_style = gLastEntranceStyle;

View File

@ -204,6 +204,7 @@ namespace RCT1
td->vehicle_colours[i] = td->vehicle_colours[0];
}
td->StationObjectIdentifier = GetStationIdentifierFromStyle(RCT12_STATION_STYLE_PLAIN);
td->depart_flags = td4Base.DepartFlags;
td->number_of_trains = td4Base.NumberOfTrains;
td->number_of_cars_per_train = td4Base.NumberOfCarsPerTrain;

View File

@ -769,7 +769,7 @@ std::string_view GetStationIdentifierFromStyle(uint8_t style)
{
return _stationStyles[style];
}
return {};
return _stationStyles[RCT12_STATION_STYLE_INVISIBLE];
}
uint8_t GetStationStyleFromIdentifier(u8string_view identifier)

View File

@ -63,7 +63,8 @@ namespace RCT2
tempStream.WriteValue<uint8_t>(_trackDesign->vehicle_colours[i].Trim);
}
tempStream.WriteValue<uint8_t>(0);
tempStream.WriteValue<uint8_t>(_trackDesign->entrance_style);
auto entranceStyle = GetStationStyleFromIdentifier(_trackDesign->StationObjectIdentifier);
tempStream.WriteValue<uint8_t>(entranceStyle);
tempStream.WriteValue<uint8_t>(_trackDesign->total_air_time);
tempStream.WriteValue<uint8_t>(_trackDesign->depart_flags);
tempStream.WriteValue<uint8_t>(_trackDesign->number_of_trains);

View File

@ -86,7 +86,7 @@ namespace RCT2
td->vehicle_colours[i].Trim = td6.VehicleColours[i].TrimColour;
td->vehicle_colours[i].Tertiary = td6.VehicleAdditionalColour[i];
}
td->entrance_style = td6.EntranceStyle;
td->StationObjectIdentifier = GetStationIdentifierFromStyle(td6.EntranceStyle);
td->total_air_time = td6.TotalAirTime;
td->depart_flags = td6.DepartFlags;
td->number_of_trains = td6.NumberOfTrains;

View File

@ -82,6 +82,15 @@ static bool _trackDesignPlaceStateEntranceExitPlaced{};
static void TrackDesignPreviewClearMap();
static u8string_view TrackDesignGetStationObjectIdentifier(const Ride& ride)
{
const auto* stationObject = ride.GetStationObject();
if (stationObject == nullptr)
return "";
return stationObject->GetIdentifier();
}
ResultWithMessage TrackDesign::CreateTrackDesign(TrackDesignState& tds, const Ride& ride)
{
type = ride.type;
@ -122,7 +131,7 @@ ResultWithMessage TrackDesign::CreateTrackDesign(TrackDesignState& tds, const Ri
lift_hill_speed = ride.lift_hill_speed;
num_circuits = ride.num_circuits;
entrance_style = ride.GetEntranceStyle();
StationObjectIdentifier = TrackDesignGetStationObjectIdentifier(ride);
max_speed = static_cast<int8_t>(ride.max_speed / 65536);
average_speed = static_cast<int8_t>(ride.average_speed / 65536);
ride_length = ride.GetTotalLength() / 65536;
@ -564,7 +573,7 @@ void TrackDesign::Serialise(DataSerialiser& stream)
stream << DS_TAG(track_flags);
stream << DS_TAG(colour_scheme);
stream << DS_TAG(vehicle_colours);
stream << DS_TAG(entrance_style);
stream << DS_TAG(StationObjectIdentifier);
stream << DS_TAG(total_air_time);
stream << DS_TAG(depart_flags);
stream << DS_TAG(number_of_trains);
@ -1990,8 +1999,7 @@ static bool TrackDesignPlacePreview(TrackDesignState& tds, TrackDesign* td6, mon
ride->custom_name = {};
auto stationIdentifier = GetStationIdentifierFromStyle(td6->entrance_style);
ride->entrance_style = objManager.GetLoadedObjectEntryIndex(stationIdentifier);
ride->entrance_style = objManager.GetLoadedObjectEntryIndex(td6->StationObjectIdentifier);
if (ride->entrance_style == OBJECT_ENTRY_INDEX_NULL)
{
ride->entrance_style = gLastEntranceStyle;

View File

@ -126,7 +126,7 @@ struct TrackDesign
uint8_t track_flags;
uint8_t colour_scheme;
std::array<VehicleColour, OpenRCT2::Limits::MaxVehicleColours> vehicle_colours;
uint8_t entrance_style;
u8string StationObjectIdentifier{};
uint8_t total_air_time;
uint8_t depart_flags;
uint8_t number_of_trains;