aboutsummaryrefslogtreecommitdiff
path: root/client/map/tiles
diff options
context:
space:
mode:
authornokoe <nokoe@mailbox.org>2025-04-07 16:29:11 +0200
committernokoe <nokoe@mailbox.org>2025-04-07 16:29:11 +0200
commita51e4f60fcc03649529349227bbe2b28395eebc7 (patch)
treea3da5ce2b00837df98257d8f093b85ac99bf3c2b /client/map/tiles
parent48a7a20e0f1595cd6e46c8c5136863ed56d5ef2b (diff)
downloadhurrycurry-a51e4f60fcc03649529349227bbe2b28395eebc7.tar
hurrycurry-a51e4f60fcc03649529349227bbe2b28395eebc7.tar.bz2
hurrycurry-a51e4f60fcc03649529349227bbe2b28395eebc7.tar.zst
fix #240; fix #241
Diffstat (limited to 'client/map/tiles')
-rw-r--r--client/map/tiles/floor_mesher.gd22
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()