Convert WIP root to use switch statement

This commit is contained in:
nickofolas 2022-05-04 12:44:48 -05:00
parent bcb6176952
commit cc5e89208e

@ -138,337 +138,366 @@ export function WorkInProgressRoot(): React.ReactElement {
let workInfo: IWorkInfo | null; let workInfo: IWorkInfo | null;
if (player.workType == CONSTANTS.WorkTypeFaction) { switch (player.workType) {
const faction = Factions[player.currentWorkFactionName]; case CONSTANTS.WorkTypeFaction: {
if (!faction) { const faction = Factions[player.currentWorkFactionName];
if (!faction) {
workInfo = {
buttons: {
cancel: () => router.toFactions(),
},
title:
`You have not joined ${player.currentWorkFactionName || "(Faction not found)"} at this time,` +
" please try again if you think this should have worked",
stopText: "Back to Factions",
};
}
function cancel(): void {
router.toFaction(faction);
player.finishFactionWork(true);
}
function unfocus(): void {
router.toFaction(faction);
player.stopFocusing();
}
workInfo = { workInfo = {
buttons: { buttons: {
cancel: () => router.toFactions(), cancel: cancel,
unfocus: unfocus,
}, },
title: title: (
`You have not joined ${player.currentWorkFactionName || "(Faction not found)"} at this time,` + <>
" please try again if you think this should have worked", You are currently {player.currentWorkFactionDescription} for your faction <b>{faction.name}</b>
</>
),
stopText: "Back to Factions", description: (
<>
Current Faction Reputation: <Reputation reputation={faction.playerReputation} />
</>
),
gains: [
player.workMoneyGained > 0 ? (
<StatsRow name="Money" color={Settings.theme.money}>
<Typography>
<Money money={player.workMoneyGained} /> (
<MoneyRate money={player.workMoneyGainRate * CYCLES_PER_SEC} />)
</Typography>
</StatsRow>
) : (
<></>
),
<StatsRow name="Faction Reputation" color={Settings.theme.rep}>
<Typography>
<Reputation reputation={player.workRepGained} /> (
<ReputationRate reputation={player.workRepGainRate * CYCLES_PER_SEC} />)
</Typography>
</StatsRow>,
...expGains,
],
progress: {
elapsed: player.timeWorked,
},
stopText: "Stop Faction work",
}; };
break;
} }
function cancel(): void { case CONSTANTS.WorkTypeStudyClass: {
router.toFaction(faction); const className = player.className;
player.finishFactionWork(true); function cancel(): void {
} player.finishClass(true);
function unfocus(): void { router.toCity();
router.toFaction(faction); }
player.stopFocusing();
function unfocus(): void {
router.toCity();
player.stopFocusing();
}
let stopText = "";
if (
className === CONSTANTS.ClassGymStrength ||
className === CONSTANTS.ClassGymDefense ||
className === CONSTANTS.ClassGymDexterity ||
className === CONSTANTS.ClassGymAgility
) {
stopText = "Stop training at gym";
} else {
stopText = "Stop taking course";
}
workInfo = {
buttons: {
cancel: cancel,
unfocus: unfocus,
},
title: (
<>
You are currently <b>{className}</b>
</>
),
gains: [
<StatsRow name="Total Cost" color={Settings.theme.money}>
<Typography>
<Money money={-player.workMoneyGained} /> (<MoneyRate money={player.workMoneyLossRate * CYCLES_PER_SEC} />
)
</Typography>
</StatsRow>,
...expGains,
],
progress: {
elapsed: player.timeWorked,
},
stopText: stopText,
};
break;
} }
workInfo = { case CONSTANTS.WorkTypeCompany: {
buttons: { const comp = Companies[player.companyName];
cancel: cancel, if (comp == null || !(comp instanceof Company)) {
unfocus: unfocus, workInfo = {
}, buttons: {
title: ( cancel: () => router.toTerminal(),
<> },
You are currently {player.currentWorkFactionDescription} for your faction <b>{faction.name}</b> title:
</> `You cannot work for ${player.companyName || "(Company not found)"} at this time,` +
), " please try again if you think this should have worked",
description: ( stopText: "Back to Terminal",
<> };
Current Faction Reputation: <Reputation reputation={faction.playerReputation} /> }
</>
), const companyRep = comp.playerReputation;
gains: [
player.workMoneyGained > 0 ? ( function cancel(): void {
player.finishWork(true);
router.toJob();
}
function unfocus(): void {
player.stopFocusing();
router.toJob();
}
const position = player.jobs[player.companyName];
const penalty = player.cancelationPenalty();
const penaltyString = penalty === 0.5 ? "half" : "three-quarters";
workInfo = {
buttons: {
cancel: cancel,
unfocus: unfocus,
},
title: (
<>
You are currently working as a <b>{position}</b> at <b>{player.companyName}</b>
</>
),
description: (
<>
Current Company Reputation: <Reputation reputation={companyRep} />
</>
),
gains: [
<StatsRow name="Money" color={Settings.theme.money}> <StatsRow name="Money" color={Settings.theme.money}>
<Typography> <Typography>
<Money money={player.workMoneyGained} /> (<MoneyRate money={player.workMoneyGainRate * CYCLES_PER_SEC} />) <Money money={player.workMoneyGained} /> (<MoneyRate money={player.workMoneyGainRate * CYCLES_PER_SEC} />)
</Typography> </Typography>
</StatsRow> </StatsRow>,
) : ( <StatsRow name="Company Reputation" color={Settings.theme.rep}>
<></> <Typography>
), <Reputation reputation={player.workRepGained} /> (
<StatsRow name="Faction Reputation" color={Settings.theme.rep}> <ReputationRate reputation={player.workRepGainRate * CYCLES_PER_SEC} />)
<Typography> </Typography>
<Reputation reputation={player.workRepGained} /> ( </StatsRow>,
<ReputationRate reputation={player.workRepGainRate * CYCLES_PER_SEC} />) ...expGains,
</Typography> ],
</StatsRow>, progress: {
...expGains, elapsed: player.timeWorked,
], },
progress: {
elapsed: player.timeWorked,
},
stopText: "Stop Faction work", stopText: "Stop working",
}; stopTooltip:
} else if (player.className !== "") { "You will automatically finish after working for 8 hours. You can cancel earlier if you wish" +
const className = player.className; ` but you will only gain ${penaltyString} of the reputation you've earned so far.`,
function cancel(): void { };
player.finishClass(true);
router.toCity(); break;
} }
function unfocus(): void { case CONSTANTS.WorkTypeCompanyPartTime: {
router.toCity(); function cancel(): void {
player.stopFocusing(); player.finishWorkPartTime(true);
} router.toJob();
}
function unfocus(): void {
player.stopFocusing();
router.toJob();
}
const comp = Companies[player.companyName];
let companyRep = 0;
if (comp == null || !(comp instanceof Company)) {
throw new Error(`Could not find Company: ${player.companyName}`);
}
companyRep = comp.playerReputation;
let stopText = ""; const position = player.jobs[player.companyName];
if (
className == CONSTANTS.ClassGymStrength ||
className == CONSTANTS.ClassGymDefense ||
className == CONSTANTS.ClassGymDexterity ||
className == CONSTANTS.ClassGymAgility
) {
stopText = "Stop training at gym";
} else {
stopText = "Stop taking course";
}
workInfo = {
buttons: {
cancel: cancel,
unfocus: unfocus,
},
title: (
<>
You are currently <b>{className}</b>
</>
),
gains: [
<StatsRow name="Total Cost" color={Settings.theme.money}>
<Typography>
<Money money={-player.workMoneyGained} /> (<MoneyRate money={player.workMoneyLossRate * CYCLES_PER_SEC} />)
</Typography>
</StatsRow>,
...expGains,
],
progress: {
elapsed: player.timeWorked,
},
stopText: stopText,
};
} else if (player.workType == CONSTANTS.WorkTypeCompany) {
const comp = Companies[player.companyName];
if (comp == null || !(comp instanceof Company)) {
workInfo = { workInfo = {
buttons: { buttons: {
cancel: () => router.toTerminal(), cancel: cancel,
unfocus: unfocus,
}, },
title: title: (
`You cannot work for ${player.companyName || "(Company not found)"} at this time,` + <>
" please try again if you think this should have worked", You are currently working as a <b>{position}</b> at <b>{player.companyName}</b>
</>
),
stopText: "Back to Terminal", description: (
<>
Current Company Reputation: <Reputation reputation={companyRep} />
</>
),
gains: [
<StatsRow name="Money" color={Settings.theme.money}>
<Typography>
<Money money={player.workMoneyGained} /> (<MoneyRate money={player.workMoneyGainRate * CYCLES_PER_SEC} />)
</Typography>
</StatsRow>,
<StatsRow name="Company Reputation" color={Settings.theme.rep}>
<Typography>
<Reputation reputation={player.workRepGained} /> (
<ReputationRate reputation={player.workRepGainRate * CYCLES_PER_SEC} />)
</Typography>
</StatsRow>,
...expGains,
],
progress: {
elapsed: player.timeWorked,
},
stopText: "Stop working",
stopTooltip:
"You will automatically finish after working for 8 hours. You can cancel earlier if you wish" +
" and there will be no penalty because this is a part-time job.",
}; };
break;
} }
const companyRep = comp.playerReputation; case CONSTANTS.WorkTypeCrime: {
const completion = Math.round((player.timeWorked / player.timeNeededToCompleteWork) * 100);
function cancel(): void { workInfo = {
player.finishWork(true); buttons: {
router.toJob(); cancel: () => {
} router.toLocation(Locations[LocationName.Slums]);
function unfocus(): void { player.finishCrime(true);
player.stopFocusing(); },
router.toJob();
}
const position = player.jobs[player.companyName];
const penalty = player.cancelationPenalty();
const penaltyString = penalty === 0.5 ? "half" : "three-quarters";
workInfo = {
buttons: {
cancel: cancel,
unfocus: unfocus,
},
title: (
<>
You are currently working as a <b>{position}</b> at <b>{player.companyName}</b>
</>
),
description: (
<>
Current Company Reputation: <Reputation reputation={companyRep} />
</>
),
gains: [
<StatsRow name="Money" color={Settings.theme.money}>
<Typography>
<Money money={player.workMoneyGained} /> (<MoneyRate money={player.workMoneyGainRate * CYCLES_PER_SEC} />)
</Typography>
</StatsRow>,
<StatsRow name="Company Reputation" color={Settings.theme.rep}>
<Typography>
<Reputation reputation={player.workRepGained} /> (
<ReputationRate reputation={player.workRepGainRate * CYCLES_PER_SEC} />)
</Typography>
</StatsRow>,
...expGains,
],
progress: {
elapsed: player.timeWorked,
},
stopText: "Stop working",
stopTooltip:
"You will automatically finish after working for 8 hours. You can cancel earlier if you wish" +
` but you will only gain ${penaltyString} of the reputation you've earned so far.`,
};
} else if (player.workType == CONSTANTS.WorkTypeCompanyPartTime) {
function cancel(): void {
player.finishWorkPartTime(true);
router.toJob();
}
function unfocus(): void {
player.stopFocusing();
router.toJob();
}
const comp = Companies[player.companyName];
let companyRep = 0;
if (comp == null || !(comp instanceof Company)) {
throw new Error(`Could not find Company: ${player.companyName}`);
}
companyRep = comp.playerReputation;
const position = player.jobs[player.companyName];
workInfo = {
buttons: {
cancel: cancel,
unfocus: unfocus,
},
title: (
<>
You are currently working as a <b>{position}</b> at <b>{player.companyName}</b>
</>
),
description: (
<>
Current Company Reputation: <Reputation reputation={companyRep} />
</>
),
gains: [
<StatsRow name="Money" color={Settings.theme.money}>
<Typography>
<Money money={player.workMoneyGained} /> (<MoneyRate money={player.workMoneyGainRate * CYCLES_PER_SEC} />)
</Typography>
</StatsRow>,
<StatsRow name="Company Reputation" color={Settings.theme.rep}>
<Typography>
<Reputation reputation={player.workRepGained} /> (
<ReputationRate reputation={player.workRepGainRate * CYCLES_PER_SEC} />)
</Typography>
</StatsRow>,
...expGains,
],
progress: {
elapsed: player.timeWorked,
},
stopText: "Stop working",
stopTooltip:
"You will automatically finish after working for 8 hours. You can cancel earlier if you wish" +
" and there will be no penalty because this is a part-time job.",
};
} else if (player.crimeType !== "") {
const completion = Math.round((player.timeWorked / player.timeNeededToCompleteWork) * 100);
workInfo = {
buttons: {
cancel: () => {
router.toLocation(Locations[LocationName.Slums]);
player.finishCrime(true);
}, },
}, title: `You are attempting to ${player.crimeType}`,
title: `You are attempting to ${player.crimeType}`,
progress: { progress: {
remaining: player.timeNeededToCompleteWork - player.timeWorked, remaining: player.timeNeededToCompleteWork - player.timeWorked,
percentage: completion, percentage: completion,
}, },
stopText: "Cancel crime", stopText: "Cancel crime",
}; };
} else if (player.createProgramName !== "") {
function cancel(): void { break;
player.finishCreateProgramWork(true);
router.toTerminal();
}
function unfocus(): void {
router.toTerminal();
player.stopFocusing();
} }
const completion = (player.timeWorkedCreateProgram / player.timeNeededToCompleteWork) * 100; case CONSTANTS.WorkTypeCreateProgram: {
function cancel(): void {
player.finishCreateProgramWork(true);
router.toTerminal();
}
function unfocus(): void {
router.toTerminal();
player.stopFocusing();
}
workInfo = { const completion = (player.timeWorkedCreateProgram / player.timeNeededToCompleteWork) * 100;
buttons: {
cancel: cancel,
unfocus: unfocus,
},
title: (
<>
You are currently working on coding <b>{player.createProgramName}</b>
</>
),
progress: { workInfo = {
elapsed: player.timeWorked, buttons: {
percentage: completion, cancel: cancel,
}, unfocus: unfocus,
},
title: (
<>
You are currently working on coding <b>{player.createProgramName}</b>
</>
),
stopText: "Stop creating program", progress: {
stopTooltip: "Your work will be saved and you can return to complete the program later.", elapsed: player.timeWorked,
}; percentage: completion,
} else if (player.graftAugmentationName !== "") { },
function cancel(): void {
player.finishGraftAugmentationWork(true); stopText: "Stop creating program",
router.toTerminal(); stopTooltip: "Your work will be saved and you can return to complete the program later.",
} };
function unfocus(): void {
router.toTerminal(); break;
player.stopFocusing();
} }
const completion = (player.timeWorkedGraftAugmentation / player.timeNeededToCompleteWork) * 100; case CONSTANTS.WorkTypeGraftAugmentation: {
function cancel(): void {
player.finishGraftAugmentationWork(true);
router.toTerminal();
}
function unfocus(): void {
router.toTerminal();
player.stopFocusing();
}
workInfo = { const completion = (player.timeWorkedGraftAugmentation / player.timeNeededToCompleteWork) * 100;
buttons: {
cancel: cancel,
unfocus: unfocus,
},
title: (
<>
You are currently working on grafting <b>{player.graftAugmentationName}</b>
</>
),
progress: { workInfo = {
elapsed: player.timeWorked, buttons: {
percentage: completion, cancel: cancel,
}, unfocus: unfocus,
},
title: (
<>
You are currently working on grafting <b>{player.graftAugmentationName}</b>
</>
),
stopText: "Stop grafting", progress: {
stopTooltip: ( elapsed: player.timeWorked,
<> percentage: completion,
If you cancel, your work will <b>not</b> be saved, and the money you spent will <b>not</b> be returned },
</>
), stopText: "Stop grafting",
}; stopTooltip: (
} else if (!player.workType) { <>
router.toTerminal(); If you cancel, your work will <b>not</b> be saved, and the money you spent will <b>not</b> be returned
workInfo = null; </>
} else { ),
workInfo = null; };
break;
}
default:
router.toTerminal();
workInfo = null;
} }
if (workInfo === null) { if (workInfo === null) {