diff --git a/models/tree.glb b/models/tree.glb new file mode 100644 index 0000000..37f361d Binary files /dev/null and b/models/tree.glb differ diff --git a/script.js b/script.js index 4c6a774..c6062d1 100755 --- a/script.js +++ b/script.js @@ -39,7 +39,7 @@ document.getElementById('start').addEventListener('click', () => controls.lock() controls.addEventListener('lock', lock); controls.addEventListener('unlock', unlock); -// 4. GESTIONE RIFIUTI (20 pezzi) +// 4. GESTIONE OGGETTI DI SCENA (20 rifiuti + 6 alberi) const trashArray = []; let score = 0; const loader = new GLTFLoader(); @@ -51,14 +51,54 @@ loader.load('models/rifiuto.glb', (gltf) => { const clone = mesh.clone(); scene.add(clone); trashArray.push(clone); - spawn(clone); + spawn(clone, 0.2); } }); +loader.load('models/tree.glb', (gltf) => { + const mesh = gltf.scene; + mesh.scale.set(4, 4, 4); + console.log(mesh); + + function spawn(obj, radius, minDistance) { + const points = []; + const attempts = 1000; // Numero massimo di tentativi per trovare un punto valido + for (let i = 0; i < attempts; i++) { + let angle = Math.random() * 2 * Math.PI; + let dist = Math.random() * radius; + let x = dist * Math.cos(angle); + let z = dist * Math.sin(angle); + let valid = true; + for (let j = 0; j < points.length; j++) { + const dx = x - points[j].x; + const dz = z - points[j].z; + const distance = Math.sqrt(dx * dx + dz * dz); + if (distance < minDistance) { + valid = false; + break; + } + } + if (valid) { + points.push({ x: x, z: z }); + } + } + + // Spawna gli alberi nei punti generati + for (let i = 0; i < points.length; i++) { + const clone = obj.clone(); + clone.position.set(points[i].x, -0.3, points[i].z); + clone.rotation.y = Math.random() * Math.PI * 2; // Rotazione tra 0 e 360 gradi + scene.add(clone); + } + } + spawn(mesh, 18, 8); // Raggio 18, distanza minima 5 +}); +console.log(scene) + function spawn(obj) { const a = Math.random() * Math.PI * 2; const r = Math.random() * 18; - obj.position.set(Math.cos(a) * r, 0.3, Math.sin(a) * r); + obj.position.set(Math.cos(a) * r, 0.1, Math.sin(a) * r); } // 5. MOVIMENTO E COLLISIONI