feat: universal crew skills

This commit is contained in:
TrèsAbhi committed 2024-04-08 19:24:49 -05:00
1 parent 8a9d72d0e6
commit 28407b0f05
3 files changed
+65 -11

No files matched your search

+63 -5
View File
@@ -31,6 +31,7 @@ import { asset } from '../../../core/blitzkrieg/asset';
import { availableProvisions } from '../../../core/blitzkrieg/availableProvisions'; import { availableProvisions } from '../../../core/blitzkrieg/availableProvisions';
import { checkConsumableProvisionInclusivity } from '../../../core/blitzkrieg/checkConsumableProvisionInclusivity'; import { checkConsumableProvisionInclusivity } from '../../../core/blitzkrieg/checkConsumableProvisionInclusivity';
import { consumableDefinitions } from '../../../core/blitzkrieg/consumableDefinitions'; import { consumableDefinitions } from '../../../core/blitzkrieg/consumableDefinitions';
import { createDefaultSkills } from '../../../core/blitzkrieg/createDefaultSkills';
import { equipmentDefinitions } from '../../../core/blitzkrieg/equipmentDefinitions'; import { equipmentDefinitions } from '../../../core/blitzkrieg/equipmentDefinitions';
import { modelDefinitions } from '../../../core/blitzkrieg/modelDefinitions'; import { modelDefinitions } from '../../../core/blitzkrieg/modelDefinitions';
import { provisionDefinitions } from '../../../core/blitzkrieg/provisionDefinitions'; import { provisionDefinitions } from '../../../core/blitzkrieg/provisionDefinitions';
@@ -68,12 +69,14 @@ export default function Page() {
const awaitedEquipmentDefinitions = use(equipmentDefinitions); const awaitedEquipmentDefinitions = use(equipmentDefinitions);
const awaitedProvisionDefinitions = use(provisionDefinitions); const awaitedProvisionDefinitions = use(provisionDefinitions);
const deltaMode = useComparePersistent((state) => state.deltaMode); const deltaMode = useComparePersistent((state) => state.deltaMode);
const crewSkills = useCompareTemporary((state) => state.crewSkills);
const stats = useMemo( const stats = useMemo(
() => () =>
members.map((item) => members.map((item) =>
tankCharacteristics( tankCharacteristics(
{ {
...item, ...item,
crewSkills,
stockEngine: item.tank.engines[0], stockEngine: item.tank.engines[0],
stockGun: item.tank.turrets[0].guns[0], stockGun: item.tank.turrets[0].guns[0],
stockTrack: item.tank.tracks[0], stockTrack: item.tank.tracks[0],
@@ -123,11 +126,16 @@ export default function Page() {
tankToCompareMember( tankToCompareMember(
awaitedTankDefinitions[id], awaitedTankDefinitions[id],
awaitedProvisionDefinitions, awaitedProvisionDefinitions,
awaitedSkillDefinitions,
), ),
); );
}); });
} }
if (Object.keys(crewSkills).length === 0) {
mutateCompareTemporary((draft) => {
draft.crewSkills = createDefaultSkills(awaitedSkillDefinitions);
});
}
}, []); }, []);
function Row({ function Row({
@@ -376,7 +384,6 @@ export default function Page() {
tankToCompareMember( tankToCompareMember(
tank, tank,
awaitedProvisionDefinitions, awaitedProvisionDefinitions,
awaitedSkillDefinitions,
), ),
); );
draft.sorting = undefined; draft.sorting = undefined;
@@ -390,7 +397,6 @@ export default function Page() {
tankToCompareMember( tankToCompareMember(
tank, tank,
awaitedProvisionDefinitions, awaitedProvisionDefinitions,
awaitedSkillDefinitions,
), ),
), ),
); );
@@ -453,7 +459,60 @@ export default function Page() {
<Table.Body> <Table.Body>
<Table.Row> <Table.Row>
<Table.Cell /> <Table.Cell>
<Flex
style={{
width: '100%',
height: '100%',
}}
align="center"
justify="center"
>
<Popover.Root>
<Popover.Trigger>
<Button variant="ghost" radius="large">
<Flex
direction="column"
style={{
gap: 2,
}}
>
{Object.entries(
awaitedSkillDefinitions.classes,
).map(([tankClass, skills]) => (
<Flex
key={tankClass}
style={{
gap: 2,
}}
>
{skills.map((skill) => (
<div
key={skill}
style={{
width: 6,
height: 6,
borderRadius: 2,
backgroundColor:
crewSkills[skill] === 0
? theme.colors.textLowContrast
: theme.colors
.textLowContrast_crimson,
}}
/>
))}
</Flex>
))}
</Flex>
</Button>
</Popover.Trigger>
<Popover.Content>
<Heading>ඞ</Heading>
</Popover.Content>
</Popover.Root>
</Flex>
</Table.Cell>
{members.map( {members.map(
( (
@@ -487,7 +546,6 @@ export default function Page() {
gun, gun,
), ),
); );
const modules = { turret, gun, engine, chassis: track };
return ( return (
<Table.Cell key={key}> <Table.Cell key={key}>
@@ -1,20 +1,15 @@
import { uniqueId } from 'lodash'; import { uniqueId } from 'lodash';
import { CompareMember } from '../../stores/compare'; import { CompareMember } from '../../stores/compare';
import { createDefaultSkills } from './createDefaultSkills';
import { ProvisionDefinitions } from './provisionDefinitions'; import { ProvisionDefinitions } from './provisionDefinitions';
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, provisionDefinitions: ProvisionDefinitions,
skillDefinitions: SkillDefinitions,
) { ) {
return { return {
...tankToDuelMember(tank, provisionDefinitions), ...tankToDuelMember(tank, provisionDefinitions),
crewSkills: createDefaultSkills(skillDefinitions),
key: uniqueId(), key: uniqueId(),
} satisfies CompareMember; } satisfies CompareMember;
} }
+2 -1
View File
@@ -6,10 +6,10 @@ import { DuelMember } from './duel';
export interface CompareMember extends DuelMember { export interface CompareMember extends DuelMember {
key: string; key: string;
crewSkills: Record<string, number>;
} }
export interface CompareTemporary { export interface CompareTemporary {
crewSkills: Record<string, number>;
members: CompareMember[]; members: CompareMember[];
sorting?: { sorting?: {
direction: 'ascending' | 'descending'; direction: 'ascending' | 'descending';
@@ -23,6 +23,7 @@ export interface ComparePersistent {
} }
export const useCompareTemporary = create<CompareTemporary>()(() => ({ export const useCompareTemporary = create<CompareTemporary>()(() => ({
crewSkills: {},
members: [], members: [],
})); }));