2026-03-16 16:09:19 +01:00
|
|
|
package linea;
|
|
|
|
|
|
|
|
|
|
import java.awt.Color;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
|
public class GestionnaireNiveau {
|
|
|
|
|
|
2026-03-16 16:17:30 +01:00
|
|
|
public static final int FRAMES_PAR_NIVEAU = 25 * 10; // 10 secondes
|
2026-03-16 16:09:19 +01:00
|
|
|
|
|
|
|
|
private final List<Niveau> niveaux = new ArrayList<>();
|
|
|
|
|
private int indexNiveau = 0;
|
|
|
|
|
private int framesDepuisDebut = 0;
|
|
|
|
|
private int framesDansNiveau = 0;
|
|
|
|
|
|
2026-03-16 16:17:30 +01:00
|
|
|
private static final int DUREE_FADE = 25 * 3; // 3 secondes
|
2026-03-16 16:09:19 +01:00
|
|
|
|
|
|
|
|
public GestionnaireNiveau() {
|
|
|
|
|
|
2026-03-16 16:17:30 +01:00
|
|
|
// Niveau 1
|
2026-03-16 16:09:19 +01:00
|
|
|
niveaux.add(new Niveau(1,
|
2026-03-16 16:17:30 +01:00
|
|
|
new Color(112, 158, 251),
|
2026-03-16 16:09:19 +01:00
|
|
|
8, 1 / 80.0, 80, 100, 500));
|
|
|
|
|
|
|
|
|
|
// Niveau 2
|
|
|
|
|
niveaux.add(new Niveau(2,
|
2026-03-16 16:17:30 +01:00
|
|
|
new Color(187, 138, 255),
|
2026-03-16 16:09:19 +01:00
|
|
|
10, 1 / 60.0, 60, 100, 500));
|
|
|
|
|
|
|
|
|
|
// Niveau 3
|
|
|
|
|
niveaux.add(new Niveau(3,
|
2026-03-16 16:17:30 +01:00
|
|
|
new Color(255, 106, 132),
|
2026-03-16 16:09:19 +01:00
|
|
|
12, 1 / 40.0, 50, 100, 500));
|
|
|
|
|
|
|
|
|
|
// Niveau 4
|
|
|
|
|
niveaux.add(new Niveau(4,
|
2026-03-16 16:17:30 +01:00
|
|
|
new Color(191, 255, 207),
|
|
|
|
|
14, 1 / 35.0, 40, 100, 500));
|
2026-03-16 16:09:19 +01:00
|
|
|
|
2026-03-16 16:17:30 +01:00
|
|
|
// Niveau 5
|
2026-03-16 16:09:19 +01:00
|
|
|
niveaux.add(new Niveau(5,
|
|
|
|
|
new Color(30, 30, 30),
|
2026-03-16 16:17:30 +01:00
|
|
|
15, 1 / 30.0, 30, 100, 500));
|
2026-03-16 16:09:19 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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))
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|