diff --git a/rules/architecture/batiment.cpp b/rules/architecture/batiment.cpp index e69de29..0b0cc92 100644 --- a/rules/architecture/batiment.cpp +++ b/rules/architecture/batiment.cpp @@ -0,0 +1,2 @@ +#include "all_includes.hh" + diff --git a/rules/architecture/quartier.cpp b/rules/architecture/quartier.cpp index a6f977f..6753736 100644 --- a/rules/architecture/quartier.cpp +++ b/rules/architecture/quartier.cpp @@ -34,10 +34,9 @@ bool QuartierQuad::split() { void QuartierQuad::triangulation() { if (c.isConcave()) { - // TODO Quad q = c << c.concaveCorner(); - addGPUTriangle(Triangle(q[NE], q[SE], q[SW]), Couleurs::route); - addGPUTriangle(Triangle(q[SW], q[NW], q[NE]), Couleurs::route); + triangulationConcave(Triangle(q[NE], q[SE], q[SW])); + triangulationConcave(Triangle(q[SW], q[NW], q[NE])); } else { Quad ci = c.insetNESW(250 + 140); // TODO : factoriser cette longueur (largeur route + largeur trottoir). Quad cih = ci.offsetNormal(600); // TODO : factoriser cette longueur (hauteur max des bâtiments). @@ -48,6 +47,16 @@ void QuartierQuad::triangulation() { } } +void QuartierQuad::triangulationConcave(Triangle t) { + // Même code que QuartierTri::triangulation. + Triangle ci = t.insetLTR(250 + 140); // TODO : factoriser cette longueur (largeur route + largeur trottoir). + Triangle cih = ci.offsetNormal(600); // TODO : factoriser cette longueur (hauteur max des bâtiments). + addGPUTriangle(t, Couleurs::route); + addGPUTriangle(cih, Couleurs::toit); + for (int i = 0; i < 3; i++) + addGPUQuad(Quad(ci[LEFT+i], ci[TOP+i], cih[TOP+i], cih[LEFT+i]), Couleurs::mur); +} + void QuartierQuad::concave() { Quad q = c << c.concaveCorner(); addChild(new QuartierTri(Triangle(q[NE], q[SE], q[SW]))); diff --git a/rules/architecture/quartier.hh b/rules/architecture/quartier.hh index 676ed9c..5bd8981 100644 --- a/rules/architecture/quartier.hh +++ b/rules/architecture/quartier.hh @@ -12,6 +12,7 @@ public: virtual bool split(); virtual void triangulation(); private: + void triangulationConcave(Triangle t); void concave(); void angleAngle(); void angleCote();