Package ds.moteur.voiture

Source Code of ds.moteur.voiture.Voiture

package ds.moteur.voiture;

import java.util.ArrayList;
import java.util.List;

import ds.moteur.geometrie.Angle3D;
import ds.moteur.geometrie.Point;
import ds.moteur.geometrie.Position;
import ds.moteur.route.cc.CourbeConduite;
import ds.moteur.route.cc.PointEntree;
import ds.moteur.route.cc.PointSortie;

public class Voiture {

  protected String nom;
  protected Position position;
  protected CourbeConduite courbeSuivante;
 
  protected Point positionAvant;
  protected Angle3D angle;
  protected double cap;
 
  protected double longueur;
  protected double largeur;
 
  protected Mecanique mecanique;
 
  protected List<Point> carrosserie;
 
  public Voiture(String nom, double longueur, double largeur){
    this.nom = nom;
    this.longueur = longueur;
    this.largeur = largeur;
    this.positionAvant = new Point();
    this.angle = new Angle3D();
    this.mecanique = new Mecanique();
    this.carrosserie = new ArrayList<Point>();
  }

  public String getNom() {
    return nom;
  }
 
  public void init(PointEntree entree){
    this.position = new Position(entree);
    this.position.getCourbeCourante().getAbonnes().add(this);
    this.choisirUneCourbe(position.getCourbeCourante().getSortie());
    position.recupererPosition(positionAvant, angle);
   
    this.carrosserie.add(new Point(-longueur/2, largeur/2));
    this.carrosserie.add(new Point(longueur/2, largeur/2));
    this.carrosserie.add(new Point(longueur/2, -largeur/2));
    this.carrosserie.add(new Point(-longueur/2, -largeur/2));
    for (Point p : carrosserie){
      p.transformer(positionAvant, angle.theta);
    }
  }
 
  public void incrementer(long ms){
    this.position.addAbscisse((mecanique.vitesse*ms)/1000);
   
    boolean surCourbe = position.recupererPosition(positionAvant, angle);
    if (!surCourbe){
      position.retrancherAbscisseCourbe();
      position.getCourbeCourante().getAbonnes().remove(this);
      position.setCourbeCourante(courbeSuivante);
      position.recupererPosition(positionAvant, angle);
      choisirUneCourbe(position.getCourbeCourante().getSortie());
    }
    this.replacerCarrosserie();
  }
 
  protected void replacerCarrosserie(){
    this.carrosserie.get(0).setXYZ(-longueur/2, largeur/2, 0);
    this.carrosserie.get(1).setXYZ(longueur/2, largeur/2, 0);
    this.carrosserie.get(2).setXYZ(longueur/2, -largeur/2, 0);
    this.carrosserie.get(3).setXYZ(-longueur/2, -largeur/2, 0);
    for (Point p : carrosserie){
      p.transformer(positionAvant, angle.theta);
    }
  }
 
  private void choisirUneCourbe(PointSortie ps){
    PointEntree pe = ps.getLien();
    if (pe != null){
      List<CourbeConduite> courbesPossibles = pe.getCourbes();
      double rand = Math.random();
      if ((rand<0.5)||(courbesPossibles.size()<2)){
        courbeSuivante = courbesPossibles.get(0);
      } else {
        courbeSuivante = courbesPossibles.get(1);
      }
    }
  }

  public Point getPositionAvant() {
    return positionAvant;
  }
 
  public Angle3D getAngle() {
    return angle;
  }
 
  public List<Point> getCarrosserie(){
    return this.carrosserie;
  }
 
  public double getDistance(Voiture vCible){
    double distance = 1000;
   
    if (this.position.getCourbeCourante() == vCible.position.getCourbeCourante()){
      if (this.position.getAbscisseCourbe()<vCible.position.getAbscisseCourbe()){
        distance = vCible.position.getAbscisseCourbe() - this.position.getAbscisseCourbe();
      }
    } else if (this.courbeSuivante == vCible.position.getCourbeCourante()){
      distance = this.position.getCourbeCourante().getLongueur() - this.position.getAbscisseCourbe() + vCible.position.getAbscisseCourbe();
    }
   
    //On soustrait les longueurs centre - pare-chocs.
    distance -= (this.longueur + vCible.longueur)/2;
   
    return distance;
  }
 
  public double getLongueur(){
    return longueur;
  }
 
  public Mecanique getMecanique(){
    return mecanique;
  }
}
TOP

Related Classes of ds.moteur.voiture.Voiture

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.