Cleanup; prepared for buildings

This commit is contained in:
Segey Lapin
2021-10-16 03:08:07 +03:00
parent f4c39becea
commit 45a67ac8bd
5 changed files with 87 additions and 11 deletions

View File

@@ -188,7 +188,9 @@ void RoadGrid::index_site(struct map_site *site)
diagram_vertices.push_back(v);
}
site->polygon_ind.write[i] = idx;
site->rect.expand_to(Vector2i((int)v.x, (int)v.y));
}
site->rect.grow(1);
site->hedges.resize(site->polygon.size());
int count = 0;
for (i = 0; i < site->polygon.size(); i++) {
@@ -301,6 +303,20 @@ void RoadGrid::build(Ref<Curve> curve, Ref<FastNoiseLite> noise)
diagram_vertex_heights.write[i] = 2.0;
#endif
}
generate_3d_vertices();
for (i = 0; i < map_sites.size(); i++) {
float max_height = -10000.0f;
float min_height = 10000.0f;
for (j = 0; j < map_sites[i].polygon_ind.size(); j++) {
float y = vertices[map_sites[i].polygon_ind[j]].y;
if (max_height < y)
max_height = y;
if (min_height > y)
min_height = y;
}
map_sites.write[i].avg_height = min_height * 0.4f + max_height * 0.6f;
}
generate_building_positions();
printf("building 3rd dimention done\n");
}
}
@@ -369,12 +385,6 @@ int RoadGrid::find_edge(int a, int b)
void RoadGrid::setup_vshapes()
{
int i, j;
vertices.resize(get_diagram_vertex_count());
for (i = 0; i < vertices.size(); i++) {
vertices.write()[i].x = diagram_vertices[i].x;
vertices.write()[i].y = diagram_vertex_heights[i];
vertices.write()[i].z = diagram_vertices[i].y;
}
List<struct vshape> vdata_list;
for (i = 0; i < map_hedges.size(); i++) {
for (j = 0; j < map_hedges.size(); j++) {
@@ -482,6 +492,36 @@ void RoadGrid::sort_angle(Vector<int> &sort_data)
sorter.sort(sort_data.ptrw(), sort_data.size());
}
void RoadGrid::build_building_positions()
void RoadGrid::generate_3d_vertices()
{
int i;
vertices.resize(get_diagram_vertex_count());
for (i = 0; i < vertices.size(); i++) {
vertices.write()[i].x = diagram_vertices[i].x;
vertices.write()[i].y = diagram_vertex_heights[i];
vertices.write()[i].z = diagram_vertices[i].y;
}
}
void RoadGrid::generate_building_positions()
{
int i;
for (i = 0; i < map_sites.size(); i++)
generate_site_building_positions(&map_sites[i]);
}
void RoadGrid::generate_site_building_positions(const struct map_site *site)
{
Vector<Vector2> border;
Vector3 center_point;
}
int RoadGrid::get_site_from_point(int x, int z)
{
int i;
for (i = 0; i < map_sites.size(); i++)
if (map_sites[i].rect.has_point(Vector2i(x, z)))
if (Geometry::is_point_in_polygon(Vector2((float)x, (float)z), map_sites[i].polygon))
return i;
return -1;
}