commit 474ab3e7069bb73b06662eab4c38dc7140aa4c0f
parent 62197c4e2b5412258fb8dc5b7c5c5336a0e7db5a
Author: Yoann <yoann.b87@voila.fr>
Date: Tue, 10 Jan 2012 15:32:25 +0100
Ajout de la fonction de split sur les maison avec la division en block.
Rectification de la division des blocks en mors.
Amélioration des toits.
Diffstat:
10 files changed, 59 insertions(+), 34 deletions(-)
diff --git a/rules/batiment/batimentquad.cpp b/rules/batiment/batimentquad.cpp
@@ -36,5 +36,5 @@ void BatimentQuad::triangulation() {
float h = floatInRange(seed,1,minHeight,maxHeight);
float htoit = floatInRange(seed,2,minHeight/2,maxHeight/2);
- addGPUOcto(c, c + Vertex(0,0,h + htoit), 0xFF, 0xFF, 0x00);
+ addGPUOcto(c, c + Vertex(0,0,h + htoit), 0xFF, 0xFF, 0xFF);
}
diff --git a/rules/batiment/batimentquadblock.cpp b/rules/batiment/batimentquadblock.cpp
@@ -1,27 +1,32 @@
#include "all_includes.hh"
-BatimentQuadBlock::BatimentQuadBlock(Quad _c, float _height) : Chose(), c(_c), height(_height) {
+BatimentQuadBlock::BatimentQuadBlock(Quad _c, Quad _ch) : Chose(), c(_c), ch(_ch) {
addEntropy(c);
+ addEntropy(ch);
}
void BatimentQuadBlock::getBoundingBoxPoints() {
addBBPoints(c);
- addBBPoints(c + Vertex(0,0,height)); // TODO
+ addBBPoints(ch);
}
bool BatimentQuadBlock::split() {
Quad me = c.insetOpp(E,28);
- Quad ms = c.inset(E,-28).inset(W,-28).insetOpp(S,28);
+ Quad ms = c.inset(E,28).inset(W,28).insetOpp(S,28);
Quad mw = c.insetOpp(W,28);
- Quad mn = c.inset(E,-28).inset(W,-28).insetOpp(N,28);
+ Quad mn = c.inset(E,28).inset(W,28).insetOpp(N,28);
+ Quad meh = ch.insetOpp(E,28);
+ Quad msh = ch.inset(E,28).inset(W,28).insetOpp(S,28);
+ Quad mwh = ch.insetOpp(W,28);
+ Quad mnh = ch.inset(E,28).inset(W,28).insetOpp(N,28);
- addChild(new BatimentQuadMur(me,height));
- addChild(new BatimentQuadMur(mw,height));
- addChild(new BatimentQuadMur(mn,height));
- addChild(new BatimentQuadMur(ms,height));
+ addChild(new BatimentQuadMur(me,meh));
+ addChild(new BatimentQuadMur(mw,mwh));
+ addChild(new BatimentQuadMur(mn,mnh));
+ addChild(new BatimentQuadMur(ms,msh));
return true;
}
void BatimentQuadBlock::triangulation() {
- addGPUOcto(c, c + Vertex(0,0,height), 0xF1, 0xE0, 0xE0);
+ addGPUOcto(c,ch, 0xF1, 0xE0, 0xE0);
}
diff --git a/rules/batiment/batimentquadblock.hh b/rules/batiment/batimentquadblock.hh
@@ -7,10 +7,10 @@
class BatimentQuadBlock : public Chose {
private :
Quad c;
- float height;
+ Quad ch;
public :
- BatimentQuadBlock(Quad c, float height);
+ BatimentQuadBlock(Quad c, Quad ch);
virtual bool split();
virtual void triangulation();
virtual void getBoundingBoxPoints();
diff --git a/rules/batiment/batimentquadmaison.cpp b/rules/batiment/batimentquadmaison.cpp
@@ -9,6 +9,17 @@ void BatimentQuadMaison::getBoundingBoxPoints() {
addBBPoints(c + Vertex(0,0,maxHeight + maxHeight/2)); // TODO
}
+bool BatimentQuadMaison::split() {
+ float h = floatInRange(seed,0,minHeight,maxHeight);
+ float htoit = floatInRange(seed,0,minHeight/2,maxHeight/2);
+ Quad ch = c + Vertex(0,0,h);
+ Vertex toit = (ch[NE] + ch[SE] + ch[SW] + ch[NW]) / 4 + Vertex(0,0,htoit);
+
+ addChild(new BatimentQuadBlock(c,ch));
+ addChild(new BatimentQuadToit(ch,1));
+ return true;
+}
+
void BatimentQuadMaison::triangulation() {
triangles.reserve(12);
@@ -17,10 +28,9 @@ void BatimentQuadMaison::triangulation() {
Quad ch = c + Vertex(0,0,h);
Vertex toit = (ch[NE] + ch[SE] + ch[SW] + ch[NW]) / 4 + Vertex(0,0,htoit);
+ addGPUOcto(c,ch,0xf1,0xe3,0xad);
+
for (int i = 0; i < 4; i++) {
- // Mur
- addGPUQuad(c[NE+i],c[SE+i],ch[SE+i],ch[NE+i],0xf1,0xe3,0xad);
- // Pan du toit
addGPUTriangle(ch[SE+i],toit,ch[NE+i],0x96,0x16,0x18);
}
}
diff --git a/rules/batiment/batimentquadmaison.hh b/rules/batiment/batimentquadmaison.hh
@@ -14,6 +14,7 @@ class BatimentQuadMaison : public Chose {
BatimentQuadMaison(Quad c);
virtual void triangulation();
+ virtual bool split();
virtual void getBoundingBoxPoints();
};
diff --git a/rules/batiment/batimentquadmaisonpont.cpp b/rules/batiment/batimentquadmaisonpont.cpp
@@ -21,11 +21,11 @@ bool BatimentQuadMaisonPont::split() {
Quad qh = q;
addChild(new BatimentQuadJardin(c));
- addChild(new BatimentQuadBlock(qa,partHeight));
- addChild(new BatimentQuadBlock(qb,partHeight));
- addChild(new BatimentQuadBlock((qh + Vertex(0,0,partHeight)),partHeight));
+ addChild(new BatimentQuadBlock(qa,qa + Vertex(0,0,partHeight)));
+ addChild(new BatimentQuadBlock(qb,qb + Vertex(0,0,partHeight)));
+ addChild(new BatimentQuadBlock((qh + Vertex(0,0,partHeight)),qh + Vertex(0,0,2*partHeight)));
addChild(new BatimentQuadPont(qc,partHeight));
- addChild(new BatimentQuadToit(qh + Vertex(0,0,2*partHeight),150));
+ addChild(new BatimentQuadToit(qh + Vertex(0,0,2*partHeight),160));
return true;
}
diff --git a/rules/batiment/batimentquadmur.cpp b/rules/batiment/batimentquadmur.cpp
@@ -1,13 +1,14 @@
#include "all_includes.hh"
-BatimentQuadMur::BatimentQuadMur(Quad _c, float _height) : Chose(), c(_c), height(_height) {
+BatimentQuadMur::BatimentQuadMur(Quad _c, Quad _ch) : Chose(), c(_c), ch(_ch) {
addEntropy(c);
+ addEntropy(ch);
this->window = false;
}
void BatimentQuadMur::getBoundingBoxPoints() {
addBBPoints(c);
- addBBPoints(c + Vertex(0,0,height));
+ addBBPoints(ch);
}
void BatimentQuadMur::setWindow(Quad w) {
@@ -24,11 +25,11 @@ bool BatimentQuadMur::split() {
Quad top = c;
Quad bottom = c;
+ //addChild(BatimentQuadMur())
- return true;
+ return false;
}
void BatimentQuadMur::triangulation() {
- //addGPUOcto(c, c + Vertex(0,0,height), 0xF1, 0xE0, 0xE0);
- addGPUOcto(c, c + Vertex(0,0,height), 0x60, 0x60, 0xFF);
+ addGPUOcto(c, ch, 0xf1,0xe3,0xad);
}
diff --git a/rules/batiment/batimentquadmur.hh b/rules/batiment/batimentquadmur.hh
@@ -6,13 +6,13 @@
class BatimentQuadMur: public Chose {
private :
Quad c;
- float height;
+ Quad ch;
bool window; // Contient une fenêtre ou non.
Quad windowPos;
public :
- BatimentQuadMur(Quad c, float height);
+ BatimentQuadMur(Quad c, Quad ch);
virtual void triangulation();
virtual bool split();
virtual void getBoundingBoxPoints();
diff --git a/rules/batiment/batimentquadtoit.cpp b/rules/batiment/batimentquadtoit.cpp
@@ -1,6 +1,6 @@
#include "all_includes.hh"
-BatimentQuadToit::BatimentQuadToit(Quad _c, float _height) : Chose(), c(_c), height(_height) {
+BatimentQuadToit::BatimentQuadToit(Quad _c, int _type) : Chose(), c(_c), type(_type) {
addEntropy(c);
}
@@ -10,12 +10,19 @@ void BatimentQuadToit::getBoundingBoxPoints() {
}
void BatimentQuadToit::triangulation() {
- Vertex ce = c[SE] + (c[NE] - c[SE])/2 + Vertex(0,0,height / 3.f);
- Vertex cw = c[SW] + (c[NW] - c[SW])/2 + Vertex(0,0,height / 3.f);
+ if(type == 1) {
+ if(c.minLengthNS() < c.minLengthEW())
+ c = c << 1;
+ c = c.inset(S, -20).inset(S,-20);
+ height = c.minLengthEW() / 5;
+ Vertex ce = c[SE] + (c[NE] - c[SE])/2 + Vertex(0,0,height);
+ Vertex cw = c[SW] + (c[NW] - c[SW])/2 + Vertex(0,0,height);
- addGPUTriangle(c[NW],cw,c[SW],0xF1,0xE0,0xE0);
- addGPUTriangle(c[SE],ce,c[NE],0xF1,0xE0,0xE0);
+ addGPUTriangle(c[NW],cw,c[SW],0xF1,0xE0,0xE0);
+ addGPUTriangle(c[SE],ce,c[NE],0xF1,0xE0,0xE0);
- addGPUQuad(c[NE],c[NW],cw,ce,0xE0,0x20,0x00);
- addGPUQuad(c[SW],c[SE],ce,cw,0xE0,0x20,0x00);
+ addGPUQuad(c,0xF1,0xE0,0xE0);
+ addGPUQuad(c[NE],c[NW],cw,ce,0xE0,0x20,0x00);
+ addGPUQuad(c[SW],c[SE],ce,cw,0xE0,0x20,0x00);
+ }
}
diff --git a/rules/batiment/batimentquadtoit.hh b/rules/batiment/batimentquadtoit.hh
@@ -8,10 +8,11 @@ class BatimentQuadToit: public Chose {
private :
Quad c;
float height;
+ int type;
public :
- BatimentQuadToit(Quad c, float height);
+ BatimentQuadToit(Quad c, int type);
virtual void triangulation();
virtual void getBoundingBoxPoints();
};