Making execution more lightweight

This commit is contained in:
Segey Lapin
2019-08-25 17:15:23 +03:00
parent c2d687680b
commit 8e70ba69bd

View File

@@ -24,9 +24,8 @@ var maxpos = Vector2()
var vertex_queue = [] var vertex_queue = []
var vertices = [] var vertices = []
var front = [] var front = []
var lots: Lots var lots : Lots
var grid: GridData var grid: GridData
class Lots: class Lots:
enum {LOT_FOREST, LOT_AIRPORT, LOT_PARK, LOT_CEMETERY, LOT_RESIDENTAL, LOT_INDUSTRIAL} enum {LOT_FOREST, LOT_AIRPORT, LOT_PARK, LOT_CEMETERY, LOT_RESIDENTAL, LOT_INDUSTRIAL}
var lot_types = { var lot_types = {
@@ -127,6 +126,7 @@ class Lots:
if Geometry.point_is_inside_triangle(p2, polygon[0], polygon[2], polygon[3]): if Geometry.point_is_inside_triangle(p2, polygon[0], polygon[2], polygon[3]):
return true return true
return false return false
func generate_lots(vertices, road_width, sidewalk_width, map_width, map_height): func generate_lots(vertices, road_width, sidewalk_width, map_width, map_height):
for v in range(vertices.size()): for v in range(vertices.size()):
var p1 = vertices[v].pos var p1 = vertices[v].pos
@@ -156,6 +156,8 @@ class Lots:
"type_name": lot_type_name "type_name": lot_type_name
}) })
break break
yield()
return true
func get_point3d(v: Vector2): func get_point3d(v: Vector2):
var v3d : = Vector3() var v3d : = Vector3()
@@ -1178,12 +1180,17 @@ class VertexData:
ret.push_back(get_wedge_road_points(wedge, vertices)) ret.push_back(get_wedge_road_points(wedge, vertices))
return ret return ret
var vertex_data_queue = []
var lot_state
func _process(delta): func _process(delta):
if randf() < 0.8:
return
match(state): match(state):
STATE_INIT: STATE_INIT:
pass pass
STATE_ITERATION: STATE_ITERATION:
if randf() > 0.5: if randf() > 0.8:
if front.size() > 0 || vertex_queue.size() > 0: if front.size() > 0 || vertex_queue.size() > 0:
front = iteration(front) front = iteration(front)
else: else:
@@ -1206,11 +1213,16 @@ func _process(delta):
convert_vertices() convert_vertices()
print_debug("conversion finished") print_debug("conversion finished")
state = STATE_EDGES2 state = STATE_EDGES2
vertex_data_queue = range(vertices.size())
STATE_EDGES2: STATE_EDGES2:
for v in range(vertices.size()): if randf() > 0.8:
var vdata = VertexData.new(roadmap.vertices[v], roadmap.road_width, roadmap.sidewalk_width) var count: int = 0
vertices[v]._vdata = vdata while vertex_data_queue.size() > 0 && count < 20:
vertices[v]._points = vdata.get_all_road_points(vertices) var v = vertex_data_queue.pop_front()
var vdata = VertexData.new(vertices[v], road_width, sidewalk_width)
vertices[v]._vdata = vdata
vertices[v]._points = vdata.get_all_road_points(vertices)
count += 1
# points = [] # points = []
# for k in vertices: # for k in vertices:
# points.push_back(k.pos) # points.push_back(k.pos)
@@ -1230,7 +1242,9 @@ func _process(delta):
# for h in vertices[e]._neighbors: # for h in vertices[e]._neighbors:
# add_edge(e, h, true) # add_edge(e, h, true)
# print_debug("edges added") # print_debug("edges added")
state = STATE_EDGES3 if vertex_data_queue.size() == 0:
state = STATE_EDGES3
print_debug("road points complete")
STATE_EDGES3: STATE_EDGES3:
for v in range(vertices.size()): for v in range(vertices.size()):
for entry in range(vertices[v]._points.size()): for entry in range(vertices[v]._points.size()):
@@ -1240,6 +1254,7 @@ func _process(delta):
var p3d = Vector3(p.x - map_width * 0.5, get_height(p.x - map_width * 0.5, p.y - map_height * 0.5), p.y - map_height * 0.5) var p3d = Vector3(p.x - map_width * 0.5, get_height(p.x - map_width * 0.5, p.y - map_height * 0.5), p.y - map_height * 0.5)
points_3d.push_back(p3d) points_3d.push_back(p3d)
vertices[v]._points[entry].points3d = points_3d vertices[v]._points[entry].points3d = points_3d
print("points complete")
# implode_road() # implode_road()
# print(points.size(), " ", extra_points.size()) # print(points.size(), " ", extra_points.size())
@@ -1308,8 +1323,14 @@ func _process(delta):
# print("bad triangles") # print("bad triangles")
# print(triangulation) # print(triangulation)
STATE_POLYGONS1: STATE_POLYGONS1:
lots = Lots.new() if lot_state == null:
lots.generate_lots(vertices, road_width, sidewalk_width, map_width, map_height) lots = Lots.new()
lot_state = lots.generate_lots(vertices, road_width, sidewalk_width, map_width, map_height)
elif lot_state is GDScriptFunctionState:
lot_state = lot_state.resume()
else:
state = STATE_POLYGONS2
print("polygons built")
# db = LotsDB.new(vertices, road_width, sidewalk_width) # db = LotsDB.new(vertices, road_width, sidewalk_width)
# polygon_queue = db.get_polygons() # polygon_queue = db.get_polygons()
# for r in range(polygon_queue.size()): # for r in range(polygon_queue.size()):
@@ -1318,8 +1339,6 @@ func _process(delta):
# #
# print("building polygons") # print("building polygons")
# build_polygons() # build_polygons()
state = STATE_POLYGONS2
print("polygons built")
STATE_POLYGONS2: STATE_POLYGONS2:
grid = GridData.new() grid = GridData.new()
for v in range(vertices.size()): for v in range(vertices.size()):