|
@@ -26,8 +26,22 @@ const GuessPane = () => {
|
|
|
const [selectedPoint, setSelectedPoint] = useState(null);
|
|
|
const [submitted, setSubmitted] = useState(false);
|
|
|
const [mapSize, setMapSize] = useState("small");
|
|
|
- const [gunGameBlock, setGunGameBlock] = useState(false);
|
|
|
- const unblock = useCallback(() => setGunGameBlock(false), []);
|
|
|
+
|
|
|
+ const [gunGameState, setGunGameState] = useState({
|
|
|
+ gunGameBlock: false,
|
|
|
+ lastDistance: null,
|
|
|
+ distance: null,
|
|
|
+ count: 0,
|
|
|
+ });
|
|
|
+ const unblock = useCallback(() => {
|
|
|
+ setGunGameState(({ distance, count }) => ({
|
|
|
+ gunGameBlock: false,
|
|
|
+ lastDistance: distance,
|
|
|
+ distance: null,
|
|
|
+ count: count + 1,
|
|
|
+ }));
|
|
|
+ }, []);
|
|
|
+
|
|
|
const toggleBig = useCallback(() => setMapSize(toggleMapSize("big")), []);
|
|
|
const toggleMed = useCallback(() => setMapSize(toggleMapSize("medium")), []);
|
|
|
useMapResizeKeybindings(toggleBig);
|
|
@@ -44,7 +58,7 @@ const GuessPane = () => {
|
|
|
|
|
|
const handleGateKeeping = useCallback(
|
|
|
async ({ target }) => {
|
|
|
- const { score } = await checkScore(
|
|
|
+ const { score, distance } = await checkScore(
|
|
|
selectedPoint,
|
|
|
targetPoint,
|
|
|
scoreMethod,
|
|
@@ -52,7 +66,11 @@ const GuessPane = () => {
|
|
|
);
|
|
|
if (score < 4000) {
|
|
|
target.blur();
|
|
|
- setGunGameBlock(true);
|
|
|
+ setGunGameState(gs => ({
|
|
|
+ ...gs,
|
|
|
+ gunGameBlock: true,
|
|
|
+ distance,
|
|
|
+ }));
|
|
|
} else {
|
|
|
await handleSubmitGuess();
|
|
|
}
|
|
@@ -88,7 +106,10 @@ const GuessPane = () => {
|
|
|
|
|
|
return (
|
|
|
<>
|
|
|
- {gunGameBlock && gameMode === GUN_GAME && <GunGame onFinish={unblock} />}
|
|
|
+ {gunGameState.gunGameBlock && gameMode === GUN_GAME && (
|
|
|
+ // eslint-disable-next-line react/jsx-props-no-spreading
|
|
|
+ <GunGame {...gunGameState} onFinish={unblock} />
|
|
|
+ )}
|
|
|
<div className={`${styles.pane} ${mapSizeOpts[mapSize]}`}>
|
|
|
<button
|
|
|
type="button"
|
|
@@ -96,7 +117,9 @@ const GuessPane = () => {
|
|
|
onClick={
|
|
|
gameMode === GUN_GAME ? handleGateKeeping : handleSubmitGuess
|
|
|
}
|
|
|
- disabled={gunGameBlock || submitted || selectedPoint === null}
|
|
|
+ disabled={
|
|
|
+ gunGameState.gunGameBlock || submitted || selectedPoint === null
|
|
|
+ }
|
|
|
>
|
|
|
Submit Guess
|
|
|
</button>
|