MCPcopy Create free account
hub / github.com/OpenRCT2/OpenRCT2 / TrackDesignPlacePreview

Function TrackDesignPlacePreview

src/openrct2/ride/TrackDesign.cpp:1892–1984  ·  view source on GitHub ↗

* * rct2: 0x006D2189 * ebx = ride_id * cost = edi */

Source from the content-addressed store, hash-verified

1890 * cost = edi
1891 */
1892static bool TrackDesignPlacePreview(
1893 TrackDesignState& tds, const TrackDesign& td, Ride** outRide, TrackDesignGameStateData& gameStateData, bool placeScenery)
1894{
1895 *outRide = nullptr;
1896 gameStateData.flags = 0;
1897
1898 auto& gameState = getGameState();
1899 auto& objManager = GetContext()->GetObjectManager();
1900 auto entry_index = objManager.GetLoadedObjectEntryIndex(td.trackAndVehicle.vehicleObject);
1901
1902 RideId rideIndex;
1903 CommandFlags rideCreateFlags = { CommandFlag::apply, CommandFlag::allowDuringPaused, CommandFlag::noSpend };
1904 if (TrackDesignCreateRide(td.trackAndVehicle.rtdIndex, entry_index, rideCreateFlags, &rideIndex) == kMoney64Undefined)
1905 {
1906 return false;
1907 }
1908
1909 auto ride = GetRide(rideIndex);
1910 if (ride == nullptr)
1911 return false;
1912
1913 ride->customName = {};
1914
1915 ride->entranceStyle = objManager.GetLoadedObjectEntryIndex(td.appearance.stationObjectIdentifier);
1916 if (ride->entranceStyle == kObjectEntryIndexNull)
1917 {
1918 ride->entranceStyle = gameState.lastEntranceStyle;
1919 }
1920
1921 for (size_t i = 0; i < std::min(std::size(ride->trackColours), std::size(td.appearance.trackColours)); i++)
1922 {
1923 ride->trackColours[i] = td.appearance.trackColours[i];
1924 }
1925
1926 // Flat rides need their vehicle colours loaded for display
1927 // in the preview window
1928 if (!GetRideTypeDescriptor(td.trackAndVehicle.rtdIndex).flags.has(RtdFlag::hasTrack))
1929 {
1930 for (size_t i = 0; i < std::size(ride->vehicleColours); i++)
1931 {
1932 ride->vehicleColours[i] = td.appearance.vehicleColours[i];
1933 }
1934 }
1935
1936 _trackDesignDrawingPreview = true;
1937 uint8_t backup_rotation = _currentTrackPieceDirection;
1938 uint32_t backup_park_flags = gameState.park.flags;
1939 gameState.park.flags &= ~PARK_FLAGS_FORBID_HIGH_CONSTRUCTION;
1940 auto mapSize = TileCoordsXY{ gameState.mapSize.x * 16, gameState.mapSize.y * 16 };
1941
1942 _currentTrackPieceDirection = 0;
1943 const CoordsXYZD coords = { mapSize.x, mapSize.y, kMinimumLandZ, _currentTrackPieceDirection };
1944 const int32_t z = kMinimumLandZ + TrackDesignGetZPlacement(tds, td, RideGetTemporaryForPreview(), coords);
1945
1946 if (tds.hasScenery)
1947 {
1948 gameStateData.setFlag(TrackDesignGameStateFlag::HasScenery, true);
1949 }

Callers 1

TrackDesignDrawPreviewFunction · 0.85

Calls 10

GetContextFunction · 0.85
TrackDesignCreateRideFunction · 0.85
GetRideFunction · 0.85
TrackDesignGetZPlacementFunction · 0.85
TrackDesignPlaceVirtualFunction · 0.85
RideEntryIsInventedFunction · 0.85
hasMethod · 0.65
setFlagMethod · 0.65
removeMethod · 0.65

Tested by

no test coverage detected