SF -1 related fixes

This commit is contained in:
nickofolas 2022-04-08 10:49:10 -05:00
parent a4bc793cf1
commit b9cc6321fd

@ -14,11 +14,12 @@ interface SfMinus1 {
info: React.ReactElement; info: React.ReactElement;
n: number; n: number;
name: string; name: string;
lvl: number;
} }
const safeGetSf = (sfNum: number): SourceFile | SfMinus1 | null => { const safeGetSf = (sfNum: number): SourceFile | SfMinus1 | null => {
if (sfNum === -1) { if (sfNum === -1) {
return { const sfMinus1: SfMinus1 = {
info: ( info: (
<> <>
This Source-File can only be acquired with obscure knowledge of the game, javascript, and the web ecosystem. This Source-File can only be acquired with obscure knowledge of the game, javascript, and the web ecosystem.
@ -42,6 +43,7 @@ const safeGetSf = (sfNum: number): SourceFile | SfMinus1 | null => {
n: -1, n: -1,
name: "Source-File -1: Exploits in the BitNodes", name: "Source-File -1: Exploits in the BitNodes",
}; };
return sfMinus1;
} }
const srcFileKey = "SourceFile" + sfNum; const srcFileKey = "SourceFile" + sfNum;
@ -53,9 +55,31 @@ const safeGetSf = (sfNum: number): SourceFile | SfMinus1 | null => {
return sfObj; return sfObj;
}; };
const getMaxLevel = (sfObj: SourceFile | SfMinus1): string | number => {
let maxLevel;
switch (sfObj.n) {
case 12:
maxLevel = "∞";
break;
case -1:
maxLevel = Object.keys(Exploit).length;
break;
default:
maxLevel = "3";
}
return maxLevel;
};
export function SourceFilesElement(): React.ReactElement { export function SourceFilesElement(): React.ReactElement {
const sourceSfs = Player.sourceFiles.slice(); const sourceSfs = Player.sourceFiles.slice();
const exploits = Player.exploits; const exploits = Player.exploits;
// Create a fake SF for -1, if "owned"
if (exploits.length > 0) {
sourceSfs.unshift({
n: -1,
lvl: exploits.length,
});
}
if (Settings.OwnedAugmentationsOrder === OwnedAugmentationsOrderSetting.Alphabetically) { if (Settings.OwnedAugmentationsOrder === OwnedAugmentationsOrderSetting.Alphabetically) {
sourceSfs.sort((sf1, sf2) => { sourceSfs.sort((sf1, sf2) => {
@ -63,12 +87,12 @@ export function SourceFilesElement(): React.ReactElement {
}); });
} }
const [selectedSf, setSelectedSf] = useState<any>(sourceSfs[0]);
if (sourceSfs.length === 0) { if (sourceSfs.length === 0) {
return <></>; return <></>;
} }
const [selectedSf, setSelectedSf] = useState(sourceSfs[0]);
return ( return (
<Box sx={{ width: "100%", mt: 1 }}> <Box sx={{ width: "100%", mt: 1 }}>
<Paper sx={{ p: 1 }}> <Paper sx={{ p: 1 }}>
@ -80,29 +104,11 @@ export function SourceFilesElement(): React.ReactElement {
sx={{ height: 400, overflowY: "scroll", borderRight: `1px solid ${Settings.theme.welllight}` }} sx={{ height: 400, overflowY: "scroll", borderRight: `1px solid ${Settings.theme.welllight}` }}
disablePadding disablePadding
> >
{exploits.length > 0 && (
<ListItemButton
key={-1}
onClick={() => setSelectedSf({ n: -1, lvl: exploits.length })}
selected={selectedSf.n === -1}
sx={{ py: 0 }}
>
<ListItemText
disableTypography
primary={<Typography>Source-File -1: Exploits in the BitNodes</Typography>}
secondary={
<Typography>
Level {exploits.length} / {Object.keys(Exploit).length}
</Typography>
}
/>
</ListItemButton>
)}
{sourceSfs.map((e, i) => { {sourceSfs.map((e, i) => {
const sfObj = safeGetSf(e.n); const sfObj = safeGetSf(e.n);
if (!sfObj) return; if (!sfObj) return;
const maxLevel = sfObj?.n === 12 ? "∞" : "3";
const maxLevel = getMaxLevel(sfObj);
return ( return (
<ListItemButton key={i + 1} onClick={() => setSelectedSf(e)} selected={selectedSf === e} sx={{ py: 0 }}> <ListItemButton key={i + 1} onClick={() => setSelectedSf(e)} selected={selectedSf === e} sx={{ py: 0 }}>
@ -129,24 +135,14 @@ export function SourceFilesElement(): React.ReactElement {
const sfObj = safeGetSf(selectedSf.n); const sfObj = safeGetSf(selectedSf.n);
if (!sfObj) return; if (!sfObj) return;
let maxLevel; const maxLevel = getMaxLevel(sfObj);
switch (sfObj?.n) {
case 12:
maxLevel = "∞";
break;
case -1:
maxLevel = Object.keys(Exploit).length;
break;
default:
maxLevel = "3";
}
return ( return (
<> <>
Level {selectedSf.lvl} / {maxLevel} Level {selectedSf.lvl} / {maxLevel}
<br /> <br />
<br /> <br />
{sfObj?.info} {sfObj.info}
</> </>
); );
})()} })()}