mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-24 03:59:50 +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';
|
} 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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user