package linea;

import java.awt.Color;
import java.awt.Graphics;
import java.util.List;

public abstract class ObjetCollectible extends ObjetGraphique {


    protected double taille;
    protected boolean actif = false;
    protected int compteurFrames = 0;
    protected boolean dejaCapture = false;

    protected Ligne maLigne;
    protected List<Joueur> joueurs;
    protected Jeu monJeu;

    public ObjetCollectible(Ligne l, List<Joueur> joueurs, Jeu j) {
        this.maLigne = l;
        this.joueurs = joueurs;
        this.monJeu = j;
    }

    protected abstract int getSeuilActivation();
    protected abstract double calculerY(double hauteurLigne);

    protected abstract void appliquerEffet(Joueur joueur);

    protected abstract Color getCouleurCapture();

    protected abstract void dessiner(Graphics g);

    @Override
    void Afficher(Graphics g) {
        if (actif) {
            g.setColor(dejaCapture ? getCouleurCapture() : this.couleur);
            dessiner(g);
        }
    }

    @Override
    void Animer() {
        if (!actif) compteurFrames++;

        if (compteurFrames >= getSeuilActivation() && !actif) {
            actif = true;
            dejaCapture = false;
            x = 800;
            double hauteurLigne = 300;
            if (maLigne.dernierSegment != null)
                hauteurLigne = maLigne.dernierSegment.y;
            y = calculerY(hauteurLigne);
            if (y < 20) y = 20;
            if (y > 550) y = 550;
            compteurFrames = 0;
        }

        if (actif) {
            double vitesseLigne = monJeu.gestionnaireNiveau.getVitesseScroll();
            x -= vitesseLigne;
            if (!dejaCapture) {
                for (Joueur joueur : joueurs) {
                    if (joueur.verifierCollisionCollectible(x, y, taille, vitesseLigne)) {
                        appliquerEffet(joueur);
                        dejaCapture = true;
                        break;
                    }
                }
            }
            if (x + taille < 0) actif = false;
        }
    }

}
