mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-22 03:07:04 +02:00
feat: module hot swapping
This commit is contained in:
1 parent
a1c80c3d27
commit
d4e16048e9
5 files changed
+58
-27
No files matched your search
Binary file not shown.
+24
-16
@@ -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 (
|
||||
|
||||
@@ -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 } }) {
|
||||
/>
|
||||
</EffectComposer>
|
||||
|
||||
<group ref={model}>
|
||||
<primitive object={gltf.scene} />
|
||||
<group ref={model} rotation={[-Math.PI / 2, 0, 0]}>
|
||||
{Object.entries(gltf.nodes).map(([name, node]) => (
|
||||
<mesh
|
||||
visible={
|
||||
name === 'hull' ||
|
||||
name.startsWith('chassis_track_') ||
|
||||
name.startsWith('chassis_wheel_') ||
|
||||
(name.startsWith('turret_') &&
|
||||
name ===
|
||||
`turret_${turret.model
|
||||
.toString()
|
||||
.padStart(2, '0')}`) ||
|
||||
(name.startsWith('gun_') &&
|
||||
name ===
|
||||
`gun_${gun.model.toString().padStart(2, '0')}`) ||
|
||||
name ===
|
||||
`gun_${gun.model.toString().padStart(2, '0')}_mask`
|
||||
}
|
||||
name={name}
|
||||
key={node.id}
|
||||
castShadow
|
||||
receiveShadow
|
||||
geometry={(node as Mesh).geometry}
|
||||
material={(node as Mesh).material}
|
||||
position={node.position}
|
||||
rotation={node.rotation}
|
||||
scale={node.scale}
|
||||
/>
|
||||
))}
|
||||
</group>
|
||||
</Canvas>
|
||||
</div>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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';
|
||||
|
||||
Reference in new issue
Block a user