From 071a7b07ffdf1f9376a7ccee71983da12ccd6233 Mon Sep 17 00:00:00 2001 From: Yoann Date: Fri, 20 Jan 2012 08:23:38 +0100 Subject: [PATCH] =?UTF-8?q?Porte=20d'entr=C3=A9e,=20=C3=A0=20ne=20pas=20ut?= =?UTF-8?q?iliser=20pour=20sortir=20!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rules/etage.cpp | 17 +++++++++++++---- rules/mur.cpp | 13 +++++++------ rules/mur.hh | 5 +++-- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/rules/etage.cpp b/rules/etage.cpp index 6ae3ed0..198677d 100644 --- a/rules/etage.cpp +++ b/rules/etage.cpp @@ -45,10 +45,19 @@ bool EtageQuad::split() { Quad mwh = ch.insetOpp(W,28); Quad mnh = ch.inset(E,28).inset(W,28).insetOpp(N,28); - addChild(new MurQuad(me << 1,meh << 1,w[E])); - addChild(new MurQuad(mw >> 1,mwh >> 1,w[W])); - addChild(new MurQuad(mn,mnh,w[N])); - addChild(new MurQuad(ms >> 2,msh >> 2,w[S])); + QuadBool d = QuadBool(false,false,false,false); + + if(etage == 0) { + if(w[E]) d[E] = true; + else if(w[W]) d[W] = true; + else if(w[N]) d[N] = true; + else if(w[S]) d[S] = true; + } + + addChild(new MurQuad(me << 1,meh << 1,w[E]^d[E],false,false,d[E])); + addChild(new MurQuad(mw >> 1,mwh >> 1,w[W]^d[W],false,false,d[W])); + addChild(new MurQuad(mn,mnh,w[N]^d[N],false,false,d[N])); + addChild(new MurQuad(ms >> 2,msh >> 2,w[S]^d[S],false,false,d[S])); } addChild(new PlancherPlafond(c, PlancherPlafond::PLANCHER)); addChild(new PlancherPlafond(ch.offsetNormal(-10), PlancherPlafond::PLAFOND)); diff --git a/rules/mur.cpp b/rules/mur.cpp index f81bbd7..e7e315c 100644 --- a/rules/mur.cpp +++ b/rules/mur.cpp @@ -1,12 +1,13 @@ #include "all_includes.hh" -MurQuad::MurQuad(Quad _c, Quad _ch, bool _window, bool _top, bool _bottom) : Chose(), c(_c), ch(_ch), window(_window), top(_top), bottom(_bottom) { +MurQuad::MurQuad(Quad _c, Quad _ch, bool _window, bool _top, bool _bottom, bool _door) + : Chose(), c(_c), ch(_ch), window(_window), top(_top), bottom(_bottom), door(_door) { addEntropy(c); addEntropy(ch); addEntropy((int)top); addEntropy((int)bottom); - if(_window) - setWindow(); + if(_window || _door) + setWindowOrDoor(); } void MurQuad::getBoundingBoxPoints() { @@ -14,18 +15,18 @@ void MurQuad::getBoundingBoxPoints() { addBBPoints(ch); } -void MurQuad::setWindow() { +void MurQuad::setWindowOrDoor() { Quad q = Quad(ch[NE],c[NE],c[NW],ch[NW]); float lr = (q.length(S) - 120)/2.f; - Quad wFront = q.insetNESW(40,lr,120,lr); + Quad wFront = q.insetNESW(40,lr,(window ? 120 : 0),lr); Quad wBack = wFront.offsetNormal(28); windowPos = Quad(wFront[SE],wBack[SE],wBack[SW],wFront[SW]); windowPosh = Quad(wFront[NE],wBack[NE],wBack[NW],wFront[NW]); } bool MurQuad::split() { - if(!window) + if(!(window || door)) return false; float length = c.maxLengthNS(); diff --git a/rules/mur.hh b/rules/mur.hh index bbbf73e..2598d98 100644 --- a/rules/mur.hh +++ b/rules/mur.hh @@ -12,14 +12,15 @@ private : Quad windowPosh; bool top; bool bottom; + bool door; public : - MurQuad(Quad c, Quad ch, bool _window=false, bool _top=false, bool _bottom=false); + MurQuad(Quad c, Quad ch, bool _window=false, bool _top=false, bool _bottom=false, bool _door=false); virtual void triangulation(); virtual bool split(); virtual void getBoundingBoxPoints(); - void setWindow(); + void setWindowOrDoor(); }; class PlancherPlafond: public Chose {