2011-m2s3-city-builder/rules/quad.cpp

32 lines
890 B
C++

#include "all_includes.hh"
Quad::Quad(Vertex ne, Vertex se, Vertex sw, Vertex nw) : Chose(), ne(ne), se(se), sw(sw), nw(nw) {
addEntropy(ne,se,sw,nw);
// triangulation();
}
Vertex& Quad::corner(Coin corner, int rotation) {
switch ((corner + rotation) & 3) {
case NE: return ne;
case SE: return se;
case SW: return sw;
default: return nw;
}
}
void Quad::offset(/*Cardinal*/int side, int offset) {
Vertex voffset = (corner(NE,side)-corner(NW,side)).perpendicular().setNorm(offset);
corner(NE,side) = corner(NE,side) + voffset.projectOn(corner(NE,side)-corner(SE,side));
corner(NW,side) = corner(NW,side) + voffset.projectOn(corner(NW,side)-corner(SW,side));
}
bool Quad::subdivide() {
return false;
}
void Quad::triangulation() {
triangles.reserve(2);
addTriangle(new Triangle(ne, nw, sw, 0xc0, 0xc0, 0xc0));
addTriangle(new Triangle(sw, se, ne, 0xc0, 0xc0, 0xc0));
}