diff --git a/main.cpp b/main.cpp index 5418ab4..8bb2791 100644 --- a/main.cpp +++ b/main.cpp @@ -3,7 +3,7 @@ int main() { // Générer une tile de base std::cout << "Initial seed = " << Chose::initialSeed << std::endl; - float size = 200 * 100; + float size = 500 * 100; Vertex ne(size, size, 0); Vertex se(size, 0, 0); Vertex sw(0, 0, 0); diff --git a/rules/architecture/quartier.cpp b/rules/architecture/quartier.cpp index d1234b6..d2243fc 100644 --- a/rules/architecture/quartier.cpp +++ b/rules/architecture/quartier.cpp @@ -9,7 +9,8 @@ void QuartierQuad::getBoundingBoxPoints() { } bool QuartierQuad::split() { - bool small = c.minLength() < 3500; + bool small = c.minLength() < 35 * 100; + bool big = (c.minLengthNS() > 100 * 100 || c.minLengthEW() > 100 * 100) && c.minLength() > 40*100 && c.maxLength() < 300*100; bool isConcave = c.isConcave(); bool nearConcave = c.maxAngle() > Angle::d2r(160); bool anglesOk = c.minAngle() > Angle::d2r(90-40) && c.maxAngle() < Angle::d2r(90+40); @@ -19,7 +20,9 @@ bool QuartierQuad::split() { concave(); else if (nearConcave) angleAngle(); - else if (!small && !anglesOk && proba(seed, -2, 1, 2)) + else if (big && anglesOk && proba(seed, -2, 1, 4)) + longueRue(); + else if (!small && !anglesOk && proba(seed, -3, 1, 2)) angleAngle(); else if (!small && !anglesOk) angleCote(); @@ -104,6 +107,18 @@ void QuartierQuad::carre() { addChild(new QuartierQuad(Quad(c[NE+i], middle[E+i], center, middle[N+i]))); } +void QuartierQuad::longueRue() { + 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); + Quad qn = Quad(q[NE], e, w, q[NW]).inset(S, 7*100); + Quad qs = Quad(q[SW], w, e, q[SE]).inset(S, 7*100); + + addChild(new QuartierQuad(qn)); + addChild(new QuartierQuad(qs)); + addChild(new BatimentQuad_(Quad(qn[SE], qs[SW], qs[SE], qn[SW]))); // TODO +} + void QuartierQuad::batiments() { Quad qtrottoir = c.insetNESW(Dimensions::largeurRoute); Quad qinterieur = qtrottoir.insetNESW(Dimensions::largeurTrottoir); diff --git a/rules/architecture/quartier.hh b/rules/architecture/quartier.hh index 5bd8981..633aa42 100644 --- a/rules/architecture/quartier.hh +++ b/rules/architecture/quartier.hh @@ -18,6 +18,7 @@ private: void angleCote(); void rect(); void carre(); + void longueRue(); void batiments(); }; diff --git a/rules/chose.cpp b/rules/chose.cpp index a18c0b1..9aa9980 100644 --- a/rules/chose.cpp +++ b/rules/chose.cpp @@ -168,4 +168,4 @@ void Chose::drawAABB() { ); } -unsigned int Chose::initialSeed = random_seed(); +unsigned int Chose::initialSeed = 1896509207;//random_seed();