Files
projet-dev/src/GestionnaireNiveau.java

130 lines
3.4 KiB
Java
Raw Normal View History

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 {
public static final int FRAMES_PAR_NIVEAU = 25 * 10; // 10s a 25 FPS (timer 40ms)
private final List<Niveau> niveaux = new ArrayList<>();
private int indexNiveau = 0;
private int framesDepuisDebut = 0;
private int framesDansNiveau = 0;
// Duree du fade en frames
private static final int DUREE_FADE = 75; // 3 secondes
public GestionnaireNiveau() {
// Niveau 1 : lisse, cercle large
niveaux.add(new Niveau(1,
new Color(0, 73, 220),
8, 1 / 80.0, 80, 100, 500));
// Niveau 2
niveaux.add(new Niveau(2,
new Color(75, 0, 180),
10, 1 / 60.0, 60, 100, 500));
// Niveau 3
niveaux.add(new Niveau(3,
new Color(83, 30, 39),
12, 1 / 40.0, 50, 100, 500));
// Niveau 4
niveaux.add(new Niveau(4,
new Color(20, 100, 40),
14, 1 / 30.0, 40, 100, 500));
// Niveau 5 : chaos, cercle petit
niveaux.add(new Niveau(5,
new Color(30, 30, 30),
16, 1 / 20.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))
);
}
}