feat: provision assignment

This commit is contained in:
TrèsAbhi committed 2024-04-06 18:37:21 -05:00
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'; } from '@radix-ui/react-icons';
import { Dialog, Flex, IconButton } from '@radix-ui/themes'; import { Dialog, Flex, IconButton } from '@radix-ui/themes';
import { use, useState } from 'react'; import { use, useState } from 'react';
import { provisionDefinitions } from '../../../../core/blitzkrieg/provisionDefinitions';
import { skillDefinitions } from '../../../../core/blitzkrieg/skillDefinitions'; import { skillDefinitions } from '../../../../core/blitzkrieg/skillDefinitions';
import { TankDefinition } from '../../../../core/blitzkrieg/tankDefinitions'; import { TankDefinition } from '../../../../core/blitzkrieg/tankDefinitions';
import { tankToCompareMember } from '../../../../core/blitzkrieg/tankToCompareMember'; import { tankToCompareMember } from '../../../../core/blitzkrieg/tankToCompareMember';
@@ -22,6 +23,7 @@ interface TankControlProps {
} }
export function TankControl({ index, tank, members }: TankControlProps) { export function TankControl({ index, tank, members }: TankControlProps) {
const awaitedProvisionDefinitions = use(provisionDefinitions);
const awaitedSkillDefinitions = use(skillDefinitions); const awaitedSkillDefinitions = use(skillDefinitions);
const [switchTankDialogOpen, setSwitchTankDialogOpen] = useState(false); const [switchTankDialogOpen, setSwitchTankDialogOpen] = useState(false);
@@ -77,6 +79,7 @@ export function TankControl({ index, tank, members }: TankControlProps) {
mutateCompareTemporary((draft) => { mutateCompareTemporary((draft) => {
draft.members[index] = tankToCompareMember( draft.members[index] = tankToCompareMember(
tank, tank,
awaitedProvisionDefinitions,
awaitedSkillDefinitions, awaitedSkillDefinitions,
); );
draft.sorting = undefined; draft.sorting = undefined;
+11 -2
View File
@@ -110,6 +110,7 @@ export default function Page() {
.map((id) => .map((id) =>
tankToCompareMember( tankToCompareMember(
awaitedTankDefinitions[id], awaitedTankDefinitions[id],
awaitedProvisionDefinitions,
awaitedSkillDefinitions, awaitedSkillDefinitions,
), ),
); );
@@ -317,7 +318,11 @@ export default function Page() {
onSelect={(tank) => { onSelect={(tank) => {
mutateCompareTemporary((draft) => { mutateCompareTemporary((draft) => {
draft.members.push( draft.members.push(
tankToCompareMember(tank, awaitedSkillDefinitions), tankToCompareMember(
tank,
awaitedProvisionDefinitions,
awaitedSkillDefinitions,
),
); );
draft.sorting = undefined; draft.sorting = undefined;
}); });
@@ -327,7 +332,11 @@ export default function Page() {
mutateCompareTemporary((draft) => { mutateCompareTemporary((draft) => {
draft.members.push( draft.members.push(
...tanks.map((tank) => ...tanks.map((tank) =>
tankToCompareMember(tank, awaitedSkillDefinitions), tankToCompareMember(
tank,
awaitedProvisionDefinitions,
awaitedSkillDefinitions,
),
), ),
); );
draft.sorting = undefined; draft.sorting = undefined;
+3 -35
View File
@@ -1,10 +1,7 @@
import { degToRad } from 'three/src/math/MathUtils'; import { mutateDuel } from '../../stores/duel';
import { DuelMember, mutateDuel } from '../../stores/duel';
import { genericDefaultEquipmentMatrix } from '../../stores/duel/constants';
import { availableProvisions } from './availableProvisions';
import { modelDefinitions } from './modelDefinitions';
import { provisionDefinitions } from './provisionDefinitions'; import { provisionDefinitions } from './provisionDefinitions';
import { tankDefinitions } from './tankDefinitions'; import { tankDefinitions } from './tankDefinitions';
import { tankToDuelMember } from './tankToDuelMember';
export async function assignDuelMember( export async function assignDuelMember(
type: 'antagonist' | 'protagonist' | 'both', type: 'antagonist' | 'protagonist' | 'both',
@@ -12,37 +9,8 @@ export async function assignDuelMember(
) { ) {
const awaitedTankDefinitions = await tankDefinitions; const awaitedTankDefinitions = await tankDefinitions;
const awaitedProvisionDefinitions = await provisionDefinitions; const awaitedProvisionDefinitions = await provisionDefinitions;
const awaitedModelDefinitions = await modelDefinitions;
const tankModelDefinition = awaitedModelDefinitions[id];
const tank = awaitedTankDefinitions[id]; const tank = awaitedTankDefinitions[id];
const turret = tank.turrets.at(-1)!; const member = tankToDuelMember(tank, awaitedProvisionDefinitions);
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),
};
mutateDuel((draft) => { mutateDuel((draft) => {
draft.assigned = true; draft.assigned = true;
+4 -1
View File
@@ -1,16 +1,19 @@
import { uniqueId } from 'lodash'; import { uniqueId } from 'lodash';
import { CompareMember } from '../../stores/compare'; import { CompareMember } from '../../stores/compare';
import { createDefaultSkills } from './createDefaultSkills'; import { createDefaultSkills } from './createDefaultSkills';
import { ProvisionDefinitions } from './provisionDefinitions';
import { SkillDefinitions } from './skillDefinitions'; import { SkillDefinitions } from './skillDefinitions';
import { TankDefinition } from './tankDefinitions'; import { TankDefinition } from './tankDefinitions';
import { tankToDuelMember } from './tankToDuelMember'; import { tankToDuelMember } from './tankToDuelMember';
export function tankToCompareMember( export function tankToCompareMember(
tank: TankDefinition, tank: TankDefinition,
provisionDefinitions: ProvisionDefinitions,
skillDefinitions: SkillDefinitions, skillDefinitions: SkillDefinitions,
) { ) {
return { return {
...tankToDuelMember(tank), ...tankToDuelMember(tank, provisionDefinitions),
crewSkills: createDefaultSkills(skillDefinitions), crewSkills: createDefaultSkills(skillDefinitions),
key: uniqueId(), key: uniqueId(),
} satisfies CompareMember; } satisfies CompareMember;
+15 -4
View File
@@ -1,22 +1,33 @@
import { DuelMember } from '../../stores/duel'; import { DuelMember } from '../../stores/duel';
import { genericDefaultEquipmentMatrix } from '../../stores/duel/constants'; import { genericDefaultEquipmentMatrix } from '../../stores/duel/constants';
import { availableProvisions } from './availableProvisions';
import { ProvisionDefinitions } from './provisionDefinitions';
import { TankDefinition } from './tankDefinitions'; 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 { return {
camouflage: true, camouflage: true,
consumables: [], consumables: [],
equipmentMatrix: genericDefaultEquipmentMatrix, equipmentMatrix: genericDefaultEquipmentMatrix,
cooldownBooster: 0, cooldownBooster: 0,
crewMastery: 1, crewMastery: 1,
provisions: [], provisions: provisionsList
.filter((provision) => provision.crew !== undefined)
.map((provision) => provision.id),
engine: tank.engines.at(-1)!, engine: tank.engines.at(-1)!,
gun: tank.turrets.at(-1)!.guns.at(-1)!, gun,
shell: tank.turrets.at(-1)!.guns.at(-1)!.shells[0], shell: tank.turrets.at(-1)!.guns.at(-1)!.shells[0],
tank, tank,
track: tank.tracks.at(-1)!, track: tank.tracks.at(-1)!,
yaw: 0, yaw: 0,
pitch: 0, pitch: 0,
turret: tank.turrets.at(-1)!, turret,
} satisfies DuelMember; } satisfies DuelMember;
} }