From d4e16048e9803965e74089c43af02089e50beacc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Mon, 1 Jan 2024 14:48:46 -0600 Subject: [PATCH] feat: module hot swapping --- public/test/5137.glb | Bin 17602620 -> 17602532 bytes scripts/buildAssets.ts | 40 +++++++++++++++---------- src/app/tools/tankopedia/[id]/page.tsx | 33 ++++++++++++++++++-- src/core/blitz/extractModel.ts | 8 +---- src/core/blitzkrieg/tankDefinitions.ts | 4 ++- 5 files changed, 58 insertions(+), 27 deletions(-) diff --git a/public/test/5137.glb b/public/test/5137.glb index f201c44c0a620e25ee01eda110a851d5d6d512f1..e0c7a3ab28c3606438c284ab695550819c94e758 100644 GIT binary patch delta 1174 zcmWmE`D4xn0LSq?o7u2dRE~AJ3VqX_T`W2j%UNNR6s53Omo!o7SQ5i(&r^=lUCU8y zbSN?1#T1QFQM44g9o_2n{o(cg4?dsO%d1oCmsO{xk1Z}NNK8mbsGpk_shL-mo>>uF zGpSjuvLZbr8e|38K~9hx68a<2iv7If;{L zO&i+Mj`p0wsdS(toj8qv)9K6^WD+HdY;wpYk1lj2pEK!3ch2H$&f#2oa31H=lU@{X z0ln!%U;5FX0bIyMT+BcQF_=PzFqBKUlwn-Pa4zQxMlg~qxr$L-%{7c>3}Y$cTE;P+ zVy@$QZs104Vgffaky|KX61Os$Dcr{G+`&}t!9!j~FY23$j?q>!wDPtD1nL{}b z@E{e$i1QE+GnaYHX917!C<}Rv$9aM$d5WibhG%(>N}gvCi&?@_Uf@NRv79QZS;0zP z;$>dpRaWsDud|vrSi@RsSjU^Z#oN5YyS&Hye87jSX9KltPxfAbIj oa+v?hY`>f^iD8n$GzgO%reTZV zv1nypJl(e{m8y=$qE)HtQPt(C%4pXS@lMHjG7&FMmLw7-#YKh5;#l0v|KGf*EEXL- zzPw^g)!1+^Q5NJ+Z5<3q=LI9v%_9ZDl=Q%ySYg4ct?9v$U}&aYP?~9$U04?E3!2QV z%+yq7B4m?89qLk#`sC7phBTrv2av~s9K^vK!l5*wDa~k33tDm*tvH<49Kn$sMH`~D zr5)|*z|kDTu^dN7V&v0_&csPj!0{APL@`N9=t5Ucpc^N05+`#Cr&7vkbf*VB=|yk) za5`tumow={e+Dp+vpAbU4CWk$FqB~oX9VX`#(A92NJeo1qZz|kE@T|zDQ5x~QNhJj zlHw93QpKfIa~YGE%oL__IahEcS8+AdxQ6M>U?$gc9oJLC4a{OTbC}DG+{8R?W>VN3a|1Suk!|P@)mFN4)5|F@ACm4 z@(~~N37_&ApYsJf*vT$-vxhJFim%zrH+;)?e9sT;V?RIg6F>6{zw#Tu^9O(O7k~2) n|ITsy^9Yk2CMQgtFm=P!3sXN#ZkPsP8ir{U+2|{XOv?EWqo+!$ diff --git a/scripts/buildAssets.ts b/scripts/buildAssets.ts index d233d61bd..3db91b009 100644 --- a/scripts/buildAssets.ts +++ b/scripts/buildAssets.ts @@ -117,6 +117,7 @@ interface VehicleDefinitions { pumpGunMode?: boolean; pumpGunReloadTimes?: string; clip?: { count: number; rate: number }; + models: { undamaged: string }; }; }; }; @@ -218,7 +219,9 @@ if (allTargets || targets?.includes('definitions')) { const tankTurrets = Object.keys(tankDefinition.root.turrets0).map( (turretKey) => { const turret = tankDefinition.root.turrets0[turretKey]; - console.log(parse(turret.models.undamaged).name); + const turretModel = Number( + parse(turret.models.undamaged).name.split('_')[1], + ); const turretId = toUniqueId(nation, turretList.root.ids[turretKey]); const turretYaw = ( typeof turret.yawLimits === 'string' @@ -247,6 +250,9 @@ if (allTargets || targets?.includes('definitions')) { ) .split(' ') .map(Number) as [number, number]; + const gunModel = Number( + parse(turretGunEntry.models.undamaged).name.split('_')[1], + ); const gunName = strings[gun.userString] ?? gunKey.replaceAll('_', ' '); const gunType = @@ -298,6 +304,7 @@ if (allTargets || targets?.includes('definitions')) { reload: gunReload, count: gunClipCount, interClip: gunInterClip, + model: gunModel, } as GunDefinition; }); @@ -310,8 +317,9 @@ if (allTargets || targets?.includes('definitions')) { .replace(/^(Turret ([0-9] )?)+/, ''), tier: turret.level as Tier, yaw: -turretYaw[0] + turretYaw[1] === 360 ? undefined : turretYaw, - gunOrigin, guns: turretGuns, + gunOrigin, + model: turretModel, } satisfies TurretDefinition; }, ); @@ -347,20 +355,20 @@ if (allTargets || targets?.includes('definitions')) { ); console.log('Committing tank definitions...'); - // await commitMultipleFiles( - // 'tresabhi', - // 'blitzkrieg-assets', - // 'main', - // 'definitions', - // [ - // { - // content: JSON.stringify(tankDefinitions), - // encoding: 'utf-8', - // path: 'definitions/tanks.json', - // }, - // ], - // true, - // ); + await commitMultipleFiles( + 'tresabhi', + 'blitzkrieg-assets', + 'main', + 'definitions', + [ + { + content: JSON.stringify(tankDefinitions), + encoding: 'utf-8', + path: 'definitions/tanks.json', + }, + ], + true, + ); } if ( diff --git a/src/app/tools/tankopedia/[id]/page.tsx b/src/app/tools/tankopedia/[id]/page.tsx index 3b049a442..302fbf22f 100644 --- a/src/app/tools/tankopedia/[id]/page.tsx +++ b/src/app/tools/tankopedia/[id]/page.tsx @@ -27,7 +27,7 @@ import { go } from 'fuzzysort'; import { debounce } from 'lodash'; import Link from 'next/link'; import { use, useEffect, useRef, useState } from 'react'; -import { Group } from 'three'; +import { Group, Mesh } from 'three'; import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; import { Flag } from '../../../../components/Flag'; import { ModuleButtons } from '../../../../components/ModuleButton'; @@ -130,8 +130,35 @@ export default function Page({ params }: { params: { id: string } }) { /> - - + + {Object.entries(gltf.nodes).map(([name, node]) => ( + + ))} diff --git a/src/core/blitz/extractModel.ts b/src/core/blitz/extractModel.ts index 8fc88bc1b..ec70b4174 100644 --- a/src/core/blitz/extractModel.ts +++ b/src/core/blitz/extractModel.ts @@ -323,13 +323,7 @@ export async function extractModel( }); } - // rotate 90 degrees on the x axis - const rootNode = document - .createNode('root') - .setRotation([Math.cos(Math.PI / 4), 0, 0, -Math.sin(Math.PI / 4)]); - - scene.addChild(rootNode); - parseHierarchies(sc2['#hierarchy'], rootNode); + parseHierarchies(sc2['#hierarchy'], scene); return document; } diff --git a/src/core/blitzkrieg/tankDefinitions.ts b/src/core/blitzkrieg/tankDefinitions.ts index 1dcd872a5..e76fd0504 100644 --- a/src/core/blitzkrieg/tankDefinitions.ts +++ b/src/core/blitzkrieg/tankDefinitions.ts @@ -27,8 +27,9 @@ export interface TurretDefinition { name: string; tier: Tier; yaw?: [number, number]; - gunOrigin: Vector3Tuple; guns: GunDefinition[]; + gunOrigin: Vector3Tuple; + model: number; } export type GunDefinition = GunDefinitionBase & (GunDefinitionRegular | GunDefinitionAutoLoader | GunDefinitionAutoReloader); @@ -38,6 +39,7 @@ interface GunDefinitionBase { tier: Tier; pitch: [number, number]; shells: ShellDefinition[]; + model: number; } interface GunDefinitionRegular { type: 'regular';