From 1eaa276b7678577f09c93eff997ac0cd77568837 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Thu, 8 Feb 2024 11:08:22 -0600 Subject: [PATCH] feat: tracks --- scripts/buildAssets/definitions.ts | 2 +- .../[id]/components/AntagonistBar/index.tsx | 1 + .../Characteristics/components/Modules.tsx | 22 +++++++++++++++++++ .../tankopedia/[id]/components/Control.tsx | 10 +++++---- .../components/ArmorHighlighting.tsx | 17 +++++++------- .../components/ExternalModuleMask.tsx | 22 ++++++++++--------- .../TankArmor/components/SpacedArmorDepth.tsx | 18 ++++++++------- .../components/Model/components/TankModel.tsx | 7 +++--- .../tankopedia/[id]/components/Title.tsx | 1 + src/app/tools/tankopedia/[id]/page.tsx | 1 + src/core/blitzkrieg/modelDefinitions.ts | 2 +- src/core/blitzkrieg/tankDefinitions.ts | 1 + 12 files changed, 69 insertions(+), 35 deletions(-) diff --git a/scripts/buildAssets/definitions.ts b/scripts/buildAssets/definitions.ts index 973e48781..19075667d 100644 --- a/scripts/buildAssets/definitions.ts +++ b/scripts/buildAssets/definitions.ts @@ -689,7 +689,7 @@ export async function definitions(production: boolean) { modelDefinitions[tankId].turrets[turretId].guns[gunId] = { armor: gunArmor, model: gunModel, - barrelThickness: + thickness: turretGunEntry.armor.gun === undefined ? 0 : typeof turretGunEntry.armor.gun === 'number' diff --git a/src/app/tools/tankopedia/[id]/components/AntagonistBar/index.tsx b/src/app/tools/tankopedia/[id]/components/AntagonistBar/index.tsx index c249defbf..3d0a2721c 100644 --- a/src/app/tools/tankopedia/[id]/components/AntagonistBar/index.tsx +++ b/src/app/tools/tankopedia/[id]/components/AntagonistBar/index.tsx @@ -105,6 +105,7 @@ export function AntagonistBar() { mutateDuel((draft) => { draft.antagonist!.tank = tank; draft.antagonist!.engine = tank.engines.at(-1)!; + draft.antagonist!.track = tank.tracks.at(-1)!; draft.antagonist!.turret = tank.turrets.at(-1)!; draft.antagonist!.gun = draft.antagonist!.turret.guns.at(-1)!; diff --git a/src/app/tools/tankopedia/[id]/components/Characteristics/components/Modules.tsx b/src/app/tools/tankopedia/[id]/components/Characteristics/components/Modules.tsx index 31139b117..c10b48c77 100644 --- a/src/app/tools/tankopedia/[id]/components/Characteristics/components/Modules.tsx +++ b/src/app/tools/tankopedia/[id]/components/Characteristics/components/Modules.tsx @@ -80,6 +80,28 @@ export function Modules() { ); })} + + + {protagonist.tank.tracks.map((track, index) => { + return ( + { + mutateDuel((draft) => { + draft.protagonist!.track = track; + }); + }} + /> + ); + })} + ); diff --git a/src/app/tools/tankopedia/[id]/components/Control.tsx b/src/app/tools/tankopedia/[id]/components/Control.tsx index 64e3db7ae..210165f42 100644 --- a/src/app/tools/tankopedia/[id]/components/Control.tsx +++ b/src/app/tools/tankopedia/[id]/components/Control.tsx @@ -24,6 +24,8 @@ export function Controls() { const antagonist = useDuel((state) => state.antagonist!); const protagonistModelDefinition = awaitedModelDefinitions[protagonist.tank.id]; + const protagonistTrackModelDefinition = + awaitedModelDefinitions[protagonist.tank.id].tracks[protagonist.track.id]; const antagonistModelDefinition = awaitedModelDefinitions[antagonist.tank.id]; const protagonistTurretModelDefinition = protagonistModelDefinition.turrets[protagonist.turret.id]; @@ -32,9 +34,9 @@ export function Controls() { const protagonistGunModelDefinition = protagonistTurretModelDefinition.guns[protagonist.gun.id]; const protagonistHullOrigin = new Vector3( - protagonistModelDefinition.hullOrigin[0], - protagonistModelDefinition.hullOrigin[1], - -protagonistModelDefinition.hullOrigin[2], + protagonistTrackModelDefinition.origin[0], + protagonistTrackModelDefinition.origin[1], + -protagonistTrackModelDefinition.origin[2], ); const protagonistTurretOrigin = new Vector3( protagonistModelDefinition.turretOrigin[0], @@ -47,7 +49,7 @@ export function Controls() { -protagonistTurretModelDefinition.gunOrigin[2], ); const antagonistGunHeight = - antagonistModelDefinition.hullOrigin[1] + + protagonistTrackModelDefinition.origin[1] + antagonistModelDefinition.turretOrigin[1] + antagonistTurretModelDefinition.gunOrigin[1]; diff --git a/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/ArmorHighlighting.tsx b/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/ArmorHighlighting.tsx index 3f489b9d2..73408cdaf 100644 --- a/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/ArmorHighlighting.tsx +++ b/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/ArmorHighlighting.tsx @@ -24,9 +24,9 @@ export function ArmorHighlighting() { useEffect(() => { const hullOrigin = new Vector3( - tankModelDefinition.hullOrigin[0], - tankModelDefinition.hullOrigin[1], - -tankModelDefinition.hullOrigin[2], + trackModelDefinition.origin[0], + trackModelDefinition.origin[1], + -trackModelDefinition.origin[2], ).applyAxisAngle(I_HAT, Math.PI / 2); const turretOrigin = new Vector3( tankModelDefinition.turretOrigin[0], @@ -103,13 +103,14 @@ export function ArmorHighlighting() { const armorGltf = useArmor(protagonist.tank.id); const armorNodes = Object.values(armorGltf.nodes); const tankModelDefinition = modelDefinitions[protagonist.tank.id]; + const trackModelDefinition = tankModelDefinition.tracks[protagonist.track.id]; const turretModelDefinition = tankModelDefinition.turrets[protagonist.turret.id]; const gunModelDefinition = turretModelDefinition.guns[protagonist.gun.id]; const hullOrigin = new Vector3( - tankModelDefinition.hullOrigin[0], - tankModelDefinition.hullOrigin[1], - -tankModelDefinition.hullOrigin[2], + trackModelDefinition.origin[0], + trackModelDefinition.origin[1], + -trackModelDefinition.origin[2], ); const turretOrigin = new Vector3( tankModelDefinition.turretOrigin[0], @@ -122,8 +123,8 @@ export function ArmorHighlighting() { -turretModelDefinition.gunOrigin[2], ).applyAxisAngle(I_HAT, Math.PI / 2); const maxThickness = Math.max( - tankModelDefinition.trackThickness, - gunModelDefinition.barrelThickness, + trackModelDefinition.thickness, + gunModelDefinition.thickness, ...armorNodes .map((node) => { const armorId = nameToArmorId(node.name); diff --git a/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/ExternalModuleMask.tsx b/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/ExternalModuleMask.tsx index fe109f16d..222b5bdc7 100644 --- a/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/ExternalModuleMask.tsx +++ b/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/ExternalModuleMask.tsx @@ -37,9 +37,9 @@ export const ExternalModuleMask = memo( useEffect(() => { const hullOrigin = new Vector3( - tankModelDefinition.hullOrigin[0], - tankModelDefinition.hullOrigin[1], - -tankModelDefinition.hullOrigin[2], + trackModelDefinition.origin[0], + trackModelDefinition.origin[1], + -trackModelDefinition.origin[2], ).applyAxisAngle(I_HAT, Math.PI / 2); const turretOrigin = new Vector3( tankModelDefinition.turretOrigin[0], @@ -127,12 +127,14 @@ export const ExternalModuleMask = memo( const armorNodes = Object.values(armorGltf.nodes); const modelNodes = Object.values(modelGltf.nodes); const tankModelDefinition = modelDefinitions[protagonist.tank.id]; + const trackModelDefinition = + tankModelDefinition.tracks[protagonist.track.id]; const turretModelDefinition = tankModelDefinition.turrets[protagonist.turret.id]; const gunModelDefinition = turretModelDefinition.guns[protagonist.gun.id]; const maxThickness = Math.max( - tankModelDefinition.trackThickness, - gunModelDefinition.barrelThickness, + trackModelDefinition.thickness, + gunModelDefinition.thickness, ...armorNodes .map((node) => { const armorId = nameToArmorId(node.name); @@ -141,9 +143,9 @@ export const ExternalModuleMask = memo( .filter(Boolean), ); const hullOrigin = new Vector3( - tankModelDefinition.hullOrigin[0], - tankModelDefinition.hullOrigin[1], - -tankModelDefinition.hullOrigin[2], + trackModelDefinition.origin[0], + trackModelDefinition.origin[1], + -trackModelDefinition.origin[2], ).applyAxisAngle(I_HAT, Math.PI / 2); const turretOrigin = new Vector3( tankModelDefinition.turretOrigin[0], @@ -196,7 +198,7 @@ export const ExternalModuleMask = memo( @@ -267,7 +269,7 @@ export const ExternalModuleMask = memo( diff --git a/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/SpacedArmorDepth.tsx b/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/SpacedArmorDepth.tsx index 12a06171b..6a5f24c5e 100644 --- a/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/SpacedArmorDepth.tsx +++ b/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/SpacedArmorDepth.tsx @@ -43,9 +43,9 @@ export const SpacedArmorDepth = memo( if (!modelDefinitions) return; const hullOrigin = new Vector3( - tankModelDefinition.hullOrigin[0], - tankModelDefinition.hullOrigin[1], - -tankModelDefinition.hullOrigin[2], + trackModelDefinition.origin[0], + trackModelDefinition.origin[1], + -trackModelDefinition.origin[2], ).applyAxisAngle(I_HAT, Math.PI / 2); const turretOrigin = new Vector3( tankModelDefinition.turretOrigin[0], @@ -133,12 +133,14 @@ export const SpacedArmorDepth = memo( const armorNodes = Object.values(armorGltf.nodes); const modelNodes = Object.values(modelGltf.nodes); const tankModelDefinition = modelDefinitions[protagonist.tank.id]; + const trackModelDefinition = + tankModelDefinition.tracks[protagonist.track.id]; const turretModelDefinition = tankModelDefinition.turrets[protagonist.turret.id]; const gunModelDefinition = turretModelDefinition.guns[protagonist.gun.id]; const maxThickness = Math.max( - tankModelDefinition.trackThickness, - gunModelDefinition.barrelThickness, + trackModelDefinition.thickness, + gunModelDefinition.thickness, ...armorNodes .map((node) => { const armorId = nameToArmorId(node.name); @@ -147,9 +149,9 @@ export const SpacedArmorDepth = memo( .filter(Boolean), ); const hullOrigin = new Vector3( - tankModelDefinition.hullOrigin[0], - tankModelDefinition.hullOrigin[1], - -tankModelDefinition.hullOrigin[2], + trackModelDefinition.origin[0], + trackModelDefinition.origin[1], + -trackModelDefinition.origin[2], ).applyAxisAngle(I_HAT, Math.PI / 2); const turretOrigin = new Vector3( tankModelDefinition.turretOrigin[0], diff --git a/src/app/tools/tankopedia/[id]/components/Model/components/TankModel.tsx b/src/app/tools/tankopedia/[id]/components/Model/components/TankModel.tsx index f7539c514..ec76f27e6 100644 --- a/src/app/tools/tankopedia/[id]/components/Model/components/TankModel.tsx +++ b/src/app/tools/tankopedia/[id]/components/Model/components/TankModel.tsx @@ -49,9 +49,9 @@ export const TankModel = memo(() => { if (!awaitedModelDefinitions) return; const hullOrigin = new Vector3( - tankModelDefinition.hullOrigin[0], - tankModelDefinition.hullOrigin[1], - -tankModelDefinition.hullOrigin[2], + trackModelDefinition.origin[0], + trackModelDefinition.origin[1], + -trackModelDefinition.origin[2], ).applyAxisAngle(I_HAT, Math.PI / 2); const turretOrigin = new Vector3( tankModelDefinition.turretOrigin[0], @@ -122,6 +122,7 @@ export const TankModel = memo(() => { if (!awaitedModelDefinitions) return; const tankModelDefinition = awaitedModelDefinitions[protagonist.tank.id]; + const trackModelDefinition = tankModelDefinition.tracks[protagonist.track.id]; const turretModelDefinition = tankModelDefinition.turrets[protagonist.turret.id]; const gunModelDefinition = turretModelDefinition.guns[protagonist.gun.id]; diff --git a/src/app/tools/tankopedia/[id]/components/Title.tsx b/src/app/tools/tankopedia/[id]/components/Title.tsx index 35946a57f..6a7287b78 100644 --- a/src/app/tools/tankopedia/[id]/components/Title.tsx +++ b/src/app/tools/tankopedia/[id]/components/Title.tsx @@ -62,6 +62,7 @@ export function Title() { mutateDuel((draft) => { draft.protagonist!.tank = tank; draft.protagonist!.engine = tank.engines.at(-1)!; + draft.protagonist!.track = tank.tracks.at(-1)!; draft.protagonist!.turret = tank.turrets.at(-1)!; draft.protagonist!.gun = draft.protagonist!.turret.guns.at(-1)!; diff --git a/src/app/tools/tankopedia/[id]/page.tsx b/src/app/tools/tankopedia/[id]/page.tsx index 3f309941c..8d631e6bf 100644 --- a/src/app/tools/tankopedia/[id]/page.tsx +++ b/src/app/tools/tankopedia/[id]/page.tsx @@ -33,6 +33,7 @@ export default function Page({ params }: { params: { id: string } }) { gun: awaitedTankDefinitions[id].turrets.at(-1)!.guns.at(-1)!, shell: awaitedTankDefinitions[id].turrets.at(-1)!.guns.at(-1)! .shells[0], + track: awaitedTankDefinitions[id].tracks.at(-1)!, }; draft.antagonist = { ...draft.protagonist }; }); diff --git a/src/core/blitzkrieg/modelDefinitions.ts b/src/core/blitzkrieg/modelDefinitions.ts index b296b9aa6..1f49f358f 100644 --- a/src/core/blitzkrieg/modelDefinitions.ts +++ b/src/core/blitzkrieg/modelDefinitions.ts @@ -44,7 +44,7 @@ export interface YawLimits { } interface GunModelDefinition { armor: ModelArmor; - barrelThickness: number; + thickness: number; model: number; pitch: PitchLimits; } diff --git a/src/core/blitzkrieg/tankDefinitions.ts b/src/core/blitzkrieg/tankDefinitions.ts index 6fdceb4d0..84e3f1860 100644 --- a/src/core/blitzkrieg/tankDefinitions.ts +++ b/src/core/blitzkrieg/tankDefinitions.ts @@ -44,6 +44,7 @@ export interface TankDefinition { } export interface TrackDefinition { id: number; + tier: Tier; weight: number; traverseSpeed: number; dispersion: {