Files
projet-dev/src/GestionnaireNiveau.java
MOISOIU Stefan-Mihai 5a58534a40 fix niveaux
2026-03-16 16:17:30 +01:00

129 lines
3.4 KiB
Java

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<Niveau> 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))
);
}
}