Cleanup; prepared for buildings
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user