diff options
Diffstat (limited to 'client/map/tiles')
-rw-r--r-- | client/map/tiles/floor_mesher.gd | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/client/map/tiles/floor_mesher.gd b/client/map/tiles/floor_mesher.gd index 182425a5..d3a66c89 100644 --- a/client/map/tiles/floor_mesher.gd +++ b/client/map/tiles/floor_mesher.gd @@ -31,21 +31,25 @@ var tiles: Dictionary func add_tile(pos: Vector2i): tiles[str(pos)] = pos +func remove_tile(pos: Vector2i): + tiles.erase(str(pos)) + func flush() -> ArrayMesh: + var tiles_queue = tiles.duplicate() var st := SurfaceTool.new() st.begin(Mesh.PRIMITIVE_TRIANGLES) - while not tiles.is_empty(): - var key: String = tiles.keys()[0] - var tile_position: Vector2i = tiles[key] + while not tiles_queue.is_empty(): + var key: String = tiles_queue.keys()[0] + var tile_position: Vector2i = tiles_queue[key] var shift := Vector2i.ZERO # move the origin of the rectangle to the upper left corner while true: - #if tiles.has(str(tile_position + shift + Vector2i.UP + Vector2i.LEFT)): + #if tiles_queue.has(str(tile_position + shift + Vector2i.UP + Vector2i.LEFT)): # shift += Vector2i.UP + Vector2i.LEFT - if tiles.has(str(tile_position + shift + Vector2i.UP)): + if tiles_queue.has(str(tile_position + shift + Vector2i.UP)): shift += Vector2i.UP - elif tiles.has(str(tile_position + shift + Vector2i.LEFT)): + elif tiles_queue.has(str(tile_position + shift + Vector2i.LEFT)): shift += Vector2i.LEFT else: break @@ -54,14 +58,14 @@ func flush() -> ArrayMesh: var rectangle := Vector2i.ONE # go down as long as possible - while tiles.has(str(rectangle_origin + Vector2i(0, rectangle.y))): + while tiles_queue.has(str(rectangle_origin + Vector2i(0, rectangle.y))): rectangle.y += 1 # try to go right as long as possible by checking if whole columns are long enough while true: var column_possible := true for i in range(0, rectangle.y): - column_possible = tiles.has(str(rectangle_origin + Vector2i(rectangle.x, i))) + column_possible = tiles_queue.has(str(rectangle_origin + Vector2i(rectangle.x, i))) if not column_possible: break if column_possible: rectangle.x += 1 @@ -102,5 +106,5 @@ func flush() -> ArrayMesh: # remove the rectangle from the "queue" for x in range(rectangle_origin.x, rectangle_origin.x + rectangle.x): for y in range(rectangle_origin.y, rectangle_origin.y + rectangle.y): - tiles.erase(str(Vector2i(x, y))) + tiles_queue.erase(str(Vector2i(x, y))) return st.commit() |