diff --git a/rules/batiment/batimentquad.cpp b/rules/batiment/batimentquad.cpp index 522dcf6..9edb345 100644 --- 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 index e113e5d..66e823e 100644 --- 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 index 874d6f6..956ec2a 100644 --- 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 index 0b41a13..ad0d88c 100644 --- 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 index 00764e8..28aa778 100644 --- 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 index 5d20735..fb4b477 100644 --- 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 index 25f702a..5cc3359 100644 --- 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 index 7e4926e..6c88da6 100644 --- 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 index fd01b24..9a61e6d 100644 --- 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 index 1b4590c..0641884 100644 --- 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 deleted file mode 100644 index 35ab4f1..0000000 --- a/rules/route/routequadcarrefour.cpp +++ /dev/null @@ -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 deleted file mode 100644 index 63f3b63..0000000 --- a/rules/route/routequadcarrefour.hh +++ /dev/null @@ -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 deleted file mode 100644 index 3411b45..0000000 --- a/rules/route/routetrichaussee.cpp +++ /dev/null @@ -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 deleted file mode 100644 index 5d05cb0..0000000 --- a/rules/route/routetrichaussee.hh +++ /dev/null @@ -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