mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-23 19:49:50 +02:00
feat: few preset provisions and equipments
This commit is contained in:
1 parent
ffeaba6a18
commit
c145aa9499
3 files changed
+34
-23
No files matched your search
@@ -1,8 +1,7 @@
|
|||||||
import { Flex, Heading } from '@radix-ui/themes';
|
import { Flex, Heading } from '@radix-ui/themes';
|
||||||
import { use } from 'react';
|
import { use } from 'react';
|
||||||
import { ProvisionButton } from '../../../../../../../components/ModuleButtons/ProvisionButton';
|
import { ProvisionButton } from '../../../../../../../components/ModuleButtons/ProvisionButton';
|
||||||
import { checkConsumableProvisionInclusivity } from '../../../../../../../core/blitzkrieg/checkConsumableProvisionInclusivity';
|
import { availableProvisions } from '../../../../../../../core/blitzkrieg/availableProvisions';
|
||||||
import { provisionDefinitions } from '../../../../../../../core/blitzkrieg/provisionDefinitions';
|
|
||||||
import { useDuel } from '../../../../../../../stores/duel';
|
import { useDuel } from '../../../../../../../stores/duel';
|
||||||
import {
|
import {
|
||||||
mutateTankopediaTemporary,
|
mutateTankopediaTemporary,
|
||||||
@@ -11,17 +10,9 @@ import {
|
|||||||
import { ConfigurationChildWrapper } from './ConfigurationChildWrapper';
|
import { ConfigurationChildWrapper } from './ConfigurationChildWrapper';
|
||||||
|
|
||||||
export function Provisions() {
|
export function Provisions() {
|
||||||
const protagonist = useDuel((state) => state.protagonist!);
|
const { tank, gun } = useDuel((state) => state.protagonist!);
|
||||||
const awaitedProvisionDefinitions = use(provisionDefinitions);
|
|
||||||
const provisions = useTankopediaTemporary((state) => state.provisions);
|
const provisions = useTankopediaTemporary((state) => state.provisions);
|
||||||
const provisionsList = Object.values(awaitedProvisionDefinitions).filter(
|
const provisionsList = use(availableProvisions(tank, gun));
|
||||||
(provision) =>
|
|
||||||
checkConsumableProvisionInclusivity(
|
|
||||||
provision,
|
|
||||||
protagonist.tank,
|
|
||||||
protagonist.gun,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ConfigurationChildWrapper>
|
<ConfigurationChildWrapper>
|
||||||
@@ -37,9 +28,7 @@ export function Provisions() {
|
|||||||
first={index === 0}
|
first={index === 0}
|
||||||
last={index === provisionsList.length - 1}
|
last={index === provisionsList.length - 1}
|
||||||
rowChild
|
rowChild
|
||||||
disabled={
|
disabled={tank.provisions === provisions.length && !selected}
|
||||||
protagonist.tank.provisions === provisions.length && !selected
|
|
||||||
}
|
|
||||||
provision={provision.id}
|
provision={provision.id}
|
||||||
selected={selected}
|
selected={selected}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
import { Flex } from '@radix-ui/themes';
|
import { Flex } from '@radix-ui/themes';
|
||||||
import { use, useEffect } from 'react';
|
import { use, useEffect } from 'react';
|
||||||
import PageWrapper from '../../../../components/PageWrapper';
|
import PageWrapper from '../../../../components/PageWrapper';
|
||||||
|
import { availableProvisions } from '../../../../core/blitzkrieg/availableProvisions';
|
||||||
import { tankDefinitions } from '../../../../core/blitzkrieg/tankDefinitions';
|
import { tankDefinitions } from '../../../../core/blitzkrieg/tankDefinitions';
|
||||||
import { useWideFormat } from '../../../../hooks/useWideFormat';
|
import { useWideFormat } from '../../../../hooks/useWideFormat';
|
||||||
import { mutateDuel, useDuel } from '../../../../stores/duel';
|
import { mutateDuel, useDuel } from '../../../../stores/duel';
|
||||||
@@ -20,6 +21,9 @@ import { Title } from './components/Title';
|
|||||||
export default function Page({ params }: { params: { id: string } }) {
|
export default function Page({ params }: { params: { id: string } }) {
|
||||||
const id = parseInt(params.id);
|
const id = parseInt(params.id);
|
||||||
const awaitedTankDefinitions = use(tankDefinitions);
|
const awaitedTankDefinitions = use(tankDefinitions);
|
||||||
|
const tank = awaitedTankDefinitions[id];
|
||||||
|
const gun = tank.turrets.at(-1)!.guns.at(-1)!;
|
||||||
|
const provisionsList = use(availableProvisions(tank, gun));
|
||||||
const assigned = useDuel((state) => state.assigned);
|
const assigned = useDuel((state) => state.assigned);
|
||||||
const wideFormat = useWideFormat();
|
const wideFormat = useWideFormat();
|
||||||
|
|
||||||
@@ -27,13 +31,12 @@ export default function Page({ params }: { params: { id: string } }) {
|
|||||||
mutateDuel((draft) => {
|
mutateDuel((draft) => {
|
||||||
draft.assigned = true;
|
draft.assigned = true;
|
||||||
draft.protagonist = {
|
draft.protagonist = {
|
||||||
tank: awaitedTankDefinitions[id],
|
tank,
|
||||||
engine: awaitedTankDefinitions[id].engines.at(-1)!,
|
engine: tank.engines.at(-1)!,
|
||||||
turret: awaitedTankDefinitions[id].turrets.at(-1)!,
|
turret: tank.turrets.at(-1)!,
|
||||||
gun: awaitedTankDefinitions[id].turrets.at(-1)!.guns.at(-1)!,
|
gun,
|
||||||
shell: awaitedTankDefinitions[id].turrets.at(-1)!.guns.at(-1)!
|
shell: tank.turrets.at(-1)!.guns.at(-1)!.shells[0],
|
||||||
.shells[0],
|
track: tank.tracks.at(-1)!,
|
||||||
track: awaitedTankDefinitions[id].tracks.at(-1)!,
|
|
||||||
};
|
};
|
||||||
draft.antagonist = { ...draft.protagonist };
|
draft.antagonist = { ...draft.protagonist };
|
||||||
});
|
});
|
||||||
@@ -42,8 +45,15 @@ export default function Page({ params }: { params: { id: string } }) {
|
|||||||
draft.model.pose.yaw = 0;
|
draft.model.pose.yaw = 0;
|
||||||
draft.model.pose.pitch = 0;
|
draft.model.pose.pitch = 0;
|
||||||
draft.consumables = [];
|
draft.consumables = [];
|
||||||
draft.provisions = [];
|
draft.provisions = provisionsList
|
||||||
|
.filter((provision) => provision.crew !== undefined)
|
||||||
|
.map((provision) => provision.id);
|
||||||
draft.shot = undefined;
|
draft.shot = undefined;
|
||||||
|
draft.equipmentMatrix = [
|
||||||
|
[1, -1, -1],
|
||||||
|
[0, 0, 0],
|
||||||
|
[0, 0, 0],
|
||||||
|
];
|
||||||
});
|
});
|
||||||
|
|
||||||
function handleKeyDown(event: KeyboardEvent) {
|
function handleKeyDown(event: KeyboardEvent) {
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
import { checkConsumableProvisionInclusivity } from './checkConsumableProvisionInclusivity';
|
||||||
|
import { provisionDefinitions } from './provisionDefinitions';
|
||||||
|
import { GunDefinition, TankDefinition } from './tankDefinitions';
|
||||||
|
|
||||||
|
export async function availableProvisions(
|
||||||
|
tank: TankDefinition,
|
||||||
|
gun: GunDefinition,
|
||||||
|
) {
|
||||||
|
return Object.values(await provisionDefinitions).filter((provision) =>
|
||||||
|
checkConsumableProvisionInclusivity(provision, tank, gun),
|
||||||
|
);
|
||||||
|
}
|
||||||
Reference in new issue
Block a user