diff options
Diffstat (limited to 'client/map/tiles/floor_mesher.gd')
| -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() | 
