- ambient è la classe che costruisce lo stato iniziale della simulazione prima che qualsiasi motore entri in runtime. Riceve la geometria della scena, speed e gravity come condizioni fondative, deriva il rapporto tra larghezza e altezza, imposta il campo globale e calcola l’energia iniziale disponibile nel mondo.
- La popolazione non viene generata come insieme casuale di particelle già vive, ma come insieme di seed ammessi nello spazio: ogni seed contiene posizione, raggio, intensità locale del campo e velocità iniziali già predisposte per più comportamenti. Prima del runtime, quindi, la particella esiste come oggetto fondativo leggibile da motori diversi.
- ambient controlla anche la composizione iniziale del mondo: distribuisce raggi small, medium e large, evita overlap tra seed, applica vincoli geometrici di spawn e protegge la generazione da casi limite come dimensioni non valide o intervalli troppo stretti.
- La classe non conosce il canvas, non disegna, non sceglie collision o gravity e non istanzia i motori. Il suo compito è preparare un mondo unico, abbastanza ricco da poter essere interpretato sia come caduta nel campo sia come sistema di urti.
- Dopo la fondazione, simulator conserva quello stato iniziale, seleziona i dati utili al motore attivo e decide se riutilizzarlo o rifondarlo. Per questo lo switch tra mondi può restare continuo: cambia la lettura del mondo, non necessariamente il mondo di partenza.
ambient approfondimento
Le classi dietro la simulazione.
AMBIENT diventa leggibile attraverso tre responsabilità: fondare lo stato iniziale, interpretare il campo gravitazionale e governare urti, materiali e dissipazione.
- gravity è il motore runtime delle particelle in modalità gravità. Riceve da ambient seed già fondati: posizione, raggio, velocità iniziale e intensità locale del campo. Non rigenera il mondo, non decide la distribuzione e non richiama ambient durante il frame.
- La caduta non usa una forza piatta. Ogni particella conserva una base locale del campo e, durante il movimento, ricalcola l’intensità alla propria quota: in alto il campo è più rarefatto, verso il fondo diventa più denso.
- A ogni frame gravity aggiorna prima la fisica e poi il disegno. Integra posizione, velocità, accelerazione gravitazionale locale, rimbalzi contro i bordi, attrito e correzioni di contatto con il fondo.
- Quando una particella arriva vicino al fondo e la velocità verticale scende sotto soglia, il motore la stabilizza: corregge la posizione, azzera la caduta, smorza la deriva orizzontale e riduce l’opacità per evitare vibrazioni invisibili ma costose.
- simulator resta il regista esterno: conserva i seed, istanzia Gravity, passa campo e gravità, aggiorna live il colore e rifonda lo stato iniziale solo quando cambiano speed o gravity. Gravity evolve il mondo localmente, senza conoscere store, pannelli o switch con collision.
- collision è il motore runtime delle particelle in modalità collisione. Riceve da ambient lo stesso stato iniziale già fondato — posizione, raggio e velocità iniziale — ma lo interpreta come sistema di contatti, urti e vincoli geometrici della scena.
- Ogni particella conserva posizione, velocità, raggio, colore, densità, massa, coefficienti materiali, spin ed energia diagnostica. La massa non è arbitraria: viene derivata dal raggio e dalla densità del materiale, così il comportamento dell’urto cambia in base alla materia scelta.
- La collisione tra particelle viene risolta quando due particelle entrano in contatto e il loro moto converge verso l’urto. Il motore ruota le velocità nel frame locale dell’urto, separa normale e tangente, risolve la collisione lungo la normale e poi ricostruisce il movimento nel mondo.
- Il risultato non è un urto elastico puro. collision applica restituzione, attrito dinamico, dissipazione da deformazione obliqua e spin: una parte dell’energia resta nel movimento, una parte viene assorbita e una parte diventa rotazione percettiva.
- Prima dell’urto il motore controlla il regime di velocità: preserva la direzione, ma impedisce sia lo spegnimento totale sia esplosioni sopra soglia. Questa scelta mantiene la scena viva e leggibile senza trasformarla in un sistema frenetico o casuale.
- Il materiale agisce live sulla risposta fisica. simulator risolve il preset scelto e collision aggiorna densità, massa, restituzione, attrito, dissipazione e spin damping senza rigenerare seed o particelle: la scena resta continua, ma gli urti successivi cambiano firma.
- Il materiale rigid conserva più energia e rende gli urti più secchi e reattivi; medium bilancia dinamica e controllo; soft assorbe di più, smorza lo spin e porta prima il sistema verso un regime più calmo.
- Il motore tende a uno stato stazionario percepito: dissipa energia, rallenta, poi nuovi contatti riaprono movimento. Non conserva energia all’infinito, ma non collassa in immobilità totale; cerca un equilibrio visivo vivo, respirato e controllabile.
- collision gestisce anche i bordi del canvas e gli ostacoli UI, correggendo posizione e rimbalzo per evitare incastri. Non legge lo store, non sceglie il materiale e non rifonda il mondo: evolve localmente ciò che ambient ha preparato e simulator gli consegna.