Движение кораблика по координатам. Экран ЭМС ТГ
This commit is contained in:
@@ -5,6 +5,7 @@ class_name MercatorTileMap
|
||||
## Отображение карт WEB Mercator
|
||||
|
||||
#http://10.1.1.220/osm_tiles/0/0/0.png
|
||||
#http://169.254.27.71:8001/osm_tiles/{z}/{x}/{y}.png
|
||||
#https://tile.openstreetmap.org/{z}/{x}/{y}.png
|
||||
@export var base_url: String = 'https://tile.openstreetmap.org/{z}/{x}/{y}.png':
|
||||
set(v):
|
||||
@@ -146,11 +147,12 @@ func _ready() -> void:
|
||||
signaller.connect('map_centered', on_map_centered)
|
||||
if not Engine.is_editor_hint():
|
||||
var unit_nav = network.get_unit_instance('навигация')
|
||||
unit_nav.connect('data_received', on_data_received)
|
||||
unit_nav.connect('data_received', Callable(self, 'on_data_received'))
|
||||
ProjectSettings.connect('settings_changed', _settings_changed)
|
||||
threats.connect('threat_new', Callable(self, '_on_threat_new'))
|
||||
threats.connect('threat_lost', Callable(self, '_on_threat_lost'))
|
||||
threats.connect('threat_update', Callable(self, '_on_threat_update'))
|
||||
|
||||
|
||||
|
||||
func _settings_changed():
|
||||
@@ -194,7 +196,7 @@ func add_mark_from_lon_lat(id: int, lon: float, lat: float, mark: Node, gap_size
|
||||
if _marks.has(id):
|
||||
return false
|
||||
var wrld_pos: Vector2 = lonlat_to_world(lon, lat)
|
||||
_marks[id] = {'position': wrld_pos, 'mark': mark, 'gap_size': gap_size}
|
||||
_marks[id] = {'id': id, 'position': wrld_pos, 'mark': mark, 'gap_size': gap_size} # Добавляем ID
|
||||
add_child(mark)
|
||||
queue_redraw()
|
||||
return true
|
||||
@@ -292,20 +294,15 @@ func _draw() -> void:
|
||||
for tx in range(t1.x, t2.x):
|
||||
for ty in range(t1.y, t2.y):
|
||||
_draw_tile(tx, ty, z)
|
||||
# Рисование отметок
|
||||
var n: = pow(2, z)
|
||||
var dx: = n * tile_width
|
||||
var c: Vector2 = $canvas.size / 2.0
|
||||
var r: float = c.length()
|
||||
visible_marks_count = 0
|
||||
for dot in _marks.values():
|
||||
var scr_pos: Vector2 = world_to_screen(dot.position)
|
||||
scr_pos.x = posmod(int(scr_pos.x), int(dx))
|
||||
dot.mark.position = scr_pos
|
||||
var screen_pos = world_to_screen(dot.position)
|
||||
dot.mark.position = screen_pos
|
||||
dot.mark.visible = is_mark_visible(dot)
|
||||
dot.mark.visible = c.distance_to(scr_pos) < (r - dot.gap_size)
|
||||
dot.mark.visible = c.distance_to(screen_pos) < (r - dot.gap_size)
|
||||
visible_marks_count += int(dot.mark.visible)
|
||||
# Рисование границ
|
||||
var p1: Vector2 = $canvas.position
|
||||
var p2: Vector2 = $canvas.size / Vector2(1, 20)
|
||||
if is_out_border1 and _dragging:
|
||||
@@ -313,7 +310,6 @@ func _draw() -> void:
|
||||
p1.y = p1.y + $canvas.size.y - p2.y
|
||||
if is_out_border2 and _dragging:
|
||||
draw_texture_rect(border2, Rect2(p1, p2), false, Color.WHITE, false)
|
||||
|
||||
if should_draw_ship_radius():
|
||||
draw_ship_radius()
|
||||
|
||||
@@ -710,8 +706,8 @@ func set_coordinates(lon: float, lat: float, course: float) -> void:
|
||||
ship_instance = ship_mark.instantiate()
|
||||
add_mark_from_lon_lat(ship_id, lon, lat, ship_instance, 0.0)
|
||||
else:
|
||||
ship_instance.position = lonlat_to_world(lon, lat)
|
||||
ship_instance.rotation_degrees = course - 90
|
||||
_marks[ship_id].position = lonlat_to_world(lon, lat)
|
||||
queue_redraw()
|
||||
|
||||
|
||||
func blend_mask(val: bool) -> void:
|
||||
|
||||
Reference in New Issue
Block a user