Création des routes dans les bâtiments au lieu des quartiers (il manque quelques modifs encore).
This commit is contained in:
parent
8239cd8fbe
commit
cee7e3a79d
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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
|
|
@ -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);
|
||||
}
|
|
@ -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
|
Loading…
Reference in New Issue
Block a user