package v2.Impl; import v2.Adaptor.Horloge; import v2.Adaptor.Impl.HorlogeImpl; import v2.Command.Command; import v2.Command.Toc; public class Moteur { private Horloge timer; private Command tocTemps, tocMesure; private boolean enMarche; private int mesure, t; private float tempo; public Moteur() { timer = new HorlogeImpl(); enMarche = false; mesure = 4; t = 0; } public void setTocTemps(Command tocTemps) { this.tocTemps = tocTemps; } public void setTocMesure(Command tocMesure) { this.tocMesure = tocMesure; } public void toc() { t++; calcMesure(); } /** * Appel TocTemps et calcul si le moteur doit appeler la Command TocMesure */ private void calcMesure() { tocTemps.execute(); if (t >= mesure) { tocMesure.execute(); t = 0; } } public boolean getEtatMarche() { return enMarche; } /** * D�marre ou arr�te le Moteur et calcul le delai en ms selon le tempo * * @param actif * : Etat du Moteur */ public void setEnMarche(boolean actif) { enMarche = actif; if (enMarche) { float delay = 1000 / (tempo / 60); timer.activerPeriodiquement(new Toc(this), delay); } else { timer.desactiver(); t = 0; } } /** * Incr�mente la mesure de 1 */ public void inc() { if (mesure < Constantes.MAX_MESURE) mesure++; } /** * D�cr�mente la mesure de 1 */ public void dec() { if (mesure > Constantes.MIN_MESURE) mesure--; } /** * Change le tempo actif du Moteur si celui-ci est en marche * * @param tempo * (float) : nouvelle valeur du tempo */ public void setTempo(float tempo) { this.tempo = tempo; if (enMarche) { timer.desactiver(); float delay = 1000 / (tempo / 60); timer.activerPeriodiquement(new Toc(this), delay); } } /** * Change la valeur de la mesure actif par la nouvelle * * @param mesure * (int) : nouvelle valeur de la mesure */ public float getTempo() { return tempo; } public void setMesure(int mesure) { if (mesure >= Constantes.MIN_MESURE && mesure <= Constantes.MAX_MESURE) this.mesure = mesure; } public int getMesure() { return mesure; } }