Доработка. Центрирование карты по текущим координатам

This commit is contained in:
sasha80
2025-04-22 14:34:09 +03:00
parent 167e7589ef
commit 04021d307e
3 changed files with 28 additions and 4 deletions

View File

@@ -23,6 +23,8 @@ class_name MercatorTileMap
@export_color_no_alpha() var back_color: = Color.BLACK
@export var animation_time: float = 1.0
const default_size: = 400.0
var is_centered: = false
@export var size: Vector2i = Vector2i(default_size, default_size):
set(v):
@@ -105,9 +107,17 @@ func _ready():
var key = settings.get_unit_key('навигация')
var unit_nav = network.units[key]
unit_nav.connect('data_received', on_data_received)
signaller.conn(signaller.map_centered, on_map_centered)
func on_map_centered(toggle_centered: bool):
is_centered = toggle_centered
print_debug(is_centered)
func on_data_received(coords: Dictionary):
if not is_centered:
return
if coords.has_all(['latitude', 'longitude']):
set_coordinates(coords['longitude'], coords['latitude'])
@@ -197,6 +207,8 @@ func _input(e):
_xyz.x += diff.x
_xyz.y += diff.y
queue_redraw()
if diff.length() > 0:
signaller.emmit(signaller.map_user_panning)
## Возвращает true, если видна область за краем карты

View File

@@ -131,10 +131,15 @@ func _ready():
interfer.connect('interfer_update', Callable(self, 'on_interfer_new'))
signaller.connect('interfer_prinuditelno', Callable(self, 'on_chk_interfer_prinuditelno'))
signaller.connect('fs_update_state', Callable(self, 'on_fs_update_state'))
on_btn_center_toggled(false)
signaller.connect('map_user_panning', Callable(self, 'on_user_panning'))
on_btn_center_toggled(true)
on_btn_activate_toggled(false)
func on_user_panning():
$btn_center.button_pressed = false
func on_chk_interfer_prinuditelno(_interfer_sectors):
$chk_auto.set_pressed_no_signal(false)
on_value_changed(false)
@@ -517,6 +522,7 @@ func on_fs_update_state(_fs_dict: Dictionary):
func on_btn_center_toggled(toggled_on: bool) -> void:
$btn_center.tooltip_text = 'Центрирует карту на текущие координаты (%s)' % ('включено' if toggled_on else 'отключено')
signaller.emit_signal('map_centered', toggled_on)
func on_btn_activate_toggled(toggled_on: bool) -> void:

View File

@@ -133,13 +133,19 @@ signal interfer_selected(ecm: interfer.Interfer)
signal fs_selected(ecm: interfer.Interfer)
## Вызывается при изменении координат карты.[br]
## Вызывается при смещении карты пользователем.[br]
## [param lan], [param lat] - Вновь установленные координаты.
signal map_coords_changed(lan: float, lat: float)
signal map_user_panning()
## Вызывается при изменении режима центрирования карты.[br]
## [param is_centered] - Карта центрирована по текущим координатам ([b]true[/b]
## - да, [b]false[/b] - нет)
signal map_centered(is_centered: bool)
## Вызывается при изменении размера изображения для отображения карты.[br]
## [param mode] - Вновь установленный режим.
## [param mode] - Вновь установленный режим/
signal map_mode_changed(mode: int)