Download src/client/rendering/trigger-region-layer.mjs from xlt99/EmboDi: direct link, hf CLI and curl.
- Browser
- Download file 1.76 kB
-
https://huggingface.co/spaces/xlt99/EmboDi/resolve/main/src/client/rendering/trigger-region-layer.mjs
- Command line
-
hf download hf://spaces/xlt99/EmboDi/src/client/rendering/trigger-region-layer.mjs
-
curl -L -o trigger-region-layer.mjs https://huggingface.co/spaces/xlt99/EmboDi/resolve/main/src/client/rendering/trigger-region-layer.mjs
1.76 kB
| import * as THREE from "three"; | |
| function createTriggerRegionLayer(world) { | |
| const root = new THREE.Group(); | |
| world.add(root); | |
| let key = ""; | |
| const outlines = /* @__PURE__ */ new Map(); | |
| return { | |
| frame(scene, { editing = false, states = [] } = {}) { | |
| const regions = scene.triggerRegions || [], next = JSON.stringify(regions); | |
| if (next !== key) { | |
| key = next; | |
| for (const m of outlines.values()) { | |
| m.traverse((o) => { | |
| o.geometry?.dispose(); | |
| o.material?.dispose(); | |
| }); | |
| } | |
| root.clear(); | |
| outlines.clear(); | |
| for (const r of regions) { | |
| const m = new THREE.LineLoop(new THREE.BufferGeometry().setFromPoints(r.points.map(([x, z]) => new THREE.Vector3(x, r.floorY + 0.018, z))), new THREE.LineBasicMaterial({ color: 10127071, toneMapped: false })); | |
| const shape = new THREE.Shape(r.points.map(([x, z]) => new THREE.Vector2(x, z))), fill = new THREE.Mesh(new THREE.ShapeGeometry(shape), new THREE.MeshBasicMaterial({ color: 10127071, transparent: true, opacity: 0.12, side: THREE.DoubleSide, depthWrite: false, toneMapped: false })); | |
| fill.rotation.x = Math.PI / 2; | |
| fill.position.y = r.floorY + 0.012; | |
| m.add(fill); | |
| root.add(m); | |
| outlines.set(r.id, m); | |
| } | |
| } | |
| for (const [id, m] of outlines) { | |
| const related = states.filter((s) => s.regionId === id); | |
| m.visible = editing || related.length > 0; | |
| m.material.color.set(related.some((s) => s.fired) ? 6473113 : related.some((s) => s.inside) ? 16764784 : 10127071); | |
| for (const child of m.children) child.material.color.copy(m.material.color); | |
| } | |
| } | |
| }; | |
| } | |
| export { | |
| createTriggerRegionLayer | |
| }; | |