130 lines
3.4 KiB
Java
130 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; // 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))
|
||
|
|
);
|
||
|
|
}
|
||
|
|
}
|