mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-21 18:57:03 +02:00
feat: provision assignment
This commit is contained in:
1 parent
88a85ef152
commit
850308b2ac
5 files changed
+36
-42
No files matched your search
@@ -6,6 +6,7 @@ import {
|
||||
} from '@radix-ui/react-icons';
|
||||
import { Dialog, Flex, IconButton } from '@radix-ui/themes';
|
||||
import { use, useState } from 'react';
|
||||
import { provisionDefinitions } from '../../../../core/blitzkrieg/provisionDefinitions';
|
||||
import { skillDefinitions } from '../../../../core/blitzkrieg/skillDefinitions';
|
||||
import { TankDefinition } from '../../../../core/blitzkrieg/tankDefinitions';
|
||||
import { tankToCompareMember } from '../../../../core/blitzkrieg/tankToCompareMember';
|
||||
@@ -22,6 +23,7 @@ interface TankControlProps {
|
||||
}
|
||||
|
||||
export function TankControl({ index, tank, members }: TankControlProps) {
|
||||
const awaitedProvisionDefinitions = use(provisionDefinitions);
|
||||
const awaitedSkillDefinitions = use(skillDefinitions);
|
||||
const [switchTankDialogOpen, setSwitchTankDialogOpen] = useState(false);
|
||||
|
||||
@@ -77,6 +79,7 @@ export function TankControl({ index, tank, members }: TankControlProps) {
|
||||
mutateCompareTemporary((draft) => {
|
||||
draft.members[index] = tankToCompareMember(
|
||||
tank,
|
||||
awaitedProvisionDefinitions,
|
||||
awaitedSkillDefinitions,
|
||||
);
|
||||
draft.sorting = undefined;
|
||||
|
||||
@@ -110,6 +110,7 @@ export default function Page() {
|
||||
.map((id) =>
|
||||
tankToCompareMember(
|
||||
awaitedTankDefinitions[id],
|
||||
awaitedProvisionDefinitions,
|
||||
awaitedSkillDefinitions,
|
||||
),
|
||||
);
|
||||
@@ -317,7 +318,11 @@ export default function Page() {
|
||||
onSelect={(tank) => {
|
||||
mutateCompareTemporary((draft) => {
|
||||
draft.members.push(
|
||||
tankToCompareMember(tank, awaitedSkillDefinitions),
|
||||
tankToCompareMember(
|
||||
tank,
|
||||
awaitedProvisionDefinitions,
|
||||
awaitedSkillDefinitions,
|
||||
),
|
||||
);
|
||||
draft.sorting = undefined;
|
||||
});
|
||||
@@ -327,7 +332,11 @@ export default function Page() {
|
||||
mutateCompareTemporary((draft) => {
|
||||
draft.members.push(
|
||||
...tanks.map((tank) =>
|
||||
tankToCompareMember(tank, awaitedSkillDefinitions),
|
||||
tankToCompareMember(
|
||||
tank,
|
||||
awaitedProvisionDefinitions,
|
||||
awaitedSkillDefinitions,
|
||||
),
|
||||
),
|
||||
);
|
||||
draft.sorting = undefined;
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
import { degToRad } from 'three/src/math/MathUtils';
|
||||
import { DuelMember, mutateDuel } from '../../stores/duel';
|
||||
import { genericDefaultEquipmentMatrix } from '../../stores/duel/constants';
|
||||
import { availableProvisions } from './availableProvisions';
|
||||
import { modelDefinitions } from './modelDefinitions';
|
||||
import { mutateDuel } from '../../stores/duel';
|
||||
import { provisionDefinitions } from './provisionDefinitions';
|
||||
import { tankDefinitions } from './tankDefinitions';
|
||||
import { tankToDuelMember } from './tankToDuelMember';
|
||||
|
||||
export async function assignDuelMember(
|
||||
type: 'antagonist' | 'protagonist' | 'both',
|
||||
@@ -12,37 +9,8 @@ export async function assignDuelMember(
|
||||
) {
|
||||
const awaitedTankDefinitions = await tankDefinitions;
|
||||
const awaitedProvisionDefinitions = await provisionDefinitions;
|
||||
const awaitedModelDefinitions = await modelDefinitions;
|
||||
const tankModelDefinition = awaitedModelDefinitions[id];
|
||||
const tank = awaitedTankDefinitions[id];
|
||||
const turret = tank.turrets.at(-1)!;
|
||||
const gun = turret.guns.at(-1)!;
|
||||
const shell = gun.shells[0];
|
||||
const engine = tank.engines.at(-1)!;
|
||||
const track = tank.tracks.at(-1)!;
|
||||
const provisionsList = availableProvisions(
|
||||
tank,
|
||||
gun,
|
||||
awaitedProvisionDefinitions,
|
||||
);
|
||||
const member: DuelMember = {
|
||||
tank,
|
||||
engine,
|
||||
turret,
|
||||
gun,
|
||||
shell,
|
||||
track,
|
||||
equipmentMatrix: genericDefaultEquipmentMatrix,
|
||||
pitch: degToRad(tankModelDefinition.turretRotation?.pitch ?? 0),
|
||||
yaw: 0,
|
||||
camouflage: true,
|
||||
consumables: [],
|
||||
cooldownBooster: 0,
|
||||
crewMastery: 1,
|
||||
provisions: provisionsList
|
||||
.filter((provision) => provision.crew !== undefined)
|
||||
.map((provision) => provision.id),
|
||||
};
|
||||
const member = tankToDuelMember(tank, awaitedProvisionDefinitions);
|
||||
|
||||
mutateDuel((draft) => {
|
||||
draft.assigned = true;
|
||||
|
||||
@@ -1,16 +1,19 @@
|
||||
import { uniqueId } from 'lodash';
|
||||
import { CompareMember } from '../../stores/compare';
|
||||
import { createDefaultSkills } from './createDefaultSkills';
|
||||
import { ProvisionDefinitions } from './provisionDefinitions';
|
||||
import { SkillDefinitions } from './skillDefinitions';
|
||||
import { TankDefinition } from './tankDefinitions';
|
||||
import { tankToDuelMember } from './tankToDuelMember';
|
||||
|
||||
export function tankToCompareMember(
|
||||
tank: TankDefinition,
|
||||
provisionDefinitions: ProvisionDefinitions,
|
||||
skillDefinitions: SkillDefinitions,
|
||||
) {
|
||||
return {
|
||||
...tankToDuelMember(tank),
|
||||
...tankToDuelMember(tank, provisionDefinitions),
|
||||
|
||||
crewSkills: createDefaultSkills(skillDefinitions),
|
||||
key: uniqueId(),
|
||||
} satisfies CompareMember;
|
||||
|
||||
@@ -1,22 +1,33 @@
|
||||
import { DuelMember } from '../../stores/duel';
|
||||
import { genericDefaultEquipmentMatrix } from '../../stores/duel/constants';
|
||||
import { availableProvisions } from './availableProvisions';
|
||||
import { ProvisionDefinitions } from './provisionDefinitions';
|
||||
import { TankDefinition } from './tankDefinitions';
|
||||
|
||||
export function tankToDuelMember(tank: TankDefinition) {
|
||||
export function tankToDuelMember(
|
||||
tank: TankDefinition,
|
||||
provisionDefinitions: ProvisionDefinitions,
|
||||
) {
|
||||
const turret = tank.turrets.at(-1)!;
|
||||
const gun = turret.guns.at(-1)!;
|
||||
const provisionsList = availableProvisions(tank, gun, provisionDefinitions);
|
||||
|
||||
return {
|
||||
camouflage: true,
|
||||
consumables: [],
|
||||
equipmentMatrix: genericDefaultEquipmentMatrix,
|
||||
cooldownBooster: 0,
|
||||
crewMastery: 1,
|
||||
provisions: [],
|
||||
provisions: provisionsList
|
||||
.filter((provision) => provision.crew !== undefined)
|
||||
.map((provision) => provision.id),
|
||||
engine: tank.engines.at(-1)!,
|
||||
gun: tank.turrets.at(-1)!.guns.at(-1)!,
|
||||
gun,
|
||||
shell: tank.turrets.at(-1)!.guns.at(-1)!.shells[0],
|
||||
tank,
|
||||
track: tank.tracks.at(-1)!,
|
||||
yaw: 0,
|
||||
pitch: 0,
|
||||
turret: tank.turrets.at(-1)!,
|
||||
turret,
|
||||
} satisfies DuelMember;
|
||||
}
|
||||
Reference in new issue
Block a user