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';
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;
+11 -2
View File
@@ -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;
+3 -35
View File
@@ -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;
+4 -1
View File
@@ -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;
+15 -4
View File
@@ -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;
}