feat: non-pbr tank lighting and model cache

This commit is contained in:
TrèsAbhi committed 2024-01-22 15:42:49 -06:00
1 parent ea480aa365
commit a32ee2a344
7 files changed
+47 -13

No files matched your search

+7 -3
View File
@@ -1,7 +1,11 @@
import { useLoader } from '@react-three/fiber';
import { GLTFLoader } from 'three-stdlib';
import { ObjectMap, useLoader } from '@react-three/fiber';
import { GLTF, GLTFLoader } from 'three-stdlib';
import { asset } from '../core/blitzkrieg/asset';
const cache: Record<number, GLTF & ObjectMap> = {};
export function useArmor(id: number) {
return useLoader(GLTFLoader, asset(`3d/tanks/armor/${id}.glb`));
const gltf = useLoader(GLTFLoader, asset(`3d/tanks/armor/${id}.glb`));
if (!cache[id]) cache[id] = gltf;
return cache[id];
}
+24 -3
View File
@@ -1,7 +1,28 @@
import { useLoader } from '@react-three/fiber';
import { GLTFLoader } from 'three-stdlib';
import { ObjectMap, useLoader } from '@react-three/fiber';
import { Mesh, MeshStandardMaterial } from 'three';
import { GLTF, GLTFLoader } from 'three-stdlib';
import { asset } from '../core/blitzkrieg/asset';
const cache: Record<
number,
{
gltf: GLTF & ObjectMap;
hasPbr: boolean;
}
> = {};
export function useModel(id: number) {
return useLoader(GLTFLoader, asset(`3d/tanks/models/${id}.glb`));
const gltf = useLoader(GLTFLoader, asset(`3d/tanks/models/${id}.glb`));
if (!cache[id]) {
cache[id] = {
gltf,
hasPbr: Object.values(gltf.nodes).some(
(node) =>
node instanceof Mesh &&
node.material instanceof MeshStandardMaterial &&
node.material.roughnessMap !== null,
),
};
}
return cache[id];
}