diff --git a/scenes/tilemap/tilemap.gd b/scenes/tilemap/tilemap.gd index cf07359c..1d8b756f 100644 --- a/scenes/tilemap/tilemap.gd +++ b/scenes/tilemap/tilemap.gd @@ -105,7 +105,13 @@ const image_load_proc_names = { set(v): image_load_proc = Callable(image, image_load_proc_names[v]) -func _ready(): +func on_map_centered(toggle_centered: bool): is_centered = toggle_centered + + +func get_marks_count(): return _marks.size() + + +func _ready() -> void: image_type = 'png' $canvas.connect('mouse_entered', func(): _rollover = true) $canvas.connect('mouse_exited', func(): _rollover = false) @@ -117,11 +123,7 @@ func _ready(): unit_nav.connect('data_received', on_data_received) -func on_map_centered(toggle_centered: bool): - is_centered = toggle_centered - - -func on_data_received(coords: Dictionary): +func on_data_received(coords: Dictionary) -> void: if not is_centered: return if coords.has_all(['latitude', 'longitude']): @@ -135,7 +137,7 @@ func _on_resize() -> void: ## Создаёт новую отметку из координат экрана -func add_mark_from_screen_pos(id: int, x: float, y: float, mark: Node): +func add_mark_from_screen_pos(id: int, x: float, y: float, mark: Node) -> bool: if _marks.has(id): return false var wrld_pos = screen_to_world(_xyz, x, y) @@ -148,19 +150,17 @@ func add_mark_from_screen_pos(id: int, x: float, y: float, mark: Node): return true -func get_marks_count(): return _marks.size() - - -func delete_mark(id: int): +func delete_mark(id: int) -> bool: if not _marks.has(id): return false _marks[id].mark.queue_free() _marks.erase(id) queue_redraw() + return true ## Создаёт новую отметку из долготы и широты -func add_mark_from_lon_lat(id: int, lon: float, lat: float, mark: Node, gap_size: float = 32): +func add_mark_from_lon_lat(id: int, lon: float, lat: float, mark: Node, gap_size: float = 32) -> bool: if _marks.has(id): return false var wrld_pos = lonlat_to_world(lon, lat) @@ -173,7 +173,7 @@ func add_mark_from_lon_lat(id: int, lon: float, lat: float, mark: Node, gap_size ## Возвращает новую позицию для точки, если она выходит из поля видимости -func fix_mark_position(dot): +func fix_mark_position(dot) -> void: if is_mark_visible(dot): return var v = 2 * tile_width * pow(2, _xyz.z) @@ -183,12 +183,12 @@ func fix_mark_position(dot): dot.position.x = _xyz.x + $canvas.size.x / v -func is_mark_visible(dot): +func is_mark_visible(dot) -> bool: var screen_pos = world_to_screen(dot.position.x, dot.position.y) return screen_pos.x > 0 and screen_pos.x < $canvas.size.x -func _input(e): +func _input(e) -> void: var lmp = get_local_mouse_position() if not _rollover: return @@ -223,7 +223,7 @@ func is_border_visible(): return screen_to_tile(0, 0, z).y != 0 -func multiply_zoom(multiplier: float, pivot: Vector2): +func multiply_zoom(multiplier: float, pivot: Vector2) -> void: var p1: = screen_to_world(_xyz, pivot.x, pivot.y) _xyz.z = clampf(_xyz.z * multiplier, min_zoom_level, max_zoom_level) var p2: = screen_to_world(_xyz, pivot.x, pivot.y) @@ -231,7 +231,7 @@ func multiply_zoom(multiplier: float, pivot: Vector2): _xyz.y -= p2.y - p1.y -func set_zoom(zoom: float, pivot=null): +func set_zoom(zoom: float, pivot=null) -> void: if pivot == null: pivot = $canvas.size / 2.0 @@ -242,7 +242,7 @@ func set_zoom(zoom: float, pivot=null): _xyz.y -= p2.y - p1.y -func _draw(): +func _draw() -> void: var lmp = get_local_mouse_position() if mouse_wheel_count > 0: @@ -276,7 +276,7 @@ func _draw(): visible_marks_count += int(dot.mark.visible) -func _clean_all(): +func _clean_all() -> void: _queue.clear() _cache.clear() _marks.clear() @@ -287,7 +287,7 @@ func _clean_all(): # get the tile from queue with the newest timestamp -func get_next_in_queue(): +func get_next_in_queue() -> Tile: var tile = null for idx in _queue: var t = _queue.get(idx) @@ -297,7 +297,7 @@ func get_next_in_queue(): # delete oldest tiles from cache -func _clean_cache(): +func _clean_cache() -> void: var overflow = _cache.size() - max_cached_tiles if overflow <= 0: return @@ -308,7 +308,7 @@ func _clean_cache(): _cache.erase(vals[i].i) -func _process(delta): +func _process(delta) -> void: now += delta # if cache is overflowing - clean it @@ -341,8 +341,7 @@ func _process(delta): emit_signal('load_completed') -# result, response_code, headers, body -func _response(result, code, _headers: Array, body: PackedByteArray, req, tile: Tile): +func _response(result, code, _headers: Array, body: PackedByteArray, req, tile: Tile) -> void: _req_count -= 1 remove_child(req) @@ -402,7 +401,7 @@ func _draw_subtile(tx: int, ty: int, tz: int, origx: int, origy: int, origz: flo return false -func _draw_tile(tx: int, ty: int, z: float): +func _draw_tile(tx: int, ty: int, z: float) -> void: var tz = floor(z) var p1 = tile_to_screen(tx, ty, z) var p2 = tile_to_screen(tx + 1, ty + 1, z) @@ -603,8 +602,8 @@ class Tile: self.y = y0 self.z = z0 - -func haversine_m(lat1, lon1, lat2, lon2): +# Возвращает расстояние в метрах между двумя точками на карте +func haversine_m(lat1: float, lon1: float, lat2: float, lon2: float) -> float: # Радиус Земли в метрах const R: = 6372795.0 # Преобразование градусов в радианы @@ -627,16 +626,17 @@ func haversine_m(lat1, lon1, lat2, lon2): return dist -func remove_closest_dot(screen_pos): +func remove_closest_dot(screen_pos: Vector2) -> bool: var closest_dot = find_at_screen_position(screen_pos) if not closest_dot: - return + return false remove_child(closest_dot.mark) closest_dot.mark.queue_free() _marks.erase(closest_dot) + return true -func find_at_screen_position(screen_pos: Vector2): +func find_at_screen_position(screen_pos: Vector2) -> Node: var closest_dot = null var closest_distance = INF for mark in _marks.values(): @@ -653,7 +653,7 @@ func clear() -> void: queue_redraw() -func set_coordinates(lon: float, lat: float): +func set_coordinates(lon: float, lat: float) -> void: var anim: Animation = $player.get_animation('goto') var new_pos = lonlat_to_world(lon, lat) anim.track_insert_key(0, 0, _xyz.x)