diff --git a/scenes/tilemap/tilemap.gd b/scenes/tilemap/tilemap.gd index 5eee485f..269259a6 100644 --- a/scenes/tilemap/tilemap.gd +++ b/scenes/tilemap/tilemap.gd @@ -17,9 +17,10 @@ class_name MercatorTileMap @export var tile_width: float = 256.0 @export var tile_height: float = 256.0 @export_range(1, 1000, 1) var max_concurrent_requests:int = 5 -@export_range(100, 100000, 1) var max_cached_tiles: int = 200 -@export_range(0, 25, 1) var max_zoom_level: int = 19 -@export_range(0, 25, 1) var min_zoom_level: int = 0 +@export_range(100, 100000, 1) var max_cached_tiles: int = 1024 +@export_range(0, 20, 1) var max_zoom_level: int = 20 +@export_range(0, 20, 1) var min_zoom_level: int = 0 +@export_range(0, 20, 1) var max_zoom_level_server: int = 20 @export_color_no_alpha() var back_color: = Color.BLACK const default_size: = 400.0 var is_centered: = false @@ -556,10 +557,19 @@ func get_tile(x: int, y: int, z: int, create: bool = true) -> Tile: var queue_size: = _queue.size() if create and (not $canvas/player.is_playing()): - tile = Tile.new(idx, x, y, z) - tile.url = base_url.replace('{x}', str(x)).replace('{y}', str(y)).replace('{z}', str(z)) - tile.t = now - _queue[idx] = tile + if z > max_zoom_level_server: + z = max_zoom_level_server + n = pow(2, z) - 1 + x = clamp(x, 0, n) + y = clamp(y, 0, n) + idx = xyz_to_idx(x, y, z) + if _queue.has(idx): + tile = _queue[idx] + if not tile: + tile = Tile.new(idx, x, y, z) + tile.url = base_url.replace('{x}', str(x)).replace('{y}', str(y)).replace('{z}', str(z)) + tile.t = now + _queue[idx] = tile if queue_size == 0 and _queue.size(): emit_signal('load_started') diff --git a/scenes/tilemap/tilemap.tscn b/scenes/tilemap/tilemap.tscn index 27a42cd8..3246801f 100644 --- a/scenes/tilemap/tilemap.tscn +++ b/scenes/tilemap/tilemap.tscn @@ -28,7 +28,9 @@ size = Vector2(400, 400) [node name="tilemap" type="CanvasGroup" groups=["gui_items"]] script = ExtResource("1_l64tp") -max_zoom_level = 21 +base_url = "http://192.168.11.105:8001/osm_tiles/{z}/{x}/{y}.png" +max_zoom_level = 10 +max_zoom_level_server = 10 az = 2.0 [node name="canvas" type="TextureRect" parent="." groups=["gui_items"]]