feat: few preset provisions and equipments

This commit is contained in:
TrèsAbhi committed 2024-02-22 12:37:17 -06:00
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 { use } from 'react';
import { ProvisionButton } from '../../../../../../../components/ModuleButtons/ProvisionButton';
import { checkConsumableProvisionInclusivity } from '../../../../../../../core/blitzkrieg/checkConsumableProvisionInclusivity';
import { provisionDefinitions } from '../../../../../../../core/blitzkrieg/provisionDefinitions';
import { availableProvisions } from '../../../../../../../core/blitzkrieg/availableProvisions';
import { useDuel } from '../../../../../../../stores/duel';
import {
mutateTankopediaTemporary,
@@ -11,17 +10,9 @@ import {
import { ConfigurationChildWrapper } from './ConfigurationChildWrapper';
export function Provisions() {
const protagonist = useDuel((state) => state.protagonist!);
const awaitedProvisionDefinitions = use(provisionDefinitions);
const { tank, gun } = useDuel((state) => state.protagonist!);
const provisions = useTankopediaTemporary((state) => state.provisions);
const provisionsList = Object.values(awaitedProvisionDefinitions).filter(
(provision) =>
checkConsumableProvisionInclusivity(
provision,
protagonist.tank,
protagonist.gun,
),
);
const provisionsList = use(availableProvisions(tank, gun));
return (
<ConfigurationChildWrapper>
@@ -37,9 +28,7 @@ export function Provisions() {
first={index === 0}
last={index === provisionsList.length - 1}
rowChild
disabled={
protagonist.tank.provisions === provisions.length && !selected
}
disabled={tank.provisions === provisions.length && !selected}
provision={provision.id}
selected={selected}
onClick={() => {
+18 -8
View File
@@ -3,6 +3,7 @@
import { Flex } from '@radix-ui/themes';
import { use, useEffect } from 'react';
import PageWrapper from '../../../../components/PageWrapper';
import { availableProvisions } from '../../../../core/blitzkrieg/availableProvisions';
import { tankDefinitions } from '../../../../core/blitzkrieg/tankDefinitions';
import { useWideFormat } from '../../../../hooks/useWideFormat';
import { mutateDuel, useDuel } from '../../../../stores/duel';
@@ -20,6 +21,9 @@ import { Title } from './components/Title';
export default function Page({ params }: { params: { id: string } }) {
const id = parseInt(params.id);
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 wideFormat = useWideFormat();
@@ -27,13 +31,12 @@ export default function Page({ params }: { params: { id: string } }) {
mutateDuel((draft) => {
draft.assigned = true;
draft.protagonist = {
tank: awaitedTankDefinitions[id],
engine: awaitedTankDefinitions[id].engines.at(-1)!,
turret: awaitedTankDefinitions[id].turrets.at(-1)!,
gun: awaitedTankDefinitions[id].turrets.at(-1)!.guns.at(-1)!,
shell: awaitedTankDefinitions[id].turrets.at(-1)!.guns.at(-1)!
.shells[0],
track: awaitedTankDefinitions[id].tracks.at(-1)!,
tank,
engine: tank.engines.at(-1)!,
turret: tank.turrets.at(-1)!,
gun,
shell: tank.turrets.at(-1)!.guns.at(-1)!.shells[0],
track: tank.tracks.at(-1)!,
};
draft.antagonist = { ...draft.protagonist };
});
@@ -42,8 +45,15 @@ export default function Page({ params }: { params: { id: string } }) {
draft.model.pose.yaw = 0;
draft.model.pose.pitch = 0;
draft.consumables = [];
draft.provisions = [];
draft.provisions = provisionsList
.filter((provision) => provision.crew !== undefined)
.map((provision) => provision.id);
draft.shot = undefined;
draft.equipmentMatrix = [
[1, -1, -1],
[0, 0, 0],
[0, 0, 0],
];
});
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),
);
}