2011-m2s3-city-builder/rules/architecture/terrain.cpp
2012-01-19 14:55:38 +01:00

52 lines
1.1 KiB
C++

#include "all_includes.hh"
TerrainQuad::TerrainQuad(Quad _c, bool _addTrees) : Chose(), c(_c), addTrees(_addTrees) {
addEntropy(c);
}
bool TerrainQuad::split() {
if (!addTrees) return false;
addChild(new TerrainQuad(c, false));
int maxNArbres = std::min(10, (int)(c.surface() / (7.f*7.f*100.f*100.f)));
Vertex p[maxNArbres];
int pi = 0;
int nArbres = hash2(seed, -1) % (maxNArbres + 1);
for (int essai = 0; essai < nArbres * 2 && pi < nArbres; essai++) {
p[pi] = c.insetProportionnal(0.7).randomPoint(seed, essai);
bool success = true;
for (int j = 0; j < pi; j++) {
if (Segment(p[j], p[pi]).length() < 3 * 100) {
success = false;
break;
}
}
if (success) pi++;
}
for (int i = 0; i < pi; i++) {
addChild(new Arbre(p[i], c));
}
return true;
}
void TerrainQuad::getBoundingBoxPoints() {
addBBPoints(c);
}
void TerrainQuad::triangulation() {
addGPUQuad(c, Couleurs::herbe);
}
TerrainTri::TerrainTri(Triangle _c) : Chose(), c(_c) {
addEntropy(c);
}
void TerrainTri::getBoundingBoxPoints() {
addBBPoints(c);
}
void TerrainTri::triangulation() {
addGPUTriangle(c, Couleurs::herbe);
}