feat: tracks

This commit is contained in:
TrèsAbhi committed 2024-02-08 11:08:22 -06:00
1 parent 2b37e08f19
commit 1eaa276b76
12 files changed
+69 -35

No files matched your search

@@ -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)!;
@@ -80,6 +80,28 @@ export function Modules() {
);
})}
</Flex>
<Flex>
{protagonist.tank.tracks.map((track, index) => {
return (
<ModuleButton
key={track.id}
type="module"
module="chassis"
discriminator={TIER_ROMAN_NUMERALS[track.tier]}
selected={protagonist.engine.id === track.id}
first={index === 0}
last={index === protagonist.tank.engines.length - 1}
rowChild
onClick={() => {
mutateDuel((draft) => {
draft.protagonist!.track = track;
});
}}
/>
);
})}
</Flex>
</Flex>
</ConfigurationChildWrapper>
);
@@ -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];
@@ -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);
@@ -37,9 +37,9 @@ export const ExternalModuleMask = memo<ExternalModuleMaskProps>(
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<ExternalModuleMaskProps>(
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<ExternalModuleMaskProps>(
.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<ExternalModuleMaskProps>(
<ArmorMeshExternalModuleMask
ornamental={ornamental}
maxThickness={maxThickness}
thickness={tankModelDefinition.trackThickness}
thickness={trackModelDefinition.thickness}
key={node.uuid}
geometry={(node as Mesh).geometry}
/>
@@ -267,7 +269,7 @@ export const ExternalModuleMask = memo<ExternalModuleMaskProps>(
<ArmorMeshExternalModuleMask
ornamental={ornamental}
maxThickness={maxThickness}
thickness={gunModelDefinition.barrelThickness}
thickness={gunModelDefinition.thickness}
key={node.uuid}
geometry={(node as Mesh).geometry}
/>
@@ -43,9 +43,9 @@ export const SpacedArmorDepth = memo<SpacedArmorDepthProps>(
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<SpacedArmorDepthProps>(
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<SpacedArmorDepthProps>(
.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],
@@ -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];
@@ -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)!;
+1
View File
@@ -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 };
});
+1 -1
View File
@@ -44,7 +44,7 @@ export interface YawLimits {
}
interface GunModelDefinition {
armor: ModelArmor;
barrelThickness: number;
thickness: number;
model: number;
pitch: PitchLimits;
}
+1
View File
@@ -44,6 +44,7 @@ export interface TankDefinition {
}
export interface TrackDefinition {
id: number;
tier: Tier;
weight: number;
traverseSpeed: number;
dispersion: {