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: {