aggiunti gli alberi
This commit is contained in:
Binary file not shown.
@@ -39,7 +39,7 @@ document.getElementById('start').addEventListener('click', () => controls.lock()
|
|||||||
controls.addEventListener('lock', lock);
|
controls.addEventListener('lock', lock);
|
||||||
controls.addEventListener('unlock', unlock);
|
controls.addEventListener('unlock', unlock);
|
||||||
|
|
||||||
// 4. GESTIONE RIFIUTI (20 pezzi)
|
// 4. GESTIONE OGGETTI DI SCENA (20 rifiuti + 6 alberi)
|
||||||
const trashArray = [];
|
const trashArray = [];
|
||||||
let score = 0;
|
let score = 0;
|
||||||
const loader = new GLTFLoader();
|
const loader = new GLTFLoader();
|
||||||
@@ -51,14 +51,54 @@ loader.load('models/rifiuto.glb', (gltf) => {
|
|||||||
const clone = mesh.clone();
|
const clone = mesh.clone();
|
||||||
scene.add(clone);
|
scene.add(clone);
|
||||||
trashArray.push(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) {
|
function spawn(obj) {
|
||||||
const a = Math.random() * Math.PI * 2;
|
const a = Math.random() * Math.PI * 2;
|
||||||
const r = Math.random() * 18;
|
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
|
// 5. MOVIMENTO E COLLISIONI
|
||||||
|
|||||||
Reference in New Issue
Block a user