diff --git a/docs/changelogs/1.29.8.md b/docs/changelogs/1.29.8.md new file mode 100644 index 000000000..fa010e23f --- /dev/null +++ b/docs/changelogs/1.29.8.md @@ -0,0 +1,19 @@ +# BlitzKit 1.29.8 + +Thank you to [Mark Greene](https://github.com/Hitjack007) for your contributions this update. + +## Features + +- Added an option to clear provisions and consumables from all tanks in Compare +- Added the ability to choose stock turrets and guns in Mixer if a tank has any +- Added streaks to Guesser +- Introduced an option to partially reveal tanks in Guesser + - This removes the darkness effect but keeps the name hidden + - This will reset your streak to 0 + - Regardless of getting the right guess on the tank's name, your response will be counted as incorrect if partially revealed + +## Fixes + +- The Tankopedia now smoothly resizes when enlarging on interaction +- [Mark Greene] Stock turrets now correctly mount the corresponding stock gun +- The consumable and provision buttons in Compare are no longer tiny diff --git a/package.json b/package.json index 7cd99c92c..016893c2c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "blitzkit", - "version": "1.29.7", + "version": "1.29.8", "license": "BlitzKit License", "private": true, "scripts": { diff --git a/packages/i18n/strings/en.json b/packages/i18n/strings/en.json index 2965b37e6..8ccbe5487 100644 --- a/packages/i18n/strings/en.json +++ b/packages/i18n/strings/en.json @@ -917,7 +917,13 @@ "next": "Next", "no_results": "No results" }, - "stats": "{correct} / {total} guessed correctly" + "stats": "{correct} / {total} correct, {streak} streak", + "help": { + "title": "Partially reveal tank?", + "description": "Reveals the tank without showing the name. This round will be considered incorrect and break your streak!", + "cancel": "Cancel", + "reveal": "Reveal" + } }, "tankopedia": { @@ -1267,10 +1273,12 @@ "upgrade": "Upgrade" }, "provisions": { - "clear": "Clear" + "clear": "Clear this tank", + "clear_all": "Clear all tanks" }, "consumables": { - "clear": "Clear" + "clear": "Clear this tank", + "clear_all": "Clear all tanks" } } }, diff --git a/packages/website-ue/src/pages/tanks/[slug]/index.astro b/packages/website-ue/src/pages/tanks/[slug]/index.astro deleted file mode 100644 index 2a69fa491..000000000 --- a/packages/website-ue/src/pages/tanks/[slug]/index.astro +++ /dev/null @@ -1,21 +0,0 @@ ---- -import type { GetStaticPaths } from "astro"; -import { api } from "../../../core/api/dynamic"; - -export const getStaticPaths = (async () => { - const { tanks } = await api.tanks(); - - return tanks.map((tank) => ({ - params: { slug: tank.slug }, - props: { id: tank.id }, - })); -}) satisfies GetStaticPaths; - -const { id } = Astro.props; ---- - -

Tank {id}

- - -
{JSON.stringify(await api.tank(id), null, 2)}
-
diff --git a/packages/website/src/components/Compare/CompareTable.tsx b/packages/website/src/components/Compare/CompareTable.tsx index d34cb258d..62029fb73 100644 --- a/packages/website/src/components/Compare/CompareTable.tsx +++ b/packages/website/src/components/Compare/CompareTable.tsx @@ -277,14 +277,14 @@ export function CompareTable({ stats }: CompareTableProps) { - + + + + + + + + + + + + + + + + + {strings.website.common.tank_search.select_dialog_title} + + + { + onSelect?.(tank); + setOpen(false); + }} + /> + + + + {subSelector && ( + + + - )} - - + {...props} + > + + + - - - {strings.website.common.tank_search.select_dialog_title} - + + + {tankDefinition.turrets.length > 1 && ( + + {tankDefinition.turrets.map((turret) => ( + { + onSelect?.(tankDefinition, turret); + }} + /> + ))} + + )} - { - onSelect?.(tank); - setOpen(false); - }} - /> - - + {turretDefinition && turretDefinition.guns.length > 1 && ( + + {turretDefinition.guns.map((gun) => ( + + {literals(strings.common.units.mm, { + value: gun.shells[0].caliber.toFixed(0), + })} + + } + onClick={() => { + onSelect?.(tankDefinition, turretDefinition, gun); + }} + /> + ))} + + )} + + + + )} + ); } @@ -113,9 +212,12 @@ function ModuleSeparator() { } function Content({ skeleton }: MaybeSkeletonComponentProps) { - const hull = Mixer.use((state) => state.hull); - const turretId = Mixer.use((state) => state.turret.tank.id); - const gunId = Mixer.use((state) => state.gun.tank.id); + const hullTankId = Mixer.use((state) => state.hull); + const turretTankId = Mixer.use((state) => state.turret.tank.id); + const turretTurretId = Mixer.use((state) => state.turret.turret.id); + const gunTankId = Mixer.use((state) => state.gun.tank.id); + const gunTurretId = Mixer.use((state) => state.gun.turret.id); + const gunGunId = Mixer.use((state) => state.gun.gun.id); const canvas = useRef(null!); const { strings } = useLocale(); @@ -136,7 +238,7 @@ function Content({ skeleton }: MaybeSkeletonComponentProps) { > - { Mixer.mutate((draft) => { draft.hull = tank; @@ -170,28 +272,34 @@ function Content({ skeleton }: MaybeSkeletonComponentProps) { }} /> - { + tank={turretTankId} + turret={turretTurretId} + onSelect={(tank, turret) => { Mixer.mutate((draft) => { draft.turret = { tank, - turret: tank.turrets.at(-1)!, + turret: turret ?? tank.turrets.at(-1)!, }; }); }} /> - { + tank={gunTankId} + turret={gunTurretId} + gun={gunGunId} + onSelect={(tank, turret, gun) => { Mixer.mutate((draft) => { draft.gun = { tank, - turret: tank.turrets.at(-1)!, - gun: tank.turrets.at(-1)!.guns.at(-1)!, + turret: turret ?? tank.turrets.at(-1)!, + gun: + gun ?? + turret?.guns.at(-1) ?? + tank.turrets.at(-1)!.guns.at(-1)!, }; }); }} diff --git a/packages/website/src/stores/guess.ts b/packages/website/src/stores/guess.ts index d84847f79..22d6a10f0 100644 --- a/packages/website/src/stores/guess.ts +++ b/packages/website/src/stores/guess.ts @@ -12,6 +12,8 @@ export interface Guess { guessState: GuessState; totalGuesses: number; correctGuesses: number; + streak: number; + helpingReveal: boolean; } export const Guess = new Varuna((tank) => ({ @@ -19,4 +21,6 @@ export const Guess = new Varuna((tank) => ({ guessState: GuessState.NotGuessed, totalGuesses: 0, correctGuesses: 0, + streak: 0, + helpingReveal: false, }));