mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-21 02:37:05 +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 { 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={() => {
|
||||
|
||||
@@ -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),
|
||||
);
|
||||
}
|
||||
Reference in new issue
Block a user