package ds.moteur.route.personnalise;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import ds.moteur.geometrie.Angle3D;
import ds.moteur.geometrie.Point;
import ds.moteur.route.Route;
import ds.moteur.route.cc.CourbeConduite;
import ds.moteur.route.cc.PointEntree;
import ds.moteur.route.cc.PointSortie;
@SuppressWarnings("serial")
public class RouteDroite extends Route implements Serializable{
public RouteDroite(){
super();
}
public RouteDroite(Point position, Angle3D angle, String nom) {
super(position, angle, nom);
}
private void creerFrontiere(double longueur, double ecartement){
Point p1 = new Point(-longueur/2, ecartement);
Point p2 = new Point(-longueur/2, -ecartement);
Point p3 = new Point(longueur/2, -ecartement);
Point p4 = new Point(longueur/2, ecartement);
List<Point> sommets = new ArrayList<Point>();
sommets.add(p1);
sommets.add(p2);
sommets.add(p3);
sommets.add(p4);
this.creerFrontiere(sommets);
}
public static Route createRoute(Point position, Angle3D angle, String nom, double longueur, double ecartement, int nbVoies, boolean sensUnique){
RouteDroite route;
if(sensUnique){
route = new RouteDroite(position, angle, nom);
for(int i=0; i<nbVoies; i++){
PointSortie ps = new PointSortie(longueur/2, i*ecartement - (nbVoies-1)*(ecartement/2));
PointEntree pe = new PointEntree(-longueur/2, i*ecartement - (nbVoies-1)*(ecartement/2));
CourbeConduite cc = new CourbeConduite(route, pe, ps);
cc.addSegment();
route.addCourbeConduite(cc);
route.addEntree(pe);
route.addSortie(ps);
}
route.creerFrontiere(longueur, ecartement*nbVoies/2);
} else {
route = new RouteDroite(position, angle, nom);
for(int i=0; i<nbVoies; i++){
PointSortie p1 = new PointSortie(-longueur/2, ecartement/2 + i*ecartement);
PointEntree p2 = new PointEntree(longueur/2, ecartement/2 + i*ecartement);
PointEntree p3 = new PointEntree(-longueur/2, -ecartement/2 - i*ecartement);
PointSortie p4 = new PointSortie(longueur/2, -ecartement/2 - i*ecartement);
CourbeConduite cc1 = new CourbeConduite(route, p2, p1);
cc1.addSegment();
CourbeConduite cc2 = new CourbeConduite(route, p3, p4);
cc2.addSegment();
route.addCourbeConduite(cc1);
route.addCourbeConduite(cc2);
route.addEntree(p2);
route.addEntree(p3);
route.addSortie(p1);
route.addSortie(p4);
}
route.creerFrontiere(longueur, ecartement*nbVoies);
}
return route;
}
}