fix: use new model format

This commit is contained in:
TrèsAbhi committed 2024-02-22 12:20:29 -06:00
1 parent 1c3e98678f
commit c68df74943
5 files changed
+108 -185

No files matched your search

@@ -1,53 +1,52 @@
import { MeshProps } from '@react-three/fiber';
import { Color, WebGLRenderTarget } from 'three';
import { Color, MeshBasicMaterial, Object3D, WebGLRenderTarget } from 'three';
import { jsxTree } from '../../../core/blitzkrieg/jsxTree';
import { ArmorMeshUserData } from './Armor';
export const externalModuleMaskRenderTarget = new WebGLRenderTarget();
type ArmorMeshExternalModuleMaskProps = MeshProps & {
type ArmorMeshExternalModuleMaskProps = {
ornamental?: boolean;
node: Object3D;
} & (
| {
exclude?: false;
maxThickness: number;
thickness: number;
}
| {
exclude: true;
}
);
| {
exclude?: false;
maxThickness: number;
thickness: number;
}
| {
exclude: true;
}
);
const excludeMaterial = new MeshBasicMaterial({
colorWrite: false,
});
export function ArmorMeshExternalModuleMask({
ornamental = false,
node,
...props
}: ArmorMeshExternalModuleMaskProps) {
return (
<>
{props.exclude && !ornamental && (
<mesh {...props} renderOrder={0}>
<meshBasicMaterial colorWrite={false} />
</mesh>
)}
{props.exclude &&
!ornamental &&
jsxTree(node, { renderOrder: 0, material: excludeMaterial })}
{!props.exclude && (
<mesh
{...props}
renderOrder={1}
onClick={ornamental ? () => {} : undefined}
userData={
{
type: 'externalModule',
thickness: props.thickness,
} satisfies ArmorMeshUserData
}
>
<meshBasicMaterial
color={new Color(1, props.thickness / props.maxThickness, 0)}
depthWrite={false}
colorWrite={!ornamental}
/>
</mesh>
)}
{!props.exclude &&
jsxTree(node, {
renderOrder: 1,
onClick: ornamental ? () => {} : undefined,
userData: {
type: 'externalModule',
thickness: props.thickness,
} satisfies ArmorMeshUserData,
material: new MeshBasicMaterial({
color: new Color(1, props.thickness / props.maxThickness, 0),
depthWrite: false,
colorWrite: !ornamental,
}),
})}
</>
);
}