INFILTRATION: Different visual rework for CheatCodeGame (#994)

This commit is contained in:
Snarling 2023-12-27 00:45:40 -05:00 committed by GitHub
parent 489ba595f3
commit a42b72d31a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 34 additions and 43 deletions

@ -1781,7 +1781,7 @@ export const Augmentations: Record<AugmentationName, Augmentation> = (() => {
repCost: 1e4, repCost: 1e4,
moneyCost: 1e6, moneyCost: 1e6,
info: "Penta-dynamo-neurovascular-valve inserted in the carpal ligament, enhances dexterity.", info: "Penta-dynamo-neurovascular-valve inserted in the carpal ligament, enhances dexterity.",
stats: "This augmentation makes the Cheat Code minigame easier by allowing the opposite character.", stats: "This augmentation makes the Cheat Code minigame easier by showing what character will come next.",
isSpecial: true, isSpecial: true,
factions: [FactionName.ShadowsOfAnarchy], factions: [FactionName.ShadowsOfAnarchy],
}, },

@ -2,15 +2,7 @@ import { Paper, Typography } from "@mui/material";
import React, { useState } from "react"; import React, { useState } from "react";
import { AugmentationName } from "@enums"; import { AugmentationName } from "@enums";
import { Player } from "@player"; import { Player } from "@player";
import { import { Arrow, downArrowSymbol, getArrow, leftArrowSymbol, random, rightArrowSymbol, upArrowSymbol } from "../utils";
downArrowSymbol,
getArrow,
getInverseArrow,
leftArrowSymbol,
random,
rightArrowSymbol,
upArrowSymbol,
} from "../utils";
import { interpolate } from "./Difficulty"; import { interpolate } from "./Difficulty";
import { GameTimer } from "./GameTimer"; import { GameTimer } from "./GameTimer";
import { IMinigameProps } from "./IMinigameProps"; import { IMinigameProps } from "./IMinigameProps";
@ -45,7 +37,7 @@ export function CheatCodeGame(props: IMinigameProps): React.ReactElement {
function press(this: Document, event: KeyboardEvent): void { function press(this: Document, event: KeyboardEvent): void {
event.preventDefault(); event.preventDefault();
if (code[index] !== getArrow(event) && (!hasAugment || code[index] !== getInverseArrow(event))) { if (code[index] !== getArrow(event)) {
props.onFailure(); props.onFailure();
return; return;
} }
@ -58,21 +50,37 @@ export function CheatCodeGame(props: IMinigameProps): React.ReactElement {
<GameTimer millis={timer} onExpire={props.onFailure} /> <GameTimer millis={timer} onExpire={props.onFailure} />
<Paper sx={{ display: "grid", justifyItems: "center" }}> <Paper sx={{ display: "grid", justifyItems: "center" }}>
<Typography variant="h4">Enter the Code!</Typography> <Typography variant="h4">Enter the Code!</Typography>
<Typography variant="h4">{code[index]}</Typography> <Typography variant="h4">
<div
style={{
display: "grid",
gap: "2rem",
gridTemplateColumns: `repeat(${code.length}, 1fr)`,
textAlign: "center",
}}
>
{code.map((arrow, i) => {
return (
<span key={i} style={i !== index ? { opacity: 0.4 } : {}}>
{i > index && !hasAugment ? "?" : arrow}
</span>
);
})}
</div>
</Typography>
<KeyHandler onKeyDown={press} onFailure={props.onFailure} /> <KeyHandler onKeyDown={press} onFailure={props.onFailure} />
</Paper> </Paper>
</> </>
); );
} }
function generateCode(difficulty: Difficulty): string { function generateCode(difficulty: Difficulty): Arrow[] {
const arrows = [leftArrowSymbol, rightArrowSymbol, upArrowSymbol, downArrowSymbol]; const arrows: Arrow[] = [leftArrowSymbol, rightArrowSymbol, upArrowSymbol, downArrowSymbol];
let code = ""; const code: Arrow[] = [];
for (let i = 0; i < random(difficulty.min, difficulty.max); i++) { for (let i = 0; i < random(difficulty.min, difficulty.max); i++) {
let arrow = arrows[Math.floor(4 * Math.random())]; let arrow = arrows[Math.floor(4 * Math.random())];
while (arrow === code[code.length - 1]) arrow = arrows[Math.floor(4 * Math.random())]; while (arrow === code[code.length - 1]) arrow = arrows[Math.floor(4 * Math.random())];
code += arrow; code.push(arrow);
} }
return code; return code;
} }

@ -9,38 +9,21 @@ export const downArrowSymbol = "↓";
export const leftArrowSymbol = "←"; export const leftArrowSymbol = "←";
export const rightArrowSymbol = "→"; export const rightArrowSymbol = "→";
export function getArrow(event: KeyboardEvent): string { export type Arrow = typeof leftArrowSymbol | typeof rightArrowSymbol | typeof upArrowSymbol | typeof downArrowSymbol;
switch (event.key) {
case KEY.UP_ARROW:
case KEY.W:
return upArrowSymbol;
case KEY.LEFT_ARROW:
case KEY.A:
return leftArrowSymbol;
case KEY.DOWN_ARROW:
case KEY.S:
return downArrowSymbol;
case KEY.RIGHT_ARROW:
case KEY.D:
return rightArrowSymbol;
}
return "";
}
export function getInverseArrow(event: KeyboardEvent): string { export function getArrow(event: KeyboardEvent): Arrow | undefined {
switch (event.key) { switch (event.key) {
case KEY.DOWN_ARROW:
case KEY.S:
return upArrowSymbol;
case KEY.RIGHT_ARROW:
case KEY.D:
return leftArrowSymbol;
case KEY.UP_ARROW: case KEY.UP_ARROW:
case KEY.W: case KEY.W:
return downArrowSymbol; return upArrowSymbol;
case KEY.LEFT_ARROW: case KEY.LEFT_ARROW:
case KEY.A: case KEY.A:
return leftArrowSymbol;
case KEY.DOWN_ARROW:
case KEY.S:
return downArrowSymbol;
case KEY.RIGHT_ARROW:
case KEY.D:
return rightArrowSymbol; return rightArrowSymbol;
} }
return "";
} }