Update box validation and collision world logic

This commit is contained in:
2026-04-05 02:35:30 +02:00
parent 82664df74d
commit 8c46b8991a
2 changed files with 7 additions and 7 deletions

View File

@@ -2,7 +2,7 @@ import {} from "../assets/project-assets";
import { isModelInstanceCollisionMode } from "../assets/model-instances";
import { isPlayerStartColliderMode, getPlayerStartColliderHeight } from "../entities/entity-instances";
import {} from "../interactions/interaction-links";
import { BOX_FACE_IDS, hasPositiveBoxSize } from "./brushes";
import { BOX_FACE_IDS, BOX_VERTEX_IDS, hasPositiveBoxSize } from "./brushes";
import { isAdvancedRenderingShadowMapSize, isAdvancedRenderingShadowType, isAdvancedRenderingToneMappingMode, isHexColorString } from "./world-settings";
export function createDiagnostic(severity, code, message, path, scope = "document") {
return {
@@ -557,6 +557,11 @@ export function validateSceneDocument(document) {
if (!isFiniteVec3(brush.size) || !hasPositiveBoxSize(brush.size)) {
diagnostics.push(createDiagnostic("error", "invalid-box-size", "Box brush sizes must remain finite and positive on every axis.", `${path}.size`));
}
for (const vertexId of BOX_VERTEX_IDS) {
if (!isFiniteVec3(brush.geometry.vertices[vertexId])) {
diagnostics.push(createDiagnostic("error", "invalid-box-geometry-vertex", "Box brush geometry vertices must remain finite on every axis.", `${path}.geometry.vertices.${vertexId}`));
}
}
for (const faceId of BOX_FACE_IDS) {
const materialId = brush.faces[faceId].materialId;
if (materialId !== null && document.materials[materialId] === undefined) {

View File

@@ -56,12 +56,7 @@ function attachBrushCollider(world, collider) {
const body = world.createRigidBody(RAPIER.RigidBodyDesc.fixed()
.setTranslation(collider.center.x, collider.center.y, collider.center.z)
.setRotation(createRapierQuaternion(collider.rotationDegrees)));
const halfExtents = {
x: collider.size.x * 0.5,
y: collider.size.y * 0.5,
z: collider.size.z * 0.5
};
world.createCollider(RAPIER.ColliderDesc.cuboid(halfExtents.x, halfExtents.y, halfExtents.z), body);
world.createCollider(RAPIER.ColliderDesc.trimesh(collider.vertices, collider.indices), body);
}
function attachSimpleModelCollider(world, collider) {
const body = createFixedBodyForModelCollider(world, collider);