From 4a37c1a6734c2561975ddd7509609f2873b49f24 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Fri, 24 Oct 2025 08:33:32 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=81=D0=B5=D0=BA=D1=82=D0=BE=D1=80=D0=B0=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D1=80=D0=B5=D1=82=D1=8B=20=D0=B8=20=D0=BE?= =?UTF-8?q?=D1=82=D0=B2=D0=B5=D1=82=D1=81=D1=82=D0=B2=D0=B5=D0=BD=D0=BD?= =?UTF-8?q?=D0=BE=D0=B9=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- project.godot | 2 +- scenes/работа/работа.gd | 40 ++++++++++++++++++++++++-- scenes/работа/работа.tscn | 44 ++++++++++++++++++++++++++-- scripts/interfer.gd | 60 +++++++++++++++++++++++---------------- scripts/network.gd | 2 +- scripts/signaller.gd | 5 ++++ 6 files changed, 122 insertions(+), 31 deletions(-) diff --git a/project.godot b/project.godot index 43e8826..39bda02 100644 --- a/project.godot +++ b/project.godot @@ -37,7 +37,7 @@ config/emsg_files_path="user://emsg/" config/settings_path="user://settings.json" config/unit_bpo_request_period=20.0 interfer/emit_color=Color(0.58, 0.471, 0.51, 0.2) -interfer/emit_sel_color=Color(1, 1, 1, 1) +interfer/closed_sectors=Color(0, 0, 0, 1) [autoload] diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd index 7ada244..1b06948 100644 --- a/scenes/работа/работа.gd +++ b/scenes/работа/работа.gd @@ -36,6 +36,8 @@ var color_ecm: Color var color_select: Color var color_emit: Color var color_emit_sel: Color +var color_closed: Color +var color_closed_emit: Color var course = 0.0 ## Курс корабля @@ -51,7 +53,8 @@ const map_sizes = [ var fs_band = prd.FS_BAND_RTO ## Текущий режим блоков ФС по частоте var fs_selected: Dictionary ## Словарь выбранных секторов var fs_active: Dictionary ## Словарь секторов назначенных на подавление -var fs_emit: Dictionary ## Словарь секторов назначенных на подавление +var fs_emit: Dictionary ## Словарь секторов назначенных на подавление +var fs_closed: Dictionary ## Словарь для секторов запрета ## Состояние перетаскивания. enum DragFSM { @@ -89,14 +92,19 @@ func on_enter_tree() -> void: call_deferred('on_button_strobe_pressed') func on_settings_changed(): - color_emit_sel = ProjectSettings.get_setting('application/interfer/emit_sel_color', Color(1.0, 1.0, 1.0, 1.0)) color_emit = ProjectSettings.get_setting('application/interfer/emit_color', Color(0.58, 0.47, 0.51, 1.0)) color_ecm = ProjectSettings.get_setting('application/interfer/interfer_color', Color(0.58, 0.47, 0.51, 1.0)) color_select = ProjectSettings.get_setting('application/interfer/select_color', Color(1.0, 1.0, 1.0, 1.0)) + color_closed = ProjectSettings.get_setting('application/interfer/closed_sectors', Color(0.0, 0.0, 0.0, 1.0)) + color_emit_sel = color_select + color_closed_emit = color_closed color_select *= Color(1.0, 1.0, 1.0, 0.0) color_ecm *= Color(1.0, 1.0, 1.0, 0.0) color_emit_sel *= Color(1.0, 1.0, 1.0, 0.2) + color_closed *= Color(1.0, 1.0, 1.0, 0.0) + color_closed_emit *= Color(1.0, 1.0, 1.0, 1.0) + ## Обработчик сигнала изменения списка целей. @@ -145,6 +153,8 @@ func _ready(): btns_select.any(func(btn): btn.button_connect('pressed', Callable(self, 'on_button_select').bind(btn, btns_select))) var nodes: Array = get_tree().get_nodes_in_group('группа-режим-помехи') nodes.any(func(btn): btn.button_connect('pressed', Callable(self, 'on_button_pressed').bind(btn, nodes))) + $btn_close.button_connect('pressed', Callable(self, 'on_btn_close').bind($btn_close)) + $btn_work.button_connect('pressed', Callable(self, 'on_btn_work').bind($btn_work)) threats.connect('threat_new', Callable(self, 'on_threat_new')) threats.connect('threat_lost', Callable(self, 'on_threat_lost')) threats.connect('threats_resized', Callable(self, 'on_threats_resized')) @@ -165,6 +175,7 @@ func _ready(): signaller.connect('map_user_panning', Callable(self, 'on_user_panning')) signaller.connect('update_coordinates_map', Callable(self, 'on_update_coordinates_label')) signaller.connect('update_scale_map', Callable(self, 'on_update_scale_label')) + var unit_nav = network.get_unit_instance('навигация') unit_nav.connect('data_received', on_navi_data_received) on_btn_center_toggled(true) @@ -487,6 +498,11 @@ func update_fs_colors(): fs_colors[key] = color_ecm for key in fs_emit.keys(): fs_colors[key] = color_emit + for key in fs_closed: + if key in fs_emit: + fs_colors[key] = color_closed_emit + else: + fs_colors[key] = color_closed for key in fs_selected.keys(): if key in fs_emit: fs_colors[key] = color_emit_sel @@ -560,3 +576,23 @@ func on_update_coordinates_label(coordinates_label) -> void: func on_update_scale_label(scale_label) -> void: $scale_map.text = str(scale_label) + + +func on_btn_close(btn): + await get_tree().create_timer(0.2).timeout + btn.pressed = false + fs_closed.merge(fs_selected) + signaller.emit_signal('update_fs_closed', fs_closed) + +func on_btn_work(btn): + await get_tree().create_timer(0.2).timeout + btn.pressed = false + fs_closed.clear() + for fs_index in prd.FS_PRD.keys(): + if fs_index in fs_selected: continue + fs_closed[fs_index] = null + signaller.emit_signal('update_fs_closed', fs_closed) + +func _on_btn_all_work_pressed() -> void: + fs_closed.clear() + signaller.emit_signal('update_fs_closed', fs_closed) diff --git a/scenes/работа/работа.tscn b/scenes/работа/работа.tscn index 006c55c..08aba72 100644 --- a/scenes/работа/работа.tscn +++ b/scenes/работа/работа.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=18 format=3 uid="uid://b276iygic5itk"] +[gd_scene load_steps=19 format=3 uid="uid://b276iygic5itk"] [ext_resource type="Script" uid="uid://daudc0s3oox3i" path="res://scenes/работа/работа.gd" id="1_niok4"] [ext_resource type="PackedScene" uid="uid://nl1vklubr5kr" path="res://scenes/bip/bip.tscn" id="2_br3s6"] @@ -13,6 +13,7 @@ [ext_resource type="Texture2D" uid="uid://csdw3q5dtvu4w" path="res://data/power-1.png" id="11_xp4y6"] [ext_resource type="Texture2D" uid="uid://0sk43ticjaxk" path="res://data/navi-center-0.png" id="12_5ffal"] [ext_resource type="Texture2D" uid="uid://bk4ssfho1murp" path="res://data/navi-center-1.png" id="13_ggrwd"] +[ext_resource type="Texture2D" uid="uid://c6booa8753u5t" path="res://data/состояние-исправности-2.png" id="14_ggrwd"] [sub_resource type="Animation" id="Animation_5ffal"] resource_name = "goto" @@ -338,15 +339,52 @@ offset_bottom = 302.0 theme_override_font_sizes/font_size = 20 text = "−" +[node name="btn_close" parent="." instance=ExtResource("8_k0iv2")] +layout_mode = 0 +offset_left = 10.0 +offset_top = 917.0 +offset_right = 109.0 +offset_bottom = 937.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой" +strips_rotation = 25.0 +text = "Сек. запрета" +metadata/state = 0 + +[node name="btn_work" parent="." instance=ExtResource("8_k0iv2")] +layout_mode = 2 +offset_left = 10.0 +offset_top = 890.0 +offset_right = 109.0 +offset_bottom = 910.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой" +strips_rotation = 25.0 +text = "Сек. работы" +metadata/state = 0 + +[node name="btn_all_work" type="TextureButton" parent="."] +modulate = Color(1, 1, 1, 0.356863) +layout_mode = 0 +offset_left = 112.0 +offset_top = 920.0 +offset_right = 336.0 +offset_bottom = 1144.0 +scale = Vector2(0.06, 0.06) +texture_normal = ExtResource("14_ggrwd") + [connection signal="drag_begin" from="." to="." method="_on_drag_begin"] [connection signal="drag_continue" from="." to="." method="_on_drag_continue"] [connection signal="toggled" from="btn_view" to="." method="on_button_view_toggled"] [connection signal="toggled" from="chk_auto" to="." method="on_value_changed"] -[connection signal="toggled" from="btn_activate" to="." method="on_btn_activate"] [connection signal="toggled" from="btn_activate" to="." method="on_btn_activate_toggled"] +[connection signal="toggled" from="btn_activate" to="." method="on_btn_activate"] [connection signal="toggled" from="btn_center" to="." method="on_btn_center_toggled"] [connection signal="button_down" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_down"] -[connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_up"] [connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_button_up"] +[connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_up"] [connection signal="button_down" from="zoom_minus" to="tilemap" method="_on_zoom_minus_button_down"] [connection signal="button_up" from="zoom_minus" to="tilemap" method="_on_zoom_button_up"] +[connection signal="pressed" from="btn_all_work" to="." method="_on_btn_all_work_pressed"] diff --git a/scripts/interfer.gd b/scripts/interfer.gd index 8d0b429..2b4e62b 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -107,6 +107,8 @@ var course = 0.0 ## Курс корабля var gos_flag = true ## Флаг работать по своим целям var gos_protocols: PackedStringArray ## Список протоколов своих целей var gos_nmfs: Array ## Список номеров блоков ФС для которых запрещена работа +var fs_closed: Dictionary ## Словарь секторов запрета + ## Сеанс помехи. class Interfer: @@ -207,6 +209,7 @@ func _ready() -> void: signaller.connect('interfer_prinuditelno', Callable(self, 'on_interfer_prinuditelno')) signaller.connect('emit_changed', Callable(self, 'on_emit_changed').bind(ecms)) signaller.connect('режим_тренаж', on_trenazh_mode) + signaller.connect('update_fs_closed', Callable(self, 'on_update_fs_closed')) threats.connect('threat_lost', Callable(self, 'on_threats_lost').bind(ecms, unit_caps)) threats.connect('threats_resized', Callable(self, 'on_threats_resized')) threats.connect('threat_update', Callable(self, 'on_threats_update').bind(ecms, unit_caps)) @@ -272,35 +275,38 @@ func on_th_aoa_update(threats: Dictionary, ecms: Dictionary, unit_instance) -> v ecm.kni += 360 call_ecm_proc(ecm) if ecm.nmfs in gos_nmfs: - ecm.krp = INTERFER_OFF - send_ecm(ecm, unit_instance) - signaller.emit_signal('interfer_off', ecm) + interfer_off(ecm, unit_instance) + elif prd.fs_caps_id[ecm.nmfs] in fs_closed: + interfer_off(ecm, unit_instance) else: send_ecm(ecm, unit_instance) signaller.emit_signal('fs_update_color', ecms) prd.update_fs_state(ecms, trenazh_mode) - if not gos_flag: - for ecm in ecms.values(): - if not (ecm.nmfs in gos_nmfs): continue - ecm.krp = INTERFER_OFF - send_ecm(ecm, unit_instance) - signaller.emit_signal('interfer_off', ecm) + + for ecm in ecms.values(): + var ecm_active = true + if not gos_flag: + if ecm.nmfs in gos_nmfs: + interfer_off(ecm, unit_instance) + ecm_active = false + if ecm_active and (prd.fs_caps_id[ecm.nmfs] in fs_closed): + interfer_off(ecm, unit_instance) if not auto_enabled: return if auto_enabled: for thr in threats.values(): - if not gos_flag: - var fs_arr: Array = [] - prd.find_fs_index(thr.aoa, thr.freq, fs_arr) - if fs_arr.size(): - var need_continue = false - for item in fs_arr: - var nmfs = prd.FS_PRD[item][1] - if nmfs in gos_nmfs: need_continue = true - if need_continue: continue + var fs_arr: Array = [] + prd.find_fs_index(thr.aoa, thr.freq, fs_arr) + if fs_arr.size(): + var need_continue = false + for item in fs_arr: + var nmfs = prd.FS_PRD[item][1] + if (nmfs in gos_nmfs) and (not gos_flag): need_continue = true + if prd.fs_caps_id[nmfs] in fs_closed: need_continue = true + if need_continue: continue thr.auto_selected = true if (thr.rkrp != '') and thr.fflags.rkrp and auto_enabled: var krp = get_krp(thr) @@ -482,9 +488,7 @@ func send_ecm(ecm, unit0) -> void: func on_interfer_off_all(unit0, ecms: Dictionary) -> void: for ecm in ecms.values(): - ecm.krp = INTERFER_OFF - send_ecm(ecm, unit0) - signaller.emit_signal('interfer_off', ecm) + interfer_off(ecm, unit0) func on_threats_lost(th, ecms, unit0) -> void: @@ -492,9 +496,7 @@ func on_threats_lost(th, ecms, unit0) -> void: if interfer.thrs[key] == th.id: var ecm_id = key var ecm = ecms[ecm_id] - ecm.krp = INTERFER_OFF - send_ecm(ecm, unit0) - signaller.emit_signal('interfer_off', ecm) + interfer_off(ecm, unit0) func pop_id() -> int: @@ -684,6 +686,12 @@ func on_interfer_off(ecm: Interfer, ecms): interfer.call_deferred('emit_signal', 'interfer_resized', ecms) +func interfer_off(ecm, unit_caps): + ecm.krp = INTERFER_OFF + send_ecm(ecm, unit_caps) + signaller.emit_signal('interfer_off', ecm) + + func on_interfer_new(ecm, unit_caps): call_ecm_proc(ecm) send_ecm(ecm, unit_caps) @@ -700,3 +708,7 @@ func call_ecm_proc(ecm): if ecm_params.has('call_proc'): var call_set_params = Callable(self, ecm_params['call_proc']).bind(ecm, ecm_params) call_set_params.call() + + +func on_update_fs_closed(fs_dict): + fs_closed = fs_dict diff --git a/scripts/network.gd b/scripts/network.gd index a895016..dea8706 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -1,4 +1,4 @@ -@tool +#@tool class_name Network extends Node const YAU07_PROTO: = {'yau07tx': yau07.YaU07} diff --git a/scripts/signaller.gd b/scripts/signaller.gd index 8a4ca5c..05663b7 100644 --- a/scripts/signaller.gd +++ b/scripts/signaller.gd @@ -201,3 +201,8 @@ signal update_uf_serviceability(uf_serviceaability: bool) signal tool_tip(new_ctrl_pos) + + +## Вызывается при изменении секторов запрета.[br] +## [param fs_closed] - обновленное секторов запрета ([b]true[/b] +signal update_fs_closed(fs_closed: Dictionary)