Tile &tile = tiles[x+y*width];
if(tile.nodes[i].elevation==ref)
{
- tile.nodes[i].elevation = elev;
+ tile.set_node_elevation(i, elev);
signal_tile_changed.emit(x, y);
}
}
}
else
{
- tiles[c.x+c.y*width].nodes[c.i].elevation = elev;
+ tiles[c.x+c.y*width].set_node_elevation(c.i, elev);
signal_tile_changed.emit(c.x, c.y);
}
}
for(unsigned i=0; i<4; ++i)
{
NodeCoordinates c(x, y, i);
- Vector node_pos((x+i%2)*ts, (y+i/2)*ts, get_node_elevation(c));
+ Vector node_pos((x+0.25+(i%2)*0.5)*ts, (y+0.25+(i/2)*0.5)*ts, get_node_elevation(c));
Vector v = node_pos-local_ray.get_start();
float dist = (v-local_ray.get_direction()*dot(local_ray.get_direction(), v)).norm();
if(closest_dist<0 || dist<closest_dist)
secondary_axis(false)
{ }
+void Terrain::Tile::set_node_elevation(unsigned i, float e)
+{
+ nodes[i].elevation = e;
+ update_axis();
+}
+
+void Terrain::Tile::update_axis()
+{
+ secondary_axis = (abs(nodes[1].elevation-nodes[2].elevation) < abs(nodes[0].elevation-nodes[3].elevation));
+}
+
void Terrain::Tile::save(list<DataFile::Statement> &st) const
{
bool flat = true;
Tile &t = obj.tiles[next_tile];
Tile::Loader ldr(obj, t);
load_sub_with(ldr);
+ t.update_axis();
unsigned x = next_tile%obj.width;
unsigned y = next_tile/obj.width;
++next_tile;