Skip to content

Commit 527e623

Browse files
committed
Fix swapping ride types with by forcing them to be differently named
1 parent ad02797 commit 527e623

File tree

1 file changed

+36
-1
lines changed

1 file changed

+36
-1
lines changed

src/ui/mainWindow.ts

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import { button, checkbox, CheckboxParams, colourPicker, compute, dropdown, dropdownSpinner, DropdownSpinnerParams, FlexiblePosition, groupbox, horizontal, label, SpinnerParams, toggle, twoway, vertical, viewport, WidgetCreator, window } from "openrct2-flexui";
22
import { isDevelopment, pluginVersion } from "../environment";
3+
import { RideType } from "../objects/rideType";
34
import { RideVehicleVariant, VehicleVisibility } from "../objects/rideVehicleVariant";
45
import { invoke, refreshRide } from "../services/events";
56
import { getDistanceFromProgress } from "../services/spacingEditor";
67
import { applyToTargets, CopyFilter, getTargets, getVehicleSettings } from "../services/vehicleCopier";
78
import { changeSpacing, changeTrackProgress, setMass, setPositionX, setPositionY, setPositionZ, setPoweredAcceleration, setPoweredMaximumSpeed, setPrimaryColour, setReversed, setRideType, setSeatCount, setSecondaryColour, setSpin, setTertiaryColour, setVariant } from "../services/vehicleEditor";
89
import { VehicleSpan } from "../services/vehicleSpan";
910
import { isValidGameVersion } from "../services/versionChecker";
11+
import * as Log from "../utilities/logger";
1012
import { floor } from "../utilities/math";
1113
import { VehicleViewModel } from "../viewmodels/vehicleViewModel";
1214
import { model as rideModel, rideWindow } from "./rideWindow";
@@ -281,7 +283,7 @@ const mainWindow = window({
281283
text: "Visuals",
282284
content: [
283285
dropdown({ // vehicle type editor
284-
items: compute(model._rideTypes, c => c.map(t => t._object().name)),
286+
items: compute(model._rideTypes, getUniqueRideTypeNames),
285287
tooltip: "All ride types currently available in the park",
286288
disabledMessage: "No ride types available",
287289
disabled: compute(model._isEditDisabled, model._type, (noEdit, type) => (noEdit || !type)),
@@ -530,3 +532,36 @@ function positionSpinner(params: LabelledSpinnerParams & FlexiblePosition): Widg
530532
params._noDisabledMessage = true;
531533
return labelSpinner(params);
532534
}
535+
536+
/**
537+
* Hack: make ride type names unique so they don't get mixed up.
538+
*/
539+
function getUniqueRideTypeNames(rideTypes: RideType[]): string[]
540+
{
541+
const length = rideTypes.length;
542+
const array = Array<string>(length);
543+
let streak: string | undefined;
544+
let last: string | undefined;
545+
let current: string | undefined;
546+
let idx = 0;
547+
548+
for (; idx < length; idx++)
549+
{
550+
current = rideTypes[idx]._object().name;
551+
552+
if (current === streak)
553+
{
554+
last += " "; // Add invisible space to add difference.
555+
}
556+
else
557+
{
558+
streak = last = current;
559+
}
560+
561+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
562+
array[idx] = last!;
563+
}
564+
565+
Log.debug("getUniqueRideTypeNames():", array);
566+
return array;
567+
}

0 commit comments

Comments
 (0)