commit 7a8d49130487e31994bc11afd729d7d44bce24d8
parent 61ebdb2089b8626770edfd38a51b1055299d2eed
Author: Georges Dupéron <jahvascriptmaniac+github@free.fr>
Date: Fri, 20 Jan 2012 11:40:43 +0100
Places.
Diffstat:
4 files changed, 26 insertions(+), 49 deletions(-)
diff --git a/rules/batiment.cpp b/rules/batiment.cpp
@@ -26,13 +26,11 @@ bool BatimentQuad::split() {
}
void BatimentQuad::bordureRouteTrottoir() {
- Quad qtrottoir = c.insetNESW(Dimensions::largeurRoute);
- Quad qinterieur = qtrottoir.insetNESW(Dimensions::largeurTrottoir);
+ Quad qinterieur = c.insetNESW(Dimensions::largeurRoute + Dimensions::largeurTrottoir);
Quad qbatiments = qinterieur.offsetNormal(Dimensions::hauteurTrottoir);
for (int i = 0; i < 4; i++) {
- addChild(new RouteQuad(Quad(c[NE+i],c[SE+i],qtrottoir[SE+i],qtrottoir[NE+i])));
- addChild(new TrottoirQuad(Quad(qtrottoir[NE+i],qtrottoir[SE+i],qinterieur[SE+i],qinterieur[NE+i])));
+ addChild(new RouteTrottoirQuad(Quad(c[NE+i],c[SE+i],qinterieur[SE+i],qinterieur[NE+i])));
}
bool anglesAcceptable = c.minAngle() > Angle::d2r(90-60) && c.maxAngle() < Angle::d2r(90+60);
diff --git a/rules/quartier.cpp b/rules/quartier.cpp
@@ -65,14 +65,12 @@ void QuartierQuad::triangulationConcave(Triangle t) {
}
void QuartierQuad::concave() {
- std::cout << "concave" << std::endl;
Quad q = c << c.concaveCorner();
addChild(new QuartierTri(Triangle(q[NE], q[SE], q[SW])));
addChild(new QuartierTri(Triangle(q[SW], q[NW], q[NE])));
}
void QuartierQuad::angleCote() {
- std::cout << "angleCote" << std::endl;
Quad q = c << c.maxAngleCorner();
Vertex s = Segment(q[SE], q[SW]).randomPos(seed, 1, 0.4f, 0.6f);
Vertex w = Segment(q[SW], q[NW]).randomPos(seed, 0, 0.4f, 0.6f);
@@ -88,14 +86,12 @@ void QuartierQuad::angleCote() {
}
void QuartierQuad::angleAngle() {
- std::cout << "angleAngle" << std::endl;
Quad q = c << c.maxAngleCorner();
addChild(new QuartierTri(Triangle(q[NE], q[SE], q[SW])));
addChild(new QuartierTri(Triangle(q[SW], q[NW], q[NE])));
}
void QuartierQuad::rect() {
- std::cout << "rect" << std::endl;
Quad q = c << c.maxLengthSide();
Vertex n = Segment(q[NW], q[NE]).randomPos(seed, 0, 1.f/3.f, 2.f/3.f);
Vertex s = Segment(q[SE], q[SW]).randomPos(seed, 1, 1.f/3.f, 2.f/3.f);
@@ -105,7 +101,6 @@ void QuartierQuad::rect() {
}
void QuartierQuad::carre() {
- std::cout << "carre" << std::endl;
Vertex center = c.insetProportionnal(0.33f).randomPoint(seed, 0);
Vertex middle[4];
for (int i = 0; i < 4; i++)
@@ -116,13 +111,13 @@ void QuartierQuad::carre() {
}
void QuartierQuad::place() {
- std::cout << "place" << std::endl;
Vertex center = c.insetProportionnal(0.25f).randomPoint(seed, 0);
Vertex middle[4];
for (int i = 0; i < 4; i++)
middle[N+i] = Segment(c[NW+i], c[NE+i]).randomPos(seed, i + 1, 0.45f, 0.55f);
Vertex smallOcto[8];
+ Vertex interieur[8];
Vertex bigOcto[8];
float r = floatInRange(seed, 12345, Dimensions::minRayonPlace, Dimensions::maxRayonPlace);
float shift = std::tan(Angle::Pi/8.f) * r;
@@ -132,17 +127,23 @@ void QuartierQuad::place() {
smallOcto[2*i+1] = q.inset(S, shift).inset(W, r)[SW];
bigOcto[2*i] = q.inset(W, shift).inset(S, r)[NW];
bigOcto[2*i+1] = q.inset(S, shift).inset(W, r)[SE];
+ Triangle t = Triangle(smallOcto[2*i+1], center, smallOcto[2*i]).inset(BASE, Dimensions::largeurRoute + Dimensions::largeurTrottoir);
+ interieur[2*i] = t[RIGHT];
+ interieur[2*i+1] = t[LEFT];
}
for (int i = 0; i < 4; i++) {
addChild(new QuartierQuad(Quad(bigOcto[2*i], smallOcto[2*i], smallOcto[((2*i-1) + 8) % 8], bigOcto[((2*i-1) + 8) % 8])));
- addChild(new QuartierQuad(Quad(c[NE+i], (smallOcto[2*i] + smallOcto[2*i+1]) / 2.f, smallOcto[2*i], bigOcto[2*i])));
- addChild(new QuartierQuad(Quad(c[NE+i], bigOcto[2*i+1], smallOcto[2*i+1], (smallOcto[2*i] + smallOcto[2*i+1]) / 2.f)));
+ addChild(new QuartierQuad(Quad(smallOcto[2*i+1], smallOcto[2*i], bigOcto[2*i], bigOcto[2*i+1])));
+ addChild(new QuartierTri(Triangle(bigOcto[2*i], c[NE+i], bigOcto[2*i+1])));
+ }
+ for (int i = 0; i < 8; i++) {
+ addChild(new RouteTrottoirQuad(Quad(smallOcto[i], smallOcto[(i+1)%8], interieur[(i+1)%8], interieur[i])));
+ addChild(new TerrainTri(Triangle(interieur[(i+1)%8], center, interieur[i])));
}
}
void QuartierQuad::longueRue() {
- std::cout << "longueRue" << std::endl;
Quad q = c << c.maxLengthSide();
Vertex e = Segment(q[NE], q[SE]).randomPos(seed, 0, 1.f/3.f, 2.f/3.f);
Vertex w = Segment(q[SW], q[NW]).randomPos(seed, 1, 1.f/3.f, 2.f/3.f);
@@ -231,13 +232,11 @@ void QuartierTri::trapeze() {
}
void QuartierTri::batiments() {
- Triangle ttrottoir = c.insetLTR(Dimensions::largeurRoute);
- Triangle tinterieur = ttrottoir.insetLTR(Dimensions::largeurTrottoir);
+ Triangle tinterieur = c.insetLTR(Dimensions::largeurRoute + Dimensions::largeurTrottoir);
Triangle tbatiments = tinterieur.offsetNormal(Dimensions::hauteurTrottoir);
for (int i = 0; i < 3; i++) {
- addChild(new RouteQuad(Quad(c[LEFT+i],c[TOP+i],ttrottoir[TOP+i],ttrottoir[LEFT+i])));
- addChild(new TrottoirQuad(Quad(ttrottoir[LEFT+i],ttrottoir[TOP+i],tinterieur[TOP+i],tinterieur[LEFT+i])));
+ addChild(new RouteTrottoirQuad(Quad(c[LEFT+i],c[TOP+i],tinterieur[TOP+i],tinterieur[LEFT+i])));
}
bool small = tbatiments.minLength() < 3000;
diff --git a/rules/routetrottoir.cpp b/rules/routetrottoir.cpp
@@ -1,30 +1,20 @@
#include "all_includes.hh"
-TrottoirQuad::TrottoirQuad(Quad _c) : Chose(), c(_c) {
+RouteTrottoirQuad::RouteTrottoirQuad(Quad _c) : Chose(), c(_c) {
addEntropy(c);
}
-void TrottoirQuad::getBoundingBoxPoints() {
+void RouteTrottoirQuad::getBoundingBoxPoints() {
addBBPoints(c, Dimensions::hauteurTrottoir);
}
-void TrottoirQuad::triangulation() {
- Quad ch = c.offsetNormal(Dimensions::hauteurTrottoir);
- Quad bordureh = ch.inset(E,15);
+void RouteTrottoirQuad::triangulation() {
+ Quad qtrottoir = c.inset(E, Dimensions::largeurRoute);
+ Quad qtrottoirh = qtrottoir.offsetNormal(Dimensions::hauteurTrottoir);
+ Quad qbordureh = qtrottoirh.inset(E,15);
- addGPUQuad(c[NE], c[SE], ch[SE], ch[NE], Couleurs::bordureTrottoir);
- addGPUQuad(ch[NE], ch[SE], bordureh[SE], bordureh[NE], Couleurs::bordureTrottoir);
- addGPUQuad(bordureh, Couleurs::trottoir);
-}
-
-RouteQuad::RouteQuad(Quad _c) : Chose(), c(_c) {
- addEntropy(c);
-}
-
-void RouteQuad::getBoundingBoxPoints() {
- addBBPoints(c);
-}
-
-void RouteQuad::triangulation() {
- addGPUQuad(c, Couleurs::route);
+ addGPUQuad(Quad(c[SE], qtrottoir[SE], qtrottoir[NE], c[NE]), Couleurs::route);
+ addGPUQuad(qtrottoir[NE], qtrottoir[SE], qtrottoirh[SE], qtrottoirh[NE], Couleurs::bordureTrottoir);
+ addGPUQuad(qtrottoirh[NE], qtrottoirh[SE], qbordureh[SE], qbordureh[NE], Couleurs::bordureTrottoir);
+ addGPUQuad(qbordureh, Couleurs::trottoir);
}
diff --git a/rules/routetrottoir.hh b/rules/routetrottoir.hh
@@ -3,22 +3,12 @@
#include "all_includes.hh"
-class TrottoirQuad : public Chose {
+class RouteTrottoirQuad : public Chose {
private :
Quad c;
public :
- TrottoirQuad(Quad _c);
- virtual void triangulation();
- virtual void getBoundingBoxPoints();
-};
-
-class RouteQuad : public Chose {
- private :
- Quad c;
-
- public :
- RouteQuad(Quad _c);
+ RouteTrottoirQuad(Quad _c);
virtual void triangulation();
virtual void getBoundingBoxPoints();
};