www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit 5bdeb93442bfea801a1266bec4ee0a917a6c77f9
parent 15626bfe9098070808ca90160a8df8049f923e9b
Author: Georges Dupéron <jahvascriptmaniac+github@free.fr>
Date:   Wed, 18 Jan 2012 16:58:15 +0100

Merge branch 'master' of https://github.com/jsmaniac/2011-m2s3-city-builder

Diffstat:
Mrules/architecture/batiment.cpp | 30++++++++++++++++++++++++++++--
Mrules/architecture/batiment.hh | 8++++++--
2 files changed, 34 insertions(+), 4 deletions(-)

diff --git a/rules/architecture/batiment.cpp b/rules/architecture/batiment.cpp @@ -5,11 +5,37 @@ BatimentQuad_::BatimentQuad_(Quad _c) : Chose(), c(_c) { } bool BatimentQuad_::split() { - Quad ch = c.offsetNormal(Dimensions::hauteurEtage); - addChild(new ToitQuad(ch, Dimensions::hauteurToit)); + Quad q; + + if(!isSub) + q = c >> ((c.maxLengthNS() < c.maxLengthEW()) ? 1 : 0); + else + q = c; + + int minSurface = 1000000; + + if(q.surface() > 2* minSurface) { + Vertex c1 = q[NW] + Vertex(q[NE] - q[NW])/2; + Vertex c2 = q[SW] + Vertex(q[SE] - q[SW])/2; + Quad q1 = Quad(c1,c2,q[SW],q[NW]).inset(E,30); + Quad q2 = Quad(q[NE],q[SE],c2,c1).inset(W,30); + + addChild((new BatimentQuad_(q1))->isSubdivision(true)); + addChild((new BatimentQuad_(q2))->isSubdivision(true)); + } + else { + Quad ch = c.offsetNormal(Dimensions::hauteurEtage); + addChild(new ToitQuad(ch, Dimensions::hauteurToit)); + } + return true; } +BatimentQuad_* BatimentQuad_::isSubdivision(bool val) { + this->isSub = val; + return this; +} + void BatimentQuad_::triangulation() { Quad ch = c.offsetNormal(Dimensions::hauteurEtage + Dimensions::hauteurToit); addGPUQuad(ch, Couleurs::toit); diff --git a/rules/architecture/batiment.hh b/rules/architecture/batiment.hh @@ -5,16 +5,20 @@ class BatimentQuad_ : public Chose { Quad c; -public: + bool isSub; + + public: BatimentQuad_(Quad _c); virtual bool split(); virtual void triangulation(); virtual void getBoundingBoxPoints(); + BatimentQuad_* isSubdivision(bool val); }; class BatimentTri_ : public Chose { Triangle c; -public: + + public: BatimentTri_(Triangle _c); virtual bool split(); virtual void triangulation();