Skip to content

Commit

Permalink
begin tailmodeprops work
Browse files Browse the repository at this point in the history
  • Loading branch information
ltsSmitty committed Feb 15, 2023
1 parent 2513008 commit b54da7a
Show file tree
Hide file tree
Showing 11 changed files with 468 additions and 142 deletions.
Binary file added img/0.1.1/before and after.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/0.1.1/mayhem.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/0.1.1/orange and blue.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/0.1.1/screenshot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
87 changes: 23 additions & 64 deletions src/objects/PaintPropsObj.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@ import * as Log from "../utilities/logger"
import { ParkRide } from "./parkRide";
import { PaintEndProps, PaintStartProps, TrainModePropertiesObj, ColourSet } from "./trainModeProps";
import { propStorage as storage } from '../services/preferenceSerializer';
import { PatternChoice, TailModePropertiesObj } from "./tailModeProps";

export type PaintMode = "train" | "tail";

export const paintModes: PaintMode[] = ["train", "tail"];

export type NumberOfSetsOrColours = 1 | 2 | 3;

export const propKeyStrings: Record<PaintEndProps | PaintStartProps | PaintMode | NumberOfSetsOrColours, string> = {
export const propKeyStrings: Record<PaintEndProps | PaintStartProps | PaintMode | NumberOfSetsOrColours | PatternChoice, string> = {
"afterFirstCar": "After first car",
"afterLastCar": "After last car",
"beforeNSegments": "N segments before",
Expand All @@ -22,82 +23,47 @@ export const propKeyStrings: Record<PaintEndProps | PaintStartProps | PaintMode
1: "1",
2: "2",
3: "3",
"before": "Before train",
"after": "After train",
} as const;

export type TailProps = {
tailColours: {
main: number,
additional: number,
supports: number
};
tailLength: number;
};

export interface TailModeProps {
numberOfTailColours: NumberOfSetsOrColours,
paintStart: PaintStartProps,
tailProps: TailProps[],
}

export type PaintProps = {
ride: [ParkRide, number],
colouringEnabled: boolean,
mode: PaintMode,
trainModeProps: TrainModePropertiesObj;
tailModeProps: TailModeProps;
};

const defaultTailColourProps: TailProps[] = [
{
tailColours: {
main: 26,
additional: 21,
supports: 26
},
tailLength: 3,
},
{
tailColours: {
main: 21,
additional: 20,
supports: 21
},
tailLength: 2,
},
{
tailColours: {
main: 20,
additional: 19,
supports: 20
},
tailLength: 1,
}
];

const defaultTailModeProps: TailModeProps = {
numberOfTailColours: 3,
paintStart: "afterLastCar",
tailProps: defaultTailColourProps
tailModeProps: TailModePropertiesObj;
};

export class PaintPropsObj {
readonly rideStore = store<[ParkRide, number] | null>(null);
readonly colouringEnabledStore = store<boolean>(false);
readonly modeStore: Store<PaintMode> = store<PaintMode>("train");
readonly tailModeProps: Store<TailModeProps> = store<TailModeProps>(defaultTailModeProps);
readonly tailModeProps = new TailModePropertiesObj();
readonly trainModeProps = new TrainModePropertiesObj();

private propChangeCallback: (props: PaintProps) => void;

constructor(propChangeCallback: (props: PaintProps) => void) {
this.propChangeCallback = propChangeCallback;
// make sure to save on colourSet change
this.trainModeProps.colourSets.subscribe((_colourSets: ColourSet[]): void => {

this.trainModeProps.colourSets.subscribe((_colourSets: ColourSet[]): void => { // handle train mode colour sets
Log.debug(`Saving colourSets on change.`);
this.saveProps();
});

this.trainModeProps.numberVehicleSets.subscribe((_numberVehicleSets): void => {
this.trainModeProps.numberVehicleSets.subscribe((_numberVehicleSets): void => { // handle train mode number of sets
this.saveProps();
});

this.tailModeProps.trackColourSets.subscribe((_trackColourSets): void => { // handle tail mode colour sets
Log.debug(`Saving tail track colourSets on change.`);
this.saveProps();
});

this.tailModeProps.numberOfTailSets.subscribe((_vehicleColourSets): void => { // handle tail mode colour sets
Log.debug(`Saving tail vehicle colourSets on change.`);
this.saveProps();
});
}
Expand All @@ -117,14 +83,12 @@ export class PaintPropsObj {
}

Log.debug(`In set Ride, Loaded colourSet`);
savedValues.trainModeProps.prettyPrintVehicleColours();
savedValues.trainModeProps.prettyPrintTrackColours();


// set the loaded values
this.colouringEnabled = savedValues.colouringEnabled;
this.mode = savedValues.mode;
this.trainModeProps.setFromExistingProps(savedValues.trainModeProps);
this.tailModeProps.setFromExistingProps(savedValues.tailModeProps);

// this.tailModeProps.set(savedValues.tailModeProps);
this.saveProps();
Expand All @@ -135,7 +99,7 @@ export class PaintPropsObj {
this.colouringEnabledStore.set(props.colouringEnabled);
this.modeStore.set(props.mode);
this.trainModeProps.setFromExistingProps(props.trainModeProps);
this.tailModeProps.set(props.tailModeProps);
this.tailModeProps.setFromExistingProps(props.tailModeProps);

this.saveProps();
}
Expand All @@ -158,17 +122,12 @@ export class PaintPropsObj {
return this.colouringEnabledStore.get();
}

updateTailModeProps(props: TailModeProps): void {
this.tailModeProps.set(props);
this.saveProps();
}

resetValues(): void {
// don't reset the ride
this.colouringEnabled = false;
this.mode = "train";
this.trainModeProps.reset();
// this.tailModeProps.set(defaultTailModeProps);
this.tailModeProps.reset();
this.saveProps();
}

Expand All @@ -184,7 +143,7 @@ export class PaintPropsObj {
colouringEnabled: this.colouringEnabled,
mode: this.mode,
trainModeProps: this.trainModeProps,
tailModeProps: this.tailModeProps.get(),
tailModeProps: this.tailModeProps
};

storage.saveRideProps(props);
Expand Down
192 changes: 149 additions & 43 deletions src/objects/tailModeProps.ts
Original file line number Diff line number Diff line change
@@ -1,47 +1,153 @@
import { arrayStore, store } from "openrct2-flexui";
import { ColourSet, ThreeTuple } from "./trainModeProps";
import * as Log from "../utilities/logger";
import _ from "lodash-es";
import { NumberOfSetsOrColours } from "./PaintPropsObj";

const defaultTailColourProps: TailProps[] = [
{
tailColours: {
main: 26,
additional: 21,
supports: 26
},
tailLength: 3,
},
{
tailColours: {
main: 21,
additional: 20,
supports: 21
},
tailLength: 2,
},
{
tailColours: {
main: 20,
additional: 19,
supports: 20
},
tailLength: 1,
}
];

const defaultTailModeProps: TailModeProps = {
numberOfTailColours: 3,
paintStart: "afterLastCar",
tailProps: defaultTailColourProps
};
export type TailProps = {
tailColours: {
main: number,
additional: number,
supports: number
};
tailLength: number;
export type PatternValue = 0 | 1 | 2 | 3;

type TrackColourSet = ColourSet["trackColours"];

export type PatternChoice = "before" | "after";

const defaultStartSegmentBefore = 1;
const defaultStartSegmentAfter = 1;
const defaultPatternChoice = "before";

const defaultNumberOfTailSets = 2;

const defaultTrackColourSet: TrackColourSet = { main: 0, additional: 0, supports: 0 };

const defaultTrackColourSets: ThreeTuple<TrackColourSet> = [
{ ...defaultTrackColourSet }, { ...defaultTrackColourSet }, { ...defaultTrackColourSet }];

const defaultTrainModePropsStore = {
trackColourSets: store<ThreeTuple<TrackColourSet>>(defaultTrackColourSets),
numberOfTailSets: store<NumberOfSetsOrColours>(defaultNumberOfTailSets),
patternBefore: arrayStore<PatternValue>([]),
patternAfter: arrayStore<PatternValue>([]),
patternChoice: store<PatternChoice>("before"),
startBefore: store<number>(defaultStartSegmentBefore),
startAfter: store<number>(defaultStartSegmentAfter),
};

export interface TailModeProps {
numberOfTailColours: NumberOfSetsOrColours,
paintStart: PaintStartProps,
tailProps: TailProps[],
export interface TailModeProperties {
trackColourSets: ThreeTuple<TrackColourSet>;
numberOfTailSets: NumberOfSetsOrColours;
patternBefore: PatternValue[];
patternAfter: PatternValue[];
patternChoice: PatternChoice;
startBefore: number;
startAfter: number;
}

export class TailModePropertiesObj {
readonly trackColourSets = store<ThreeTuple<TrackColourSet>>(defaultTrackColourSets);
readonly numberOfTailSets = store<NumberOfSetsOrColours>(defaultNumberOfTailSets);
readonly patternBefore = arrayStore<PatternValue>([]);
readonly patternAfter = arrayStore<PatternValue>([]);
readonly patternChoice = store<PatternChoice>(defaultPatternChoice);
readonly startBefore = store<number>(defaultStartSegmentBefore);
readonly startAfter = store<number>(defaultStartSegmentAfter);

reset(): void {
Log.debug(`Resetting tail mode properties to defaults.`);
this.trackColourSets.set({ ...defaultTrackColourSets });
this.numberOfTailSets.set(defaultNumberOfTailSets);
this.patternBefore.set([]);
this.patternAfter.set([]);
this.patternChoice.set(defaultPatternChoice);
this.startBefore.set(defaultStartSegmentBefore);
this.startAfter.set(defaultStartSegmentAfter);
}

setTrackColour(params: { trackIndex: number, part: keyof TrackColourSet, colour: number }): void {
const { trackIndex, part, colour } = params;
const trackColourSets = this.trackColourSets.get();
trackColourSets[trackIndex][part] = colour;
this.trackColourSets.set(trackColourSets);
}

prettyPrintTrackColours(): void {
Log.debug(`Track colours:
[ ${this.trackColourSets.get()[0].main}, ${this.trackColourSets.get()[0].additional}, ${this.trackColourSets.get()[0].supports} ]
[ ${this.trackColourSets.get()[1].main}, ${this.trackColourSets.get()[1].additional}, ${this.trackColourSets.get()[1].supports} ]
[ ${this.trackColourSets.get()[2].main}, ${this.trackColourSets.get()[2].additional}, ${this.trackColourSets.get()[2].supports} ]`);
}

addToPattern(params: { pattern: PatternChoice, value: PatternValue }): void {
const { pattern, value } = params;
const patternStore = pattern === "before" ? this.patternBefore : this.patternAfter;
patternStore.push(value);
}

removeFromPattern(params: { pattern: PatternChoice }): void {
const { pattern } = params;
const patternStore = pattern === "before" ? this.patternBefore : this.patternAfter;
patternStore.pop();
}

setStartValue(params: { pattern: PatternChoice, value: number }): void {
const { pattern, value } = params;
const startStore = pattern === "before" ? this.startBefore : this.startAfter;
startStore.set(value);
}

setPattern(params: { pattern: PatternChoice, values: PatternValue[] }): void {
const { pattern, values } = params;
const patternStore = pattern === "before" ? this.patternBefore : this.patternAfter;
patternStore.set(values);
}

setPatternChoice(pattern: PatternChoice): void {
this.patternChoice.set(pattern);
}

setNumberOfTailSets(value: NumberOfSetsOrColours): void {
this.numberOfTailSets.set(value);
}

setFromExistingProps(existingProps: TailModePropertiesObj): void {
this.trackColourSets.set(existingProps.trackColourSets.get() ?? defaultTrackColourSets);
this.numberOfTailSets.set(existingProps.numberOfTailSets.get() ?? defaultNumberOfTailSets);
this.patternBefore.set(existingProps.patternBefore.get() ?? []);
this.patternAfter.set(existingProps.patternAfter.get() ?? []);
this.patternChoice.set(existingProps.patternChoice.get() ?? defaultPatternChoice);
this.startBefore.set(existingProps.startBefore.get() ?? defaultStartSegmentBefore);
this.startAfter.set(existingProps.startAfter.get() ?? defaultStartSegmentAfter);
}

flatten(): TailModeProperties {
return {
trackColourSets: { ...this.trackColourSets.get() },
numberOfTailSets: this.numberOfTailSets.get(),
patternBefore: this.patternBefore.get(),
patternAfter: this.patternAfter.get(),
patternChoice: this.patternChoice.get(),
startBefore: this.startBefore.get(),
startAfter: this.startAfter.get(),
};
}

setTrackColourSets(trackColourSets: ThreeTuple<TrackColourSet>): void {
this.trackColourSets.set([
_.cloneDeep(trackColourSets[0]),
_.cloneDeep(trackColourSets[1]),
_.cloneDeep(trackColourSets[2]),
]);
}

unflatten(props: TailModeProperties): void {
if (!props.trackColourSets) { return }
Log.debug(`Unflattening tail mode properties.`);

this.setTrackColourSets(props.trackColourSets);
this.setNumberOfTailSets(props.numberOfTailSets);
this.setStartValue({ pattern: "before", value: props.startBefore });
this.setStartValue({ pattern: "after", value: props.startAfter });
this.setPatternChoice(props.patternChoice);
this.setPattern({ pattern: "before", values: props.patternBefore });
this.setPattern({ pattern: "after", values: props.patternAfter });
}
}

2 changes: 1 addition & 1 deletion src/objects/trainModeProps.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ export type ColourSet = {
trackColours: { main: number, additional: number, supports: number };
};

type ThreeTuple<T> = [T, T, T];
export type ThreeTuple<T> = [T, T, T];

export interface TrainModeProperties {
colourSets: ThreeTuple<ColourSet>,
Expand Down
Loading

0 comments on commit b54da7a

Please sign in to comment.