fix: jsx tree node uuids

This commit is contained in:
TrèsAbhi committed 2024-04-21 11:09:24 -05:00
1 parent b805c2e3b4
commit abb72fb674
5 files changed
+76 -26

No files matched your search

@@ -124,11 +124,15 @@ export const TankModel = memo(() => {
event.stopPropagation(); event.stopPropagation();
} }
return jsxTree(node, { return jsxTree(
node,
{
castShadow: true, castShadow: true,
receiveShadow: true, receiveShadow: true,
onPointerDown, onPointerDown,
}); },
node.uuid,
);
})} })}
<group ref={turretContainer}> <group ref={turretContainer}>
@@ -189,11 +193,15 @@ export const TankModel = memo(() => {
window.removeEventListener('pointerup', handlePointerUp); window.removeEventListener('pointerup', handlePointerUp);
} }
return jsxTree(node, { return jsxTree(
node,
{
castShadow: true, castShadow: true,
receiveShadow: true, receiveShadow: true,
onPointerDown, onPointerDown,
}); },
node.uuid,
);
})} })}
<group ref={gunContainer}> <group ref={gunContainer}>
@@ -255,11 +263,15 @@ export const TankModel = memo(() => {
window.removeEventListener('pointerup', handlePointerUp); window.removeEventListener('pointerup', handlePointerUp);
} }
return jsxTree(node, { return jsxTree(
node,
{
castShadow: true, castShadow: true,
receiveShadow: true, receiveShadow: true,
onPointerDown, onPointerDown,
}); },
node.uuid,
);
})} })}
</group> </group>
</group> </group>
@@ -153,14 +153,22 @@ export function CoreArmorSceneComponent({
return ( return (
<> <>
{jsxTree(node, { {jsxTree(
node,
{
renderOrder: 0, renderOrder: 0,
material: excludeMaterial, material: excludeMaterial,
})} },
{jsxTree(node, { node.uuid,
)}
{jsxTree(
node,
{
renderOrder: 1, renderOrder: 1,
material, material,
})} },
node.uuid,
)}
</> </>
); );
} }
@@ -107,7 +107,9 @@ export function SpacedArmorSubExternal({
return ( return (
<> <>
{jsxTree(node, { {jsxTree(
node,
{
renderOrder: 3, renderOrder: 3,
material: new MeshBasicMaterial({ material: new MeshBasicMaterial({
colorWrite: false, colorWrite: false,
@@ -121,12 +123,18 @@ export function SpacedArmorSubExternal({
thickness, thickness,
variant, variant,
} satisfies ArmorUserData, } satisfies ArmorUserData,
})} },
node.uuid,
)}
{jsxTree(node, { {jsxTree(
node,
{
renderOrder: 4, renderOrder: 4,
material, material,
})} },
node.uuid,
)}
</> </>
); );
} }
@@ -113,7 +113,9 @@ export function SpacedArmorSubSpaced({
return ( return (
<> <>
{jsxTree(node, { {jsxTree(
node,
{
renderOrder: 2, renderOrder: 2,
material, material,
onClick() {}, onClick() {},
@@ -121,12 +123,18 @@ export function SpacedArmorSubSpaced({
type: ArmorType.Spaced, type: ArmorType.Spaced,
thickness, thickness,
} satisfies ArmorUserData, } satisfies ArmorUserData,
})} },
node.uuid,
)}
{jsxTree(node, { {jsxTree(
node,
{
renderOrder: 5, renderOrder: 5,
material: depthWriteMaterial, material: depthWriteMaterial,
})} },
node.uuid,
)}
</> </>
); );
} }
@@ -81,7 +81,9 @@ export function SpacedArmorSceneComponent({
return ( return (
<> <>
{props.type === ArmorType.Core && {props.type === ArmorType.Core &&
jsxTree(node, { jsxTree(
node,
{
renderOrder: 0, renderOrder: 0,
material: omitMaterial, material: omitMaterial,
userData: { userData: {
@@ -125,11 +127,16 @@ export function SpacedArmorSceneComponent({
.sub(event.point) .sub(event.point)
.normalize(); .normalize();
pushLogs(shellNormal, filterIntersections(event.intersections), 0); pushLogs(
shellNormal,
filterIntersections(event.intersections),
0,
);
function filterIntersections(intersectionsRaw: Intersection[]) { function filterIntersections(intersectionsRaw: Intersection[]) {
const showSpacedArmor = const showSpacedArmor =
useTankopediaPersistent.getState().model.visual.showSpacedArmor; useTankopediaPersistent.getState().model.visual
.showSpacedArmor;
const intersectionsTyped = intersectionsRaw.filter( const intersectionsTyped = intersectionsRaw.filter(
({ object }) => object.userData.type !== undefined, ({ object }) => object.userData.type !== undefined,
) as ArmorMeshIntersection[]; ) as ArmorMeshIntersection[];
@@ -192,7 +199,8 @@ export function SpacedArmorSceneComponent({
shot.layers.at(-1) as ShotLayerBase shot.layers.at(-1) as ShotLayerBase
).point.distanceTo(intersections[0].point); ).point.distanceTo(intersections[0].point);
if (explosive && !splashing) if (explosive && !splashing)
remainingPenetration -= 0.5 * remainingPenetration * distance; remainingPenetration -=
0.5 * remainingPenetration * distance;
const blocked = remainingPenetration < 0; const blocked = remainingPenetration < 0;
shot.layers.push({ shot.layers.push({
@@ -211,7 +219,8 @@ export function SpacedArmorSceneComponent({
event.object.getWorldQuaternion(new Quaternion()), event.object.getWorldQuaternion(new Quaternion()),
); );
const thickness = const thickness =
thicknessCoefficient * intersection.object.userData.thickness; thicknessCoefficient *
intersection.object.userData.thickness;
if (layerIndex !== 0 && startingIndex === 0) { if (layerIndex !== 0 && startingIndex === 0) {
const previousIntersection = intersections[layerIndex - 1]; const previousIntersection = intersections[layerIndex - 1];
@@ -231,7 +240,9 @@ export function SpacedArmorSceneComponent({
if (wasted && !splashing) return; if (wasted && !splashing) return;
} }
if (intersection.object.userData.type === ArmorType.External) { if (
intersection.object.userData.type === ArmorType.External
) {
remainingPenetration -= thickness; remainingPenetration -= thickness;
const blocked = remainingPenetration < 0; const blocked = remainingPenetration < 0;
@@ -259,7 +270,8 @@ export function SpacedArmorSceneComponent({
shell.caliber > thickness * 3 || layerIndex > 0; shell.caliber > thickness * 3 || layerIndex > 0;
const twoCalibersRule = shell.caliber > thickness * 2; const twoCalibersRule = shell.caliber > thickness * 2;
const finalNormalization = twoCalibersRule const finalNormalization = twoCalibersRule
? (1.4 * normalization * shell.caliber) / (2.0 * thickness) ? (1.4 * normalization * shell.caliber) /
(2.0 * thickness)
: normalization; : normalization;
const finalThickness = const finalThickness =
thickness === 0 thickness === 0
@@ -325,7 +337,9 @@ export function SpacedArmorSceneComponent({
useTankopediaTemporary.setState({ shot }); useTankopediaTemporary.setState({ shot });
}, },
})} },
node.uuid,
)}
{props.type === ArmorType.Spaced && ( {props.type === ArmorType.Spaced && (
<SpacedArmorSubSpaced node={node} thickness={thickness} /> <SpacedArmorSubSpaced node={node} thickness={thickness} />