package linea; import java.awt.Color; import java.util.ArrayList; import java.util.List; public class GestionnaireNiveau { public static final int FRAMES_PAR_NIVEAU = 25 * 10; // 10 secondes private final List niveaux = new ArrayList<>(); private int indexNiveau = 0; private int framesDepuisDebut = 0; private int framesDansNiveau = 0; private static final int DUREE_FADE = 25 * 3; // 3 secondes public GestionnaireNiveau() { // Niveau 1 niveaux.add(new Niveau(1, new Color(112, 158, 251), 8, 1 / 80.0, 80, 100, 500)); // Niveau 2 niveaux.add(new Niveau(2, new Color(187, 138, 255), 10, 1 / 60.0, 60, 100, 500)); // Niveau 3 niveaux.add(new Niveau(3, new Color(255, 106, 132), 12, 1 / 40.0, 50, 100, 500)); // Niveau 4 niveaux.add(new Niveau(4, new Color(191, 255, 207), 14, 1 / 35.0, 40, 100, 500)); // Niveau 5 niveaux.add(new Niveau(5, new Color(30, 30, 30), 15, 1 / 30.0, 30, 100, 500)); } public void mettreAJour() { framesDepuisDebut++; framesDansNiveau++; if (framesDansNiveau >= FRAMES_PAR_NIVEAU && indexNiveau < niveaux.size() - 1) { indexNiveau++; framesDansNiveau = 0; } } public Niveau getNiveauActuel() { return niveaux.get(indexNiveau); } public int getNumeroNiveau() { return niveaux.get(indexNiveau).numero; } public Color getCouleurFondInterpolee() { if (framesDansNiveau < DUREE_FADE && indexNiveau > 0) { Color de = niveaux.get(indexNiveau - 1).couleurFond; Color vers = niveaux.get(indexNiveau).couleurFond; double t = (double) framesDansNiveau / DUREE_FADE; return interpolerCouleur(de, vers, t); } return niveaux.get(indexNiveau).couleurFond; } public double getVitesseScroll() { if (framesDansNiveau < DUREE_FADE && indexNiveau > 0) { double de = niveaux.get(indexNiveau - 1).vitesseScroll; double vers = niveaux.get(indexNiveau).vitesseScroll; double t = (double) framesDansNiveau / DUREE_FADE; return de + (vers - de) * t; } return niveaux.get(indexNiveau).vitesseScroll; } public double getNoiseFrequence() { if (framesDansNiveau < DUREE_FADE && indexNiveau > 0) { double de = niveaux.get(indexNiveau - 1).noiseFrequence; double vers = niveaux.get(indexNiveau).noiseFrequence; double t = (double) framesDansNiveau / DUREE_FADE; return de + (vers - de) * t; } return niveaux.get(indexNiveau).noiseFrequence; } public double getRayonCercle() { if (framesDansNiveau < DUREE_FADE && indexNiveau > 0) { double de = niveaux.get(indexNiveau - 1).rayonCercle; double vers = niveaux.get(indexNiveau).rayonCercle; double t = (double) framesDansNiveau / DUREE_FADE; return de + (vers - de) * t; } return niveaux.get(indexNiveau).rayonCercle; } public double getLimiteHaut() { return niveaux.get(indexNiveau).limiteHaut; } public double getLimiteBas() { return niveaux.get(indexNiveau).limiteBas; } public void reinitialiser() { indexNiveau = 0; framesDepuisDebut = 0; framesDansNiveau = 0; } private static Color interpolerCouleur(Color de, Color vers, double t) { int r = (int) (de.getRed() + (vers.getRed() - de.getRed()) * t); int g = (int) (de.getGreen() + (vers.getGreen() - de.getGreen()) * t); int b = (int) (de.getBlue() + (vers.getBlue() - de.getBlue()) * t); return new Color( Math.max(0, Math.min(255, r)), Math.max(0, Math.min(255, g)), Math.max(0, Math.min(255, b)) ); } }