commit cee7e3a79d735a46ced6eb3893091b2b0dde5a18
parent 8239cd8fbed2b1094caba10aefa4f37ec2613bcd
Author: Georges Dupéron <jahvascriptmaniac+github@free.fr>
Date: Tue, 10 Jan 2012 11:42:20 +0100
Création des routes dans les bâtiments au lieu des quartiers (il manque quelques modifs encore).
Diffstat:
14 files changed, 33 insertions(+), 153 deletions(-)
diff --git a/rules/batiment/batimentquad.cpp b/rules/batiment/batimentquad.cpp
@@ -1,8 +1,7 @@
#include "all_includes.hh"
-BatimentQuad::BatimentQuad(Quad _c, Cardinal _entry) : Chose(), c(_c), entry(_entry) {
+BatimentQuad::BatimentQuad(Quad _c) : Chose(), c(_c) {
addEntropy(c);
- addEntropy(entry);
}
void BatimentQuad::getBoundingBoxPoints() {
@@ -12,23 +11,21 @@ void BatimentQuad::getBoundingBoxPoints() {
bool BatimentQuad::split() {
if(proba(seed, 0, 1, 10)) {
- Quad q = Quad(c[NE],c[SE],c[SW],c[NW]);
- // TODO ajouter une classe surface.
- //addQuad(c[SE],c[SW],c[NW],c[NE],0xDD,0xDD,0xDD);
- addChild(new BatimentQuadMaisonPont(q,800));
+ addChild(new BatimentQuadMaisonPont(c,800));
} else {
float th = 20; // Terrain height.
- Quad q = Quad(c[NE],c[SE],c[SW],c[NW]).insetNESW(140);
+ Quad qtrottoir = c.insetNESW(250);
+ Quad qmaison = qtrottoir.insetNESW(140);
- addChild(new TrottoirQuadNormal(Quad(c[NE],c[SE],q[SE],q[NE]),th));
- addChild(new TrottoirQuadNormal(Quad(c[SE],c[SW],q[SW],q[SE]),th));
- addChild(new TrottoirQuadNormal(Quad(c[SW],c[NW],q[NW],q[SW]),th));
- addChild(new TrottoirQuadNormal(Quad(c[NW],c[NE],q[NE],q[NW]),th));
+ for (int i = 0; i <4; i++) {
+ addChild(new RouteQuadChaussee(Quad(c[NE+i],c[SE+i],qtrottoir[SE+i],qtrottoir[NE+i])));
+ addChild(new TrottoirQuadNormal(Quad(qtrottoir[NE+i],qtrottoir[SE+i],qmaison[SE+i],qmaison[NE+i]),th));
+ }
- Quad qh = q + Vertex(0,0,th);
- addChild(new BatimentQuadJardin(qh));
+ Quad qhmaison = qmaison + Vertex(0,0,th);
+ addChild(new BatimentQuadJardin(qhmaison));
- addChild(new BatimentQuadMaison(qh.inset(this->entry,400)));
+ addChild(new BatimentQuadMaison(qhmaison.inset(N,400)));
}
return true;
}
diff --git a/rules/batiment/batimentquad.hh b/rules/batiment/batimentquad.hh
@@ -7,13 +7,12 @@
class BatimentQuad : public Chose {
private :
Quad c;
- Cardinal entry;
public :
static const int minHeight = 400;
static const int maxHeight = 800;
- BatimentQuad(Quad c, Cardinal entry);
+ BatimentQuad(Quad c);
virtual bool split();
virtual void triangulation();
virtual void getBoundingBoxPoints();
diff --git a/rules/quartier/quartierquad.cpp b/rules/quartier/quartierquad.cpp
@@ -19,7 +19,7 @@ Chose* QuartierQuad::factory(int seed, int n, Quad c) {
if (!big && proba(seed, n, 1, 20)) {
return new TerrainQuadHerbe(c);
} else if (small && anglesAcceptable) {
- return new BatimentQuad(c, N);
+ return new BatimentQuad(c);
} else if (!small && !anglesOk) {
return new QuartierQuadAngle(c);
} else if (!small && tooWideY) {
diff --git a/rules/quartier/quartierquadangle.cpp b/rules/quartier/quartierquadangle.cpp
@@ -6,14 +6,8 @@ QuartierQuadAngle::QuartierQuadAngle(Quad _c) : QuartierQuad(_c) {
bool QuartierQuadAngle::split() {
for (int i = 0; i < 4; i++) {
if (Triangle(c[NW+i], c[NE+i], c[SE+i]).angle() >= Angle::d2r(130)) {
- // TODO : maintenant que Triangle::offset prend un paramètre side, on peut simplifier ce bazaar.
- Triangle t1 = Triangle(c[NE+i], c[SE+i], c[SW+i]).inset(BASE, hrw);
- Triangle t2 = Triangle(c[SW+i], c[NW+i], c[NE+i]).inset(BASE, hrw);
- addChild(QuartierTri::factory(seed, 0, t1));
- addChild(QuartierTri::factory(seed, 1, t2));
- addChild(new RouteQuadChaussee(Quad(t1[LEFT], t1[RIGHT], t2[LEFT], t2[RIGHT])));
- addChild(new RouteTriChaussee(Triangle(t2[RIGHT], c[NE+i], t1[LEFT])));
- addChild(new RouteTriChaussee(Triangle(t1[RIGHT], c[SW+i], t2[LEFT])));
+ addChild(QuartierTri::factory(seed, 0, Triangle(c[NE+i], c[SE+i], c[SW+i])));
+ addChild(QuartierTri::factory(seed, 1, Triangle(c[SW+i], c[NW+i], c[NE+i])));
return true;
}
}
@@ -25,28 +19,17 @@ bool QuartierQuadAngle::split() {
Vertex e = Segment(c[NE+i], c[SE+i]).randomPos(seed, 1, 0.4f, 0.6f);
Triangle tn = Triangle(n, c[NE+i], c[SE+i]);
Triangle te = Triangle(c[NW+i], c[NE+i], e);
- Quad q;
if (tn.minAngle() > te.minAngle()) {
- q = Quad(n, c[SE+i], c[SW+i], c[NW+i]).inset(E, hrw);
- Vertex oldtnright = tn[RIGHT];
- tn = tn.inset(BASE, hrw);
addChild(QuartierTri::factory(seed, 0, tn));
- addChild(QuartierQuad::factory(seed, 1, q));
- addChild(new RouteQuadChaussee(Quad(tn[LEFT], tn[RIGHT], q[SE], q[NE])));
- addChild(new RouteTriChaussee(Triangle(tn[RIGHT], oldtnright, q[SE])));
+ addChild(QuartierQuad::factory(seed, 1, Quad(n, c[SE+i], c[SW+i], c[NW+i])));
} else {
- q = Quad(c[NW+i], e, c[SE+i], c[SW+i]).inset(E, hrw);
- Vertex oldteleft = te[LEFT];
- te = te.inset(BASE, hrw);
addChild(QuartierTri::factory(seed, 0, te));
- addChild(QuartierQuad::factory(seed, 1, q));
- addChild(new RouteQuadChaussee(Quad(te[LEFT], te[RIGHT], q[SE], q[NE])));
- addChild(new RouteTriChaussee(Triangle(q[NE], oldteleft, te[LEFT])));
+ addChild(QuartierQuad::factory(seed, 1, Quad(c[NW+i], e, c[SE+i], c[SW+i])));
}
return true;
}
}
// Ne devait jamais arriver ici !
- addChild(new TerrainQuadHerbe(c));
+ addChild(new BatimentQuad(c));
return true;
}
diff --git a/rules/quartier/quartierquadangle.hh b/rules/quartier/quartierquadangle.hh
@@ -5,9 +5,6 @@
// QuadAngle est un quadrilatère avec des angles malfichus (< 90-40 ou > 90+40).
class QuartierQuadAngle : public QuartierQuad {
- private :
- static const int hrw = 150; // half road width : 1,50m.
-
public :
QuartierQuadAngle(Quad c);
virtual bool split();
diff --git a/rules/quartier/quartierquadcarre.cpp b/rules/quartier/quartierquadcarre.cpp
@@ -5,23 +5,16 @@ QuartierQuadCarre::QuartierQuadCarre(Quad _c) : QuartierQuad(_c) {
bool QuartierQuadCarre::split() {
Vertex middle[4];
- Quad q[4];
Vertex centerN = Segment(c[NW], c[NE]).randomPos(seed, -1, 0.25, 0.75);
Vertex centerS = Segment(c[SE], c[SW]).randomPos(seed, -2, 0.25, 0.75);
Vertex center = Segment(centerN, centerS).randomPos(seed, -3, 0.25, 0.75);
- for (int i = 0; i < 4; i++) {
+ for (int i = 0; i < 4; i++)
middle[N+i] = Segment(c[NW+i], c[NE+i]).randomPos(seed, i, 0.25, 0.75);
- }
- for (int i = 0; i < 4; i++) {
- q[i] = Quad(c[NE+i], middle[E+i], center, middle[N+i]);
- q[i] = q[i].inset(W,hrw).inset(S,hrw);
- }
- addChild(new RouteQuadCarrefour(Quad(q[0][SW], q[1][SW], q[2][SW], q[3][SW])));
- for (int i = 0; i < 4; i++) {
- addChild(new RouteQuadChaussee(Quad(q[NE+i][NW], q[NE+i][SW], q[NW+i][SW], q[NW+i][SE])));
- addChild(QuartierQuad::factory(seed, 4+i, q[i]));
- }
+
+ for (int i = 0; i < 4; i++)
+ addChild(QuartierQuad::factory(seed, 4+i, Quad(c[NE+i], middle[E+i], center, middle[N+i])));
+
return true;
}
diff --git a/rules/quartier/quartierquadrect.cpp b/rules/quartier/quartierquadrect.cpp
@@ -7,11 +7,7 @@ bool QuartierQuadRect::split() {
Vertex n = Segment(c[NW], c[NE]).randomPos(seed, 0, 1/3.f, 2/3.f);
Vertex s = Segment(c[SE], c[SW]).randomPos(seed, 1, 1/3.f, 2/3.f);
- Quad qe = Quad(c[NE], c[SE], s, n).inset(W,hrw);
- Quad qw = Quad(c[SW], c[NW], n, s).inset(W,hrw);
-
- addChild(new RouteQuadChaussee(Quad(qe[NW], qe[SW], qw[NW], qw[SW])));
- addChild(QuartierQuad::factory(seed, 2, qe));
- addChild(QuartierQuad::factory(seed, 3, qw));
+ addChild(QuartierQuad::factory(seed, 2, Quad(c[NE], c[SE], s, n)));
+ addChild(QuartierQuad::factory(seed, 3, Quad(c[SW], c[NW], n, s)));
return true;
}
diff --git a/rules/quartier/quartiertricentre.cpp b/rules/quartier/quartiertricentre.cpp
@@ -10,16 +10,9 @@ bool QuartierTriCentre::split() {
for (int i = 0; i < 3; i++)
edgePoint[LEFTSIDE+i] = Segment(c[LEFT+i], c[TOP+i]).randomPos(seed, i+1, 1/3.f, 2/3.f);
- Quad q[3];
for (int i = 0; i < 3; i++) {
- q[i] = Quad(c[TOP+i], edgePoint[RIGHTSIDE+i], center, edgePoint[LEFTSIDE+i]);
- q[i] = q[i].inset(S, hrw).inset(W, hrw);
+ Quad q = Quad(c[TOP+i], edgePoint[RIGHTSIDE+i], center, edgePoint[LEFTSIDE+i]);
+ addChild(QuartierQuad::factory(seed, i+4, q));
}
-
- for (int i = 0; i < 3; i++) {
- addChild(QuartierQuad::factory(seed, i+4, q[i]));
- addChild(new RouteQuadChaussee(Quad(q[(i+1)%3][NW], q[(i+1)%3][SW], q[i][SW], q[i][SE])));
- }
- addChild(new RouteTriChaussee(Triangle(q[0][SW], q[1][SW], q[2][SW])));
return true;
}
diff --git a/rules/quartier/quartiertrihauteur.cpp b/rules/quartier/quartiertrihauteur.cpp
@@ -4,22 +4,10 @@ QuartierTriHauteur::QuartierTriHauteur(Triangle _c) : QuartierTri(_c) {
}
bool QuartierTriHauteur::split() {
- // TODO : sélectionner le sommet avec l'angle le plus grand.
- // Triangle::cutCornerSideResult r = c.cutCornerSide(TOP, random(seed,0,0.33, 0.67);
- // addChild(new RouteQuadChaussee(r.cut));
- // addChild(new RouteTriChaussee(r.cutFrom));
- // addChild(QuartierTri::factory(seed, 1, r.left);
- // addChild(QuartierTri::factory(seed, 1, r.right);
+ // TODO : sélectionner le sommet TOP avec l'angle le plus grand.
Vertex baseCenter = Segment(c[LEFT], c[RIGHT]).randomPos(seed, 0, 1/3.f, 2/3.f);
- Triangle tl(c[TOP], baseCenter, c[LEFT]);
- Triangle tr(c[RIGHT], baseCenter, c[TOP]);
- tl = tl.inset(LEFTSIDE, hrw);
- tr = tr.inset(RIGHTSIDE, hrw);
-
- addChild(new RouteQuadChaussee(Quad(tr[RIGHT], tr[TOP], tl[TOP], tl[LEFT])));
- addChild(new RouteTriChaussee(Triangle(tl[LEFT], c[TOP], tr[RIGHT])));
- addChild(QuartierTri::factory(seed, 1, tl));
- addChild(QuartierTri::factory(seed, 2, tr));
+ addChild(QuartierTri::factory(seed, 1, Triangle(c[TOP], baseCenter, c[LEFT])));
+ addChild(QuartierTri::factory(seed, 2, Triangle(c[RIGHT], baseCenter, c[TOP])));
return true;
}
diff --git a/rules/quartier/quartiertritrapeze.cpp b/rules/quartier/quartiertritrapeze.cpp
@@ -4,17 +4,11 @@ QuartierTriTrapeze::QuartierTriTrapeze(Triangle _c) : QuartierTri(_c) {
}
bool QuartierTriTrapeze::split() {
- // TODO : sélectionner le sommet avec l'angle le plus petit.
+ // TODO : sélectionner le sommet TOP avec l'angle le plus petit.
Vertex left = Segment(c[LEFT], c[TOP]).randomPos(seed, 0, 1/3.f, 2/3.f);
Vertex right = Segment(c[RIGHT], c[TOP]).randomPos(seed, 0, 1/3.f, 2/3.f);
- Triangle ttop(left, c[TOP], right);
- Quad trapeze(right, c[RIGHT], c[LEFT], left);
- ttop = ttop.inset(BASE, hrw);
- trapeze = trapeze.inset(N, hrw);
-
- addChild(new RouteQuadChaussee(Quad(ttop[RIGHT], trapeze[NE], trapeze[NW], ttop[LEFT])));
- addChild(QuartierTri::factory(seed, 1, ttop));
- addChild(QuartierQuad::factory(seed, 2, trapeze));
+ addChild(QuartierTri::factory(seed, 1, Triangle(left, c[TOP], right)));
+ addChild(QuartierQuad::factory(seed, 2, Quad(right, c[RIGHT], c[LEFT], left)));
return true;
}
diff --git a/rules/route/routequadcarrefour.cpp b/rules/route/routequadcarrefour.cpp
@@ -1,14 +0,0 @@
-#include "all_includes.hh"
-
-RouteQuadCarrefour::RouteQuadCarrefour(Quad _c) : Chose(), c(_c) {
- addEntropy(c);
-}
-
-void RouteQuadCarrefour::getBoundingBoxPoints() {
- addBBPoints(c);
- addBBPoints(c + Vertex(0,0,1000)); // TODO
-}
-
-void RouteQuadCarrefour::triangulation() {
- addGPUQuad(c, 0x36, 0x36, 0x36);
-}
diff --git a/rules/route/routequadcarrefour.hh b/rules/route/routequadcarrefour.hh
@@ -1,16 +0,0 @@
-#ifndef _RULES_ROUTE_ROUTEQUADCARREFOUR_HH_
-#define _RULES_ROUTE_ROUTEQUADCARREFOUR_HH_
-
-#include "all_includes.hh"
-
-class RouteQuadCarrefour : public Chose {
- private :
- Quad c;
-
- public :
- RouteQuadCarrefour(Quad c);
- virtual void triangulation();
- virtual void getBoundingBoxPoints();
-};
-
-#endif
diff --git a/rules/route/routetrichaussee.cpp b/rules/route/routetrichaussee.cpp
@@ -1,14 +0,0 @@
-#include "all_includes.hh"
-
-RouteTriChaussee::RouteTriChaussee(Triangle _c) : Chose(), c(_c) {
- addEntropy(c);
-}
-
-void RouteTriChaussee::getBoundingBoxPoints() {
- addBBPoints(c);
- addBBPoints(c + Vertex(0,0,1000)); // TODO
-}
-
-void RouteTriChaussee::triangulation() {
- addGPUTriangle(c, 0x36, 0x36, 0x36);
-}
diff --git a/rules/route/routetrichaussee.hh b/rules/route/routetrichaussee.hh
@@ -1,16 +0,0 @@
-#ifndef _RULES_ROUTE_ROUTETRICHAUSSEE_HH_
-#define _RULES_ROUTE_ROUTETRICHAUSSEE_HH_
-
-#include "all_includes.hh"
-
-class RouteTriChaussee : public Chose {
- private :
- Triangle c;
-
- public :
- RouteTriChaussee(Triangle c);
- virtual void triangulation();
- virtual void getBoundingBoxPoints();
-};
-
-#endif