Рефактор.

This commit is contained in:
sasha80
2025-05-22 10:21:59 +03:00
parent bcd109f6a7
commit b1e9ffe10f

View File

@@ -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)