80 lines
2.3 KiB
C++
80 lines
2.3 KiB
C++
#include "all_includes.hh"
|
|
|
|
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 || _door)
|
|
setWindowOrDoor();
|
|
}
|
|
|
|
void MurQuad::getBoundingBoxPoints() {
|
|
addBBPoints(c);
|
|
addBBPoints(ch);
|
|
}
|
|
|
|
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,(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 || door))
|
|
return false;
|
|
|
|
float length = c.maxLengthNS();
|
|
|
|
//if(length > 660) {
|
|
if(false) {
|
|
Quad qa = c.insetOpp(W,length/2);
|
|
Quad qb = c.insetOpp(E,length-(length/2));
|
|
Quad qah = ch.insetOpp(W,length/2);
|
|
Quad qbh = ch.insetOpp(E,length-(length/2));
|
|
|
|
addChild(new MurQuad(qa,qah,window));
|
|
addChild(new MurQuad(qb,qbh,window));
|
|
} else {
|
|
Quad right = Quad(windowPos[NW],windowPos[SW],c[SW],c[NW]);
|
|
Quad righth = Quad(windowPosh[NW],windowPosh[SW],ch[SW],ch[NW]);
|
|
Quad left = Quad(c[NE],c[SE],windowPos[SE],windowPos[NE]);
|
|
Quad lefth = Quad(ch[NE],ch[SE],windowPosh[SE],windowPosh[NE]);
|
|
Quad top = Quad(windowPosh[NE],windowPosh[NW],windowPosh[SW],windowPosh[SE]);
|
|
|
|
if (!door) addChild(new MurQuad(c,windowPos,false, true, false));
|
|
addChild(new MurQuad(windowPosh,ch, false, false, true));
|
|
addChild(new MurQuad(left,lefth,false));
|
|
addChild(new MurQuad(right,righth,false));
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
void MurQuad::triangulation() {
|
|
if (bottom) addGPUQuad(c, Couleurs::mur);
|
|
if (top) addGPUQuad(ch, Couleurs::mur);
|
|
addGPUFourQuads(c, ch, Couleurs::mur);
|
|
}
|
|
|
|
PlancherPlafond::PlancherPlafond(Quad _c, Type _type) : Chose(), c(_c), type(_type) {
|
|
addEntropy(c);
|
|
addEntropy((int)type);
|
|
}
|
|
|
|
void PlancherPlafond::triangulation() {
|
|
unsigned int clr = Couleurs::plancher;
|
|
if (type == PLAFOND)
|
|
clr = Couleurs::plafond;
|
|
addGPUQuad(c, clr);
|
|
}
|
|
|
|
void PlancherPlafond::getBoundingBoxPoints() {
|
|
addBBPoints(c);
|
|
}
|