From af32d40452c34f0291697ff14bd48e912370e322 Mon Sep 17 00:00:00 2001 From: SimonezYT Date: Fri, 3 Apr 2026 18:40:10 +0200 Subject: [PATCH] integrazione fase1 completa e schermata principale --- assets/media/img/titolo.png | Bin 0 -> 45510 bytes assets/models/tree.glb | Bin 0 -> 46404 bytes css/fase1.css | 84 ++++++++--- index.php | 2 +- js/fase1.js | 294 ++++++++++++++++++++++++++++++++---- materiale/STRUTTURA.md | 3 + pages/fase1.html | 34 ++++- 7 files changed, 359 insertions(+), 58 deletions(-) create mode 100755 assets/media/img/titolo.png create mode 100644 assets/models/tree.glb diff --git a/assets/media/img/titolo.png b/assets/media/img/titolo.png new file mode 100755 index 0000000000000000000000000000000000000000..ff979ea204c6e32eac1a7efb575cb2fc3546cfaa GIT binary patch literal 45510 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 literal 0 HcmV?d00001 diff --git a/css/fase1.css b/css/fase1.css index 709990e..5509be5 100755 --- a/css/fase1.css +++ b/css/fase1.css @@ -65,7 +65,7 @@ body { /* Queste 4 righe garantiscono la centratura totale */ display: flex; flex-direction: column; - justify-content: center; + justify-content: center; align-items: center; z-index: 100; /* Assicurati che sia sopra al renderer di Three.js */ } @@ -110,10 +110,11 @@ body { } .main-title { - max-width: 80%; + width: 25%; height: auto; } + /* Divisione 50% Sotto */ .bottom-section { flex: 1; @@ -132,37 +133,72 @@ body { text-align: center; } -/* Styling dei Controlli (KBD) */ +/* Styling dei Controlli */ .controls-box { width: 100%; display: flex; flex-direction: column; align-items: center; -} -.controls-box h3 { - margin-bottom: 10px; - font-size: 1.2rem; - text-transform: uppercase; -} -.controls-box h3, .controls-box p, .pulse-text { - margin-top: 0; + justify-content: center; + height: 100%; + color: white; + text-shadow: 2px 2px 4px rgba(0,0,0,0.8); + font-family: 'Press Start 2P', cursive; } -kbd { - background-color: #eee; - border-radius: 3px; - border: 1px solid #b4b4b4; - box-shadow: 0 1px 1px rgba(0,0,0,0.2), 0 2px 0 0 rgba(255,255,255,0.7) inset; - color: #333; - display: inline-block; - font-size: 0.85em; - font-weight: 700; - line-height: 1; - padding: 2px 4px; - white-space: nowrap; - margin: 0 2px; +.controls-box h3 { + margin-bottom: 10px; + font-size: 1.4rem; + text-transform: uppercase; + text-align: center; } +.controls-box p { + margin: 6px 0; + font-size: 1.1rem; + text-align: center; +} + +/* Stile dei tasti */ +.controls-box kbd { + background-color: #5e5d5d; + color: #fff; + padding: 4px 8px; + border-radius: 4px; + font-family: monospace; + font-weight: bold; + margin: 6px 0; +} + +/* Box delle istruzioni */ +.instructions-box { + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100%; + color: white; + text-shadow: 2px 2px 4px rgba(0,0,0,0.8); + font-family: 'Press Start 2P', cursive; +} + +.instructions-box h3 { + margin-bottom: 10px; + font-size: 1.4rem; + text-transform: uppercase; + text-align: center; +} + +.instructions-box p { + margin: 6px 0; + font-size: 1.1rem; + text-align: center; +} + + + + /* Animazione per "Clicca per giocare" */ .pulse-text { font-size: 1.5rem; diff --git a/index.php b/index.php index 21ed62c..2b68b9f 100644 --- a/index.php +++ b/index.php @@ -12,5 +12,5 @@ http_response_code(404); $p = 'error'; } - include $__DIR__ . '/pages/' . $route[$p]; + include __DIR__ . '/pages/' . $route[$p]; ?> \ No newline at end of file diff --git a/js/fase1.js b/js/fase1.js index 139fdd3..dec36f0 100755 --- a/js/fase1.js +++ b/js/fase1.js @@ -2,9 +2,33 @@ import * as THREE from 'three'; import { PointerLockControls } from 'three/addons/controls/PointerLockControls.js'; import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'; -// 1. SCENA E CAMERA +// 1a. INIZIALIZZAZIONE CARICAMENTO ASSETS +const manager = new THREE.LoadingManager(); +manager.onStart = function (url, itemsLoaded, itemsTotal) { + document.getElementById("loading-text").innerHTML = `Inizio caricamento: ${url}`; + console.log(`Inizio caricamento: ${url}`); +}; +manager.onLoad = function () { + document.getElementById('loading-screen').style.display = 'none'; + animate(); // avvia il rendering +}; +manager.onProgress = function (url, itemsLoaded, itemsTotal) { + // Calcola la percentuale + const percent = (itemsLoaded / itemsTotal) * 100; + document.getElementById('loading-bar').style.width = percent + '%'; + + // Aggiorna il testo + document.getElementById("loading-text").innerHTML = `Caricamento: ${itemsLoaded} di ${itemsTotal} - ${url}`; + console.log(`Caricamento: ${itemsLoaded} di ${itemsTotal} - ${url}`); +}; +manager.onError = function (url) { + document.getElementById("loading-text").innerHTML = `Errore nel caricamento: ${url}`; + console.log(`Errore nel caricamento: ${url}`); +}; + +// 1b. SCENA E CAMERA const scene = new THREE.Scene(); -scene.background = new THREE.Color(0x87ceeb); +scene.background = new THREE.Color(0x33ccff); // Cielo più azzurro const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); const renderer = new THREE.WebGLRenderer(); renderer.setSize(window.innerWidth, window.innerHeight); @@ -12,14 +36,115 @@ document.body.appendChild(renderer.domElement); window.addEventListener('resize', function () { renderer.setSize(window.innerWidth, window.innerHeight) }) +// AGGIUNTA MARE +const oceanGeometry = new THREE.PlaneGeometry(2000, 2000); +const oceanMaterial = new THREE.MeshStandardMaterial({ + color: 0x0077be, + transparent: true, + opacity: 0.8 +}); +const ocean = new THREE.Mesh(oceanGeometry, oceanMaterial); +ocean.rotation.x = -Math.PI / 2; +ocean.position.y = -0.2; // Leggermente sotto l'isola +scene.add(ocean); // 2. LUCI E AMBIENTE -scene.add(new THREE.AmbientLight(0xffffff, 1)); -const island = new THREE.Mesh(new THREE.CircleGeometry(20, 32), new THREE.MeshStandardMaterial({ color: 0x4df556 })); // #4df555 -island.rotation.x = -Math.PI / 2; -scene.add(island); +scene.add(new THREE.AmbientLight(0xffffff, 0.8)); +const sunLight = new THREE.DirectionalLight(0xffffff, 1); +sunLight.position.set(10, 20, 10); +scene.add(sunLight); + +const islandGroup = new THREE.Group(); + +const altezzaIsola = 0.5; // Quanto sta il prato sopra il livello del mare (0.0) +const altezzaOcchi = 1.6; // L'altezza standard della telecamera + +// --- IL FONDALE (Sabbia scura sul fondo) --- +const floorGeo = new THREE.PlaneGeometry(1000, 1000); +const floorMat = new THREE.MeshStandardMaterial({ color: 0x1a1a1a }); // Grigio scuro/Fondale +const floor = new THREE.Mesh(floorGeo, floorMat); +floor.rotation.x = -Math.PI / 2; +floor.position.y = -3; // 5 metri sotto il livello del mare +scene.add(floor); + +// --- IL PRATO --- +const raggioPrato = 19; +const grassGeo = new THREE.CircleGeometry(raggioPrato, 64); +const grassMat = new THREE.MeshStandardMaterial({ color: 0x4df556 }); +const grass = new THREE.Mesh(grassGeo, grassMat); +grass.rotation.x = -Math.PI / 2; + +// Posizioniamo il prato all'altezza desiderata +grass.position.y = altezzaIsola; +islandGroup.add(grass); + +// --- LA SABBIA (Cilindro Svasato) --- +const altezzaSabbia = 1.5; // Altezza totale del blocco sabbia +const sandGeo = new THREE.CylinderGeometry(raggioPrato, 22 + 10, altezzaSabbia + 3, 64, 1, true); +const sandMat = new THREE.MeshStandardMaterial({ color: 0xedc9af, side: THREE.DoubleSide }); +const sand = new THREE.Mesh(sandGeo, sandMat); + +// Per far combaciare la cima del cilindro con il prato: +// L'altezza è 1.5, il centro del cilindro deve stare a (AltezzaIsola - metà altezza cilindro) +sand.position.y = altezzaIsola - (altezzaSabbia / 2) - 1.5; +islandGroup.add(sand); + +scene.add(islandGroup); +scene.fog = new THREE.Fog(0x33ccff, 20, 100); // 3. CONTROLLI +window.totalTime; +class PausableTimer { + constructor(callback, delay) { + this.callback = callback; + this.delay = delay; // salvi il delay originale + this.remaining = delay; + this.timerId = null; + this.start = null; + this.loop = null; + this.cont = 0; + window.totalTime = delay / 1000; + } + pause() { + if (this.timerId) { + clearTimeout(this.timerId); + this.timerId = null; + // Calcola il tempo passato + this.remaining -= Date.now() - this.start; + } + if (this.loop) { + clearInterval(this.loop); + this.loop = null; + } + console.log("pausa"); + } + resume() { + console.log("resume"); + if (this.timerId) return; // già in esecuzione + if (this.remaining > 0) { + this.start = Date.now(); + this.timerId = setTimeout(() => { + this.pause(); + this.callback(); + }, this.remaining); + + // Se il ciclo di aggiornamento non è già attivo, avvialo + if (!this.loop) { + this.loop = setInterval(() => { + this.cont++; + // Aggiorna il timer visualizzato + document.getElementById("minuti").innerHTML = String(Math.floor((window.totalTime - this.cont) / 60)).padStart(2, '0'); + document.getElementById("secondi").innerHTML = String((window.totalTime - this.cont) % 60).padStart(2, '0'); + console.log(`${document.getElementById("minuti").innerHTML}:${document.getElementById("secondi").innerHTML}`); + }, 1000); + } + } + } +} +const timer = new PausableTimer(() => { + localStorage.setItem("punteggioFase1", document.getElementById("score").innerHTML.trim()); + window.location = "?pagina=mid"; +}, 60000) function lock() { document.getElementById('start').style.display = 'none'; document.getElementById('punti').style.display = 'block'; @@ -27,22 +152,27 @@ function lock() { document.getElementById('crosshair').style.display = 'block'; } function unlock() { - const startDiv = document.getElementById('start'); - startDiv.style.display = 'flex'; // Forza il layout Flexbox - // Nascondi l'HUD + timer.pause(); + document.getElementById('start').style.display = 'flex'; document.getElementById('punti').style.display = 'none'; document.getElementById('tempo').style.display = 'none'; document.getElementById('crosshair').style.display = 'none'; } const controls = new PointerLockControls(camera, document.body); -document.getElementById('start').addEventListener('click', () => controls.lock()); -controls.addEventListener('lock', lock); -controls.addEventListener('unlock', unlock); +document.getElementById('start').addEventListener('click', () => { + controls.lock(); + lock(); +}); +controls.addEventListener('lock', () => { + lock(); + timer.resume(); +}); +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(); +const loader = new GLTFLoader(manager); loader.load('assets/models/rifiuto.glb', (gltf) => { const mesh = gltf.scene.getObjectByName("Trash_Pile_03_GEO"); @@ -51,41 +181,151 @@ loader.load('assets/models/rifiuto.glb', (gltf) => { const clone = mesh.clone(); scene.add(clone); trashArray.push(clone); - spawn(clone); + spawn(clone, 0.2); } }); +loader.load('assets/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(); + const a = Math.random() * Math.PI * 2; + const r = Math.random() * 18; + const x = Math.cos(a) * r; + const z = Math.sin(a) * r; + // Y deve essere altezzaIsola + un piccolo offset + clone.position.set(points[i].x, altezzaIsola - 0.1, 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); + const x = Math.cos(a) * r; + const z = Math.sin(a) * r; + // Y deve essere altezzaIsola + un piccolo offset + obj.position.set(x, altezzaIsola + 0.1, z); } // 5. MOVIMENTO E COLLISIONI +const arrow = false; const keys = {}; document.onkeydown = (e) => keys[e.code] = true; document.onkeyup = (e) => keys[e.code] = false; +// Setup Raycaster (fuori dal loop animate) +const raycaster = new THREE.Raycaster(); +const downVector = new THREE.Vector3(0, -1, 0); + +// --- CONFIGURAZIONE MOVIMENTO --- +let canLeaveIsland = false; // Se false, l'acqua blocca il movimento. +let lastSafePosition = camera.position.clone(); + function animate() { requestAnimationFrame(animate); - if (controls.isLocked) { - if (keys['KeyW']) controls.moveForward(0.15); - if (keys['KeyS']) controls.moveForward(-0.15); - if (keys['KeyA']) controls.moveRight(-0.15); - if (keys['KeyD']) controls.moveRight(0.15); - camera.position.y = 1.6; - // Controllo collisioni - const pPos = camera.position.clone(); - pPos.y -= 1.0; + if (controls.isLocked) { + // 1. Salva la posizione attuale prima del movimento + const oldPos = camera.position.clone(); + + // 2. Esegui il movimento WASD + if (arrow) { + if (keys['ArrowUp']) controls.moveForward(0.15); + if (keys['ArrowDown']) controls.moveForward(-0.15); + if (keys['ArrowLeft']) controls.moveRight(-0.15); + if (keys['ArrowRight']) controls.moveRight(0.15); + } else { + if (keys['KeyW']) controls.moveForward(0.15); + if (keys['KeyS']) controls.moveForward(-0.15); + if (keys['KeyA']) controls.moveRight(-0.15); + if (keys['KeyD']) controls.moveRight(0.15); + } + + // 3. --- GESTIONE ALTEZZA DINAMICA --- + const rayOrigin = camera.position.clone(); + rayOrigin.y = 10; // Spara dall'alto verso il basso + raycaster.set(rayOrigin, downVector); + + // Controlliamo Prato e Sabbia + const intersects = raycaster.intersectObjects([grass, sand]); + + if (intersects.length > 0) { + // Logica del "Punto più alto": + // Se il raggio colpisce sia prato che sabbia, prendiamo il prato. + let highestPoint = -Infinity; + for (let i = 0; i < intersects.length; i++) { + if (intersects[i].point.y > highestPoint) { + highestPoint = intersects[i].point.y; + } + } + + // Applichiamo l'altezza alla camera + camera.position.y = highestPoint + altezzaOcchi; + + // --- CONTROLLO BARRIERA ACQUA --- + // Se il punto più alto è sotto il livello del mare (0) + // e non possiamo uscire, blocchiamo il movimento + if (!canLeaveIsland && highestPoint < 0) { + camera.position.x = oldPos.x; + camera.position.z = oldPos.z; + camera.position.y = oldPos.y; + } else { + // Posizione valida, la salviamo + lastSafePosition.copy(camera.position); + camera.position.y = camera.position.y > (-2.25 + altezzaOcchi) ? camera.position.y : (-2.25 + altezzaOcchi); + } + } else { + // --- FUORI DALL'ISOLA (VUOTO) --- + if (!canLeaveIsland) { + camera.position.copy(oldPos); + } else { + camera.position.y = -2.25 + altezzaOcchi; // Volo sull'acqua + } + } + + // --- COLLISIONI RIFIUTI --- trashArray.forEach(t => { - if (new THREE.Box3().setFromObject(t).expandByScalar(0.3).containsPoint(pPos)) { + if (camera.position.distanceTo(t.position) < 1.8) { score++; document.getElementById('score').innerText = score; spawn(t); } }); } + renderer.render(scene, camera); } -animate(); \ No newline at end of file +document.getElementById("minuti").innerHTML = String(Math.floor(window.totalTime / 60)).padStart(2, '0'); +document.getElementById("secondi").innerHTML = String(window.totalTime % 60).padStart(2, '0'); \ No newline at end of file diff --git a/materiale/STRUTTURA.md b/materiale/STRUTTURA.md index c7b11fc..e7aec94 100644 --- a/materiale/STRUTTURA.md +++ b/materiale/STRUTTURA.md @@ -75,6 +75,9 @@ Workflow del gioco: ``` Inizio -> 60s per raccogliere i rifiuti -> Salvataggio del punteggio in localStorage -> Schermata intermedia -> *5s per separare i rifiuti -> Invio dati della partita al database (nome squadra, rifiuti raccolti nella fase 1, rifiuti separati correttamente nella fase 2, punteggio finale, data della partita) -> caricamento schermata finale con classifica ridotta (posizione, squadra, punteggio) e pulsanti per giocare ancora, impostazioni e la classifica completa (classifica.php) con tutti i dati e tutte le partite giocate (classifica ridotta: solo le prime 5/10 partite) ``` +``` +start -> mid -> sep -> end +``` Indirizzamento pagine in index.php ``` diff --git a/pages/fase1.html b/pages/fase1.html index 8121ba2..92ee42a 100755 --- a/pages/fase1.html +++ b/pages/fase1.html @@ -6,32 +6,54 @@ + +
+
+
+
+
Loading...
+
+ +
- titolo + titolo

Controlli

-

WASD Movimento

-

Mouse Camera

+

Movimento

+

Freccia su / W Avanti

+

Freccia giù / S Indietro

+

Freccia destra / D Destra

+

Freccia sinistra / A Sinistra

+

Mouse Punto di vista

Clicca per giocare
-
+
+
+

Istruzioni

+

Obiettivo: raccogliere tutti i rifiuti sull’isola

+

Attenzione allo scadere del tempo!

+

Usa i comandi per esplorare e ripulire

+
+
+ +
Rifiuti: 0
-
Tempo: XX:XX
+
Tempo: XX:XX
+