three-low-poly 0.9.2 → 0.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.js","sources":["../src/effects/Bubbling.js","../src/geometry/architecture/BifurcatedStaircaseGeometry.js","../src/geometry/architecture/DioramaGeometry.js","../src/geometry/architecture/LShapedStaircaseGeometry.js","../src/geometry/architecture/SpiralStaircaseGeometry.js","../src/geometry/architecture/StaircaseGeometry.js","../src/geometry/cemetery/CrossHeadstoneGeometry.js","../src/geometry/cemetery/ObeliskHeadstoneGeometry.js","../src/geometry/cemetery/RoundedHeadstoneGeometry.js","../src/geometry/cemetery/SquareHeadstoneGeometry.js","../src/geometry/fence/FenceColumn.js","../src/geometry/fence/WroughtIronBarGeometry.js","../src/geometry/leafs/SimpleLeafGeometry.js","../src/geometry/skeleton/BoneGeometry.js","../src/geometry/science/BeakerGeometry.js","../src/geometry/science/MortarGeometry.js","../src/geometry/science/TestTubeGeometry.js","../src/geometry/science/WineBottleGeometry.js","../src/group/astronomy/Moon.js","../src/group/cemetery/Mausoleum.js","../src/group/furniture/Desk.js","../src/group/lighting/Candle.js","../src/group/lighting/Lantern.js","../src/group/rocks/MossyRocks.js","../src/group/rocks/Rocks.js","../src/group/science/Beaker.js","../src/group/science/Book.js","../src/group/science/Bottle.js","../src/group/science/BunsenBurner.js","../src/group/science/ElectricPanel.js","../src/group/science/Flask.js","../src/group/science/LeverPanel.js","../src/group/science/Microscope.js","../src/group/science/MortarAndPestle.js","../src/group/science/SpiralTube.js","../src/group/science/Stand.js","../src/group/science/TeslaCoil.js","../src/group/science/TestTube.js","../src/group/science/TestTubeRack.js","../src/group/science/WineBottle.js"],"sourcesContent":["import {Group, Mesh, MeshStandardMaterial, SphereGeometry} from \"three\";\n\nclass Bubbling extends Group {\n constructor() {\n super();\n\n // Bubble properties\n const bubbles = [];\n const bubbleCount = 20; // Number of bubbles\n\n // Create bubble geometry and material\n const bubbleGeometry = new SphereGeometry(0.1, 6, 6); // Small spheres\n const bubbleMaterial = new MeshStandardMaterial({\n color: 0xffffff,\n transparent: true,\n opacity: 0.6,\n roughness: 0.3,\n metalness: 0.3,\n });\n\n for (let i = 0; i < bubbleCount; i++) {\n const bubble = new Mesh(bubbleGeometry, bubbleMaterial);\n bubble.position.set(\n (Math.random() - 0.5) * 1.5, // Random x position within flask\n Math.random() * 3, // Random y position within flask height\n (Math.random() - 0.5) * 1.5, // Random z position within flask\n );\n bubbles.push(bubble);\n this.add(bubble);\n }\n\n // Bubble animation loop\n function animateBubbles() {\n bubbles.forEach((bubble) => {\n bubble.position.y += 0.02; // Move bubble upwards\n\n // Reset bubble to bottom if it reaches top\n if (bubble.position.y > 3) {\n bubble.position.y = 0;\n bubble.position.x = (Math.random() - 0.5) * 1.5; // Randomize x position again\n bubble.position.z = (Math.random() - 0.5) * 1.5; // Randomize z position again\n }\n });\n }\n\n // Add animateBubbles to the main render loop\n function animate() {\n requestAnimationFrame(animate);\n animateBubbles(); // Update bubble positions\n }\n\n animate();\n }\n}\n\nexport { Bubbling };\n","import { BufferGeometry, Float32BufferAttribute } from \"three\";\n\nclass BifurcatedStaircaseGeometry extends BufferGeometry {\n constructor(stepWidth = 2, stepHeight = 0.3, stepDepth = 0.6, numStepsCentral = 5, numStepsBranch = 5, branchAngle = Math.PI / 4) {\n super();\n\n const vertices = [];\n const indices = [];\n\n // Generate central flight of steps\n for (let i = 0; i < numStepsCentral; i++) {\n const yBottom = i * stepHeight;\n const yTop = yBottom + stepHeight;\n const zFront = i * stepDepth;\n const zBack = zFront + stepDepth;\n\n // Central flight of steps (8 vertices per step)\n vertices.push(\n // Vertical riser\n -stepWidth / 2, yBottom, zFront, // Bottom-left\n stepWidth / 2, yBottom, zFront, // Bottom-right\n stepWidth / 2, yTop, zFront, // Top-right\n -stepWidth / 2, yTop, zFront, // Top-left\n\n // Horizontal tread\n -stepWidth / 2, yTop, zFront, // Top-left\n stepWidth / 2, yTop, zFront, // Top-right\n stepWidth / 2, yTop, zBack, // Back-right\n -stepWidth / 2, yTop, zBack // Back-left\n );\n\n const baseIndex = i * 8;\n // Indices for riser\n indices.push(\n baseIndex, baseIndex + 1, baseIndex + 2,\n baseIndex, baseIndex + 2, baseIndex + 3\n );\n\n // Indices for tread\n indices.push(\n baseIndex + 4, baseIndex + 5, baseIndex + 6,\n baseIndex + 4, baseIndex + 6, baseIndex + 7\n );\n }\n\n // Landing platform\n const landingY = numStepsCentral * stepHeight;\n const landingZ = numStepsCentral * stepDepth;\n const landingWidth = stepWidth * 2;\n\n vertices.push(\n // Landing platform (4 vertices)\n -landingWidth / 2, landingY, landingZ, // Bottom-left\n landingWidth / 2, landingY, landingZ, // Bottom-right\n landingWidth / 2, landingY, landingZ + stepDepth,// Top-right\n -landingWidth / 2, landingY, landingZ + stepDepth // Top-left\n );\n\n const landingBaseIndex = numStepsCentral * 8;\n indices.push(\n landingBaseIndex, landingBaseIndex + 1, landingBaseIndex + 2, // First triangle for landing\n landingBaseIndex, landingBaseIndex + 2, landingBaseIndex + 3 // Second triangle for landing\n );\n\n // Generate branching flights (left and right)\n for (let j = 0; j < 2; j++) {\n const direction = j === 0 ? 1 : -1; // Left or right branch\n\n for (let i = 0; i < numStepsBranch; i++) {\n const yBottom = landingY + i * stepHeight;\n const yTop = yBottom + stepHeight;\n\n // Calculate positions for the branching steps\n const xStart = direction * (landingWidth / 4);\n const zStart = landingZ + stepDepth;\n\n const xOffset = i * stepDepth * Math.cos(branchAngle);\n const zOffset = i * stepDepth * Math.sin(branchAngle);\n\n const xFrontLeft = xStart + direction * xOffset - (stepWidth / 2) * Math.cos(branchAngle);\n const xFrontRight = xStart + direction * xOffset + (stepWidth / 2) * Math.cos(branchAngle);\n const zFront = zStart + zOffset;\n const xBackLeft = xFrontLeft + direction * stepDepth * Math.cos(branchAngle);\n const xBackRight = xFrontRight + direction * stepDepth * Math.cos(branchAngle);\n const zBack = zFront + stepDepth * Math.sin(branchAngle);\n\n // Branch flight of steps (8 vertices per step)\n vertices.push(\n // Vertical riser\n xFrontLeft, yBottom, zFront, // Bottom-left\n xFrontRight, yBottom, zFront, // Bottom-right\n xFrontRight, yTop, zFront, // Top-right\n xFrontLeft, yTop, zFront, // Top-left\n\n // Horizontal tread\n xFrontLeft, yTop, zFront, // Top-left\n xFrontRight, yTop, zFront, // Top-right\n xBackRight, yTop, zBack, // Back-right\n xBackLeft, yTop, zBack // Back-left\n );\n\n const baseIndex = landingBaseIndex + 4 + j * numStepsBranch * 8 + i * 8;\n // Indices for riser\n indices.push(\n baseIndex, baseIndex + 1, baseIndex + 2,\n baseIndex, baseIndex + 2, baseIndex + 3\n );\n\n // Indices for tread\n indices.push(\n baseIndex + 4, baseIndex + 5, baseIndex + 6,\n baseIndex + 4, baseIndex + 6, baseIndex + 7\n );\n }\n }\n\n // Create BufferAttribute for vertices and indices\n this.setIndex(indices);\n this.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n this.computeVertexNormals(); // Compute normals for proper lighting\n }\n}\n\nexport { BifurcatedStaircaseGeometry };\n","import { BufferGeometry, Float32BufferAttribute } from \"three\";\n\nclass DioramaGeometry extends BufferGeometry {\n constructor(width = 5, height = 3, depth = 5, wallThickness = 0.2) {\n super();\n\n // Vertices array (each set of 3 numbers represents x, y, z of a vertex)\n const vertices = [\n // Floor vertices\n -width / 2, 0, -depth / 2, // 0\n width / 2, 0, -depth / 2, // 1\n width / 2, 0, depth / 2, // 2\n -width / 2, 0, depth / 2, // 3\n\n // Back wall vertices\n -width / 2, 0, -depth / 2, // 4\n width / 2, 0, -depth / 2, // 5\n width / 2, height, -depth / 2, // 6\n -width / 2, height, -depth / 2, // 7\n\n // Left wall vertices\n -width / 2, 0, -depth / 2, // 8\n -width / 2, 0, depth / 2, // 9\n -width / 2, height, depth / 2, // 10\n -width / 2, height, -depth / 2, // 11\n ];\n\n // Indices array (each set of 3 numbers represents a triangle)\n const indices = [\n // Floor\n 0, 1, 2,\n 0, 2, 3,\n\n // Back wall\n 4, 5, 6,\n 4, 6, 7,\n\n // Left wall\n 8, 9, 10,\n 8, 10, 11,\n ];\n\n // Create BufferAttribute for vertices and indices\n this.setIndex(indices);\n this.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n this.computeVertexNormals(); // Compute normals for proper lighting\n }\n}\n\nexport { DioramaGeometry }\n","import { BufferGeometry, Float32BufferAttribute } from \"three\";\n\nclass LShapedStaircaseGeometry extends BufferGeometry {\n constructor(stepWidth = 2, stepHeight = 0.3, stepDepth = 0.5, numStepsPerFlight = 5, landingDepth = 2) {\n super();\n\n const vertices = [];\n const indices = [];\n\n // Generate first flight of steps\n for (let i = 0; i < numStepsPerFlight; i++) {\n const yBottom = i * stepHeight;\n const yTop = yBottom + stepHeight;\n const zFront = i * stepDepth;\n const zBack = zFront + stepDepth;\n\n // First flight of steps (4 vertices per step, 8 vertices per flight)\n vertices.push(\n // Vertical riser\n -stepWidth / 2, yBottom, zFront, // Bottom-left\n stepWidth / 2, yBottom, zFront, // Bottom-right\n stepWidth / 2, yTop, zFront, // Top-right\n -stepWidth / 2, yTop, zFront, // Top-left\n\n // Horizontal tread\n -stepWidth / 2, yTop, zFront, // Top-left\n stepWidth / 2, yTop, zFront, // Top-right\n stepWidth / 2, yTop, zBack, // Back-right\n -stepWidth / 2, yTop, zBack // Back-left\n );\n\n const baseIndex = i * 8;\n // Indices for riser\n indices.push(\n baseIndex, baseIndex + 1, baseIndex + 2,\n baseIndex, baseIndex + 2, baseIndex + 3\n );\n\n // Indices for tread\n indices.push(\n baseIndex + 4, baseIndex + 5, baseIndex + 6,\n baseIndex + 4, baseIndex + 6, baseIndex + 7\n );\n }\n\n // Add landing platform\n const landingY = numStepsPerFlight * stepHeight;\n const landingZ = numStepsPerFlight * stepDepth;\n\n vertices.push(\n // Landing platform (4 vertices)\n -stepWidth / 2, landingY, landingZ, // Bottom-left\n stepWidth / 2, landingY, landingZ, // Bottom-right\n stepWidth / 2, landingY, landingZ + landingDepth, // Top-right\n -stepWidth / 2, landingY, landingZ + landingDepth // Top-left\n );\n\n const landingBaseIndex = numStepsPerFlight * 8;\n indices.push(\n landingBaseIndex, landingBaseIndex + 1, landingBaseIndex + 2, // First triangle for landing\n landingBaseIndex, landingBaseIndex + 2, landingBaseIndex + 3 // Second triangle for landing\n );\n\n // Generate second flight of steps (turn 90 degrees)\n for (let i = 0; i < numStepsPerFlight; i++) {\n const yBottom = landingY + i * stepHeight;\n const yTop = yBottom + stepHeight;\n const xFront = -stepWidth / 2 - i * stepDepth;\n const xBack = xFront - stepDepth;\n\n // Second flight of steps (4 vertices per step, 8 vertices per flight)\n vertices.push(\n // Vertical riser\n xFront, yBottom, landingZ + landingDepth, // Bottom-left\n xFront, yBottom, landingZ + landingDepth - stepWidth, // Bottom-right\n xFront, yTop, landingZ + landingDepth - stepWidth, // Top-right\n xFront, yTop, landingZ + landingDepth, // Top-left\n\n // Horizontal tread\n xFront, yTop, landingZ + landingDepth, // Top-left\n xFront, yTop, landingZ + landingDepth - stepWidth, // Top-right\n xBack, yTop, landingZ + landingDepth - stepWidth, // Back-right\n xBack, yTop, landingZ + landingDepth // Back-left\n );\n\n const baseIndex = landingBaseIndex + 4 + i * 8;\n // Indices for riser\n indices.push(\n baseIndex, baseIndex + 1, baseIndex + 2,\n baseIndex, baseIndex + 2, baseIndex + 3\n );\n\n // Indices for tread\n indices.push(\n baseIndex + 4, baseIndex + 5, baseIndex + 6,\n baseIndex + 4, baseIndex + 6, baseIndex + 7\n );\n }\n\n // Create BufferAttribute for vertices and indices\n this.setIndex(indices);\n this.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n this.computeVertexNormals(); // Compute normals for proper lighting\n }\n}\n\nexport { LShapedStaircaseGeometry };\n","import { BufferGeometry, Float32BufferAttribute } from \"three\";\n\nclass SpiralStaircaseGeometry extends BufferGeometry {\n constructor(stepWidth = 1, stepDepth = 0.4, stepHeight = 0.2, numSteps = 20, radius = 2, angleIncrement = Math.PI / 8) {\n super();\n\n const vertices = [];\n const indices = [];\n let currentAngle = 0;\n\n // Generate vertices and indices for each step\n for (let i = 0; i < numSteps; i++) {\n // Calculate the center position of the step based on the angle and radius\n const xCenter = radius * Math.cos(currentAngle);\n const zCenter = radius * Math.sin(currentAngle);\n const yBottom = i * stepHeight;\n const yTop = yBottom + stepHeight;\n\n // Define the four corners of the vertical riser part of the current step\n vertices.push(\n // Front face (vertical riser)\n xCenter - (stepWidth / 2) * Math.cos(currentAngle), yBottom, zCenter - (stepWidth / 2) * Math.sin(currentAngle), // Bottom-left\n xCenter + (stepWidth / 2) * Math.cos(currentAngle), yBottom, zCenter + (stepWidth / 2) * Math.sin(currentAngle), // Bottom-right\n xCenter + (stepWidth / 2) * Math.cos(currentAngle), yTop, zCenter + (stepWidth / 2) * Math.sin(currentAngle), // Top-right\n xCenter - (stepWidth / 2) * Math.cos(currentAngle), yTop, zCenter - (stepWidth / 2) * Math.sin(currentAngle) // Top-left\n );\n\n // Define the four corners of the horizontal tread part of the current step\n vertices.push(\n // Top face (horizontal tread)\n xCenter - (stepWidth / 2) * Math.cos(currentAngle), yTop, zCenter - (stepWidth / 2) * Math.sin(currentAngle), // Top-left-front\n xCenter + (stepWidth / 2) * Math.cos(currentAngle), yTop, zCenter + (stepWidth / 2) * Math.sin(currentAngle), // Top-right-front\n xCenter + (stepWidth / 2) * Math.cos(currentAngle) - stepDepth * Math.sin(currentAngle), yTop, zCenter + (stepWidth / 2) * Math.sin(currentAngle) + stepDepth * Math.cos(currentAngle), // Back-right\n xCenter - (stepWidth / 2) * Math.cos(currentAngle) - stepDepth * Math.sin(currentAngle), yTop, zCenter - (stepWidth / 2) * Math.sin(currentAngle) + stepDepth * Math.cos(currentAngle) // Back-left\n );\n\n // Indices for the riser (vertical face of each step)\n const baseIndex = i * 8; // 8 vertices per step (4 for riser, 4 for tread)\n indices.push(\n baseIndex, baseIndex + 1, baseIndex + 2, // First triangle for riser\n baseIndex, baseIndex + 2, baseIndex + 3 // Second triangle for riser\n );\n\n // Indices for the tread (horizontal face of each step)\n indices.push(\n baseIndex + 4, baseIndex + 5, baseIndex + 6, // First triangle for tread\n baseIndex + 4, baseIndex + 6, baseIndex + 7 // Second triangle for tread\n );\n\n // Increment the angle for the next step\n currentAngle += angleIncrement;\n }\n\n // Create BufferAttribute for vertices and indices\n this.setIndex(indices);\n this.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n this.computeVertexNormals(); // Compute normals for proper lighting\n }\n}\n\nexport { SpiralStaircaseGeometry };\n","import { BufferGeometry, Float32BufferAttribute } from \"three\";\n\nclass StaircaseGeometry extends BufferGeometry {\n constructor(width = 2, stepHeight = 0.3, stepDepth = 0.5, numSteps = 10) {\n super();\n\n const vertices = [];\n const indices = [];\n\n // Generate vertices and indices for each step\n for (let i = 0; i < numSteps; i++) {\n const stepBottomY = i * stepHeight;\n const stepTopY = stepBottomY + stepHeight;\n const stepFrontZ = i * stepDepth;\n const stepBackZ = stepFrontZ + stepDepth;\n\n // Vertices for each step (8 vertices per step to cover tread and riser)\n vertices.push(\n // Bottom face of riser (front face)\n -width / 2, stepBottomY, stepFrontZ, // 0: Bottom-left-front\n width / 2, stepBottomY, stepFrontZ, // 1: Bottom-right-front\n width / 2, stepTopY, stepFrontZ, // 2: Top-right-front\n -width / 2, stepTopY, stepFrontZ, // 3: Top-left-front\n\n // Top face of tread (horizontal step)\n -width / 2, stepTopY, stepFrontZ, // 4: Top-left-front (repeated)\n width / 2, stepTopY, stepFrontZ, // 5: Top-right-front (repeated)\n width / 2, stepTopY, stepBackZ, // 6: Top-right-back\n -width / 2, stepTopY, stepBackZ // 7: Top-left-back\n );\n\n // Indices for each step\n const baseIndex = i * 8;\n\n // Riser face (front face of each step)\n indices.push(\n baseIndex, baseIndex + 1, baseIndex + 2, // First triangle for riser\n baseIndex, baseIndex + 2, baseIndex + 3 // Second triangle for riser\n );\n\n // Tread face (top horizontal surface of each step)\n indices.push(\n baseIndex + 4, baseIndex + 6, baseIndex + 5, // First triangle for tread\n baseIndex + 4, baseIndex + 7, baseIndex + 6 // Second triangle for tread\n );\n }\n\n // Create BufferAttribute for vertices and indices\n this.setIndex(indices);\n this.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n this.computeVertexNormals(); // Compute normals for proper lighting\n }\n}\n\nexport { StaircaseGeometry };\n","import { BoxGeometry, BufferGeometry } from \"three\";\nimport { mergeGeometries } from \"three/addons/utils/BufferGeometryUtils.js\";\n\nclass CrossHeadstoneGeometry extends BufferGeometry {\n constructor(width = 0.4, height = 1.2, depth = 0.2) {\n super();\n\n // Create the vertical part of the cross\n const verticalHeight = height * 0.6;\n const verticalGeometry = new BoxGeometry(width / 2, verticalHeight, depth);\n verticalGeometry.translate(0, verticalHeight / 2, 0);\n\n // Create the horizontal part of the cross\n const horizontalWidth = width * 1.5;\n const horizontalGeometry = new BoxGeometry(horizontalWidth, width / 4, depth);\n horizontalGeometry.translate(0, verticalHeight * 0.75, 0);\n\n // Merge both parts into a cross\n this.copy(mergeGeometries([verticalGeometry, horizontalGeometry], true));\n }\n}\n\nexport { CrossHeadstoneGeometry };\n","import { BoxGeometry, BufferGeometry, ConeGeometry } from \"three\";\nimport { mergeGeometries } from \"three/addons/utils/BufferGeometryUtils.js\";\n\nclass ObeliskHeadstoneGeometry extends BufferGeometry {\n constructor(totalHeight = 1.75, baseWidth = 0.75) {\n super();\n\n // Define height proportions relative to the total height\n const baseHeight = totalHeight * 0.05;\n const lowerSegmentHeight = totalHeight * 0.15;\n const middleSegmentHeight = totalHeight * 0.15;\n const topSegmentHeight = totalHeight * 0.75;\n\n let currentHeight = 0;\n\n // Base of the Headstone (a wide box)\n const baseGeometry = new BoxGeometry(baseWidth, baseHeight, baseWidth);\n baseGeometry.translate(0, currentHeight + baseHeight / 2, 0);\n currentHeight += baseHeight;\n\n // Lower Segment (a slightly narrower box)\n const lowerSegmentGeometry = new BoxGeometry(baseWidth * 0.8, lowerSegmentHeight, baseWidth * 0.8);\n lowerSegmentGeometry.translate(0, currentHeight + lowerSegmentHeight / 2, 0);\n currentHeight += lowerSegmentHeight;\n\n // Middle Segment (an even narrower box)\n const middleSegmentGeometry = new BoxGeometry(baseWidth * 0.6, middleSegmentHeight, baseWidth * 0.6);\n middleSegmentGeometry.translate(0, currentHeight + middleSegmentHeight / 2, 0);\n currentHeight += middleSegmentHeight;\n\n // Top Segment (a tall, thin box to form the obelisk shape)\n const topSegmentGeometry = new BoxGeometry(baseWidth * 0.4, topSegmentHeight, baseWidth * 0.4);\n topSegmentGeometry.translate(0, currentHeight + topSegmentHeight / 2, 0);\n currentHeight += topSegmentHeight;\n\n // Pyramid Top (a cone to form the pointed top of the obelisk)\n const pyramidGeometry = new ConeGeometry((baseWidth * 0.4) / Math.sqrt(2), 0.1, 4, 1, false, Math.PI / 4);\n pyramidGeometry.translate(0, currentHeight + 0.1 / 2, 0);\n\n this.copy(\n mergeGeometries([baseGeometry, lowerSegmentGeometry, middleSegmentGeometry, topSegmentGeometry, pyramidGeometry], true),\n );\n }\n}\n\nexport { ObeliskHeadstoneGeometry };\n","import { BoxGeometry, BufferGeometry, CylinderGeometry } from \"three\";\nimport { mergeGeometries } from \"three/addons/utils/BufferGeometryUtils.js\";\n\nclass RoundedHeadstoneGeometry extends BufferGeometry {\n constructor(width = 0.6, height = 1.0, depth = 0.2) {\n super();\n\n // Create the base of the headstone (a box)\n const baseHeight = height * 0.7;\n const baseGeometry = new BoxGeometry(width, baseHeight, depth);\n baseGeometry.translate(0, baseHeight / 2, 0);\n\n // Create the rounded top part (a half cylinder with caps)\n const topHeight = height - baseHeight;\n const topGeometry = new CylinderGeometry(width / 2, width / 2, depth, 16, 1, false, 0, Math.PI);\n topGeometry.rotateY(Math.PI / 2);\n topGeometry.rotateX(Math.PI / 2);\n topGeometry.translate(0, baseHeight + topHeight / 2 - depth / 2 - 0.05, 0);\n\n // Merge base and top into a single geometry\n this.copy(mergeGeometries([baseGeometry, topGeometry], true));\n }\n}\n\nexport { RoundedHeadstoneGeometry };\n","import { BoxGeometry, BufferGeometry } from \"three\";\n\nclass SquareHeadstoneGeometry extends BufferGeometry {\n constructor(width = 0.5, height = 0.8, depth = 0.15) {\n super();\n\n // Create a rectangular slab\n const slabGeometry = new BoxGeometry(width, height, depth);\n slabGeometry.translate(0, height / 2, 0); // Shift up to stand on the ground\n\n this.copy(slabGeometry);\n }\n}\nexport { SquareHeadstoneGeometry };\n","import { BoxGeometry, BufferGeometry } from \"three\";\nimport { mergeGeometries } from \"three/addons/utils/BufferGeometryUtils.js\";\n\n/**\n * Fence Column Geometry, a simple fence column shape\n * @extends BufferGeometry\n *\n * @example\n * // Create a fence column\n * const columnGeometry = new FenceColumn();\n * const columnMaterial = new MeshStandardMaterial({ color: 0x8b7d7b, flatShading: true });\n * const column = new Mesh(columnGeometry, columnMaterial);\n * scene.add(column);\n */\nclass FenceColumn extends BufferGeometry {\n constructor(height = 2.25) {\n super();\n\n // Column Base (a wider base for stability)\n const baseGeometry = new BoxGeometry(1.2, 0.5, 1.2);\n baseGeometry.translate(0, 0.25, 0);\n\n // Main Column (a tall rectangular shape, adjustable height)\n const columnGeometry = new BoxGeometry(1, height, 1);\n columnGeometry.translate(0, 0.5 + height / 2, 0);\n\n // Column Cap (a slightly wider cap on top)\n const capGeometry = new BoxGeometry(1.4, 0.3, 1.4);\n capGeometry.translate(0, 0.5 + height + 0.15, 0);\n\n this.copy(mergeGeometries([baseGeometry, columnGeometry, capGeometry], true));\n }\n}\n\nexport { FenceColumn };\n","import { BufferGeometry, ConeGeometry, CylinderGeometry } from \"three\";\nimport { mergeGeometries } from \"three/addons/utils/BufferGeometryUtils.js\";\n\n/**\n * Wrought Iron Bar Geometry, a simple wrought iron bar shape\n * @extends BufferGeometry\n *\n * @example\n * // Create a wrought iron bar\n * const barGeometry = new WroughtIronBarGeometry();\n * const barMaterial = new MeshStandardMaterial({ color: 0x333333, metalness: 0.8, roughness: 0.4 });\n * const bar = new Mesh(barGeometry, barMaterial);\n * scene.add(bar);\n */\nclass WroughtIronBarGeometry extends BufferGeometry {\n constructor(barHeight = 2.0, barRadius = 0.05, spikeHeight = 0.3) {\n super();\n\n // Create a cylinder for the vertical bar\n const barGeometry = new CylinderGeometry(barRadius, barRadius, barHeight, 8);\n barGeometry.translate(0, barHeight / 2, 0); // Shift up to stand on the ground\n\n // Create a cone for the spike on top\n const spikeGeometry = new ConeGeometry(barRadius * 1.5, spikeHeight, 8);\n spikeGeometry.translate(0, barHeight + spikeHeight / 2, 0); // Place on top of the bar\n\n // Merge bar and spike into one geometry\n this.copy(mergeGeometries([barGeometry, spikeGeometry], true));\n }\n}\n\nexport { WroughtIronBarGeometry };\n","import { BufferGeometry, Float32BufferAttribute } from \"three\";\n\nclass SimpleLeafGeometry extends BufferGeometry {\n constructor(size = 0.1) {\n super();\n\n const vertices = [];\n const indices = [];\n\n // Define vertices to approximate a simple, elongated, oval leaf shape\n const leafPoints = [\n [0, 1], // Top point\n [0.5, 0.75], // Right upper middle\n [0.75, 0.25], // Right lower middle\n [0.5, -0.5], // Right bottom middle\n [0, -1], // Bottom point\n [-0.5, -0.5], // Left bottom middle\n [-0.75, 0.25], // Left lower middle\n [-0.5, 0.75], // Left upper middle\n ];\n\n // Add vertices to the geometry, scaling them with the `size` parameter\n for (let i = 0; i < leafPoints.length; i++) {\n const [x, y] = leafPoints[i];\n vertices.push(x * size, y * size, 0);\n }\n\n // Define indices to form triangular faces of the leaf\n // Create a fan-like structure connecting the top vertex (index 0) to other neighboring vertices\n for (let i = 1; i < leafPoints.length - 1; i++) {\n indices.push(0, i, i + 1);\n }\n // Close the fan with the last triangle\n indices.push(0, leafPoints.length - 1, 1);\n\n // Convert the vertices and indices to buffer attributes\n const positionAttribute = new Float32BufferAttribute(vertices, 3);\n this.setAttribute('position', positionAttribute);\n this.setIndex(indices);\n\n this.computeVertexNormals();\n }\n}\n\nexport { SimpleLeafGeometry };\n","import { BufferGeometry, CylinderGeometry, SphereGeometry } from \"three\";\nimport { mergeGeometries } from \"three/addons/utils/BufferGeometryUtils.js\";\n\n/**\n * Bone Geometry, a simple bone shape\n * @extends BufferGeometry\n *\n * @example\n * // Create a bone\n * const boneGeometry = new BoneGeometry();\n * const boneMaterial = new MeshStandardMaterial({ color: 0xffffff });\n * const bone = new Mesh(boneGeometry, boneMaterial);\n * scene.add(bone);\n */\nclass BoneGeometry extends BufferGeometry {\n constructor(radiusTop = 0.1, radiusBottom = 0.1, height = 0.4, radialSegments = 8) {\n super();\n\n // Create the cylinder (shaft of the bone)\n const cylinderGeometry = new CylinderGeometry(radiusTop * 0.6, radiusBottom * 0.6, height, radialSegments);\n cylinderGeometry.translate(0, 0, 0);\n\n // Create the spheres (ends of the bone)\n const sphereGeometry = new SphereGeometry(radiusTop, radialSegments, radialSegments);\n const topSphere1 = sphereGeometry.clone();\n const topSphere2 = sphereGeometry.clone();\n const bottomSphere1 = sphereGeometry.clone();\n const bottomSphere2 = sphereGeometry.clone();\n\n // Position the spheres at each end of the cylinder\n topSphere1.translate(0, height / 2 + radiusTop * 0.6, -radiusTop * 0.6);\n topSphere2.translate(0, height / 2 + radiusTop * 0.6, radiusTop * 0.6);\n bottomSphere1.translate(0, -height / 2 - radiusBottom * 0.6, -radiusBottom * 0.6);\n bottomSphere2.translate(0, -height / 2 - radiusBottom * 0.6, radiusBottom * 0.6);\n\n // Merge the parts\n this.copy(mergeGeometries([cylinderGeometry, topSphere1, topSphere2, bottomSphere1, bottomSphere2], true));\n }\n}\n\nexport { BoneGeometry };\n","import { BufferGeometry, CylinderGeometry, SphereGeometry } from \"three\";\nimport { mergeGeometries } from \"three/addons/utils/BufferGeometryUtils.js\";\n\nclass BeakerGeometry extends BufferGeometry {\n constructor() {\n super();\n\n // Create the sphere part of the glassware\n const sphereGeometry = new SphereGeometry(1, 16, 16);\n const tubeGeometry = new CylinderGeometry(0.2, 0.2, 2, 16, 1, true);\n\n // Adjust tube position to stick out of the sphere\n tubeGeometry.translate(0, 1.5, 0);\n tubeGeometry.rotateX(Math.PI / 2);\n\n this.copy(mergeGeometries([sphereGeometry, tubeGeometry], true));\n }\n}\n\nexport { BeakerGeometry };\n","import { BufferGeometry, CircleGeometry, LatheGeometry, Vector2 } from \"three\";\nimport { mergeGeometries } from \"three/addons/utils/BufferGeometryUtils.js\";\n\nclass MortarGeometry extends BufferGeometry {\n constructor() {\n super();\n\n // Mortar geometry\n const mortarPoints = [\n new Vector2(1, 0), // Bottom of the bowl\n new Vector2(1.2, 0.5), // Slight flare at the base\n new Vector2(1.4, 1.5), // Outer wall\n new Vector2(1.3, 1.8), // Flared edge\n new Vector2(0.8, 1.8), // Lip of the bowl\n ];\n const mortarGeometry = new LatheGeometry(mortarPoints, 12);\n\n // Create a disk to close off the bottom\n const baseDisk = new CircleGeometry(1, 12); // Radius matches the base of the mortar\n baseDisk.rotateX(-Math.PI / 2); // Rotate to align with the bottom\n baseDisk.translate(0, 0, 0); // Position at the base of the mortar\n\n this.copy(mergeGeometries([mortarGeometry, baseDisk], true));\n }\n}\n\nexport { MortarGeometry };\n","import { BufferGeometry, CylinderGeometry, SphereGeometry } from \"three\";\nimport { mergeGeometries } from \"three/addons/utils/BufferGeometryUtils.js\";\n\nclass TestTubeGeometry extends BufferGeometry {\n constructor(radiusTop = 0.2, radiusBottom = 0.2, height = 3, segments = 32, openEnded = true) {\n super();\n\n // Create the cylindrical body\n const tubeGeometry = new CylinderGeometry(radiusTop, radiusBottom, height, segments, 1, openEnded);\n\n // Create the rounded bottom using a half sphere\n const bottomGeometry = new SphereGeometry(radiusBottom, segments, segments / 2, 0, Math.PI * 2, Math.PI / 2, Math.PI / 2);\n bottomGeometry.translate(0, -(height / 2), 0); // Position it at the bottom of the cylinder\n\n // Merge parts\n this.copy(mergeGeometries([tubeGeometry, bottomGeometry], true));\n }\n}\n\nexport { TestTubeGeometry };\n","import { BufferGeometry, CylinderGeometry } from \"three\";\nimport { mergeGeometries } from \"three/addons/utils/BufferGeometryUtils.js\";\n\nclass WineBottleGeometry extends BufferGeometry {\n constructor({ radius = 0.5, neckRadius = 0.2, height = 3, neckHeight = 1, segments = 16 } = {}) {\n super();\n\n // Main body\n const bodyHeight = height - neckHeight;\n const bodyGeometry = new CylinderGeometry(radius, radius, bodyHeight, segments);\n bodyGeometry.translate(0, bodyHeight / 2, 0);\n\n // Shoulder section between body and neck\n const shoulderHeight = 0.3;\n const shoulderGeometry = new CylinderGeometry(neckRadius, radius, shoulderHeight, segments);\n shoulderGeometry.translate(0, bodyHeight + shoulderHeight / 2, 0);\n\n // Neck\n const neckGeometry = new CylinderGeometry(neckRadius, neckRadius, neckHeight, segments);\n neckGeometry.translate(0, bodyHeight + shoulderHeight + neckHeight / 2, 0);\n\n // Merge geometries\n this.copy(mergeGeometries([bodyGeometry, shoulderGeometry, neckGeometry], true));\n }\n}\n\nexport { WineBottleGeometry };\n","import { Group, Mesh, ShaderMaterial, SphereGeometry } from \"three\";\n\nclass Moon extends Group {\n constructor() {\n super();\n\n // Create moon geometry\n const moonGeometry = new SphereGeometry(5, 32, 32);\n\n // Custom ShaderMaterial\n const moonMaterial = new ShaderMaterial({\n uniforms: {\n time: { value: 0.0 },\n },\n vertexShader: `\n varying vec3 vNormal;\n varying vec3 vPosition;\n void main() {\n vNormal = normalize(normal);\n vPosition = position;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `,\n fragmentShader: `\n varying vec3 vNormal;\n varying vec3 vPosition;\n\n // Simple 3D noise function\n float hash(vec3 p) {\n p = fract(p * 0.3183099 + vec3(0.71, 0.113, 0.419));\n p *= 17.0;\n return fract(p.x * p.y * p.z * (p.x + p.y + p.z));\n }\n\n float noise(vec3 p) {\n vec3 ip = floor(p);\n vec3 fp = fract(p);\n fp = fp * fp * (3.0 - 2.0 * fp); // Smoothstep\n return mix(\n mix(mix(hash(ip), hash(ip + vec3(1.0, 0.0, 0.0)), fp.x),\n mix(hash(ip + vec3(0.0, 1.0, 0.0)), hash(ip + vec3(1.0, 1.0, 0.0)), fp.x), fp.y),\n mix(mix(hash(ip + vec3(0.0, 0.0, 1.0)), hash(ip + vec3(1.0, 0.0, 1.0)), fp.x),\n mix(hash(ip + vec3(0.0, 1.0, 1.0)), hash(ip + vec3(1.0, 1.0, 1.0)), fp.x), fp.y),\n fp.z);\n }\n\n void main() {\n vec3 color = vec3(0.8, 0.8, 0.7); // Base moon color\n float n = noise(vPosition * 0.5); // Apply noise with frequency\n color *= 0.8 + 0.2 * n; // Modulate color by noise\n gl_FragColor = vec4(color, 1.0);\n }\n `\n });\n\n // Create the moon mesh and add it to the scene\n const moon = new Mesh(moonGeometry, moonMaterial);\n this.add(moon);\n }\n}\n\nexport { Moon };\n","import { BoxGeometry, ConeGeometry, CylinderGeometry, ExtrudeGeometry, Group, Mesh, MeshStandardMaterial, Shape } from \"three\";\n\nclass Mausoleum extends Group {\n constructor() {\n super();\n\n // Base of the Mausoleum\n const baseGeometry = new BoxGeometry(5, 1, 5);\n const baseMaterial = new MeshStandardMaterial({ color: 0x808080, flatShading: true });\n const baseMesh = new Mesh(baseGeometry, baseMaterial);\n baseMesh.position.set(0, 0.5, 0);\n this.add(baseMesh);\n\n // Main Building Structure\n const buildingGeometry = new BoxGeometry(4, 3, 4);\n const buildingMaterial = new MeshStandardMaterial({ color: 0x696969, flatShading: true });\n const buildingMesh = new Mesh(buildingGeometry, buildingMaterial);\n buildingMesh.position.set(0, 2.5, 0);\n this.add(buildingMesh);\n\n // Roof (Peaked)\n const roofGeometry = new ConeGeometry(3.5, 2, 4);\n const roofMaterial = new MeshStandardMaterial({ color: 0x505050, flatShading: true });\n const roofMesh = new Mesh(roofGeometry, roofMaterial);\n roofMesh.rotation.y = Math.PI / 4;\n roofMesh.position.set(0, 5, 0);\n this.add(roofMesh);\n\n // Pillars\n const pillarGeometry = new CylinderGeometry(0.2, 0.2, 3.5, 16);\n const pillarMaterial = new MeshStandardMaterial({ color: 0x696969, flatShading: true });\n\n const pillarPositions = [\n [-1.8, 2.3, -2.2],\n [1.8, 2.3, -2.2],\n [-1.8, 2.3, 2.2],\n [1.8, 2.3, 2.2],\n ];\n\n pillarPositions.forEach((position) => {\n const pillarMesh = new Mesh(pillarGeometry, pillarMaterial);\n pillarMesh.position.set(...position);\n this.add(pillarMesh);\n });\n\n // Corrected Arched Entrance\n const archShape = new Shape();\n archShape.moveTo(-1, 0);\n archShape.lineTo(-1, 2);\n archShape.absarc(0, 2, 1, Math.PI, 0, true);\n archShape.lineTo(1, 0);\n\n const extrudeSettings = {\n depth: 0.5,\n bevelEnabled: false,\n };\n const archGeometry = new ExtrudeGeometry(archShape, extrudeSettings);\n const archMaterial = new MeshStandardMaterial({ color: 0x404040, flatShading: true });\n const archMesh = new Mesh(archGeometry, archMaterial);\n archMesh.position.set(0, 0.5, 1.7);\n this.add(archMesh);\n }\n}\n\nexport { Mausoleum };\n","import { BoxGeometry, Group, LatheGeometry, Mesh, MeshStandardMaterial, Vector2 } from \"three\";\n\nclass Desk extends Group {\n constructor() {\n super();\n\n // Desk Surface\n const surfaceGeometry = new BoxGeometry(5, 0.3, 3); // Width, Height (depth), Length\n const surfaceMaterial = new MeshStandardMaterial({ color: 0x8b5a2b }); // Wood-like color\n const deskSurface = new Mesh(surfaceGeometry, surfaceMaterial);\n deskSurface.position.set(0, 3.15, 0); // Raise the desk up\n\n // Desk Legs (using lathe geometry)\n const points = [];\n points.push(new Vector2(0.2, 0)); // Starting point at bottom (thin)\n points.push(new Vector2(0.25, 0.5)); // Curve outward\n points.push(new Vector2(0.15, 1.5)); // Narrow toward the middle\n points.push(new Vector2(0.3, 3)); // Final part toward the top\n\n const legGeometry = new LatheGeometry(points, 32);\n const legMaterial = new MeshStandardMaterial({ color: 0x4b3621 }); // Darker wood for legs\n\n // Create four legs for the desk\n const legPositions = [\n [2.2, 0, 1.2], // Adjust Y to 0 so legs start at ground level\n [-2.2, 0, 1.2],\n [2.2, 0, -1.2],\n [-2.2, 0, -1.2],\n ];\n\n legPositions.forEach((position) => {\n const leg = new Mesh(legGeometry, legMaterial);\n leg.position.set(...position);\n this.add(leg);\n });\n\n this.add(deskSurface);\n }\n}\n\nexport { Desk };\n","import { CylinderGeometry, Group, Mesh, MeshBasicMaterial, MeshStandardMaterial, PointLight, SphereGeometry } from \"three\";\n\nclass Candle extends Group {\n constructor(height = 1, radius = 0.2) {\n super();\n this.height = height;\n this.radius = radius;\n this.createCandle();\n this.animateFlicker();\n }\n\n createCandle() {\n // Candle Geometry\n const candleGeometry = new CylinderGeometry(this.radius, this.radius, this.height, 32);\n const candleMaterial = new MeshStandardMaterial({ color: 0xffffff });\n this.candle = new Mesh(candleGeometry, candleMaterial);\n this.candle.position.set(0, this.height / 2, 0);\n this.add(this.candle);\n\n // Flame Geometry\n const flameGeometry = new SphereGeometry(0.05, 16, 16);\n const flameMaterial = new MeshBasicMaterial({ color: 0xffa500 });\n this.flame = new Mesh(flameGeometry, flameMaterial);\n this.flame.position.set(0, this.height + 0.05, 0);\n this.add(this.flame);\n\n // Candlelight\n this.candleLight = new PointLight(0xffa500, 1, 5);\n this.candleLight.position.set(0, this.height + 0.05, 0);\n this.candleLight.castShadow = true;\n this.add(this.candleLight);\n }\n\n animateFlicker() {\n const flicker = () => {\n // Random flicker intensity between 0.8 and 1.2\n this.candleLight.intensity = 1 + (Math.random() * 0.4 - 0.2);\n\n // Optional: slight random movement to simulate a flickering flame\n this.candleLight.position.x = Math.random() * 0.02 - 0.01;\n this.candleLight.position.z = Math.random() * 0.02 - 0.01;\n\n requestAnimationFrame(flicker);\n };\n flicker();\n }\n}\n\nexport { Candle };\n","import { ConeGeometry, CylinderGeometry, Group, Mesh, MeshStandardMaterial, PointLight, TorusGeometry } from \"three\";\n\n// Class for Lantern Geometry\nclass Lantern extends Group {\n constructor(height = 1.3, baseWidth = 0.5) {\n super();\n\n // Lantern Base (cylinder)\n const baseGeometry = new CylinderGeometry(baseWidth, baseWidth, 0.2, 16);\n const baseMaterial = new MeshStandardMaterial({ color: 0x8b4513, flatShading: true });\n const baseMesh = new Mesh(baseGeometry, baseMaterial);\n baseMesh.position.set(0, 0, 0);\n this.add(baseMesh);\n\n // Lantern Body (a rectangular frame)\n const bodyGeometry = new CylinderGeometry(baseWidth * 0.9, baseWidth * 0.9, height);\n const bodyMaterial = new MeshStandardMaterial({ color: 0xffd700, flatShading: true, transparent: true, opacity: 0.6 });\n const bodyMesh = new Mesh(bodyGeometry, bodyMaterial);\n bodyMesh.position.set(0, height / 2 + 0.1, 0); // Adjust position based on height\n this.add(bodyMesh);\n\n // Lantern Roof (a cone)\n const roofGeometry = new ConeGeometry(baseWidth * 1.1, 0.5, 8);\n const roofMaterial = new MeshStandardMaterial({ color: 0x8b4513, flatShading: true });\n const roofMesh = new Mesh(roofGeometry, roofMaterial);\n roofMesh.position.set(0, height + 0.35, 0); // Adjusted position based on height\n this.add(roofMesh);\n\n // Lantern Handle (a torus)\n const handleGeometry = new TorusGeometry(baseWidth * 0.8, 0.05, 8, 16);\n const handleMaterial = new MeshStandardMaterial({ color: 0x8b4513, flatShading: true });\n const handleMesh = new Mesh(handleGeometry, handleMaterial);\n handleMesh.position.set(0, height + 0.85, 0); // Adjusted to sit above the roof\n this.add(handleMesh);\n\n // Lantern Light (point light inside)\n const light = new PointLight(0xffaa00, 1.5, 15);\n light.position.set(0, height / 2 + 0.1, 0); // Adjust position based on height\n light.castShadow = true;\n this.add(light);\n }\n}\n\nexport { Lantern };\n","import { DodecahedronGeometry, Group, Mesh, MeshStandardMaterial } from \"three\";\n\nclass MossyRocks extends Group {\n constructor() {\n super();\n\n // Rock Geometry (using Dodecahedron for a low-poly random rock-like shape)\n const rockGeometry = new DodecahedronGeometry(1, 0); // Low-poly shape\n const rockMaterial = new MeshStandardMaterial({ color: 0x808080, flatShading: true });\n const mossMaterial = new MeshStandardMaterial({ color: 0x4b8b3b, flatShading: true, opacity: 0.8, transparent: true });\n\n // Create multiple random rocks with slight variations\n for (let i = 0; i < 5; i++) {\n const rockMesh = new Mesh(rockGeometry, rockMaterial);\n rockMesh.scale.set(0.8 + Math.random() * 0.4, 0.8 + Math.random() * 0.4, 0.8 + Math.random() * 0.4); // Scale randomly to make each rock unique\n rockMesh.rotation.set(Math.random() * Math.PI, Math.random() * Math.PI, Math.random() * Math.PI); // Random rotation for variation\n rockMesh.position.set((Math.random() - 0.5) * 4, 0, (Math.random() - 0.5) * 4); // Keep rocks at ground level\n this.add(rockMesh);\n\n // Moss Layer (using a slightly smaller scale and positioned on top of the rock)\n const mossMesh = new Mesh(rockGeometry, mossMaterial);\n mossMesh.scale.set(rockMesh.scale.x * 0.9, rockMesh.scale.y * 0.5, rockMesh.scale.z * 0.9); // Make the moss layer flatter\n mossMesh.rotation.copy(rockMesh.rotation);\n mossMesh.position.copy(rockMesh.position);\n mossMesh.position.y += 0.3; // Raise the moss slightly to sit on top of the rock\n this.add(mossMesh);\n }\n }\n}\n\nexport { MossyRocks };\n","import { DodecahedronGeometry, Group, Mesh, MeshStandardMaterial } from \"three\";\n\nclass Rocks extends Group {\n constructor() {\n super();\n\n // Rock Geometry (using Dodecahedron for a low-poly random rock-like shape)\n const rockGeometry = new DodecahedronGeometry(1, 0); // Low-poly shape\n const rockMaterial = new MeshStandardMaterial({ color: 0x808080, flatShading: true });\n\n // Create multiple random rocks with slight variations\n for (let i = 0; i < 5; i++) {\n const rockMesh = new Mesh(rockGeometry, rockMaterial);\n rockMesh.scale.set(0.8 + Math.random() * 0.4, 0.8 + Math.random() * 0.4, 0.8 + Math.random() * 0.4); // Scale randomly to make each rock unique\n rockMesh.rotation.set(Math.random() * Math.PI, Math.random() * Math.PI, Math.random() * Math.PI); // Random rotation for variation\n rockMesh.position.set((Math.random() - 0.5) * 4, 0, (Math.random() - 0.5) * 4); // Keep rocks at ground level\n this.add(rockMesh);\n }\n }\n}\n\nexport { Rocks };\n","import { BeakerGeometry } from \"../../geometry/science/BeakerGeometry.js\";\nimport { DoubleSide, Group, Mesh, MeshPhysicalMaterial } from \"three\";\n\nclass Beaker extends Group {\n constructor() {\n super();\n\n // Create the geometry\n const beakerGeometry = new BeakerGeometry();\n\n // Create a group to combine the geometries\n const glassMaterial = new MeshPhysicalMaterial({\n color: 0x88ccff,\n transparent: true,\n opacity: 0.4,\n roughness: 0.1,\n metalness: 0.1,\n reflectivity: 0.8,\n transmission: 0.9,\n side: DoubleSide,\n });\n\n const beaker = new Mesh(beakerGeometry, glassMaterial);\n beaker.rotation.x = -Math.PI / 2;\n this.add(beaker);\n }\n}\n\nexport { Beaker };\n","import { BoxGeometry, Group, Mesh, MeshStandardMaterial } from \"three\";\n\nclass Book extends Group {\n constructor() {\n super();\n\n // Book Cover Geometry (Front and Back covers extending beyond the pages)\n const coverGeometry = new BoxGeometry(1.6, 0.05, 2.1); // Cover is slightly larger to extend beyond the pages\n const coverMaterial = new MeshStandardMaterial({ color: 0x8b0000 });\n\n // Create the front and back covers\n const frontCoverMesh = new Mesh(coverGeometry, coverMaterial);\n const backCoverMesh = new Mesh(coverGeometry, coverMaterial);\n\n // Position the front and back covers\n frontCoverMesh.position.set(0, 0.125, 0); // Slightly above the pages\n backCoverMesh.position.set(0, -0.125, 0); // Slightly below the pages\n\n // Pages Geometry (slightly smaller to fit neatly inside the cover)\n const pagesGeometry = new BoxGeometry(1.55, 0.2, 2.0); // Pages are smaller to sit inside the cover comfortably\n const pagesMaterial = new MeshStandardMaterial({ color: 0xffffff }); // White color for pages\n const pagesMesh = new Mesh(pagesGeometry, pagesMaterial);\n\n // Position the pages between the covers\n pagesMesh.position.set(-0.025, 0, 0); // Positioned at the center between front and back covers\n\n // Create a spine for extra detail\n const spineGeometry = new BoxGeometry(0.05, 0.25, 2.1); // Spine with thickness and same length as the cover\n const spineMaterial = new MeshStandardMaterial({ color: 0x4b0000 }); // Darker shade for the spine\n const spineMesh = new Mesh(spineGeometry, spineMaterial);\n spineMesh.position.set(-0.8, 0, 0); // Positioned on one side to represent the book's spine\n\n // Group the parts together to form the book\n this.add(frontCoverMesh);\n this.add(backCoverMesh);\n this.add(pagesMesh);\n this.add(spineMesh);\n }\n}\n\nexport { Book };\n","import { CylinderGeometry, Group, LatheGeometry, Mesh, MeshStandardMaterial, Vector2 } from \"three\";\n\nclass Bottle extends Group {\n constructor() {\n super();\n\n // Potion bottle geometry\n const bottlePoints = [\n new Vector2(0, 0), // Bottom\n new Vector2(0.8, 0), // Base\n new Vector2(1, 1.5), // Rounded body\n new Vector2(0.5, 2.2), // Neck\n new Vector2(0.6, 2.5), // Mouth\n ];\n const bottleGeometry = new LatheGeometry(bottlePoints, 10); // Low-poly segments\n\n // Cork geometry\n const corkGeometry = new CylinderGeometry(0.3, 0.4, 0.2, 8);\n\n // Materials\n const glassMaterial = new MeshStandardMaterial({\n color: 0x88ccff,\n transparent: true,\n opacity: 0.5,\n roughness: 0.1,\n metalness: 0.3,\n });\n\n const liquidMaterial = new MeshStandardMaterial({\n color: 0xff3366, // Vibrant potion color\n transparent: true,\n opacity: 0.6,\n });\n\n const corkMaterial = new MeshStandardMaterial({\n color: 0x8b4513,\n roughness: 1.0,\n });\n\n // Meshes\n const bottle = new Mesh(bottleGeometry, glassMaterial);\n const liquid = new Mesh(bottleGeometry, liquidMaterial);\n const cork = new Mesh(corkGeometry, corkMaterial);\n\n // Adjust liquid position to appear inside bottle\n liquid.scale.set(0.8, 0.8, 0.8);\n liquid.position.y = 0.1; // Position slightly lower to appear \"inside\"\n\n // Position cork at the bottle's mouth\n cork.position.y = 2.5;\n\n // Group all elements for easy manipulation\n const potionBottle = new Group();\n potionBottle.add(bottle, liquid, cork);\n this.add(potionBottle);\n }\n}\n\nexport { Bottle };\n","import { ConeGeometry, CylinderGeometry, Group, Mesh, MeshStandardMaterial } from \"three\";\n\nclass BunsenBurner extends Group {\n constructor() {\n super();\n\n // Base geometry\n const baseGeometry = new CylinderGeometry(0.3, 0.4, 0.1, 16);\n const baseMaterial = new MeshStandardMaterial({\n color: 0x333333,\n roughness: 0.6,\n metalness: 0.3,\n });\n const base = new Mesh(baseGeometry, baseMaterial);\n base.position.y = 0.05;\n\n // Burner tube geometry\n const tubeGeometry = new CylinderGeometry(0.1, 0.1, 0.7, 16);\n const tubeMaterial = new MeshStandardMaterial({\n color: 0x555555,\n roughness: 0.5,\n metalness: 0.4,\n });\n const tube = new Mesh(tubeGeometry, tubeMaterial);\n tube.position.y = 0.4;\n\n // Flame geometry\n const flameGeometry = new ConeGeometry(0.075, 0.2, 16);\n const flameMaterial = new MeshStandardMaterial({\n color: 0xff5500,\n emissive: 0xff5500,\n emissiveIntensity: 0.6,\n transparent: true,\n opacity: 0.8,\n });\n const flame = new Mesh(flameGeometry, flameMaterial);\n flame.position.y = 0.8;\n\n this.add(base, tube, flame);\n }\n}\n\nexport { BunsenBurner };\n","import { BoxGeometry, CylinderGeometry, Group, Mesh, MeshStandardMaterial, SphereGeometry } from \"three\";\n\nclass ElectricPanel extends Group {\n constructor() {\n super();\n\n // Panel base geometry\n const panelGeometry = new BoxGeometry(3, 4, 0.1);\n const panelMaterial = new MeshStandardMaterial({\n color: 0x2e2e2e,\n roughness: 0.8,\n metalness: 0.6,\n });\n\n // Create switches and dials\n const switchGeometry = new BoxGeometry(0.2, 0.5, 0.2);\n const switchMaterial = new MeshStandardMaterial({\n color: 0xaaaaaa,\n roughness: 0.5,\n metalness: 0.7,\n });\n\n const dialGeometry = new CylinderGeometry(0.3, 0.3, 0.1, 16);\n const dialMaterial = new MeshStandardMaterial({\n color: 0x555555,\n roughness: 0.7,\n metalness: 0.5,\n });\n\n // Create panel and switches\n const panel = new Mesh(panelGeometry, panelMaterial);\n\n // Add multiple switches and dials\n const switches = [];\n for (let i = -1; i <= 1; i++) {\n const toggleSwitch = new Mesh(switchGeometry, switchMaterial);\n toggleSwitch.position.set(i, 1.5, 0.1);\n switches.push(toggleSwitch);\n panel.add(toggleSwitch);\n }\n\n const dial = new Mesh(dialGeometry, dialMaterial);\n dial.rotation.x = Math.PI / 2;\n dial.position.set(0, 0.5, 0.15);\n panel.add(dial);\n\n // Create red indicator light\n const lightGeometry = new SphereGeometry(0.15, 8, 8);\n const lightMaterial = new MeshStandardMaterial({\n color: 0xff0000,\n emissive: 0xff0000,\n emissiveIntensity: 0.5,\n });\n const light = new Mesh(lightGeometry, lightMaterial);\n light.position.set(0, -1, 0.1);\n panel.add(light);\n\n this.add(panel);\n\n // Define variables for flickering effect\n let flickerSpeed = 0.015; // Speed of flicker\n let flickerMaxIntensity = 0.8; // Maximum emissive intensity\n let flickerMinIntensity = 0.2; // Minimum emissive intensity\n\n // Main render loop\n function animate() {\n requestAnimationFrame(animate);\n\n // Create a flicker effect by adjusting the emissive intensity\n const flickerIntensity = flickerMinIntensity + Math.abs(Math.sin(Date.now() * flickerSpeed)) * (flickerMaxIntensity - flickerMinIntensity);\n light.material.emissiveIntensity = flickerIntensity;\n }\n\n animate();\n }\n}\n\nexport { ElectricPanel };\n","import {CylinderGeometry, Group, LatheGeometry, Mesh, MeshStandardMaterial, Vector2} from \"three\";\n\nclass Flask extends Group {\n constructor() {\n super();\n\n // Flask body geometry\n const flaskPoints = [\n new Vector2(0, 0), // Bottom of the flask\n new Vector2(1.2, 0), // Base\n new Vector2(1.5, 1.5), // Mid-body\n new Vector2(1, 3), // Narrow neck\n new Vector2(0.6, 3.5), // Mouth of the flask\n ];\n const flaskGeometry = new LatheGeometry(flaskPoints, 12); // 12 segments for low-poly style\n\n // Cork stopper geometry\n const corkGeometry = new CylinderGeometry(0.6, 0.7, 0.3, 8); // Simple tapered cylinder\n\n // Materials for flask and cork\n const glassMaterial = new MeshStandardMaterial({\n color: 0x88ccaa,\n transparent: true,\n opacity: 0.4,\n roughness: 0.1,\n metalness: 0.5,\n });\n\n const corkMaterial = new MeshStandardMaterial({\n color: 0x8b4513,\n roughness: 1.0,\n });\n\n // Meshes\n const flask = new Mesh(flaskGeometry, glassMaterial);\n const cork = new Mesh(corkGeometry, corkMaterial);\n\n // Position cork on top of the flask\n cork.position.y = 3.5;\n\n // Add both to a single object for easy manipulation\n this.add(flask, cork);\n }\n}\n\nexport { Flask };\n","import { BoxGeometry, CylinderGeometry, Group, Mesh, MeshStandardMaterial, SphereGeometry } from \"three\";\n\nclass LeverPanel extends Group {\n constructor() {\n super();\n\n // New panel for levers\n const leverPanelGeometry = new BoxGeometry(2, 3, 0.1);\n const leverPanelMaterial = new MeshStandardMaterial({\n color: 0x333333,\n roughness: 0.8,\n metalness: 0.5,\n });\n const leverPanel = new Mesh(leverPanelGeometry, leverPanelMaterial);\n\n // Lever geometry\n const leverBaseGeometry = new CylinderGeometry(0.1, 0.1, 0.2, 8);\n const leverHandleGeometry = new CylinderGeometry(0.05, 0.05, 1, 8);\n\n // Lever material\n const leverMaterial = new MeshStandardMaterial({\n color: 0xaaaaaa,\n roughness: 0.5,\n metalness: 0.7,\n });\n\n // Create multiple levers\n const levers = [];\n for (let i = -0.5; i <= 0.5; i += 0.5) {\n // Lever base\n const leverBase = new Mesh(leverBaseGeometry, leverMaterial);\n leverBase.position.set(i, 1, 0.1);\n\n // Lever handle\n const leverHandle = new Mesh(leverHandleGeometry, leverMaterial);\n leverHandle.position.y = 0.5; // Position handle on top of the base\n // leverHandle.rotation.x = Math.PI / 4; // Tilt forward along the x-axis\n leverBase.add(leverHandle);\n\n // Group base and handle as a lever\n levers.push(leverHandle);\n this.add(leverBase);\n }\n\n // Position the panel in the scene\n this.add(leverPanel);\n }\n}\n\nexport { LeverPanel };\n","import { BoxGeometry, CylinderGeometry, Group, Mesh, MeshStandardMaterial } from \"three\";\n\nclass Microscope extends Group {\n constructor() {\n super();\n\n // Base geometry\n const baseGeometry = new BoxGeometry(1, 0.2, 0.5);\n const baseMaterial = new MeshStandardMaterial({\n color: 0x444444,\n roughness: 0.6,\n metalness: 0.3,\n });\n const base = new Mesh(baseGeometry, baseMaterial);\n base.position.y = 0.1;\n\n // Arm geometry\n const armGeometry = new BoxGeometry(0.2, 1, 0.2);\n const arm = new Mesh(armGeometry, baseMaterial);\n arm.position.set(0, 0.6, -0.2);\n\n // Eyepiece geometry\n const eyepieceGeometry = new CylinderGeometry(0.1, 0.1, 0.4, 8);\n const eyepieceMaterial = new MeshStandardMaterial({\n color: 0x333333,\n roughness: 0.5,\n metalness: 0.6,\n });\n const eyepiece = new Mesh(eyepieceGeometry, eyepieceMaterial);\n eyepiece.position.set(0, 1.1, -0.35);\n eyepiece.rotation.x = -Math.PI / 4; // Angle the eyepiece for viewing\n\n // Stage geometry\n const stageGeometry = new BoxGeometry(0.6, 0.1, 0.6);\n const stageMaterial = new MeshStandardMaterial({\n color: 0x555555,\n roughness: 0.8,\n metalness: 0.2,\n });\n const stage = new Mesh(stageGeometry, stageMaterial);\n stage.position.set(0, 0.6, 0);\n\n // Assemble microscope\n this.add(base, arm, eyepiece, stage);\n }\n}\n\nexport { Microscope };\n","import { CylinderGeometry, DoubleSide, Group, Mesh, MeshStandardMaterial } from \"three\";\nimport { MortarGeometry } from \"../../geometry/science/MortarGeometry.js\";\n\nclass MortarAndPestle extends Group {\n constructor() {\n super();\n\n // Mortar geometry\n const mortarGeometry = new MortarGeometry();\n\n // Pestle geometry\n const pestleGeometry = new CylinderGeometry(0.2, 0.3, 1.5, 8);\n pestleGeometry.translate(0, 0.75, 0); // Offset to make the end rounded\n\n // Materials\n const mortarMaterial = new MeshStandardMaterial({\n color: 0x5c4033, // Dark earthy tone\n roughness: 1.0,\n metalness: 0.0,\n side: DoubleSide, // Render inside and outside\n });\n\n const pestleMaterial = new MeshStandardMaterial({\n color: 0x8b5a2b, // Slightly lighter earthy color\n roughness: 0.8,\n metalness: 0.1,\n });\n\n // Meshes\n const mortar = new Mesh(mortarGeometry, mortarMaterial);\n const pestle = new Mesh(pestleGeometry, pestleMaterial);\n\n // Position and rotate the pestle to rest in the mortar\n pestle.position.set(0.3, 1.3, 0);\n pestle.rotation.z = Math.PI / 4;\n\n // Group for easy manipulation\n this.add(mortar, pestle);\n }\n}\n\nexport { MortarAndPestle };\n","import { CatmullRomCurve3, Group, Mesh, MeshStandardMaterial, TubeGeometry, Vector3 } from \"three\";\n\nclass SpiralTube extends Group {\n constructor() {\n super();\n\n // Create a multi-spiral path for the tube\n const spiralLength = 100; // Total number of points for more coils\n const heightIncrement = 0.05; // Smaller increment to keep the coils tight\n const curve = new CatmullRomCurve3(\n Array.from({ length: spiralLength }, (_, i) => {\n const angle = i * 0.2; // Controls tightness of the spiral\n return new Vector3(\n Math.cos(angle) * 0.4,\n i * heightIncrement, // Gradual height increase\n Math.sin(angle) * 0.4,\n );\n }),\n );\n\n // Create tube geometry with a high segment count for smoothness\n const tubeGeometry = new TubeGeometry(curve, 200, 0.1, 8, false);\n const glassMaterial = new MeshStandardMaterial({\n color: 0x88ccff,\n transparent: true,\n opacity: 0.3,\n roughness: 0.1,\n metalness: 0.2,\n emissive: 0x88ccff,\n });\n const multiSpiralTube = new Mesh(tubeGeometry, glassMaterial);\n this.add(multiSpiralTube);\n\n // Optional fluid animation inside tube (using gradient effect)\n function animateFluid() {\n glassMaterial.emissiveIntensity = 0.2 + Math.sin(Date.now() * 0.005) * 0.1;\n }\n\n // Main render loop with fluid animation\n function animate() {\n requestAnimationFrame(animate);\n animateFluid(); // Add subtle animation for fluid effect\n }\n\n animate();\n }\n}\n\nexport { SpiralTube };\n","import { CylinderGeometry, Group, Mesh, MeshStandardMaterial, TorusGeometry } from \"three\";\n\nclass Stand extends Group {\n constructor() {\n super();\n\n // Ring geometry for holding the beaker\n const ringGeometry = new TorusGeometry(0.3, 0.03, 8, 16); // Small torus for the ring\n const ringMaterial = new MeshStandardMaterial({\n color: 0x888888,\n roughness: 0.7,\n metalness: 0.3,\n });\n const ring = new Mesh(ringGeometry, ringMaterial);\n ring.rotation.x = Math.PI / 2; // Orient the ring horizontally\n ring.position.y = 0.4; // Position at a height\n\n // Supporting legs\n const legGeometry = new CylinderGeometry(0.02, 0.02, 0.4, 8);\n const legMaterial = new MeshStandardMaterial({\n color: 0x666666,\n roughness: 0.8,\n metalness: 0.3,\n });\n\n // Create three legs spaced around the ring\n const legs = [];\n for (let i = 0; i < 3; i++) {\n const angle = (i / 3) * Math.PI * 2; // Divide 360° into three\n const leg = new Mesh(legGeometry, legMaterial);\n leg.position.set(Math.cos(angle) * 0.25, 0.2, Math.sin(angle) * 0.25); // Position leg around ring\n legs.push(leg);\n }\n\n // Group the ring and legs into a single stand object\n this.add(ring, ...legs);\n }\n}\n\nexport { Stand };\n","import {\n BufferGeometry,\n CylinderGeometry,\n DoubleSide,\n Group,\n Line,\n LineBasicMaterial,\n Mesh,\n MeshStandardMaterial,\n SphereGeometry,\n Vector3,\n} from \"three\";\n\nclass TeslaCoil extends Group {\n constructor() {\n super();\n\n // Base geometry\n const coilBaseGeometry = new CylinderGeometry(0.5, 0.6, 0.3, 16);\n const coilBaseMaterial = new MeshStandardMaterial({\n color: 0x333333,\n roughness: 0.6,\n metalness: 0.5,\n });\n const coilBase = new Mesh(coilBaseGeometry, coilBaseMaterial);\n coilBase.position.y = 0.15;\n\n // Coil geometry\n const coilGeometry = new CylinderGeometry(0.15, 0.15, 2, 12, 1, true);\n const coilMaterial = new MeshStandardMaterial({\n color: 0xff6600,\n roughness: 0.5,\n metalness: 0.8,\n side: DoubleSide,\n });\n const coil = new Mesh(coilGeometry, coilMaterial);\n coil.position.y = 1.3;\n\n // Sphere at the top\n const coilTopGeometry = new SphereGeometry(0.3, 16, 16);\n const coilTop = new Mesh(coilTopGeometry, coilMaterial);\n coilTop.position.y = 2.4;\n\n this.add(coilBase, coil, coilTop);\n\n // Sparking effect (using lines)\n const sparks = [];\n for (let i = 0; i < 5; i++) {\n const sparkMaterial = new LineBasicMaterial({ color: 0x99ccff });\n const points = [\n new Vector3(0, 2.4, 0),\n new Vector3((Math.random() - 0.5) * 1.5, Math.random() * 2.4, (Math.random() - 0.5) * 1.5),\n ];\n const sparkGeometry = new BufferGeometry().setFromPoints(points);\n const spark = new Line(sparkGeometry, sparkMaterial);\n this.add(spark);\n sparks.push(spark);\n }\n\n // Update spark positions\n function animateSparks() {\n sparks.forEach((spark) => {\n const points = [\n new Vector3(0, 2.4, 0),\n new Vector3((Math.random() - 0.5) * 1.5, Math.random() * 2.4, (Math.random() - 0.5) * 1.5),\n ];\n spark.geometry.setFromPoints(points);\n });\n }\n\n function animate() {\n requestAnimationFrame(animate);\n animateSparks(); // Make the sparks “jump”\n }\n\n animate();\n }\n}\n\nexport { TeslaCoil };\n","import { DoubleSide, Group, Mesh, MeshPhysicalMaterial } from \"three\";\nimport { TestTubeGeometry } from \"../../geometry/science/TestTubeGeometry.js\";\n\nclass TestTube extends Group {\n constructor(radiusTop = 0.2, radiusBottom = 0.2, height = 3, segments = 32) {\n super();\n\n // Test Tube Geometry\n const tubeGeometry = new TestTubeGeometry(radiusTop, radiusBottom, height, segments);\n\n const tubeMaterial = new MeshPhysicalMaterial({\n color: 0x88ccff,\n transparent: true,\n opacity: 0.4,\n roughness: 0.1,\n metalness: 0.1,\n reflectivity: 0.8,\n transmission: 0.9, // For glass effect\n side: DoubleSide,\n });\n\n const tube = new Mesh(tubeGeometry, tubeMaterial);\n\n this.add(tube);\n }\n}\n\nexport { TestTube };\n","import { BoxGeometry, DoubleSide, Group, Mesh, MeshStandardMaterial } from \"three\";\nimport { TestTubeGeometry } from \"../../geometry/science/TestTubeGeometry.js\";\n\nclass TestTubeRack extends Group {\n constructor(count = 3, colors = [0x00ffaa, 0xff00aa, 0xaa00ff]) {\n super();\n\n // Rack geometry\n const rackGeometry = new BoxGeometry(3, 0.2, 1);\n const rackMaterial = new MeshStandardMaterial({\n color: 0x8b4513, // Wooden color or change to metallic tone\n roughness: 0.7,\n metalness: 0.3,\n });\n const rack = new Mesh(rackGeometry, rackMaterial);\n rack.position.y = 0.5;\n\n // Test tube properties\n const testTubeGeometry = new TestTubeGeometry(0.1, 0.1, 1, 16);\n const glassMaterial = new MeshStandardMaterial({\n color: 0xaaaaaa,\n transparent: true,\n opacity: 0.4,\n roughness: 0.1,\n metalness: 0.5,\n side: DoubleSide,\n });\n\n // Create multiple test tubes with specified liquid colors\n for (let i = 0; i < count; i++) {\n // Test tube\n const testTube = new Mesh(testTubeGeometry, glassMaterial);\n const xPosition = (i - (count - 1) / 2) * 0.8;\n testTube.position.set(xPosition, 1, 0);\n\n // Liquid geometry and material with unique color\n const liquidGeometry = new TestTubeGeometry(0.099, 0.099, 0.5, 16, false);\n const liquidColor = colors[i % colors.length]; // Cycle through colors if fewer than tubes\n const liquidMaterial = new MeshStandardMaterial({\n color: liquidColor,\n emissive: liquidColor,\n emissiveIntensity: 0.5,\n transparent: true,\n opacity: 0.6,\n });\n\n // Liquid inside test tube\n const liquid = new Mesh(liquidGeometry, liquidMaterial);\n liquid.position.set(0, -0.25, 0); // Position liquid inside tube\n testTube.add(liquid);\n\n // Add tube to rack\n rack.add(testTube);\n }\n\n // Group rack\n this.add(rack);\n }\n}\n\nexport { TestTubeRack };\n","import { Mesh, MeshPhysicalMaterial } from \"three\";\nimport { WineBottleGeometry } from \"../../geometry/science/WineBottleGeometry.js\";\n\nclass WineBottle extends Mesh {\n constructor() {\n super();\n\n // Create wine bottle geometry\n const wineBottle = new WineBottleGeometry();\n\n // Create a glass-like material\n const bottleMaterial = new MeshPhysicalMaterial({\n color: 0x556b2f,\n roughness: 0.1,\n transmission: 0.9, // Makes the material transparent\n thickness: 0.2,\n metalness: 0,\n clearcoat: 1.0,\n clearcoatRoughness: 0.1,\n });\n\n // Create mesh and add to the scene\n this.geometry = wineBottle;\n this.material = bottleMaterial;\n }\n}\n\nexport { WineBottle };\n"],"names":["Bubbling","Group","bubbles","bubbleCount","bubbleGeometry","SphereGeometry","bubbleMaterial","MeshStandardMaterial","i","bubble","Mesh","animateBubbles","animate","BifurcatedStaircaseGeometry","BufferGeometry","stepWidth","stepHeight","stepDepth","numStepsCentral","numStepsBranch","branchAngle","vertices","indices","yBottom","yTop","zFront","zBack","baseIndex","landingY","landingZ","landingWidth","landingBaseIndex","j","direction","xStart","zStart","xOffset","zOffset","xFrontLeft","xFrontRight","xBackLeft","xBackRight","Float32BufferAttribute","DioramaGeometry","width","height","depth","wallThickness","LShapedStaircaseGeometry","numStepsPerFlight","landingDepth","xFront","xBack","SpiralStaircaseGeometry","numSteps","radius","angleIncrement","currentAngle","xCenter","zCenter","StaircaseGeometry","stepBottomY","stepTopY","stepFrontZ","stepBackZ","CrossHeadstoneGeometry","verticalHeight","verticalGeometry","BoxGeometry","horizontalWidth","horizontalGeometry","mergeGeometries","ObeliskHeadstoneGeometry","totalHeight","baseWidth","baseHeight","lowerSegmentHeight","middleSegmentHeight","topSegmentHeight","currentHeight","baseGeometry","lowerSegmentGeometry","middleSegmentGeometry","topSegmentGeometry","pyramidGeometry","ConeGeometry","RoundedHeadstoneGeometry","topHeight","topGeometry","CylinderGeometry","SquareHeadstoneGeometry","slabGeometry","FenceColumn","columnGeometry","capGeometry","WroughtIronBarGeometry","barHeight","barRadius","spikeHeight","barGeometry","spikeGeometry","SimpleLeafGeometry","size","leafPoints","x","y","positionAttribute","BoneGeometry","radiusTop","radiusBottom","radialSegments","cylinderGeometry","sphereGeometry","topSphere1","topSphere2","bottomSphere1","bottomSphere2","BeakerGeometry","tubeGeometry","MortarGeometry","mortarPoints","Vector2","mortarGeometry","LatheGeometry","baseDisk","CircleGeometry","TestTubeGeometry","segments","openEnded","bottomGeometry","WineBottleGeometry","neckRadius","neckHeight","bodyHeight","bodyGeometry","shoulderHeight","shoulderGeometry","neckGeometry","Moon","moonGeometry","moonMaterial","ShaderMaterial","moon","Mausoleum","baseMaterial","baseMesh","buildingGeometry","buildingMaterial","buildingMesh","roofGeometry","roofMaterial","roofMesh","pillarGeometry","pillarMaterial","position","pillarMesh","archShape","Shape","extrudeSettings","archGeometry","ExtrudeGeometry","archMaterial","archMesh","Desk","surfaceGeometry","surfaceMaterial","deskSurface","points","legGeometry","legMaterial","leg","Candle","candleGeometry","candleMaterial","flameGeometry","flameMaterial","MeshBasicMaterial","PointLight","flicker","Lantern","bodyMaterial","bodyMesh","handleGeometry","TorusGeometry","handleMaterial","handleMesh","light","MossyRocks","rockGeometry","DodecahedronGeometry","rockMaterial","mossMaterial","rockMesh","mossMesh","Rocks","Beaker","beakerGeometry","glassMaterial","MeshPhysicalMaterial","DoubleSide","beaker","Book","coverGeometry","coverMaterial","frontCoverMesh","backCoverMesh","pagesGeometry","pagesMaterial","pagesMesh","spineGeometry","spineMaterial","spineMesh","Bottle","bottlePoints","bottleGeometry","corkGeometry","liquidMaterial","corkMaterial","bottle","liquid","cork","potionBottle","BunsenBurner","base","tubeMaterial","tube","flame","ElectricPanel","panelGeometry","panelMaterial","switchGeometry","switchMaterial","dialGeometry","dialMaterial","panel","toggleSwitch","dial","lightGeometry","lightMaterial","flickerSpeed","flickerMaxIntensity","flickerMinIntensity","flickerIntensity","Flask","flaskPoints","flaskGeometry","flask","LeverPanel","leverPanelGeometry","leverPanelMaterial","leverPanel","leverBaseGeometry","leverHandleGeometry","leverMaterial","leverBase","leverHandle","Microscope","armGeometry","arm","eyepieceGeometry","eyepieceMaterial","eyepiece","stageGeometry","stageMaterial","stage","MortarAndPestle","pestleGeometry","mortarMaterial","pestleMaterial","mortar","pestle","SpiralTube","spiralLength","heightIncrement","curve","CatmullRomCurve3","_","angle","Vector3","TubeGeometry","multiSpiralTube","animateFluid","Stand","ringGeometry","ringMaterial","ring","legs","TeslaCoil","coilBaseGeometry","coilBaseMaterial","coilBase","coilGeometry","coilMaterial","coil","coilTopGeometry","coilTop","sparks","sparkMaterial","LineBasicMaterial","sparkGeometry","spark","Line","animateSparks","TestTube","TestTubeRack","count","colors","rackGeometry","rackMaterial","rack","testTubeGeometry","testTube","xPosition","liquidGeometry","liquidColor","WineBottle","wineBottle","bottleMaterial"],"mappings":"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"}
1
+ {"version":3,"file":"index.umd.js","sources":["../src/effects/Bubbling.js","../src/geometry/architecture/BifurcatedStaircaseGeometry.js","../src/geometry/architecture/DioramaGeometry.js","../src/geometry/architecture/LShapedStaircaseGeometry.js","../src/geometry/architecture/SpiralStaircaseGeometry.js","../src/geometry/architecture/StaircaseGeometry.js","../src/geometry/cemetery/CrossHeadstoneGeometry.js","../src/geometry/cemetery/ObeliskHeadstoneGeometry.js","../src/geometry/cemetery/RoundedHeadstoneGeometry.js","../src/geometry/cemetery/SquareHeadstoneGeometry.js","../src/geometry/fence/FenceColumn.js","../src/geometry/fence/WroughtIronBarGeometry.js","../src/geometry/leafs/SimpleLeafGeometry.js","../src/geometry/skeleton/BoneGeometry.js","../src/geometry/science/BeakerGeometry.js","../src/geometry/science/MortarGeometry.js","../src/geometry/science/TestTubeGeometry.js","../src/geometry/science/WineBottleGeometry.js","../src/models/astronomy/Moon.js","../src/models/cemetery/Mausoleum.js","../src/models/furniture/Desk.js","../src/models/lighting/Candle.js","../src/models/lighting/Lantern.js","../src/models/rocks/MossyRocks.js","../src/models/rocks/Rocks.js","../src/models/science/Beaker.js","../src/models/science/Book.js","../src/models/science/Bottle.js","../src/models/science/BunsenBurner.js","../src/models/science/ElectricPanel.js","../src/models/science/Flask.js","../src/models/science/LeverPanel.js","../src/models/science/Microscope.js","../src/models/science/MortarAndPestle.js","../src/models/science/SpiralTube.js","../src/models/science/Stand.js","../src/models/science/TeslaCoil.js","../src/models/science/TestTube.js","../src/models/science/TestTubeRack.js","../src/models/science/WineBottle.js","../src/shapes/BurstShape.js","../src/models/shapes/Burst.js","../src/shapes/GearShape.js","../src/models/shapes/Gear.js","../src/shapes/StarShape.js","../src/models/shapes/Star.js","../src/shaders/fadeShader.js","../src/textures/checkerboard.js"],"sourcesContent":["import {Group, Mesh, MeshStandardMaterial, SphereGeometry} from \"three\";\n\nclass Bubbling extends Group {\n constructor() {\n super();\n\n // Bubble properties\n const bubbles = [];\n const bubbleCount = 20; // Number of bubbles\n\n // Create bubble geometry and material\n const bubbleGeometry = new SphereGeometry(0.1, 6, 6); // Small spheres\n const bubbleMaterial = new MeshStandardMaterial({\n color: 0xffffff,\n transparent: true,\n opacity: 0.6,\n roughness: 0.3,\n metalness: 0.3,\n });\n\n for (let i = 0; i < bubbleCount; i++) {\n const bubble = new Mesh(bubbleGeometry, bubbleMaterial);\n bubble.position.set(\n (Math.random() - 0.5) * 1.5, // Random x position within flask\n Math.random() * 3, // Random y position within flask height\n (Math.random() - 0.5) * 1.5, // Random z position within flask\n );\n bubbles.push(bubble);\n this.add(bubble);\n }\n\n // Bubble animation loop\n function animateBubbles() {\n bubbles.forEach((bubble) => {\n bubble.position.y += 0.02; // Move bubble upwards\n\n // Reset bubble to bottom if it reaches top\n if (bubble.position.y > 3) {\n bubble.position.y = 0;\n bubble.position.x = (Math.random() - 0.5) * 1.5; // Randomize x position again\n bubble.position.z = (Math.random() - 0.5) * 1.5; // Randomize z position again\n }\n });\n }\n\n // Add animateBubbles to the main render loop\n function animate() {\n requestAnimationFrame(animate);\n animateBubbles(); // Update bubble positions\n }\n\n animate();\n }\n}\n\nexport { Bubbling };\n","import { BufferGeometry, Float32BufferAttribute } from \"three\";\n\nclass BifurcatedStaircaseGeometry extends BufferGeometry {\n constructor(stepWidth = 2, stepHeight = 0.3, stepDepth = 0.6, numStepsCentral = 5, numStepsBranch = 5, branchAngle = Math.PI / 4) {\n super();\n\n const vertices = [];\n const indices = [];\n\n // Generate central flight of steps\n for (let i = 0; i < numStepsCentral; i++) {\n const yBottom = i * stepHeight;\n const yTop = yBottom + stepHeight;\n const zFront = i * stepDepth;\n const zBack = zFront + stepDepth;\n\n // Central flight of steps (8 vertices per step)\n vertices.push(\n // Vertical riser\n -stepWidth / 2, yBottom, zFront, // Bottom-left\n stepWidth / 2, yBottom, zFront, // Bottom-right\n stepWidth / 2, yTop, zFront, // Top-right\n -stepWidth / 2, yTop, zFront, // Top-left\n\n // Horizontal tread\n -stepWidth / 2, yTop, zFront, // Top-left\n stepWidth / 2, yTop, zFront, // Top-right\n stepWidth / 2, yTop, zBack, // Back-right\n -stepWidth / 2, yTop, zBack // Back-left\n );\n\n const baseIndex = i * 8;\n // Indices for riser\n indices.push(\n baseIndex, baseIndex + 1, baseIndex + 2,\n baseIndex, baseIndex + 2, baseIndex + 3\n );\n\n // Indices for tread\n indices.push(\n baseIndex + 4, baseIndex + 5, baseIndex + 6,\n baseIndex + 4, baseIndex + 6, baseIndex + 7\n );\n }\n\n // Landing platform\n const landingY = numStepsCentral * stepHeight;\n const landingZ = numStepsCentral * stepDepth;\n const landingWidth = stepWidth * 2;\n\n vertices.push(\n // Landing platform (4 vertices)\n -landingWidth / 2, landingY, landingZ, // Bottom-left\n landingWidth / 2, landingY, landingZ, // Bottom-right\n landingWidth / 2, landingY, landingZ + stepDepth,// Top-right\n -landingWidth / 2, landingY, landingZ + stepDepth // Top-left\n );\n\n const landingBaseIndex = numStepsCentral * 8;\n indices.push(\n landingBaseIndex, landingBaseIndex + 1, landingBaseIndex + 2, // First triangle for landing\n landingBaseIndex, landingBaseIndex + 2, landingBaseIndex + 3 // Second triangle for landing\n );\n\n // Generate branching flights (left and right)\n for (let j = 0; j < 2; j++) {\n const direction = j === 0 ? 1 : -1; // Left or right branch\n\n for (let i = 0; i < numStepsBranch; i++) {\n const yBottom = landingY + i * stepHeight;\n const yTop = yBottom + stepHeight;\n\n // Calculate positions for the branching steps\n const xStart = direction * (landingWidth / 4);\n const zStart = landingZ + stepDepth;\n\n const xOffset = i * stepDepth * Math.cos(branchAngle);\n const zOffset = i * stepDepth * Math.sin(branchAngle);\n\n const xFrontLeft = xStart + direction * xOffset - (stepWidth / 2) * Math.cos(branchAngle);\n const xFrontRight = xStart + direction * xOffset + (stepWidth / 2) * Math.cos(branchAngle);\n const zFront = zStart + zOffset;\n const xBackLeft = xFrontLeft + direction * stepDepth * Math.cos(branchAngle);\n const xBackRight = xFrontRight + direction * stepDepth * Math.cos(branchAngle);\n const zBack = zFront + stepDepth * Math.sin(branchAngle);\n\n // Branch flight of steps (8 vertices per step)\n vertices.push(\n // Vertical riser\n xFrontLeft, yBottom, zFront, // Bottom-left\n xFrontRight, yBottom, zFront, // Bottom-right\n xFrontRight, yTop, zFront, // Top-right\n xFrontLeft, yTop, zFront, // Top-left\n\n // Horizontal tread\n xFrontLeft, yTop, zFront, // Top-left\n xFrontRight, yTop, zFront, // Top-right\n xBackRight, yTop, zBack, // Back-right\n xBackLeft, yTop, zBack // Back-left\n );\n\n const baseIndex = landingBaseIndex + 4 + j * numStepsBranch * 8 + i * 8;\n // Indices for riser\n indices.push(\n baseIndex, baseIndex + 1, baseIndex + 2,\n baseIndex, baseIndex + 2, baseIndex + 3\n );\n\n // Indices for tread\n indices.push(\n baseIndex + 4, baseIndex + 5, baseIndex + 6,\n baseIndex + 4, baseIndex + 6, baseIndex + 7\n );\n }\n }\n\n // Create BufferAttribute for vertices and indices\n this.setIndex(indices);\n this.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n this.computeVertexNormals(); // Compute normals for proper lighting\n }\n}\n\nexport { BifurcatedStaircaseGeometry };\n","import { BufferGeometry, Float32BufferAttribute } from \"three\";\n\nclass DioramaGeometry extends BufferGeometry {\n constructor(width = 5, height = 3, depth = 5, wallThickness = 0.2) {\n super();\n\n // Vertices array (each set of 3 numbers represents x, y, z of a vertex)\n const vertices = [\n // Floor vertices\n -width / 2, 0, -depth / 2, // 0\n width / 2, 0, -depth / 2, // 1\n width / 2, 0, depth / 2, // 2\n -width / 2, 0, depth / 2, // 3\n\n // Back wall vertices\n -width / 2, 0, -depth / 2, // 4\n width / 2, 0, -depth / 2, // 5\n width / 2, height, -depth / 2, // 6\n -width / 2, height, -depth / 2, // 7\n\n // Left wall vertices\n -width / 2, 0, -depth / 2, // 8\n -width / 2, 0, depth / 2, // 9\n -width / 2, height, depth / 2, // 10\n -width / 2, height, -depth / 2, // 11\n ];\n\n // Indices array (each set of 3 numbers represents a triangle)\n const indices = [\n // Floor\n 0, 1, 2,\n 0, 2, 3,\n\n // Back wall\n 4, 5, 6,\n 4, 6, 7,\n\n // Left wall\n 8, 9, 10,\n 8, 10, 11,\n ];\n\n // Create BufferAttribute for vertices and indices\n this.setIndex(indices);\n this.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n this.computeVertexNormals(); // Compute normals for proper lighting\n }\n}\n\nexport { DioramaGeometry }\n","import { BufferGeometry, Float32BufferAttribute } from \"three\";\n\nclass LShapedStaircaseGeometry extends BufferGeometry {\n constructor(stepWidth = 2, stepHeight = 0.3, stepDepth = 0.5, numStepsPerFlight = 5, landingDepth = 2) {\n super();\n\n const vertices = [];\n const indices = [];\n\n // Generate first flight of steps\n for (let i = 0; i < numStepsPerFlight; i++) {\n const yBottom = i * stepHeight;\n const yTop = yBottom + stepHeight;\n const zFront = i * stepDepth;\n const zBack = zFront + stepDepth;\n\n // First flight of steps (4 vertices per step, 8 vertices per flight)\n vertices.push(\n // Vertical riser\n -stepWidth / 2, yBottom, zFront, // Bottom-left\n stepWidth / 2, yBottom, zFront, // Bottom-right\n stepWidth / 2, yTop, zFront, // Top-right\n -stepWidth / 2, yTop, zFront, // Top-left\n\n // Horizontal tread\n -stepWidth / 2, yTop, zFront, // Top-left\n stepWidth / 2, yTop, zFront, // Top-right\n stepWidth / 2, yTop, zBack, // Back-right\n -stepWidth / 2, yTop, zBack // Back-left\n );\n\n const baseIndex = i * 8;\n // Indices for riser\n indices.push(\n baseIndex, baseIndex + 1, baseIndex + 2,\n baseIndex, baseIndex + 2, baseIndex + 3\n );\n\n // Indices for tread\n indices.push(\n baseIndex + 4, baseIndex + 5, baseIndex + 6,\n baseIndex + 4, baseIndex + 6, baseIndex + 7\n );\n }\n\n // Add landing platform\n const landingY = numStepsPerFlight * stepHeight;\n const landingZ = numStepsPerFlight * stepDepth;\n\n vertices.push(\n // Landing platform (4 vertices)\n -stepWidth / 2, landingY, landingZ, // Bottom-left\n stepWidth / 2, landingY, landingZ, // Bottom-right\n stepWidth / 2, landingY, landingZ + landingDepth, // Top-right\n -stepWidth / 2, landingY, landingZ + landingDepth // Top-left\n );\n\n const landingBaseIndex = numStepsPerFlight * 8;\n indices.push(\n landingBaseIndex, landingBaseIndex + 1, landingBaseIndex + 2, // First triangle for landing\n landingBaseIndex, landingBaseIndex + 2, landingBaseIndex + 3 // Second triangle for landing\n );\n\n // Generate second flight of steps (turn 90 degrees)\n for (let i = 0; i < numStepsPerFlight; i++) {\n const yBottom = landingY + i * stepHeight;\n const yTop = yBottom + stepHeight;\n const xFront = -stepWidth / 2 - i * stepDepth;\n const xBack = xFront - stepDepth;\n\n // Second flight of steps (4 vertices per step, 8 vertices per flight)\n vertices.push(\n // Vertical riser\n xFront, yBottom, landingZ + landingDepth, // Bottom-left\n xFront, yBottom, landingZ + landingDepth - stepWidth, // Bottom-right\n xFront, yTop, landingZ + landingDepth - stepWidth, // Top-right\n xFront, yTop, landingZ + landingDepth, // Top-left\n\n // Horizontal tread\n xFront, yTop, landingZ + landingDepth, // Top-left\n xFront, yTop, landingZ + landingDepth - stepWidth, // Top-right\n xBack, yTop, landingZ + landingDepth - stepWidth, // Back-right\n xBack, yTop, landingZ + landingDepth // Back-left\n );\n\n const baseIndex = landingBaseIndex + 4 + i * 8;\n // Indices for riser\n indices.push(\n baseIndex, baseIndex + 1, baseIndex + 2,\n baseIndex, baseIndex + 2, baseIndex + 3\n );\n\n // Indices for tread\n indices.push(\n baseIndex + 4, baseIndex + 5, baseIndex + 6,\n baseIndex + 4, baseIndex + 6, baseIndex + 7\n );\n }\n\n // Create BufferAttribute for vertices and indices\n this.setIndex(indices);\n this.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n this.computeVertexNormals(); // Compute normals for proper lighting\n }\n}\n\nexport { LShapedStaircaseGeometry };\n","import { BufferGeometry, Float32BufferAttribute } from \"three\";\n\nclass SpiralStaircaseGeometry extends BufferGeometry {\n constructor(stepWidth = 1, stepDepth = 0.4, stepHeight = 0.2, numSteps = 20, radius = 2, angleIncrement = Math.PI / 8) {\n super();\n\n const vertices = [];\n const indices = [];\n let currentAngle = 0;\n\n // Generate vertices and indices for each step\n for (let i = 0; i < numSteps; i++) {\n // Calculate the center position of the step based on the angle and radius\n const xCenter = radius * Math.cos(currentAngle);\n const zCenter = radius * Math.sin(currentAngle);\n const yBottom = i * stepHeight;\n const yTop = yBottom + stepHeight;\n\n // Define the four corners of the vertical riser part of the current step\n vertices.push(\n // Front face (vertical riser)\n xCenter - (stepWidth / 2) * Math.cos(currentAngle), yBottom, zCenter - (stepWidth / 2) * Math.sin(currentAngle), // Bottom-left\n xCenter + (stepWidth / 2) * Math.cos(currentAngle), yBottom, zCenter + (stepWidth / 2) * Math.sin(currentAngle), // Bottom-right\n xCenter + (stepWidth / 2) * Math.cos(currentAngle), yTop, zCenter + (stepWidth / 2) * Math.sin(currentAngle), // Top-right\n xCenter - (stepWidth / 2) * Math.cos(currentAngle), yTop, zCenter - (stepWidth / 2) * Math.sin(currentAngle) // Top-left\n );\n\n // Define the four corners of the horizontal tread part of the current step\n vertices.push(\n // Top face (horizontal tread)\n xCenter - (stepWidth / 2) * Math.cos(currentAngle), yTop, zCenter - (stepWidth / 2) * Math.sin(currentAngle), // Top-left-front\n xCenter + (stepWidth / 2) * Math.cos(currentAngle), yTop, zCenter + (stepWidth / 2) * Math.sin(currentAngle), // Top-right-front\n xCenter + (stepWidth / 2) * Math.cos(currentAngle) - stepDepth * Math.sin(currentAngle), yTop, zCenter + (stepWidth / 2) * Math.sin(currentAngle) + stepDepth * Math.cos(currentAngle), // Back-right\n xCenter - (stepWidth / 2) * Math.cos(currentAngle) - stepDepth * Math.sin(currentAngle), yTop, zCenter - (stepWidth / 2) * Math.sin(currentAngle) + stepDepth * Math.cos(currentAngle) // Back-left\n );\n\n // Indices for the riser (vertical face of each step)\n const baseIndex = i * 8; // 8 vertices per step (4 for riser, 4 for tread)\n indices.push(\n baseIndex, baseIndex + 1, baseIndex + 2, // First triangle for riser\n baseIndex, baseIndex + 2, baseIndex + 3 // Second triangle for riser\n );\n\n // Indices for the tread (horizontal face of each step)\n indices.push(\n baseIndex + 4, baseIndex + 5, baseIndex + 6, // First triangle for tread\n baseIndex + 4, baseIndex + 6, baseIndex + 7 // Second triangle for tread\n );\n\n // Increment the angle for the next step\n currentAngle += angleIncrement;\n }\n\n // Create BufferAttribute for vertices and indices\n this.setIndex(indices);\n this.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n this.computeVertexNormals(); // Compute normals for proper lighting\n }\n}\n\nexport { SpiralStaircaseGeometry };\n","import { BufferGeometry, Float32BufferAttribute } from \"three\";\n\nclass StaircaseGeometry extends BufferGeometry {\n constructor(width = 2, stepHeight = 0.3, stepDepth = 0.5, numSteps = 10) {\n super();\n\n const vertices = [];\n const indices = [];\n\n // Generate vertices and indices for each step\n for (let i = 0; i < numSteps; i++) {\n const stepBottomY = i * stepHeight;\n const stepTopY = stepBottomY + stepHeight;\n const stepFrontZ = i * stepDepth;\n const stepBackZ = stepFrontZ + stepDepth;\n\n // Vertices for each step (8 vertices per step to cover tread and riser)\n vertices.push(\n // Bottom face of riser (front face)\n -width / 2, stepBottomY, stepFrontZ, // 0: Bottom-left-front\n width / 2, stepBottomY, stepFrontZ, // 1: Bottom-right-front\n width / 2, stepTopY, stepFrontZ, // 2: Top-right-front\n -width / 2, stepTopY, stepFrontZ, // 3: Top-left-front\n\n // Top face of tread (horizontal step)\n -width / 2, stepTopY, stepFrontZ, // 4: Top-left-front (repeated)\n width / 2, stepTopY, stepFrontZ, // 5: Top-right-front (repeated)\n width / 2, stepTopY, stepBackZ, // 6: Top-right-back\n -width / 2, stepTopY, stepBackZ // 7: Top-left-back\n );\n\n // Indices for each step\n const baseIndex = i * 8;\n\n // Riser face (front face of each step)\n indices.push(\n baseIndex, baseIndex + 1, baseIndex + 2, // First triangle for riser\n baseIndex, baseIndex + 2, baseIndex + 3 // Second triangle for riser\n );\n\n // Tread face (top horizontal surface of each step)\n indices.push(\n baseIndex + 4, baseIndex + 6, baseIndex + 5, // First triangle for tread\n baseIndex + 4, baseIndex + 7, baseIndex + 6 // Second triangle for tread\n );\n }\n\n // Create BufferAttribute for vertices and indices\n this.setIndex(indices);\n this.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n this.computeVertexNormals(); // Compute normals for proper lighting\n }\n}\n\nexport { StaircaseGeometry };\n","import { BoxGeometry, BufferGeometry } from \"three\";\nimport { mergeGeometries } from \"three/addons/utils/BufferGeometryUtils.js\";\n\nclass CrossHeadstoneGeometry extends BufferGeometry {\n constructor(width = 0.4, height = 1.2, depth = 0.2) {\n super();\n\n // Create the vertical part of the cross\n const verticalHeight = height * 0.6;\n const verticalGeometry = new BoxGeometry(width / 2, verticalHeight, depth);\n verticalGeometry.translate(0, verticalHeight / 2, 0);\n\n // Create the horizontal part of the cross\n const horizontalWidth = width * 1.5;\n const horizontalGeometry = new BoxGeometry(horizontalWidth, width / 4, depth);\n horizontalGeometry.translate(0, verticalHeight * 0.75, 0);\n\n // Merge both parts into a cross\n this.copy(mergeGeometries([verticalGeometry, horizontalGeometry], false));\n }\n}\n\nexport { CrossHeadstoneGeometry };\n","import { BoxGeometry, BufferGeometry, ConeGeometry } from \"three\";\nimport { mergeGeometries } from \"three/addons/utils/BufferGeometryUtils.js\";\n\nclass ObeliskHeadstoneGeometry extends BufferGeometry {\n constructor(totalHeight = 1.75, baseWidth = 0.75) {\n super();\n\n // Define height proportions relative to the total height\n const baseHeight = totalHeight * 0.05;\n const lowerSegmentHeight = totalHeight * 0.15;\n const middleSegmentHeight = totalHeight * 0.15;\n const topSegmentHeight = totalHeight * 0.75;\n\n let currentHeight = 0;\n\n // Base of the Headstone (a wide box)\n const baseGeometry = new BoxGeometry(baseWidth, baseHeight, baseWidth);\n baseGeometry.translate(0, currentHeight + baseHeight / 2, 0);\n currentHeight += baseHeight;\n\n // Lower Segment (a slightly narrower box)\n const lowerSegmentGeometry = new BoxGeometry(baseWidth * 0.8, lowerSegmentHeight, baseWidth * 0.8);\n lowerSegmentGeometry.translate(0, currentHeight + lowerSegmentHeight / 2, 0);\n currentHeight += lowerSegmentHeight;\n\n // Middle Segment (an even narrower box)\n const middleSegmentGeometry = new BoxGeometry(baseWidth * 0.6, middleSegmentHeight, baseWidth * 0.6);\n middleSegmentGeometry.translate(0, currentHeight + middleSegmentHeight / 2, 0);\n currentHeight += middleSegmentHeight;\n\n // Top Segment (a tall, thin box to form the obelisk shape)\n const topSegmentGeometry = new BoxGeometry(baseWidth * 0.4, topSegmentHeight, baseWidth * 0.4);\n topSegmentGeometry.translate(0, currentHeight + topSegmentHeight / 2, 0);\n currentHeight += topSegmentHeight;\n\n // Pyramid Top (a cone to form the pointed top of the obelisk)\n const pyramidGeometry = new ConeGeometry((baseWidth * 0.4) / Math.sqrt(2), 0.1, 4, 1, false, Math.PI / 4);\n pyramidGeometry.translate(0, currentHeight + 0.1 / 2, 0);\n\n this.copy(\n mergeGeometries([baseGeometry, lowerSegmentGeometry, middleSegmentGeometry, topSegmentGeometry, pyramidGeometry], false),\n );\n }\n}\n\nexport { ObeliskHeadstoneGeometry };\n","import { BoxGeometry, BufferGeometry, CylinderGeometry } from \"three\";\nimport { mergeGeometries } from \"three/addons/utils/BufferGeometryUtils.js\";\n\nclass RoundedHeadstoneGeometry extends BufferGeometry {\n constructor(width = 0.6, height = 1.0, depth = 0.2) {\n super();\n\n // Create the base of the headstone (a box)\n const baseHeight = height * 0.7;\n const baseGeometry = new BoxGeometry(width, baseHeight, depth);\n baseGeometry.translate(0, baseHeight / 2, 0);\n\n // Create the rounded top part (a half cylinder with caps)\n const topHeight = height - baseHeight;\n const topGeometry = new CylinderGeometry(width / 2, width / 2, depth, 16, 1, false, 0, Math.PI);\n topGeometry.rotateY(Math.PI / 2);\n topGeometry.rotateX(Math.PI / 2);\n topGeometry.translate(0, baseHeight + topHeight / 2 - depth / 2 - 0.05, 0);\n\n // Merge base and top into a single geometry\n this.copy(mergeGeometries([baseGeometry, topGeometry], false));\n }\n}\n\nexport { RoundedHeadstoneGeometry };\n","import { BoxGeometry, BufferGeometry } from \"three\";\n\nclass SquareHeadstoneGeometry extends BufferGeometry {\n constructor(width = 0.5, height = 0.8, depth = 0.15) {\n super();\n\n // Create a rectangular slab\n const slabGeometry = new BoxGeometry(width, height, depth);\n slabGeometry.translate(0, height / 2, 0); // Shift up to stand on the ground\n\n this.copy(slabGeometry);\n }\n}\nexport { SquareHeadstoneGeometry };\n","import { BoxGeometry, BufferGeometry } from \"three\";\nimport { mergeGeometries } from \"three/addons/utils/BufferGeometryUtils.js\";\n\n/**\n * Fence Column Geometry, a simple fence column shape\n * @extends BufferGeometry\n *\n * @example\n * // Create a fence column\n * const columnGeometry = new FenceColumn();\n * const columnMaterial = new MeshStandardMaterial({ color: 0x8b7d7b, flatShading: true });\n * const column = new Mesh(columnGeometry, columnMaterial);\n * scene.add(column);\n */\nclass FenceColumn extends BufferGeometry {\n constructor(height = 2.25) {\n super();\n\n // Column Base (a wider base for stability)\n const baseGeometry = new BoxGeometry(1.2, 0.5, 1.2);\n baseGeometry.translate(0, 0.25, 0);\n\n // Main Column (a tall rectangular shape, adjustable height)\n const columnGeometry = new BoxGeometry(1, height, 1);\n columnGeometry.translate(0, 0.5 + height / 2, 0);\n\n // Column Cap (a slightly wider cap on top)\n const capGeometry = new BoxGeometry(1.4, 0.3, 1.4);\n capGeometry.translate(0, 0.5 + height + 0.15, 0);\n\n this.copy(mergeGeometries([baseGeometry, columnGeometry, capGeometry], false));\n }\n}\n\nexport { FenceColumn };\n","import { BufferGeometry, ConeGeometry, CylinderGeometry } from \"three\";\nimport { mergeGeometries } from \"three/addons/utils/BufferGeometryUtils.js\";\n\n/**\n * Wrought Iron Bar Geometry, a simple wrought iron bar shape\n * @extends BufferGeometry\n *\n * @example\n * // Create a wrought iron bar\n * const barGeometry = new WroughtIronBarGeometry();\n * const barMaterial = new MeshStandardMaterial({ color: 0x333333, metalness: 0.8, roughness: 0.4 });\n * const bar = new Mesh(barGeometry, barMaterial);\n * scene.add(bar);\n */\nclass WroughtIronBarGeometry extends BufferGeometry {\n constructor(barHeight = 2.0, barRadius = 0.05, spikeHeight = 0.3) {\n super();\n\n // Create a cylinder for the vertical bar\n const barGeometry = new CylinderGeometry(barRadius, barRadius, barHeight, 8);\n barGeometry.translate(0, barHeight / 2, 0); // Shift up to stand on the ground\n\n // Create a cone for the spike on top\n const spikeGeometry = new ConeGeometry(barRadius * 1.5, spikeHeight, 8);\n spikeGeometry.translate(0, barHeight + spikeHeight / 2, 0); // Place on top of the bar\n\n // Merge bar and spike into one geometry\n this.copy(mergeGeometries([barGeometry, spikeGeometry], false));\n }\n}\n\nexport { WroughtIronBarGeometry };\n","import { BufferGeometry, Float32BufferAttribute } from \"three\";\n\nclass SimpleLeafGeometry extends BufferGeometry {\n constructor(size = 0.1) {\n super();\n\n const vertices = [];\n const indices = [];\n\n // Define vertices to approximate a simple, elongated, oval leaf shape\n const leafPoints = [\n [0, 1], // Top point\n [0.5, 0.75], // Right upper middle\n [0.75, 0.25], // Right lower middle\n [0.5, -0.5], // Right bottom middle\n [0, -1], // Bottom point\n [-0.5, -0.5], // Left bottom middle\n [-0.75, 0.25], // Left lower middle\n [-0.5, 0.75], // Left upper middle\n ];\n\n // Add vertices to the geometry, scaling them with the `size` parameter\n for (let i = 0; i < leafPoints.length; i++) {\n const [x, y] = leafPoints[i];\n vertices.push(x * size, y * size, 0);\n }\n\n // Define indices to form triangular faces of the leaf\n // Create a fan-like structure connecting the top vertex (index 0) to other neighboring vertices\n for (let i = 1; i < leafPoints.length - 1; i++) {\n indices.push(0, i, i + 1);\n }\n // Close the fan with the last triangle\n indices.push(0, leafPoints.length - 1, 1);\n\n // Convert the vertices and indices to buffer attributes\n const positionAttribute = new Float32BufferAttribute(vertices, 3);\n this.setAttribute('position', positionAttribute);\n this.setIndex(indices);\n\n this.computeVertexNormals();\n }\n}\n\nexport { SimpleLeafGeometry };\n","import { BufferGeometry, CylinderGeometry, SphereGeometry } from \"three\";\nimport { mergeGeometries } from \"three/addons/utils/BufferGeometryUtils.js\";\n\n/**\n * Bone Geometry, a simple bone shape\n * @extends BufferGeometry\n *\n * @example\n * // Create a bone\n * const boneGeometry = new BoneGeometry();\n * const boneMaterial = new MeshStandardMaterial({ color: 0xffffff });\n * const bone = new Mesh(boneGeometry, boneMaterial);\n * scene.add(bone);\n */\nclass BoneGeometry extends BufferGeometry {\n constructor(radiusTop = 0.1, radiusBottom = 0.1, height = 0.4, radialSegments = 8) {\n super();\n\n // Create the cylinder (shaft of the bone)\n const cylinderGeometry = new CylinderGeometry(radiusTop * 0.6, radiusBottom * 0.6, height, radialSegments);\n cylinderGeometry.translate(0, 0, 0);\n\n // Create the spheres (ends of the bone)\n const sphereGeometry = new SphereGeometry(radiusTop, radialSegments, radialSegments);\n const topSphere1 = sphereGeometry.clone();\n const topSphere2 = sphereGeometry.clone();\n const bottomSphere1 = sphereGeometry.clone();\n const bottomSphere2 = sphereGeometry.clone();\n\n // Position the spheres at each end of the cylinder\n topSphere1.translate(0, height / 2 + radiusTop * 0.6, -radiusTop * 0.6);\n topSphere2.translate(0, height / 2 + radiusTop * 0.6, radiusTop * 0.6);\n bottomSphere1.translate(0, -height / 2 - radiusBottom * 0.6, -radiusBottom * 0.6);\n bottomSphere2.translate(0, -height / 2 - radiusBottom * 0.6, radiusBottom * 0.6);\n\n // Merge the parts\n this.copy(mergeGeometries([cylinderGeometry, topSphere1, topSphere2, bottomSphere1, bottomSphere2], false));\n }\n}\n\nexport { BoneGeometry };\n","import { BufferGeometry, CylinderGeometry, SphereGeometry } from \"three\";\nimport { mergeGeometries } from \"three/addons/utils/BufferGeometryUtils.js\";\n\nclass BeakerGeometry extends BufferGeometry {\n constructor() {\n super();\n\n // Create the sphere part of the glassware\n const sphereGeometry = new SphereGeometry(1, 16, 16);\n const tubeGeometry = new CylinderGeometry(0.2, 0.2, 2, 16, 1, true);\n\n // Adjust tube position to stick out of the sphere\n tubeGeometry.translate(0, 1.5, 0);\n tubeGeometry.rotateX(Math.PI / 2);\n\n this.copy(mergeGeometries([sphereGeometry, tubeGeometry], false));\n }\n}\n\nexport { BeakerGeometry };\n","import { BufferGeometry, CircleGeometry, LatheGeometry, Vector2 } from \"three\";\nimport { mergeGeometries } from \"three/addons/utils/BufferGeometryUtils.js\";\n\nclass MortarGeometry extends BufferGeometry {\n constructor() {\n super();\n\n // Mortar geometry\n const mortarPoints = [\n new Vector2(1, 0), // Bottom of the bowl\n new Vector2(1.2, 0.5), // Slight flare at the base\n new Vector2(1.4, 1.5), // Outer wall\n new Vector2(1.3, 1.8), // Flared edge\n new Vector2(0.8, 1.8), // Lip of the bowl\n ];\n const mortarGeometry = new LatheGeometry(mortarPoints, 12);\n\n // Create a disk to close off the bottom\n const baseDisk = new CircleGeometry(1, 12); // Radius matches the base of the mortar\n baseDisk.rotateX(-Math.PI / 2); // Rotate to align with the bottom\n baseDisk.translate(0, 0, 0); // Position at the base of the mortar\n\n this.copy(mergeGeometries([mortarGeometry, baseDisk], false));\n }\n}\n\nexport { MortarGeometry };\n","import { BufferGeometry, CylinderGeometry, SphereGeometry } from \"three\";\nimport { mergeGeometries } from \"three/addons/utils/BufferGeometryUtils.js\";\n\nclass TestTubeGeometry extends BufferGeometry {\n constructor(radiusTop = 0.2, radiusBottom = 0.2, height = 3, segments = 32, openEnded = true) {\n super();\n\n // Create the cylindrical body\n const tubeGeometry = new CylinderGeometry(radiusTop, radiusBottom, height, segments, 1, openEnded);\n\n // Create the rounded bottom using a half sphere\n const bottomGeometry = new SphereGeometry(radiusBottom, segments, segments / 2, 0, Math.PI * 2, Math.PI / 2, Math.PI / 2);\n bottomGeometry.translate(0, -(height / 2), 0); // Position it at the bottom of the cylinder\n\n // Merge parts\n this.copy(mergeGeometries([tubeGeometry, bottomGeometry], false));\n }\n}\n\nexport { TestTubeGeometry };\n","import { BufferGeometry, CylinderGeometry } from \"three\";\nimport { mergeGeometries } from \"three/addons/utils/BufferGeometryUtils.js\";\n\nclass WineBottleGeometry extends BufferGeometry {\n constructor({ radius = 0.5, neckRadius = 0.2, height = 3, neckHeight = 1, segments = 16 } = {}) {\n super();\n\n // Main body\n const bodyHeight = height - neckHeight;\n const bodyGeometry = new CylinderGeometry(radius, radius, bodyHeight, segments);\n bodyGeometry.translate(0, bodyHeight / 2, 0);\n\n // Shoulder section between body and neck\n const shoulderHeight = 0.3;\n const shoulderGeometry = new CylinderGeometry(neckRadius, radius, shoulderHeight, segments);\n shoulderGeometry.translate(0, bodyHeight + shoulderHeight / 2, 0);\n\n // Neck\n const neckGeometry = new CylinderGeometry(neckRadius, neckRadius, neckHeight, segments);\n neckGeometry.translate(0, bodyHeight + shoulderHeight + neckHeight / 2, 0);\n\n // Merge geometries\n this.copy(mergeGeometries([bodyGeometry, shoulderGeometry, neckGeometry], false));\n }\n}\n\nexport { WineBottleGeometry };\n","import { Group, Mesh, ShaderMaterial, SphereGeometry } from \"three\";\n\nclass Moon extends Group {\n constructor() {\n super();\n\n // Create moon geometry\n const moonGeometry = new SphereGeometry(5, 32, 32);\n\n // Custom ShaderMaterial\n const moonMaterial = new ShaderMaterial({\n uniforms: {\n time: { value: 0.0 },\n },\n vertexShader: `\n varying vec3 vNormal;\n varying vec3 vPosition;\n void main() {\n vNormal = normalize(normal);\n vPosition = position;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `,\n fragmentShader: `\n varying vec3 vNormal;\n varying vec3 vPosition;\n\n // Simple 3D noise function\n float hash(vec3 p) {\n p = fract(p * 0.3183099 + vec3(0.71, 0.113, 0.419));\n p *= 17.0;\n return fract(p.x * p.y * p.z * (p.x + p.y + p.z));\n }\n\n float noise(vec3 p) {\n vec3 ip = floor(p);\n vec3 fp = fract(p);\n fp = fp * fp * (3.0 - 2.0 * fp); // Smoothstep\n return mix(\n mix(mix(hash(ip), hash(ip + vec3(1.0, 0.0, 0.0)), fp.x),\n mix(hash(ip + vec3(0.0, 1.0, 0.0)), hash(ip + vec3(1.0, 1.0, 0.0)), fp.x), fp.y),\n mix(mix(hash(ip + vec3(0.0, 0.0, 1.0)), hash(ip + vec3(1.0, 0.0, 1.0)), fp.x),\n mix(hash(ip + vec3(0.0, 1.0, 1.0)), hash(ip + vec3(1.0, 1.0, 1.0)), fp.x), fp.y),\n fp.z);\n }\n\n void main() {\n vec3 color = vec3(0.8, 0.8, 0.7); // Base moon color\n float n = noise(vPosition * 0.5); // Apply noise with frequency\n color *= 0.8 + 0.2 * n; // Modulate color by noise\n gl_FragColor = vec4(color, 1.0);\n }\n `\n });\n\n // Create the moon mesh and add it to the scene\n const moon = new Mesh(moonGeometry, moonMaterial);\n this.add(moon);\n }\n}\n\nexport { Moon };\n","import { BoxGeometry, ConeGeometry, CylinderGeometry, ExtrudeGeometry, Group, Mesh, MeshStandardMaterial, Shape } from \"three\";\n\nclass Mausoleum extends Group {\n constructor() {\n super();\n\n // Base of the Mausoleum\n const baseGeometry = new BoxGeometry(5, 1, 5);\n const baseMaterial = new MeshStandardMaterial({ color: 0x808080, flatShading: true });\n const baseMesh = new Mesh(baseGeometry, baseMaterial);\n baseMesh.position.set(0, 0.5, 0);\n this.add(baseMesh);\n\n // Main Building Structure\n const buildingGeometry = new BoxGeometry(4, 3, 4);\n const buildingMaterial = new MeshStandardMaterial({ color: 0x696969, flatShading: true });\n const buildingMesh = new Mesh(buildingGeometry, buildingMaterial);\n buildingMesh.position.set(0, 2.5, 0);\n this.add(buildingMesh);\n\n // Roof (Peaked)\n const roofGeometry = new ConeGeometry(3.5, 2, 4);\n const roofMaterial = new MeshStandardMaterial({ color: 0x505050, flatShading: true });\n const roofMesh = new Mesh(roofGeometry, roofMaterial);\n roofMesh.rotation.y = Math.PI / 4;\n roofMesh.position.set(0, 5, 0);\n this.add(roofMesh);\n\n // Pillars\n const pillarGeometry = new CylinderGeometry(0.2, 0.2, 3.5, 16);\n const pillarMaterial = new MeshStandardMaterial({ color: 0x696969, flatShading: true });\n\n const pillarPositions = [\n [-1.8, 2.3, -2.2],\n [1.8, 2.3, -2.2],\n [-1.8, 2.3, 2.2],\n [1.8, 2.3, 2.2],\n ];\n\n pillarPositions.forEach((position) => {\n const pillarMesh = new Mesh(pillarGeometry, pillarMaterial);\n pillarMesh.position.set(...position);\n this.add(pillarMesh);\n });\n\n // Corrected Arched Entrance\n const archShape = new Shape();\n archShape.moveTo(-1, 0);\n archShape.lineTo(-1, 2);\n archShape.absarc(0, 2, 1, Math.PI, 0, true);\n archShape.lineTo(1, 0);\n\n const extrudeSettings = {\n depth: 0.5,\n bevelEnabled: false,\n };\n const archGeometry = new ExtrudeGeometry(archShape, extrudeSettings);\n const archMaterial = new MeshStandardMaterial({ color: 0x404040, flatShading: true });\n const archMesh = new Mesh(archGeometry, archMaterial);\n archMesh.position.set(0, 0.5, 1.7);\n this.add(archMesh);\n }\n}\n\nexport { Mausoleum };\n","import { BoxGeometry, Group, LatheGeometry, Mesh, MeshStandardMaterial, Vector2 } from \"three\";\n\nclass Desk extends Group {\n constructor() {\n super();\n\n // Desk Surface\n const surfaceGeometry = new BoxGeometry(5, 0.3, 3); // Width, Height (depth), Length\n const surfaceMaterial = new MeshStandardMaterial({ color: 0x8b5a2b }); // Wood-like color\n const deskSurface = new Mesh(surfaceGeometry, surfaceMaterial);\n deskSurface.position.set(0, 3.15, 0); // Raise the desk up\n\n // Desk Legs (using lathe geometry)\n const points = [];\n points.push(new Vector2(0.2, 0)); // Starting point at bottom (thin)\n points.push(new Vector2(0.25, 0.5)); // Curve outward\n points.push(new Vector2(0.15, 1.5)); // Narrow toward the middle\n points.push(new Vector2(0.3, 3)); // Final part toward the top\n\n const legGeometry = new LatheGeometry(points, 32);\n const legMaterial = new MeshStandardMaterial({ color: 0x4b3621 }); // Darker wood for legs\n\n // Create four legs for the desk\n const legPositions = [\n [2.2, 0, 1.2], // Adjust Y to 0 so legs start at ground level\n [-2.2, 0, 1.2],\n [2.2, 0, -1.2],\n [-2.2, 0, -1.2],\n ];\n\n legPositions.forEach((position) => {\n const leg = new Mesh(legGeometry, legMaterial);\n leg.position.set(...position);\n this.add(leg);\n });\n\n this.add(deskSurface);\n }\n}\n\nexport { Desk };\n","import { CylinderGeometry, Group, Mesh, MeshBasicMaterial, MeshStandardMaterial, PointLight, SphereGeometry } from \"three\";\n\nclass Candle extends Group {\n constructor(height = 1, radius = 0.2) {\n super();\n this.height = height;\n this.radius = radius;\n this.createCandle();\n this.animateFlicker();\n }\n\n createCandle() {\n // Candle Geometry\n const candleGeometry = new CylinderGeometry(this.radius, this.radius, this.height, 32);\n const candleMaterial = new MeshStandardMaterial({ color: 0xffffff });\n this.candle = new Mesh(candleGeometry, candleMaterial);\n this.candle.position.set(0, this.height / 2, 0);\n this.add(this.candle);\n\n // Flame Geometry\n const flameGeometry = new SphereGeometry(0.05, 16, 16);\n const flameMaterial = new MeshBasicMaterial({ color: 0xffa500 });\n this.flame = new Mesh(flameGeometry, flameMaterial);\n this.flame.position.set(0, this.height + 0.05, 0);\n this.add(this.flame);\n\n // Candlelight\n this.candleLight = new PointLight(0xffa500, 1, 5);\n this.candleLight.position.set(0, this.height + 0.05, 0);\n this.candleLight.castShadow = true;\n this.add(this.candleLight);\n }\n\n animateFlicker() {\n const flicker = () => {\n // Random flicker intensity between 0.8 and 1.2\n this.candleLight.intensity = 1 + (Math.random() * 0.4 - 0.2);\n\n // Optional: slight random movement to simulate a flickering flame\n this.candleLight.position.x = Math.random() * 0.02 - 0.01;\n this.candleLight.position.z = Math.random() * 0.02 - 0.01;\n\n requestAnimationFrame(flicker);\n };\n flicker();\n }\n}\n\nexport { Candle };\n","import { ConeGeometry, CylinderGeometry, Group, Mesh, MeshStandardMaterial, PointLight, TorusGeometry } from \"three\";\n\n// Class for Lantern Geometry\nclass Lantern extends Group {\n constructor(height = 1.3, baseWidth = 0.5) {\n super();\n\n // Lantern Base (cylinder)\n const baseGeometry = new CylinderGeometry(baseWidth, baseWidth, 0.2, 16);\n const baseMaterial = new MeshStandardMaterial({ color: 0x8b4513, flatShading: true });\n const baseMesh = new Mesh(baseGeometry, baseMaterial);\n baseMesh.position.set(0, 0, 0);\n this.add(baseMesh);\n\n // Lantern Body (a rectangular frame)\n const bodyGeometry = new CylinderGeometry(baseWidth * 0.9, baseWidth * 0.9, height);\n const bodyMaterial = new MeshStandardMaterial({ color: 0xffd700, flatShading: true, transparent: true, opacity: 0.6 });\n const bodyMesh = new Mesh(bodyGeometry, bodyMaterial);\n bodyMesh.position.set(0, height / 2 + 0.1, 0); // Adjust position based on height\n this.add(bodyMesh);\n\n // Lantern Roof (a cone)\n const roofGeometry = new ConeGeometry(baseWidth * 1.1, 0.5, 8);\n const roofMaterial = new MeshStandardMaterial({ color: 0x8b4513, flatShading: true });\n const roofMesh = new Mesh(roofGeometry, roofMaterial);\n roofMesh.position.set(0, height + 0.35, 0); // Adjusted position based on height\n this.add(roofMesh);\n\n // Lantern Handle (a torus)\n const handleGeometry = new TorusGeometry(baseWidth * 0.8, 0.05, 8, 16);\n const handleMaterial = new MeshStandardMaterial({ color: 0x8b4513, flatShading: true });\n const handleMesh = new Mesh(handleGeometry, handleMaterial);\n handleMesh.position.set(0, height + 0.85, 0); // Adjusted to sit above the roof\n this.add(handleMesh);\n\n // Lantern Light (point light inside)\n const light = new PointLight(0xffaa00, 1.5, 15);\n light.position.set(0, height / 2 + 0.1, 0); // Adjust position based on height\n light.castShadow = true;\n this.add(light);\n }\n}\n\nexport { Lantern };\n","import { DodecahedronGeometry, Group, Mesh, MeshStandardMaterial } from \"three\";\n\nclass MossyRocks extends Group {\n constructor() {\n super();\n\n // Rock Geometry (using Dodecahedron for a low-poly random rock-like shape)\n const rockGeometry = new DodecahedronGeometry(1, 0); // Low-poly shape\n const rockMaterial = new MeshStandardMaterial({ color: 0x808080, flatShading: true });\n const mossMaterial = new MeshStandardMaterial({ color: 0x4b8b3b, flatShading: true, opacity: 0.8, transparent: true });\n\n // Create multiple random rocks with slight variations\n for (let i = 0; i < 5; i++) {\n const rockMesh = new Mesh(rockGeometry, rockMaterial);\n rockMesh.scale.set(0.8 + Math.random() * 0.4, 0.8 + Math.random() * 0.4, 0.8 + Math.random() * 0.4); // Scale randomly to make each rock unique\n rockMesh.rotation.set(Math.random() * Math.PI, Math.random() * Math.PI, Math.random() * Math.PI); // Random rotation for variation\n rockMesh.position.set((Math.random() - 0.5) * 4, 0, (Math.random() - 0.5) * 4); // Keep rocks at ground level\n this.add(rockMesh);\n\n // Moss Layer (using a slightly smaller scale and positioned on top of the rock)\n const mossMesh = new Mesh(rockGeometry, mossMaterial);\n mossMesh.scale.set(rockMesh.scale.x * 0.9, rockMesh.scale.y * 0.5, rockMesh.scale.z * 0.9); // Make the moss layer flatter\n mossMesh.rotation.copy(rockMesh.rotation);\n mossMesh.position.copy(rockMesh.position);\n mossMesh.position.y += 0.3; // Raise the moss slightly to sit on top of the rock\n this.add(mossMesh);\n }\n }\n}\n\nexport { MossyRocks };\n","import { DodecahedronGeometry, Group, Mesh, MeshStandardMaterial } from \"three\";\n\nclass Rocks extends Group {\n constructor() {\n super();\n\n // Rock Geometry (using Dodecahedron for a low-poly random rock-like shape)\n const rockGeometry = new DodecahedronGeometry(1, 0); // Low-poly shape\n const rockMaterial = new MeshStandardMaterial({ color: 0x808080, flatShading: true });\n\n // Create multiple random rocks with slight variations\n for (let i = 0; i < 5; i++) {\n const rockMesh = new Mesh(rockGeometry, rockMaterial);\n rockMesh.scale.set(0.8 + Math.random() * 0.4, 0.8 + Math.random() * 0.4, 0.8 + Math.random() * 0.4); // Scale randomly to make each rock unique\n rockMesh.rotation.set(Math.random() * Math.PI, Math.random() * Math.PI, Math.random() * Math.PI); // Random rotation for variation\n rockMesh.position.set((Math.random() - 0.5) * 4, 0, (Math.random() - 0.5) * 4); // Keep rocks at ground level\n this.add(rockMesh);\n }\n }\n}\n\nexport { Rocks };\n","import { BeakerGeometry } from \"../../geometry/science/BeakerGeometry.js\";\nimport { DoubleSide, Group, Mesh, MeshPhysicalMaterial } from \"three\";\n\nclass Beaker extends Group {\n constructor() {\n super();\n\n // Create the geometry\n const beakerGeometry = new BeakerGeometry();\n\n // Create a group to combine the geometries\n const glassMaterial = new MeshPhysicalMaterial({\n color: 0x88ccff,\n transparent: true,\n opacity: 0.4,\n roughness: 0.1,\n metalness: 0.1,\n reflectivity: 0.8,\n transmission: 0.9,\n side: DoubleSide,\n });\n\n const beaker = new Mesh(beakerGeometry, glassMaterial);\n beaker.rotation.x = -Math.PI / 2;\n this.add(beaker);\n }\n}\n\nexport { Beaker };\n","import { BoxGeometry, Group, Mesh, MeshStandardMaterial } from \"three\";\n\nclass Book extends Group {\n constructor() {\n super();\n\n // Book Cover Geometry (Front and Back covers extending beyond the pages)\n const coverGeometry = new BoxGeometry(1.6, 0.05, 2.1); // Cover is slightly larger to extend beyond the pages\n const coverMaterial = new MeshStandardMaterial({ color: 0x8b0000 });\n\n // Create the front and back covers\n const frontCoverMesh = new Mesh(coverGeometry, coverMaterial);\n const backCoverMesh = new Mesh(coverGeometry, coverMaterial);\n\n // Position the front and back covers\n frontCoverMesh.position.set(0, 0.125, 0); // Slightly above the pages\n backCoverMesh.position.set(0, -0.125, 0); // Slightly below the pages\n\n // Pages Geometry (slightly smaller to fit neatly inside the cover)\n const pagesGeometry = new BoxGeometry(1.55, 0.2, 2.0); // Pages are smaller to sit inside the cover comfortably\n const pagesMaterial = new MeshStandardMaterial({ color: 0xffffff }); // White color for pages\n const pagesMesh = new Mesh(pagesGeometry, pagesMaterial);\n\n // Position the pages between the covers\n pagesMesh.position.set(-0.025, 0, 0); // Positioned at the center between front and back covers\n\n // Create a spine for extra detail\n const spineGeometry = new BoxGeometry(0.05, 0.25, 2.1); // Spine with thickness and same length as the cover\n const spineMaterial = new MeshStandardMaterial({ color: 0x4b0000 }); // Darker shade for the spine\n const spineMesh = new Mesh(spineGeometry, spineMaterial);\n spineMesh.position.set(-0.8, 0, 0); // Positioned on one side to represent the book's spine\n\n // Group the parts together to form the book\n this.add(frontCoverMesh);\n this.add(backCoverMesh);\n this.add(pagesMesh);\n this.add(spineMesh);\n }\n}\n\nexport { Book };\n","import { CylinderGeometry, Group, LatheGeometry, Mesh, MeshStandardMaterial, Vector2 } from \"three\";\n\nclass Bottle extends Group {\n constructor() {\n super();\n\n // Potion bottle geometry\n const bottlePoints = [\n new Vector2(0, 0), // Bottom\n new Vector2(0.8, 0), // Base\n new Vector2(1, 1.5), // Rounded body\n new Vector2(0.5, 2.2), // Neck\n new Vector2(0.6, 2.5), // Mouth\n ];\n const bottleGeometry = new LatheGeometry(bottlePoints, 10); // Low-poly segments\n\n // Cork geometry\n const corkGeometry = new CylinderGeometry(0.3, 0.4, 0.2, 8);\n\n // Materials\n const glassMaterial = new MeshStandardMaterial({\n color: 0x88ccff,\n transparent: true,\n opacity: 0.5,\n roughness: 0.1,\n metalness: 0.3,\n });\n\n const liquidMaterial = new MeshStandardMaterial({\n color: 0xff3366, // Vibrant potion color\n transparent: true,\n opacity: 0.6,\n });\n\n const corkMaterial = new MeshStandardMaterial({\n color: 0x8b4513,\n roughness: 1.0,\n });\n\n // Meshes\n const bottle = new Mesh(bottleGeometry, glassMaterial);\n const liquid = new Mesh(bottleGeometry, liquidMaterial);\n const cork = new Mesh(corkGeometry, corkMaterial);\n\n // Adjust liquid position to appear inside bottle\n liquid.scale.set(0.8, 0.8, 0.8);\n liquid.position.y = 0.1; // Position slightly lower to appear \"inside\"\n\n // Position cork at the bottle's mouth\n cork.position.y = 2.5;\n\n // Group all elements for easy manipulation\n const potionBottle = new Group();\n potionBottle.add(bottle, liquid, cork);\n this.add(potionBottle);\n }\n}\n\nexport { Bottle };\n","import { ConeGeometry, CylinderGeometry, Group, Mesh, MeshStandardMaterial } from \"three\";\n\nclass BunsenBurner extends Group {\n constructor() {\n super();\n\n // Base geometry\n const baseGeometry = new CylinderGeometry(0.3, 0.4, 0.1, 16);\n const baseMaterial = new MeshStandardMaterial({\n color: 0x333333,\n roughness: 0.6,\n metalness: 0.3,\n });\n const base = new Mesh(baseGeometry, baseMaterial);\n base.position.y = 0.05;\n\n // Burner tube geometry\n const tubeGeometry = new CylinderGeometry(0.1, 0.1, 0.7, 16);\n const tubeMaterial = new MeshStandardMaterial({\n color: 0x555555,\n roughness: 0.5,\n metalness: 0.4,\n });\n const tube = new Mesh(tubeGeometry, tubeMaterial);\n tube.position.y = 0.4;\n\n // Flame geometry\n const flameGeometry = new ConeGeometry(0.075, 0.2, 16);\n const flameMaterial = new MeshStandardMaterial({\n color: 0xff5500,\n emissive: 0xff5500,\n emissiveIntensity: 0.6,\n transparent: true,\n opacity: 0.8,\n });\n const flame = new Mesh(flameGeometry, flameMaterial);\n flame.position.y = 0.8;\n\n this.add(base, tube, flame);\n }\n}\n\nexport { BunsenBurner };\n","import { BoxGeometry, CylinderGeometry, Group, Mesh, MeshStandardMaterial, SphereGeometry } from \"three\";\n\nclass ElectricPanel extends Group {\n constructor() {\n super();\n\n // Panel base geometry\n const panelGeometry = new BoxGeometry(3, 4, 0.1);\n const panelMaterial = new MeshStandardMaterial({\n color: 0x2e2e2e,\n roughness: 0.8,\n metalness: 0.6,\n });\n\n // Create switches and dials\n const switchGeometry = new BoxGeometry(0.2, 0.5, 0.2);\n const switchMaterial = new MeshStandardMaterial({\n color: 0xaaaaaa,\n roughness: 0.5,\n metalness: 0.7,\n });\n\n const dialGeometry = new CylinderGeometry(0.3, 0.3, 0.1, 16);\n const dialMaterial = new MeshStandardMaterial({\n color: 0x555555,\n roughness: 0.7,\n metalness: 0.5,\n });\n\n // Create panel and switches\n const panel = new Mesh(panelGeometry, panelMaterial);\n\n // Add multiple switches and dials\n const switches = [];\n for (let i = -1; i <= 1; i++) {\n const toggleSwitch = new Mesh(switchGeometry, switchMaterial);\n toggleSwitch.position.set(i, 1.5, 0.1);\n switches.push(toggleSwitch);\n panel.add(toggleSwitch);\n }\n\n const dial = new Mesh(dialGeometry, dialMaterial);\n dial.rotation.x = Math.PI / 2;\n dial.position.set(0, 0.5, 0.15);\n panel.add(dial);\n\n // Create red indicator light\n const lightGeometry = new SphereGeometry(0.15, 8, 8);\n const lightMaterial = new MeshStandardMaterial({\n color: 0xff0000,\n emissive: 0xff0000,\n emissiveIntensity: 0.5,\n });\n const light = new Mesh(lightGeometry, lightMaterial);\n light.position.set(0, -1, 0.1);\n panel.add(light);\n\n this.add(panel);\n\n // Define variables for flickering effect\n let flickerSpeed = 0.015; // Speed of flicker\n let flickerMaxIntensity = 0.8; // Maximum emissive intensity\n let flickerMinIntensity = 0.2; // Minimum emissive intensity\n\n // Main render loop\n function animate() {\n requestAnimationFrame(animate);\n\n // Create a flicker effect by adjusting the emissive intensity\n const flickerIntensity = flickerMinIntensity + Math.abs(Math.sin(Date.now() * flickerSpeed)) * (flickerMaxIntensity - flickerMinIntensity);\n light.material.emissiveIntensity = flickerIntensity;\n }\n\n animate();\n }\n}\n\nexport { ElectricPanel };\n","import {CylinderGeometry, Group, LatheGeometry, Mesh, MeshStandardMaterial, Vector2} from \"three\";\n\nclass Flask extends Group {\n constructor() {\n super();\n\n // Flask body geometry\n const flaskPoints = [\n new Vector2(0, 0), // Bottom of the flask\n new Vector2(1.2, 0), // Base\n new Vector2(1.5, 1.5), // Mid-body\n new Vector2(1, 3), // Narrow neck\n new Vector2(0.6, 3.5), // Mouth of the flask\n ];\n const flaskGeometry = new LatheGeometry(flaskPoints, 12); // 12 segments for low-poly style\n\n // Cork stopper geometry\n const corkGeometry = new CylinderGeometry(0.6, 0.7, 0.3, 8); // Simple tapered cylinder\n\n // Materials for flask and cork\n const glassMaterial = new MeshStandardMaterial({\n color: 0x88ccaa,\n transparent: true,\n opacity: 0.4,\n roughness: 0.1,\n metalness: 0.5,\n });\n\n const corkMaterial = new MeshStandardMaterial({\n color: 0x8b4513,\n roughness: 1.0,\n });\n\n // Meshes\n const flask = new Mesh(flaskGeometry, glassMaterial);\n const cork = new Mesh(corkGeometry, corkMaterial);\n\n // Position cork on top of the flask\n cork.position.y = 3.5;\n\n // Add both to a single object for easy manipulation\n this.add(flask, cork);\n }\n}\n\nexport { Flask };\n","import { BoxGeometry, CylinderGeometry, Group, Mesh, MeshStandardMaterial, SphereGeometry } from \"three\";\n\nclass LeverPanel extends Group {\n constructor() {\n super();\n\n // New panel for levers\n const leverPanelGeometry = new BoxGeometry(2, 3, 0.1);\n const leverPanelMaterial = new MeshStandardMaterial({\n color: 0x333333,\n roughness: 0.8,\n metalness: 0.5,\n });\n const leverPanel = new Mesh(leverPanelGeometry, leverPanelMaterial);\n\n // Lever geometry\n const leverBaseGeometry = new CylinderGeometry(0.1, 0.1, 0.2, 8);\n const leverHandleGeometry = new CylinderGeometry(0.05, 0.05, 1, 8);\n\n // Lever material\n const leverMaterial = new MeshStandardMaterial({\n color: 0xaaaaaa,\n roughness: 0.5,\n metalness: 0.7,\n });\n\n // Create multiple levers\n const levers = [];\n for (let i = -0.5; i <= 0.5; i += 0.5) {\n // Lever base\n const leverBase = new Mesh(leverBaseGeometry, leverMaterial);\n leverBase.position.set(i, 1, 0.1);\n\n // Lever handle\n const leverHandle = new Mesh(leverHandleGeometry, leverMaterial);\n leverHandle.position.y = 0.5; // Position handle on top of the base\n // leverHandle.rotation.x = Math.PI / 4; // Tilt forward along the x-axis\n leverBase.add(leverHandle);\n\n // Group base and handle as a lever\n levers.push(leverHandle);\n this.add(leverBase);\n }\n\n // Position the panel in the scene\n this.add(leverPanel);\n }\n}\n\nexport { LeverPanel };\n","import { BoxGeometry, CylinderGeometry, Group, Mesh, MeshStandardMaterial } from \"three\";\n\nclass Microscope extends Group {\n constructor() {\n super();\n\n // Base geometry\n const baseGeometry = new BoxGeometry(1, 0.2, 0.5);\n const baseMaterial = new MeshStandardMaterial({\n color: 0x444444,\n roughness: 0.6,\n metalness: 0.3,\n });\n const base = new Mesh(baseGeometry, baseMaterial);\n base.position.y = 0.1;\n\n // Arm geometry\n const armGeometry = new BoxGeometry(0.2, 1, 0.2);\n const arm = new Mesh(armGeometry, baseMaterial);\n arm.position.set(0, 0.6, -0.2);\n\n // Eyepiece geometry\n const eyepieceGeometry = new CylinderGeometry(0.1, 0.1, 0.4, 8);\n const eyepieceMaterial = new MeshStandardMaterial({\n color: 0x333333,\n roughness: 0.5,\n metalness: 0.6,\n });\n const eyepiece = new Mesh(eyepieceGeometry, eyepieceMaterial);\n eyepiece.position.set(0, 1.1, -0.35);\n eyepiece.rotation.x = -Math.PI / 4; // Angle the eyepiece for viewing\n\n // Stage geometry\n const stageGeometry = new BoxGeometry(0.6, 0.1, 0.6);\n const stageMaterial = new MeshStandardMaterial({\n color: 0x555555,\n roughness: 0.8,\n metalness: 0.2,\n });\n const stage = new Mesh(stageGeometry, stageMaterial);\n stage.position.set(0, 0.6, 0);\n\n // Assemble microscope\n this.add(base, arm, eyepiece, stage);\n }\n}\n\nexport { Microscope };\n","import { CylinderGeometry, DoubleSide, Group, Mesh, MeshStandardMaterial } from \"three\";\nimport { MortarGeometry } from \"../../geometry/science/MortarGeometry.js\";\n\nclass MortarAndPestle extends Group {\n constructor() {\n super();\n\n // Mortar geometry\n const mortarGeometry = new MortarGeometry();\n\n // Pestle geometry\n const pestleGeometry = new CylinderGeometry(0.2, 0.3, 1.5, 8);\n pestleGeometry.translate(0, 0.75, 0); // Offset to make the end rounded\n\n // Materials\n const mortarMaterial = new MeshStandardMaterial({\n color: 0x5c4033, // Dark earthy tone\n roughness: 1.0,\n metalness: 0.0,\n side: DoubleSide, // Render inside and outside\n });\n\n const pestleMaterial = new MeshStandardMaterial({\n color: 0x8b5a2b, // Slightly lighter earthy color\n roughness: 0.8,\n metalness: 0.1,\n });\n\n // Meshes\n const mortar = new Mesh(mortarGeometry, mortarMaterial);\n const pestle = new Mesh(pestleGeometry, pestleMaterial);\n\n // Position and rotate the pestle to rest in the mortar\n pestle.position.set(0.3, 1.3, 0);\n pestle.rotation.z = Math.PI / 4;\n\n // Group for easy manipulation\n this.add(mortar, pestle);\n }\n}\n\nexport { MortarAndPestle };\n","import { CatmullRomCurve3, Group, Mesh, MeshStandardMaterial, TubeGeometry, Vector3 } from \"three\";\n\nclass SpiralTube extends Group {\n constructor() {\n super();\n\n // Create a multi-spiral path for the tube\n const spiralLength = 100; // Total number of points for more coils\n const heightIncrement = 0.05; // Smaller increment to keep the coils tight\n const curve = new CatmullRomCurve3(\n Array.from({ length: spiralLength }, (_, i) => {\n const angle = i * 0.2; // Controls tightness of the spiral\n return new Vector3(\n Math.cos(angle) * 0.4,\n i * heightIncrement, // Gradual height increase\n Math.sin(angle) * 0.4,\n );\n }),\n );\n\n // Create tube geometry with a high segment count for smoothness\n const tubeGeometry = new TubeGeometry(curve, 200, 0.1, 8, false);\n const glassMaterial = new MeshStandardMaterial({\n color: 0x88ccff,\n transparent: true,\n opacity: 0.3,\n roughness: 0.1,\n metalness: 0.2,\n emissive: 0x88ccff,\n });\n const multiSpiralTube = new Mesh(tubeGeometry, glassMaterial);\n this.add(multiSpiralTube);\n\n // Optional fluid animation inside tube (using gradient effect)\n function animateFluid() {\n glassMaterial.emissiveIntensity = 0.2 + Math.sin(Date.now() * 0.005) * 0.1;\n }\n\n // Main render loop with fluid animation\n function animate() {\n requestAnimationFrame(animate);\n animateFluid(); // Add subtle animation for fluid effect\n }\n\n animate();\n }\n}\n\nexport { SpiralTube };\n","import { CylinderGeometry, Group, Mesh, MeshStandardMaterial, TorusGeometry } from \"three\";\n\nclass Stand extends Group {\n constructor() {\n super();\n\n // Ring geometry for holding the beaker\n const ringGeometry = new TorusGeometry(0.3, 0.03, 8, 16); // Small torus for the ring\n const ringMaterial = new MeshStandardMaterial({\n color: 0x888888,\n roughness: 0.7,\n metalness: 0.3,\n });\n const ring = new Mesh(ringGeometry, ringMaterial);\n ring.rotation.x = Math.PI / 2; // Orient the ring horizontally\n ring.position.y = 0.4; // Position at a height\n\n // Supporting legs\n const legGeometry = new CylinderGeometry(0.02, 0.02, 0.4, 8);\n const legMaterial = new MeshStandardMaterial({\n color: 0x666666,\n roughness: 0.8,\n metalness: 0.3,\n });\n\n // Create three legs spaced around the ring\n const legs = [];\n for (let i = 0; i < 3; i++) {\n const angle = (i / 3) * Math.PI * 2; // Divide 360° into three\n const leg = new Mesh(legGeometry, legMaterial);\n leg.position.set(Math.cos(angle) * 0.25, 0.2, Math.sin(angle) * 0.25); // Position leg around ring\n legs.push(leg);\n }\n\n // Group the ring and legs into a single stand object\n this.add(ring, ...legs);\n }\n}\n\nexport { Stand };\n","import {\n BufferGeometry,\n CylinderGeometry,\n DoubleSide,\n Group,\n Line,\n LineBasicMaterial,\n Mesh,\n MeshStandardMaterial,\n SphereGeometry,\n Vector3,\n} from \"three\";\n\nclass TeslaCoil extends Group {\n constructor() {\n super();\n\n // Base geometry\n const coilBaseGeometry = new CylinderGeometry(0.5, 0.6, 0.3, 16);\n const coilBaseMaterial = new MeshStandardMaterial({\n color: 0x333333,\n roughness: 0.6,\n metalness: 0.5,\n });\n const coilBase = new Mesh(coilBaseGeometry, coilBaseMaterial);\n coilBase.position.y = 0.15;\n\n // Coil geometry\n const coilGeometry = new CylinderGeometry(0.15, 0.15, 2, 12, 1, true);\n const coilMaterial = new MeshStandardMaterial({\n color: 0xff6600,\n roughness: 0.5,\n metalness: 0.8,\n side: DoubleSide,\n });\n const coil = new Mesh(coilGeometry, coilMaterial);\n coil.position.y = 1.3;\n\n // Sphere at the top\n const coilTopGeometry = new SphereGeometry(0.3, 16, 16);\n const coilTop = new Mesh(coilTopGeometry, coilMaterial);\n coilTop.position.y = 2.4;\n\n this.add(coilBase, coil, coilTop);\n\n // Sparking effect (using lines)\n const sparks = [];\n for (let i = 0; i < 5; i++) {\n const sparkMaterial = new LineBasicMaterial({ color: 0x99ccff });\n const points = [\n new Vector3(0, 2.4, 0),\n new Vector3((Math.random() - 0.5) * 1.5, Math.random() * 2.4, (Math.random() - 0.5) * 1.5),\n ];\n const sparkGeometry = new BufferGeometry().setFromPoints(points);\n const spark = new Line(sparkGeometry, sparkMaterial);\n this.add(spark);\n sparks.push(spark);\n }\n\n // Update spark positions\n function animateSparks() {\n sparks.forEach((spark) => {\n const points = [\n new Vector3(0, 2.4, 0),\n new Vector3((Math.random() - 0.5) * 1.5, Math.random() * 2.4, (Math.random() - 0.5) * 1.5),\n ];\n spark.geometry.setFromPoints(points);\n });\n }\n\n function animate() {\n requestAnimationFrame(animate);\n animateSparks(); // Make the sparks “jump”\n }\n\n animate();\n }\n}\n\nexport { TeslaCoil };\n","import { DoubleSide, Group, Mesh, MeshPhysicalMaterial } from \"three\";\nimport { TestTubeGeometry } from \"../../geometry/science/TestTubeGeometry.js\";\n\nclass TestTube extends Group {\n constructor(radiusTop = 0.2, radiusBottom = 0.2, height = 3, segments = 32) {\n super();\n\n // Test Tube Geometry\n const tubeGeometry = new TestTubeGeometry(radiusTop, radiusBottom, height, segments);\n\n const tubeMaterial = new MeshPhysicalMaterial({\n color: 0x88ccff,\n transparent: true,\n opacity: 0.4,\n roughness: 0.1,\n metalness: 0.1,\n reflectivity: 0.8,\n transmission: 0.9, // For glass effect\n side: DoubleSide,\n });\n\n const tube = new Mesh(tubeGeometry, tubeMaterial);\n\n this.add(tube);\n }\n}\n\nexport { TestTube };\n","import { BoxGeometry, DoubleSide, Group, Mesh, MeshStandardMaterial } from \"three\";\nimport { TestTubeGeometry } from \"../../geometry/science/TestTubeGeometry.js\";\n\nclass TestTubeRack extends Group {\n constructor(count = 3, colors = [0x00ffaa, 0xff00aa, 0xaa00ff]) {\n super();\n\n // Rack geometry\n const rackGeometry = new BoxGeometry(3, 0.2, 1);\n const rackMaterial = new MeshStandardMaterial({\n color: 0x8b4513, // Wooden color or change to metallic tone\n roughness: 0.7,\n metalness: 0.3,\n });\n const rack = new Mesh(rackGeometry, rackMaterial);\n rack.position.y = 0.5;\n\n // Test tube properties\n const testTubeGeometry = new TestTubeGeometry(0.1, 0.1, 1, 16);\n const glassMaterial = new MeshStandardMaterial({\n color: 0xaaaaaa,\n transparent: true,\n opacity: 0.4,\n roughness: 0.1,\n metalness: 0.5,\n side: DoubleSide,\n });\n\n // Create multiple test tubes with specified liquid colors\n for (let i = 0; i < count; i++) {\n // Test tube\n const testTube = new Mesh(testTubeGeometry, glassMaterial);\n const xPosition = (i - (count - 1) / 2) * 0.8;\n testTube.position.set(xPosition, 1, 0);\n\n // Liquid geometry and material with unique color\n const liquidGeometry = new TestTubeGeometry(0.099, 0.099, 0.5, 16, false);\n const liquidColor = colors[i % colors.length]; // Cycle through colors if fewer than tubes\n const liquidMaterial = new MeshStandardMaterial({\n color: liquidColor,\n emissive: liquidColor,\n emissiveIntensity: 0.5,\n transparent: true,\n opacity: 0.6,\n });\n\n // Liquid inside test tube\n const liquid = new Mesh(liquidGeometry, liquidMaterial);\n liquid.position.set(0, -0.25, 0); // Position liquid inside tube\n testTube.add(liquid);\n\n // Add tube to rack\n rack.add(testTube);\n }\n\n // Group rack\n this.add(rack);\n }\n}\n\nexport { TestTubeRack };\n","import { Mesh, MeshPhysicalMaterial } from \"three\";\nimport { WineBottleGeometry } from \"../../geometry/science/WineBottleGeometry.js\";\n\nclass WineBottle extends Mesh {\n constructor() {\n super();\n\n // Create wine bottle geometry\n const wineBottle = new WineBottleGeometry();\n\n // Create a glass-like material\n const bottleMaterial = new MeshPhysicalMaterial({\n color: 0x556b2f,\n roughness: 0.1,\n transmission: 0.9, // Makes the material transparent\n thickness: 0.2,\n metalness: 0,\n clearcoat: 1.0,\n clearcoatRoughness: 0.1,\n });\n\n // Create mesh and add to the scene\n this.geometry = wineBottle;\n this.material = bottleMaterial;\n }\n}\n\nexport { WineBottle };\n","import { Shape } from \"three\";\n\nclass BurstShape extends Shape {\n constructor(sides = 5, innerRadius = 0.5, outerRadius = 1.0) {\n super();\n\n const step = (Math.PI * 2) / sides;\n const halfStep = step / 2;\n const qtrStep = step / 4;\n\n this.moveTo(Math.cos(0) * outerRadius, -Math.sin(0) * outerRadius);\n\n for (let n = 1; n <= sides; ++n) {\n let cx = Math.cos(step * n - qtrStep * 3) * (innerRadius / Math.cos(qtrStep));\n let cy = -Math.sin(step * n - qtrStep * 3) * (innerRadius / Math.cos(qtrStep));\n let dx = Math.cos(step * n - halfStep) * innerRadius;\n let dy = -Math.sin(step * n - halfStep) * innerRadius;\n this.quadraticCurveTo(cx, cy, dx, dy);\n cx = Math.cos(step * n - qtrStep) * (innerRadius / Math.cos(qtrStep));\n cy = -Math.sin(step * n - qtrStep) * (innerRadius / Math.cos(qtrStep));\n dx = Math.cos(step * n) * outerRadius;\n dy = -Math.sin(step * n) * outerRadius;\n this.quadraticCurveTo(cx, cy, dx, dy);\n }\n\n this.closePath();\n }\n}\n\nexport { BurstShape };\n","import { ExtrudeGeometry, Mesh, MeshStandardMaterial } from \"three\";\nimport { BurstShape } from \"../../shapes/BurstShape.js\";\n\nclass Burst extends Mesh {\n constructor(sides = 5, innerRadius = 0.5, outerRadius = 1.0, depth = 0.25) {\n super();\n\n const shape = new BurstShape(sides, innerRadius, outerRadius);\n const geometry = new ExtrudeGeometry(shape, {\n depth: depth,\n bevelEnabled: depth > 0,\n bevelThickness: 0,\n bevelSize: 0,\n });\n const material = new MeshStandardMaterial({ color: 0x2194ce });\n\n geometry.center();\n this.geometry = geometry;\n this.material = material;\n }\n}\n\nexport { Burst };\n","import { Path, Shape } from \"three\";\n\nclass GearShape extends Shape {\n constructor(sides = 5, innerRadius = 0.5, outerRadius = 1, holeSides = 5, holeRadius = 0.25) {\n super();\n\n const step = (Math.PI * 2) / sides;\n const qtrStep = step / 4;\n\n this.moveTo(Math.cos(0) * outerRadius, -Math.sin(0) * outerRadius);\n\n for (let n = 1; n <= sides; ++n) {\n this.lineTo(Math.cos(step * n - qtrStep * 3) * innerRadius, -Math.sin(step * n - qtrStep * 3) * innerRadius);\n this.lineTo(Math.cos(step * n - qtrStep * 2) * innerRadius, -Math.sin(step * n - qtrStep * 2) * innerRadius);\n this.lineTo(Math.cos(step * n - qtrStep) * outerRadius, -Math.sin(step * n - qtrStep) * outerRadius);\n this.lineTo(Math.cos(step * n) * outerRadius, -Math.sin(step * n) * outerRadius);\n }\n this.closePath();\n\n // Create the hole in the gear, if specified\n if (holeRadius > 0 && holeSides > 2) {\n const hole = new Path();\n const holeStep = (Math.PI * 2) / holeSides;\n\n hole.moveTo(Math.cos(0) * holeRadius, -Math.sin(0) * holeRadius);\n for (let n = 1; n < holeSides; ++n) {\n hole.lineTo(Math.cos(holeStep * n) * holeRadius, -Math.sin(holeStep * n) * holeRadius);\n }\n hole.lineTo(Math.cos(0) * holeRadius, -Math.sin(0) * holeRadius);\n\n this.holes.push(hole);\n }\n }\n}\n\nexport { GearShape };\n","import { ExtrudeGeometry, Mesh, MeshStandardMaterial } from \"three\";\nimport { GearShape } from \"../../shapes/GearShape.js\";\n\nclass Gear extends Mesh {\n constructor(sides = 5, innerRadius = 0.5, outerRadius = 1, holeSides = 5, holeRadius = 0.25, depth = 0.25) {\n super();\n\n const shape = new GearShape(sides, innerRadius, outerRadius, holeSides, holeRadius);\n const geometry = new ExtrudeGeometry(shape, {\n depth: depth,\n bevelEnabled: depth > 0,\n bevelThickness: 0,\n bevelSize: 0,\n });\n const material = new MeshStandardMaterial({ color: 0x2194ce });\n\n geometry.center();\n this.geometry = geometry;\n this.material = material;\n }\n}\n\nexport { Gear };\n","import { Shape } from \"three\";\n\nclass StarShape extends Shape {\n constructor(points = 5, innerRadius = 0.5, outerRadius = 1.0) {\n super();\n\n const step = (Math.PI * 2) / points;\n const halfStep = step / 2;\n this.moveTo(Math.cos(0) * outerRadius, Math.sin(0) * outerRadius);\n\n for (let n = 1; n <= points; ++n) {\n this.lineTo(Math.cos(step * n - halfStep) * innerRadius, Math.sin(step * n - halfStep) * innerRadius);\n this.lineTo(Math.cos(step * n) * outerRadius, Math.sin(step * n) * outerRadius);\n }\n\n this.closePath();\n }\n}\n\nexport { StarShape };\n","import { ExtrudeGeometry, Mesh, MeshStandardMaterial } from \"three\";\nimport { StarShape } from \"../../shapes/StarShape.js\";\n\nclass Star extends Mesh {\n constructor(points = 5, innerRadius = 0.5, outerRadius = 1.0, depth = 0.25) {\n super();\n\n const shape = new StarShape(points, innerRadius, outerRadius);\n const geometry = new ExtrudeGeometry(shape, {\n depth: depth,\n bevelEnabled: depth > 0,\n bevelThickness: 0,\n bevelSize: 0,\n });\n const material = new MeshStandardMaterial({ color: 0x2194ce });\n\n geometry.center();\n this.geometry = geometry;\n this.material = material;\n }\n}\n\nexport { Star };\n","// Shader for fade effect\nexport const fadeShader = {\n uniforms: {\n tDiffuse: { value: null },\n opacity: { value: 1.0 },\n },\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `,\n fragmentShader: `\n uniform float opacity;\n uniform sampler2D tDiffuse;\n varying vec2 vUv;\n void main() {\n vec4 texel = texture2D(tDiffuse, vUv);\n gl_FragColor = opacity * texel;\n }\n `,\n};\n","import { DataTexture, NearestFilter, RepeatWrapping, RGBAFormat, UnsignedByteType } from \"three\";\n\n/**\n * Create a checkerboard texture\n * @param size\n * @returns {DataTexture}\n *\n * @example\n * const material = new MeshStandardMaterial();\n * material.map = createCheckerboardTexture(8);\n */\nexport const checkerboardTexture = (size) => {\n const data = new Uint8Array(4 * size * size);\n for (let i = 0; i < size * size; i++) {\n const stride = i * 4;\n const color = (i % size ^ Math.floor(i / size)) & 1 ? 255 : 0;\n data[stride] = color; // red\n data[stride + 1] = color; // green\n data[stride + 2] = color; // blue\n data[stride + 3] = 255; // alpha\n }\n\n const texture = new DataTexture(data, size, size, RGBAFormat, UnsignedByteType);\n texture.wrapS = RepeatWrapping;\n texture.wrapT = RepeatWrapping;\n texture.minFilter = NearestFilter;\n texture.needsUpdate = true;\n\n return texture;\n};\n"],"names":["Bubbling","Group","bubbles","bubbleCount","bubbleGeometry","SphereGeometry","bubbleMaterial","MeshStandardMaterial","i","bubble","Mesh","animateBubbles","animate","BifurcatedStaircaseGeometry","BufferGeometry","stepWidth","stepHeight","stepDepth","numStepsCentral","numStepsBranch","branchAngle","vertices","indices","yBottom","yTop","zFront","zBack","baseIndex","landingY","landingZ","landingWidth","landingBaseIndex","j","direction","xStart","zStart","xOffset","zOffset","xFrontLeft","xFrontRight","xBackLeft","xBackRight","Float32BufferAttribute","DioramaGeometry","width","height","depth","wallThickness","LShapedStaircaseGeometry","numStepsPerFlight","landingDepth","xFront","xBack","SpiralStaircaseGeometry","numSteps","radius","angleIncrement","currentAngle","xCenter","zCenter","StaircaseGeometry","stepBottomY","stepTopY","stepFrontZ","stepBackZ","CrossHeadstoneGeometry","verticalHeight","verticalGeometry","BoxGeometry","horizontalWidth","horizontalGeometry","mergeGeometries","ObeliskHeadstoneGeometry","totalHeight","baseWidth","baseHeight","lowerSegmentHeight","middleSegmentHeight","topSegmentHeight","currentHeight","baseGeometry","lowerSegmentGeometry","middleSegmentGeometry","topSegmentGeometry","pyramidGeometry","ConeGeometry","RoundedHeadstoneGeometry","topHeight","topGeometry","CylinderGeometry","SquareHeadstoneGeometry","slabGeometry","FenceColumn","columnGeometry","capGeometry","WroughtIronBarGeometry","barHeight","barRadius","spikeHeight","barGeometry","spikeGeometry","SimpleLeafGeometry","size","leafPoints","x","y","positionAttribute","BoneGeometry","radiusTop","radiusBottom","radialSegments","cylinderGeometry","sphereGeometry","topSphere1","topSphere2","bottomSphere1","bottomSphere2","BeakerGeometry","tubeGeometry","MortarGeometry","mortarPoints","Vector2","mortarGeometry","LatheGeometry","baseDisk","CircleGeometry","TestTubeGeometry","segments","openEnded","bottomGeometry","WineBottleGeometry","neckRadius","neckHeight","bodyHeight","bodyGeometry","shoulderHeight","shoulderGeometry","neckGeometry","Moon","moonGeometry","moonMaterial","ShaderMaterial","moon","Mausoleum","baseMaterial","baseMesh","buildingGeometry","buildingMaterial","buildingMesh","roofGeometry","roofMaterial","roofMesh","pillarGeometry","pillarMaterial","position","pillarMesh","archShape","Shape","extrudeSettings","archGeometry","ExtrudeGeometry","archMaterial","archMesh","Desk","surfaceGeometry","surfaceMaterial","deskSurface","points","legGeometry","legMaterial","leg","Candle","candleGeometry","candleMaterial","flameGeometry","flameMaterial","MeshBasicMaterial","PointLight","flicker","Lantern","bodyMaterial","bodyMesh","handleGeometry","TorusGeometry","handleMaterial","handleMesh","light","MossyRocks","rockGeometry","DodecahedronGeometry","rockMaterial","mossMaterial","rockMesh","mossMesh","Rocks","Beaker","beakerGeometry","glassMaterial","MeshPhysicalMaterial","DoubleSide","beaker","Book","coverGeometry","coverMaterial","frontCoverMesh","backCoverMesh","pagesGeometry","pagesMaterial","pagesMesh","spineGeometry","spineMaterial","spineMesh","Bottle","bottlePoints","bottleGeometry","corkGeometry","liquidMaterial","corkMaterial","bottle","liquid","cork","potionBottle","BunsenBurner","base","tubeMaterial","tube","flame","ElectricPanel","panelGeometry","panelMaterial","switchGeometry","switchMaterial","dialGeometry","dialMaterial","panel","toggleSwitch","dial","lightGeometry","lightMaterial","flickerSpeed","flickerMaxIntensity","flickerMinIntensity","flickerIntensity","Flask","flaskPoints","flaskGeometry","flask","LeverPanel","leverPanelGeometry","leverPanelMaterial","leverPanel","leverBaseGeometry","leverHandleGeometry","leverMaterial","leverBase","leverHandle","Microscope","armGeometry","arm","eyepieceGeometry","eyepieceMaterial","eyepiece","stageGeometry","stageMaterial","stage","MortarAndPestle","pestleGeometry","mortarMaterial","pestleMaterial","mortar","pestle","SpiralTube","spiralLength","heightIncrement","curve","CatmullRomCurve3","_","angle","Vector3","TubeGeometry","multiSpiralTube","animateFluid","Stand","ringGeometry","ringMaterial","ring","legs","TeslaCoil","coilBaseGeometry","coilBaseMaterial","coilBase","coilGeometry","coilMaterial","coil","coilTopGeometry","coilTop","sparks","sparkMaterial","LineBasicMaterial","sparkGeometry","spark","Line","animateSparks","TestTube","TestTubeRack","count","colors","rackGeometry","rackMaterial","rack","testTubeGeometry","testTube","xPosition","liquidGeometry","liquidColor","WineBottle","wineBottle","bottleMaterial","BurstShape","sides","innerRadius","outerRadius","step","halfStep","qtrStep","n","cx","cy","dx","dy","Burst","shape","geometry","material","GearShape","holeSides","holeRadius","hole","Path","holeStep","Gear","StarShape","Star","fadeShader","checkerboardTexture","data","stride","color","texture","DataTexture","RGBAFormat","UnsignedByteType","RepeatWrapping","NearestFilter"],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "three-low-poly",
3
- "version": "0.9.2",
3
+ "version": "0.9.4",
4
4
  "description": "Low poly assets for Three.js",
5
5
  "author": "Jason Sturges <jason@jsonsturges.com> (https://jasonsturges.com)",
6
- "homepage": "https://github.com/jasonsturges/three-low-poly",
6
+ "homepage": "https://jasonsturges.com/three-low-poly/",
7
7
  "repository": "github:jasonsturges/three-low-poly",
8
8
  "license": "ISC",
9
9
  "publishConfig": {