Example #1
0
    void Projectile::advance(int phase)
    {
        if(!phase)
            return;

        if(depart.calculDistance(courante) > portee)
        {
            return ProjectileFactory::eraseProjectile(this);
        }

        courante.deplacer(cible.calculAngle(depart) * 57.3 + 180, getVitesse() * 1.0 / FREQ_RAF );

        setX(courante.getXAffi());
        setY(courante.getYAffi());

        std::vector<Ennemi*> listeEnnemis = EnnemiFactory::getListeEnnemis();
        for(unsigned int i(0);i<listeEnnemis.size();++i) // On parcourt le tableau.
        {
            if(typeEnnemi == TOUS || listeEnnemis[i]->getTypeDeplacement() == typeEnnemi)
            {
                Ennemi* ennemi = listeEnnemis[i];

                if(this->collidesWithItem(ennemi))
                {
                    ennemi->recevoirProjectile(this);
                    return;
                }

            }
        }
    }
Example #2
0
double Vehicule::simulation(int temps, int deltaT) {
    double result = 0.0;
    //std::cout << "Simulation " << temps << ". ";
    if (temps > 0 && (temps * deltaT) % 1440 == 0) {
        setNeedToReset(true);
    }
    
    if (getEtatMouvActuel() != EN_TRAIN_DE_ROULER && getNeedToReset()) {
        reinitJour(); // on réinitialise certaines données à 00h00 chaque jour
    }
    
    int mouv(getEtatMouvActuel());
    
    if (mouv == EN_TRAIN_DE_ROULER) {
        setSoc(std::max(0.0, getSoc() - 100.0 * (getVitesse() * deltaT/60.0) * (getConsommation() / getCapacite())));
        setDistanceParcourue(getDistanceParcourue() + std::min(getDistanceRestante(), getVitesse() * deltaT/60.0)); // usage de 'min' pour éviter d'avoir une distance parcourue supérieure à la distance à parcourir initialement
        setDistanceRestante(std::max(0.0, getDistanceRestante() - getVitesse() * deltaT/60.0)); // usage de 'max' pour éviter d'avoir une distance restante négative
    } else if (mouv == BRANCHE_EN_CHARGE && getSoc() < 100) {
        setSoc(std::min(100.0, getSoc() + 100.0 * (deltaT/60.0) * (getPuissanceCharge() / getCapacite()))); //puissanceCharge() fonction qui peut dépendre des paramètres qu'on veut, pour anticiper le smartgrid de ce coté là aussi. // usage de 'min' pour éviter d'avoir un SOC > 100
        result =getPuissanceCharge();
    }
    
    transition(temps, deltaT);
    
    int mouvSuiv(getEtatMouvSuivant());
    
    if (mouvSuiv == EN_TRAIN_DE_ROULER) {
        if (mouv != EN_TRAIN_DE_ROULER) {
            setPosition(getProchaineDestination());
            setDistanceRestante(getLongueurTrajet());
            incNbTrajetsEffectues();
        } else {
            setEtatMouvActuel(getEtatMouvSuivant());
        }
    }
    setEtatMouvActuel(getEtatMouvSuivant());
    
    return result; // renvoie la puissance demandé à l'instant t par le VE
}
Example #3
0
void taskMotor(void* cookie) {
	OUT_MOTOR* out=(OUT_MOTOR*)cookie;
	double coef=0;
	double lastcoef=1;
	int time=0;
	double val;

	getVitesse(out);//initialise les variables

	while (1) {
		if(!rt_task_wait_period(NULL)) {
			lastcoef=coef;	
			val=getVitesse(out);
			coef+=MOTOR_ASSERVISSEMENT*(out->vitesse- val);
			if(coef>1)coef=1;
			else if(coef<-1) coef=-1;
			if(1 || lastcoef>=0 && coef<0 || lastcoef<=0 && coef>0 || coef == 0 && lastcoef !=0){
				GPIO_CLR = (coef<=0) << out->pinIN1 | (coef>=0) << out->pinIN2;
				GPIO_SET = (coef>0) << out->pinIN1 | (coef<0) << out->pinIN2;
			}
			time = COEFF_TO_TIME(coef); 

			if(time > 0){
				GPIO_SET = 1 << out->pinPWM;
				if(time < PERIODE_MOTOR){
					rt_alarm_start(&(out->alarm), time, TM_INFINITE);
					if (!rt_alarm_wait(&(out->alarm))) {
						GPIO_CLR = 1 << out->pinPWM;
					}
				}
			}
			else {
				GPIO_CLR = 1 << out->pinPWM;
			}
		}
	}
}
Example #4
0
void Vehicule::computeSocMin(int deltaT) {
    if (socMin <= 0) {
        int nbTrajets(getNbTrajetsEffectues());
        int nbTrajetsMax = getNbTrajets();
        double longueurTrajet(getLongueurTrajet());
        double distanceAvantBorne(longueurTrajet);
        while(!getAccesBornes(getDestination(nbTrajets % nbTrajetsMax)) && nbTrajets <= nbTrajetsMax){
            nbTrajets++;
            distanceAvantBorne += longueurTrajet;
        }
        socMin = 100 * distanceAvantBorne * getConsommation() / getCapacite();
    } else {
        socMin = socMin - 100 * (deltaT/60.0) * getVitesse() * getConsommation() / getCapacite();
    }
}
Example #5
0
void Lapin::sauter()
{
    Position newPos, oldPos = getPosition() ;
    int nbDep = getVitesse() ;

    while (nbDep > 0)
    {
        // On génère une position adjacente
        newPos = seDeplacer() ;
        while (!getMonde()->positionLibre(newPos))
            newPos = seDeplacer() ;

        // On met à jour la position dans le monde
        setPosition(newPos) ;
        unsigned int indice = getMonde()->getMap().find(oldPos)->second ;
        getMonde()->getMap().erase(oldPos) ;
        getMonde()->getMap().insert(pair<Position, unsigned>(newPos, indice)) ;
    }
}