From 67942886d33e3996575be266ec5252fb9736f549 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Thu, 9 Nov 2023 11:07:57 +0300 Subject: [PATCH 1/2] =?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=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BD=D0=B0=D0=B6=D0=B0=D1=82=D0=B8=D0=B9=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=86=D0=B5=D0=BB=D0=B8=20=D0=B8=20=D0=B2=D1=8B?= =?UTF-8?q?=D0=B1=D0=BE=D1=80=20=D1=86=D0=B5=D0=BB=D0=B8=20=D0=B2=20=D1=82?= =?UTF-8?q?=D0=B0=D0=B1=D0=BB=D0=B8=D1=86=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/bip.gd | 9 +++++-- scenes/bip.tscn | 39 ++++++++++++++-------------- scenes/btn_scale.tscn | 4 +-- scenes/canvas.tscn | 20 +++++++-------- scenes/scroll-threats.gd | 12 +++++++++ scenes/tab-switch.tscn | 24 +++++++++--------- scenes/tilemap.gd | 1 - scenes/работа.gd | 19 ++++++++++++++ scenes/работа.tscn | 52 +++++++++++++++++++------------------- scripts/signaller.gd | 7 ++++- scripts/threats.gd | 17 +++++++++++++ shaders/select_tr.gdshader | 4 +-- shaders/tracked.gdshader | 2 +- 13 files changed, 133 insertions(+), 77 deletions(-) diff --git a/scenes/bip.gd b/scenes/bip.gd index 94badd2..2898914 100644 --- a/scenes/bip.gd +++ b/scenes/bip.gd @@ -11,5 +11,10 @@ func _process(delta): pass -func _on_pressed(): - print_debug('Click') +# Функция делает присваивает заданое значение видимости селектору +func set_sel_visible(value: bool): + $selector.visible = value + + +func _on_bip_pressed(): + signaller.emit_signal('rto_threat_sel', self) diff --git a/scenes/bip.tscn b/scenes/bip.tscn index 9980797..bce126b 100644 --- a/scenes/bip.tscn +++ b/scenes/bip.tscn @@ -1,11 +1,11 @@ [gd_scene load_steps=12 format=3 uid="uid://nl1vklubr5kr"] -[ext_resource type="Script" path="res://scenes/bip.gd" id="1_23kyy"] -[ext_resource type="Shader" path="res://shaders/bip.gdshader" id="2_w4jcf"] -[ext_resource type="Shader" path="res://shaders/tracked.gdshader" id="3_d16rn"] +[ext_resource type="Script" path="res://scenes/bip.gd" id="1_dag5j"] +[ext_resource type="Shader" path="res://shaders/bip.gdshader" id="2_7w7lp"] +[ext_resource type="Shader" path="res://shaders/tracked.gdshader" id="3_p7omr"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_2dulj"] -shader = ExtResource("2_w4jcf") +shader = ExtResource("2_7w7lp") shader_parameter/color = Color(0.972549, 0.12549, 0.411765, 1) shader_parameter/color_up = Color(1, 1, 1, 1) shader_parameter/tick_update = 0 @@ -112,7 +112,7 @@ shader_parameter/speed = -73.0 shader_parameter/ant_band_count_0 = 9 [sub_resource type="ShaderMaterial" id="ShaderMaterial_lkrha"] -shader = ExtResource("3_d16rn") +shader = ExtResource("3_p7omr") shader_parameter/ColorFig = Color(0, 0.862745, 0, 1) shader_parameter/point_1 = Vector2(0.125, 0) shader_parameter/point_2 = Vector2(0.125, 0.036) @@ -127,43 +127,42 @@ shader_parameter/speed = 71.0 [sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_svd33"] -[node name="Control" type="Control"] +[node name="threat" type="Control"] layout_mode = 3 anchors_preset = 0 -offset_right = 31.0 -offset_bottom = 30.0 -script = ExtResource("1_23kyy") +offset_right = 40.0 +offset_bottom = 40.0 +script = ExtResource("1_dag5j") [node name="bip" type="TextureButton" parent="."] material = SubResource("ShaderMaterial_2dulj") layout_direction = 1 layout_mode = 0 -offset_right = 3.0 -offset_bottom = 3.0 -scale = Vector2(10, 10) +offset_right = 1.0 +offset_bottom = 1.0 +scale = Vector2(20, 20) texture_normal = SubResource("PlaceholderTexture2D_w5pye") stretch_mode = 3 -script = ExtResource("1_23kyy") [node name="selector" type="Sprite2D" parent="."] visible = false material = SubResource("ShaderMaterial_fkqwb") -position = Vector2(10, 10) -scale = Vector2(10, 10) +scale = Vector2(20, 20) texture = SubResource("PlaceholderTexture2D_hqs6j") centered = false [node name="recomendation" type="Sprite2D" parent="."] +visible = false material = SubResource("ShaderMaterial_lpmq6") -position = Vector2(10, 10) -scale = Vector2(10, 10) +scale = Vector2(20, 20) texture = SubResource("PlaceholderTexture2D_hqs6j") centered = false [node name="track" type="Sprite2D" parent="."] +visible = false material = SubResource("ShaderMaterial_lkrha") -position = Vector2(15, 15) -scale = Vector2(13, 13) +position = Vector2(10, 10) +scale = Vector2(26, 26) texture = SubResource("PlaceholderTexture2D_svd33") -[connection signal="pressed" from="bip" to="bip" method="_on_pressed"] +[connection signal="pressed" from="bip" to="." method="_on_bip_pressed"] diff --git a/scenes/btn_scale.tscn b/scenes/btn_scale.tscn index 9611706..4cd3346 100644 --- a/scenes/btn_scale.tscn +++ b/scenes/btn_scale.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://0uqi1ghf7sma"] -[ext_resource type="Texture2D" uid="uid://c1maea6yhd3k7" path="res://data/кнопка-масштаб.png" id="1_r871k"] +[ext_resource type="Texture2D" uid="uid://c1maea6yhd3k7" path="res://data/кнопка-масштаб.png" id="1_qmk0r"] [node name="btn_scale" type="TextureButton"] self_modulate = Color(1, 1, 1, 0.509804) @@ -8,7 +8,7 @@ offset_right = 152.0 offset_bottom = 18.0 tooltip_text = "Измененяет масштаб" action_mode = 0 -texture_normal = ExtResource("1_r871k") +texture_normal = ExtResource("1_qmk0r") ignore_texture_size = true stretch_mode = 0 metadata/i_scale = 0 diff --git a/scenes/canvas.tscn b/scenes/canvas.tscn index 1302ada..9935eec 100644 --- a/scenes/canvas.tscn +++ b/scenes/canvas.tscn @@ -1,16 +1,16 @@ [gd_scene load_steps=7 format=3 uid="uid://b5kjdyxuwsot5"] -[ext_resource type="Material" uid="uid://s6xe8igevnv2" path="res://shaders/shader_edu.tres" id="1_27ax3"] -[ext_resource type="Script" path="res://scenes/canvas.gd" id="2_5wost"] -[ext_resource type="PackedScene" uid="uid://c73ahpv8uiuc7" path="res://scenes/sector.tscn" id="3_rminv"] -[ext_resource type="Shader" path="res://shaders/sector.gdshader" id="4_nkch3"] +[ext_resource type="Material" uid="uid://s6xe8igevnv2" path="res://shaders/shader_edu.tres" id="1_41nty"] +[ext_resource type="Script" path="res://scenes/canvas.gd" id="2_ci66x"] +[ext_resource type="PackedScene" uid="uid://c73ahpv8uiuc7" path="res://scenes/sector.tscn" id="3_4r7tl"] +[ext_resource type="Shader" path="res://shaders/sector.gdshader" id="4_4000y"] [sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_2bft1"] size = Vector2(1600, 1200) -[sub_resource type="ShaderMaterial" id="ShaderMaterial_vipcu"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_uqrmv"] resource_local_to_scene = true -shader = ExtResource("4_nkch3") +shader = ExtResource("4_4000y") shader_parameter/color = Color(1, 1, 1, 0.168627) shader_parameter/clip_color = Color(1, 0.5, 0.5, 1) shader_parameter/width = 45.0 @@ -20,12 +20,12 @@ shader_parameter/dir = 0.0 shader_parameter/inner_clip = 0.045 [node name="canvas" type="Sprite2D"] -material = ExtResource("1_27ax3") +material = ExtResource("1_41nty") texture = SubResource("PlaceholderTexture2D_2bft1") centered = false -script = ExtResource("2_5wost") +script = ExtResource("2_ci66x") -[node name="строб" parent="." instance=ExtResource("3_rminv")] -material = SubResource("ShaderMaterial_vipcu") +[node name="строб" parent="." instance=ExtResource("3_4r7tl")] +material = SubResource("ShaderMaterial_uqrmv") position = Vector2(560, 560) scale = Vector2(1100, 1100) diff --git a/scenes/scroll-threats.gd b/scenes/scroll-threats.gd index 45d5791..2c65589 100644 --- a/scenes/scroll-threats.gd +++ b/scenes/scroll-threats.gd @@ -22,6 +22,7 @@ func on_row_pressed(i_row: int): signaller.emit_signal('threat_selected', threat) + func init_table(): $table.set_header(TABLE_HEADER) $table.set_header_text(TABLE_HEADERS_TEXT) @@ -34,6 +35,7 @@ func _ready() -> void: threats.connect('threat_new', Callable(self, 'on_threat_new').bind(table_index)) threats.connect('threat_lost', Callable(self, 'on_threat_lost').bind(table_index)) threats.connect('threat_update', Callable(self, 'on_threat_update').bind(table_index)) + signaller.connect('rto_threat_sel', Callable(self, 'on_rto_threat_sel').bind($table)) $table.connect('row_pressed', Callable(self, 'on_row_pressed')) call_deferred('init_table') @@ -80,3 +82,13 @@ func map_th_to_row(th) -> Array: row[i_col] = '%s' % th.get(param_name) i_col += 1 return row + + +## Выделяет выбранную цель в таблице +func on_rto_threat_sel(bip, tbl): + for i in tbl.get_rows_count(): + var node = tbl.get_node2(0, i) + if node.text.to_int() == bip.name.to_int(): + on_row_pressed(i) + break + diff --git a/scenes/tab-switch.tscn b/scenes/tab-switch.tscn index a580ec7..31d472f 100644 --- a/scenes/tab-switch.tscn +++ b/scenes/tab-switch.tscn @@ -1,32 +1,32 @@ [gd_scene load_steps=7 format=3 uid="uid://3slb0i3pvowc"] -[ext_resource type="Script" path="res://scenes/tab-switch.gd" id="1_qroqt"] -[ext_resource type="PackedScene" uid="uid://b276iygic5itk" path="res://scenes/работа.tscn" id="2_pdbvn"] -[ext_resource type="PackedScene" uid="uid://lwmw4egynmd1" path="res://scenes/контроль.tscn" id="3_2apbp"] -[ext_resource type="PackedScene" uid="uid://trt0q8th3bn2" path="res://scenes/журнал.tscn" id="4_yq6c0"] -[ext_resource type="PackedScene" uid="uid://dab6loryocc73" path="res://scenes/эмс.tscn" id="5_tlyql"] -[ext_resource type="PackedScene" uid="uid://bnptm4rlp60dq" path="res://scenes/настройки.tscn" id="6_rxq15"] +[ext_resource type="Script" path="res://scenes/tab-switch.gd" id="1_ddefd"] +[ext_resource type="PackedScene" uid="uid://b276iygic5itk" path="res://scenes/работа.tscn" id="2_dgwu2"] +[ext_resource type="PackedScene" uid="uid://lwmw4egynmd1" path="res://scenes/контроль.tscn" id="3_wh23t"] +[ext_resource type="PackedScene" uid="uid://trt0q8th3bn2" path="res://scenes/журнал.tscn" id="4_38go3"] +[ext_resource type="PackedScene" uid="uid://dab6loryocc73" path="res://scenes/эмс.tscn" id="5_qasm0"] +[ext_resource type="PackedScene" uid="uid://bnptm4rlp60dq" path="res://scenes/настройки.tscn" id="6_h83md"] [node name="tab_switch" type="TabContainer"] offset_right = 1600.0 offset_bottom = 1200.0 -script = ExtResource("1_qroqt") +script = ExtResource("1_ddefd") -[node name="Работа" parent="." instance=ExtResource("2_pdbvn")] +[node name="Работа" parent="." instance=ExtResource("2_dgwu2")] layout_mode = 2 -[node name="Контроль" parent="." instance=ExtResource("3_2apbp")] +[node name="Контроль" parent="." instance=ExtResource("3_wh23t")] visible = false layout_mode = 2 -[node name="Журнал" parent="." instance=ExtResource("4_yq6c0")] +[node name="Журнал" parent="." instance=ExtResource("4_38go3")] visible = false layout_mode = 2 -[node name="ЭМС" parent="." instance=ExtResource("5_tlyql")] +[node name="ЭМС" parent="." instance=ExtResource("5_qasm0")] visible = false layout_mode = 2 -[node name="Настройки" parent="." instance=ExtResource("6_rxq15")] +[node name="Настройки" parent="." instance=ExtResource("6_h83md")] visible = false layout_mode = 2 diff --git a/scenes/tilemap.gd b/scenes/tilemap.gd index 03f36bd..9041369 100644 --- a/scenes/tilemap.gd +++ b/scenes/tilemap.gd @@ -17,7 +17,6 @@ var map_bcs: Vector3 ## Яркость, контра func _ready(): # Create an HTTP request node and connect its completion signal. var tile = mercantile.Tile.new() - print_debug('Плитка: %s %s' % [tile, tile.is_valid()]) var http_request = HTTPRequest.new() add_child(http_request) http_request.request_completed.connect(self._http_request_completed) diff --git a/scenes/работа.gd b/scenes/работа.gd index 44858fa..c39b5d3 100644 --- a/scenes/работа.gd +++ b/scenes/работа.gd @@ -64,6 +64,8 @@ func _ready(): threats.connect('threat_lost', Callable(self, 'on_threat_lost')) threats.connect('threats_resized', Callable(self, 'on_threats_resized')) threats.connect('threat_update', Callable(self, 'on_threat_update')) + signaller.connect('rto_threat_sel', Callable(self, 'on_rto_threat_sel')) + signaller.connect('threat_selected', Callable(self, 'on_threat_selected')) ## Производит отображение цели на диаграмму @@ -99,6 +101,23 @@ func on_threat_lost(th) -> void: bip.free() +## Обработчик выбора РТО цели +func on_rto_threat_sel(bip): + var bips: Array = get_children().filter(func(item): return item.name.is_valid_int()) + for item in bips: + item.set_sel_visible(false) + bip.set_sel_visible(true) + + +func on_threat_selected(th): + var bips: Array = get_children().filter(func(item): return item.name.is_valid_int()) + for item in bips: + if th.id == item.name.to_int(): + item.set_sel_visible(true) + else: + item.set_sel_visible(false) + + ## Обработчик нажатия кнопки "Строб". Управляет отображением строба func on_button_strobe_pressed() -> void: drag_fsm = DragFSM.IDLE if $btn_strob.is_pressed() else DragFSM.OFF diff --git a/scenes/работа.tscn b/scenes/работа.tscn index 7f8d630..b03abb7 100644 --- a/scenes/работа.tscn +++ b/scenes/работа.tscn @@ -1,25 +1,25 @@ [gd_scene load_steps=13 format=3 uid="uid://b276iygic5itk"] -[ext_resource type="Script" path="res://scenes/работа.gd" id="1_vmjjl"] -[ext_resource type="PackedScene" uid="uid://nl1vklubr5kr" path="res://scenes/bip.tscn" id="2_ew6j4"] -[ext_resource type="PackedScene" uid="uid://dem3fcec25awh" path="res://scenes/grd_side.tscn" id="3_7lxgd"] -[ext_resource type="PackedScene" uid="uid://cnkbk53mi7viu" path="res://scenes/grd_btns.tscn" id="5_0a5o3"] -[ext_resource type="PackedScene" uid="uid://dymo732qc2doa" path="res://scenes/count_all_pad.tscn" id="6_l7wyl"] -[ext_resource type="PackedScene" uid="uid://bwti82byphl68" path="res://scenes/count_danger_pad.tscn" id="7_f41cy"] -[ext_resource type="PackedScene" uid="uid://b5kjdyxuwsot5" path="res://scenes/canvas.tscn" id="7_pvt8f"] -[ext_resource type="PackedScene" uid="uid://da7w3vkhadfwe" path="res://scenes/button-flat.tscn" id="8_r2k1p"] -[ext_resource type="PackedScene" uid="uid://0uqi1ghf7sma" path="res://scenes/btn_scale.tscn" id="8_xddop"] -[ext_resource type="PackedScene" uid="uid://bbq6nklh36yij" path="res://scenes/tilemap.tscn" id="10_wpi4s"] -[ext_resource type="Shader" path="res://shaders/tilemap.gdshader" id="11_7ohqv"] +[ext_resource type="Script" path="res://scenes/работа.gd" id="1_rb8fv"] +[ext_resource type="PackedScene" uid="uid://nl1vklubr5kr" path="res://scenes/bip.tscn" id="2_1ntlf"] +[ext_resource type="PackedScene" uid="uid://dem3fcec25awh" path="res://scenes/grd_side.tscn" id="3_6vmv5"] +[ext_resource type="PackedScene" uid="uid://b5kjdyxuwsot5" path="res://scenes/canvas.tscn" id="4_7dvd8"] +[ext_resource type="PackedScene" uid="uid://cnkbk53mi7viu" path="res://scenes/grd_btns.tscn" id="5_kpx5b"] +[ext_resource type="PackedScene" uid="uid://dymo732qc2doa" path="res://scenes/count_all_pad.tscn" id="6_x6urv"] +[ext_resource type="PackedScene" uid="uid://bwti82byphl68" path="res://scenes/count_danger_pad.tscn" id="7_b0iag"] +[ext_resource type="PackedScene" uid="uid://da7w3vkhadfwe" path="res://scenes/button-flat.tscn" id="8_cha28"] +[ext_resource type="PackedScene" uid="uid://0uqi1ghf7sma" path="res://scenes/btn_scale.tscn" id="9_e8unk"] +[ext_resource type="PackedScene" uid="uid://bbq6nklh36yij" path="res://scenes/tilemap.tscn" id="10_rp4rk"] +[ext_resource type="Shader" path="res://shaders/tilemap.gdshader" id="11_ked7m"] -[sub_resource type="ShaderMaterial" id="ShaderMaterial_whr8j"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_xpefk"] resource_local_to_scene = true -shader = ExtResource("11_7ohqv") +shader = ExtResource("11_ked7m") shader_parameter/radius = 0.4 [node name="Работа" type="Panel"] -script = ExtResource("1_vmjjl") -Bip = ExtResource("2_ew6j4") +script = ExtResource("1_rb8fv") +Bip = ExtResource("2_1ntlf") col_grey = Color(0.34902, 0.643137, 0.772549, 0.168627) col_red = Color(1, 0.568627, 0.431373, 0.239216) drag_scale_band = 0.05 @@ -36,7 +36,7 @@ strob_min_width = 5.0 metadata/_edit_vertical_guides_ = [] metadata/_edit_lock_ = true -[node name="grd_side" parent="." instance=ExtResource("3_7lxgd")] +[node name="grd_side" parent="." instance=ExtResource("3_6vmv5")] layout_mode = 0 offset_left = 1114.0 offset_top = 7.0 @@ -44,10 +44,10 @@ offset_right = 1594.0 offset_bottom = 1170.0 metadata/_edit_lock_ = true -[node name="canvas" parent="." instance=ExtResource("7_pvt8f")] +[node name="canvas" parent="." instance=ExtResource("4_7dvd8")] metadata/_edit_lock_ = true -[node name="grd_btns" parent="." instance=ExtResource("5_0a5o3")] +[node name="grd_btns" parent="." instance=ExtResource("5_kpx5b")] layout_mode = 0 offset_left = 10.0 offset_top = 1116.0 @@ -55,14 +55,14 @@ offset_right = 1106.0 offset_bottom = 1170.0 metadata/_edit_lock_ = true -[node name="count_all_pad" parent="." instance=ExtResource("6_l7wyl")] +[node name="count_all_pad" parent="." instance=ExtResource("6_x6urv")] layout_mode = 0 offset_left = 100.0 offset_top = 117.0 offset_right = 133.0 offset_bottom = 140.0 -[node name="count_danger_pad" parent="." instance=ExtResource("7_f41cy")] +[node name="count_danger_pad" parent="." instance=ExtResource("7_b0iag")] layout_mode = 0 offset_left = 96.0 offset_top = 29.0 @@ -94,7 +94,7 @@ offset_right = 83.0 offset_bottom = 72.0 text = "Опасных:" -[node name="btn_auto_threat" parent="." instance=ExtResource("8_r2k1p")] +[node name="btn_auto_threat" parent="." instance=ExtResource("8_cha28")] layout_mode = 0 offset_left = 1034.0 offset_top = 7.0 @@ -104,7 +104,7 @@ size_flags_horizontal = 3 size_flags_vertical = 3 text = "Автомат" -[node name="btn_strob" parent="." instance=ExtResource("8_r2k1p")] +[node name="btn_strob" parent="." instance=ExtResource("8_cha28")] layout_mode = 2 offset_left = 1034.0 offset_top = 67.0 @@ -115,7 +115,7 @@ size_flags_vertical = 3 tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой" text = "Строб" -[node name="btn_view" parent="." instance=ExtResource("8_r2k1p")] +[node name="btn_view" parent="." instance=ExtResource("8_cha28")] layout_mode = 2 offset_left = 874.0 offset_top = 1023.0 @@ -125,15 +125,15 @@ size_flags_horizontal = 3 size_flags_vertical = 3 text = "Вид" -[node name="btn_scale" parent="." instance=ExtResource("8_xddop")] +[node name="btn_scale" parent="." instance=ExtResource("9_e8unk")] layout_mode = 0 offset_left = 952.0 offset_top = 1038.0 offset_right = 1104.0 offset_bottom = 1056.0 -[node name="tilemap" parent="." instance=ExtResource("10_wpi4s")] -material = SubResource("ShaderMaterial_whr8j") +[node name="tilemap" parent="." instance=ExtResource("10_rp4rk")] +material = SubResource("ShaderMaterial_xpefk") [connection signal="drag_begin" from="." to="." method="_on_drag_begin"] [connection signal="drag_continue" from="." to="." method="_on_drag_continue"] diff --git a/scripts/signaller.gd b/scripts/signaller.gd index 03383b8..f60f3a4 100644 --- a/scripts/signaller.gd +++ b/scripts/signaller.gd @@ -5,7 +5,7 @@ class_name Signaller extends Node ## два и более узла, из разных файлов. -## Вызывается, когда оператор выбирает цель. +## Вызывается, когда оператор выбирает цель в таблице. ## [param threats] - Словарь. Ключ - идентификатор (номер) цели. Значение - цель [br] ## [param th] - Выбранная цель [br] signal threat_selected(threats: Dictionary, th) @@ -20,3 +20,8 @@ signal threat_unselected(threats: Dictionary, th) ## Вызывается, когда пользователь переключает режим окна программы полный экран - оконный ## [param id] - Идентификатор окна. Присваевается вручную signal full_screen(id: int) + + +## Вызывается, когда пользователь выбирает цель +## [param bip] - Отметка цели на экране +signal rto_threat_sel (bip: Control) diff --git a/scripts/threats.gd b/scripts/threats.gd index ed2c9af..3411101 100644 --- a/scripts/threats.gd +++ b/scripts/threats.gd @@ -26,6 +26,7 @@ class Threat: var tick_rx: int ## Тик время обновления цели, мс. var tmod: String ## Тип модуляции. var width: float ## Ширина занимаемого диапазона частот, МГц. + var selected: bool ## Флаг, что цель выбрана func _init(): clear_fflags() func _to_string() -> String: return ': номер:%d пеленг:%0.1f частота:%0.1f МГц' % [id, aoa, freq] @@ -52,6 +53,8 @@ func _ready() -> void: unit.connect('data_received', Callable(self, 'on_data_capsrpb_received').bind(threats)) timer_check_lost.connect('timeout', Callable(self, 'on_timer_check_lost').bind(repsettings.ThreatParams.time_lost, threats)) timer_check_lost.start(repsettings.ThreatParams.time_lost / 1000.0) + signaller.connect('rto_threat_sel', Callable(self, 'on_rto_threat_sel').bind(threats)) + signaller.connect('threat_selected', Callable(self, 'on_threat_selected').bind(threats)) @@ -67,6 +70,20 @@ func on_timer_check_lost(time_lost: int, threats: Dictionary): call_deferred('emit_signal', 'threats_resized', threats) +## Выбирает цель, если нажать по отметке цели. +func on_rto_threat_sel(bip, threats): + for threat in threats.values(): + threat.selected = false + threats[bip.name.to_int()].selected = true + + +## Выбирает цель, если выбрать в таблице +func on_threat_selected(th, threats): + for threat in threats.values(): + threat.selected = false + th.selected = true + + ## Производит приём целей func on_data_capsrpb_received(unit: capsrpb.CapsRpb, threats: Dictionary): if not unit.json_dic.has('ts'): return diff --git a/shaders/select_tr.gdshader b/shaders/select_tr.gdshader index 8bf2e88..ea13dfd 100644 --- a/shaders/select_tr.gdshader +++ b/shaders/select_tr.gdshader @@ -2,8 +2,8 @@ shader_type canvas_item; uniform vec4 color: source_color = vec4(1, 1, 1, 1); uniform vec4 color_up: source_color = vec4(1, 1, 1, 1); /* Цвет вспышки при обновлении */ -const float ds = 0.00725; /* Относительное расстояние на котором выполняется сглаживание краёв */ -const float dsr = 6.125; +const float ds = 0.01425; /* Относительное расстояние на котором выполняется сглаживание краёв */ +const float dsr = 12.125; const vec2 center = vec2(0.5, 0.5); /* Центр должен быть в (0.5, 0.5), но это не так */ const float radius = 0.075 - ds * 2.0; /* Радиус должен быть 0.5, но это не так */ diff --git a/shaders/tracked.gdshader b/shaders/tracked.gdshader index 211e065..db8e7c8 100644 --- a/shaders/tracked.gdshader +++ b/shaders/tracked.gdshader @@ -10,7 +10,7 @@ uniform vec2 point_7; uniform vec2 point_8; uniform float len: hint_range(0.0, 1.0) = 0.5; const vec2 center = vec2(0.125, 0.125); -const float DSS = 0.001225; +const float DSS = 0.002525; const float radius = 0.125; uniform float speed: hint_range(0.0, 1024.0) = 0.0; From e32d2cb7b195f6b8e7886e6fde51caeefa1ad6a3 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Thu, 16 Nov 2023 14:24:31 +0300 Subject: [PATCH 2/2] =?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=BE=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BF=D0=BE=D1=81=D1=82=D0=B0=D0=B2=D0=BD=D0=BE=D0=BA?= =?UTF-8?q?=D1=83=20=D0=BF=D0=BE=D0=BC=D0=B5=D1=85.=20=D0=92=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D1=86=D0=B5=D1=81=D1=81=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/bip.gd | 5 --- scenes/bip.tscn | 16 +++---- scenes/btn_scale.tscn | 4 +- scenes/button-flat.tscn | 8 ++-- scenes/canvas.tscn | 20 ++++----- scenes/frm_ecm_list.tscn | 22 +++++----- scenes/frm_ecm_params.tscn | 8 ++-- scenes/frm_params.tscn | 12 ++--- scenes/frm_threats.tscn | 12 ++--- scenes/grd_btns.tscn | 34 +++++++-------- scenes/grd_side.tscn | 16 +++---- scenes/scroll-ecm-list.gd | 49 +++++++++++++++++++++ scenes/tab-switch.tscn | 24 +++++----- scenes/работа.gd | 1 + scenes/работа.tscn | 52 +++++++++++----------- scripts/capsrpb.gd | 16 +++++-- scripts/interfer.gd | 89 +++++++++++++++++++++++++++++++++----- scripts/repnetwork.gd | 2 +- scripts/signaller.gd | 15 +++++++ scripts/threats.gd | 13 +++++- 20 files changed, 283 insertions(+), 135 deletions(-) create mode 100644 scenes/scroll-ecm-list.gd diff --git a/scenes/bip.gd b/scenes/bip.gd index 2898914..1f5b5a3 100644 --- a/scenes/bip.gd +++ b/scenes/bip.gd @@ -6,11 +6,6 @@ func _ready(): pass # Replace with function body. -# Called every frame. 'delta' is the elapsed time since the previous frame. -func _process(delta): - pass - - # Функция делает присваивает заданое значение видимости селектору func set_sel_visible(value: bool): $selector.visible = value diff --git a/scenes/bip.tscn b/scenes/bip.tscn index bce126b..68b9d0f 100644 --- a/scenes/bip.tscn +++ b/scenes/bip.tscn @@ -1,11 +1,11 @@ [gd_scene load_steps=12 format=3 uid="uid://nl1vklubr5kr"] -[ext_resource type="Script" path="res://scenes/bip.gd" id="1_dag5j"] -[ext_resource type="Shader" path="res://shaders/bip.gdshader" id="2_7w7lp"] -[ext_resource type="Shader" path="res://shaders/tracked.gdshader" id="3_p7omr"] +[ext_resource type="Script" path="res://scenes/bip.gd" id="1_4t8mr"] +[ext_resource type="Shader" path="res://shaders/bip.gdshader" id="2_17aco"] +[ext_resource type="Shader" path="res://shaders/tracked.gdshader" id="3_fiufo"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_2dulj"] -shader = ExtResource("2_7w7lp") +shader = ExtResource("2_17aco") shader_parameter/color = Color(0.972549, 0.12549, 0.411765, 1) shader_parameter/color_up = Color(1, 1, 1, 1) shader_parameter/tick_update = 0 @@ -112,7 +112,7 @@ shader_parameter/speed = -73.0 shader_parameter/ant_band_count_0 = 9 [sub_resource type="ShaderMaterial" id="ShaderMaterial_lkrha"] -shader = ExtResource("3_p7omr") +shader = ExtResource("3_fiufo") shader_parameter/ColorFig = Color(0, 0.862745, 0, 1) shader_parameter/point_1 = Vector2(0.125, 0) shader_parameter/point_2 = Vector2(0.125, 0.036) @@ -130,9 +130,9 @@ shader_parameter/speed = 71.0 [node name="threat" type="Control"] layout_mode = 3 anchors_preset = 0 -offset_right = 40.0 -offset_bottom = 40.0 -script = ExtResource("1_dag5j") +offset_right = 20.0 +offset_bottom = 20.0 +script = ExtResource("1_4t8mr") [node name="bip" type="TextureButton" parent="."] material = SubResource("ShaderMaterial_2dulj") diff --git a/scenes/btn_scale.tscn b/scenes/btn_scale.tscn index 4cd3346..681b115 100644 --- a/scenes/btn_scale.tscn +++ b/scenes/btn_scale.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://0uqi1ghf7sma"] -[ext_resource type="Texture2D" uid="uid://c1maea6yhd3k7" path="res://data/кнопка-масштаб.png" id="1_qmk0r"] +[ext_resource type="Texture2D" uid="uid://c1maea6yhd3k7" path="res://data/кнопка-масштаб.png" id="1_vfah0"] [node name="btn_scale" type="TextureButton"] self_modulate = Color(1, 1, 1, 0.509804) @@ -8,7 +8,7 @@ offset_right = 152.0 offset_bottom = 18.0 tooltip_text = "Измененяет масштаб" action_mode = 0 -texture_normal = ExtResource("1_qmk0r") +texture_normal = ExtResource("1_vfah0") ignore_texture_size = true stretch_mode = 0 metadata/i_scale = 0 diff --git a/scenes/button-flat.tscn b/scenes/button-flat.tscn index 52de714..f6d0c62 100644 --- a/scenes/button-flat.tscn +++ b/scenes/button-flat.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=9 format=3 uid="uid://da7w3vkhadfwe"] -[ext_resource type="Script" path="res://scenes/nine-patch-button.gd" id="1_uqldr"] -[ext_resource type="Texture2D" uid="uid://ct0ajcwno03h7" path="res://data/кнопка-квадрат-0.png" id="2_ak74m"] +[ext_resource type="Script" path="res://scenes/nine-patch-button.gd" id="1_mm6jw"] +[ext_resource type="Texture2D" uid="uid://ct0ajcwno03h7" path="res://data/кнопка-квадрат-0.png" id="2_yle0i"] [sub_resource type="StyleBoxEmpty" id="1"] @@ -19,7 +19,7 @@ offset_right = 30.0 offset_bottom = 30.0 theme_override_styles/panel = SubResource("1") -script = ExtResource("1_uqldr") +script = ExtResource("1_mm6jw") toggle_mode = true [node name="button" type="Button" parent="."] @@ -35,7 +35,7 @@ clip_text = true [node name="state" type="NinePatchRect" parent="."] show_behind_parent = true layout_mode = 2 -texture = ExtResource("2_ak74m") +texture = ExtResource("2_yle0i") patch_margin_left = 10 patch_margin_top = 10 patch_margin_right = 10 diff --git a/scenes/canvas.tscn b/scenes/canvas.tscn index 9935eec..641236f 100644 --- a/scenes/canvas.tscn +++ b/scenes/canvas.tscn @@ -1,16 +1,16 @@ [gd_scene load_steps=7 format=3 uid="uid://b5kjdyxuwsot5"] -[ext_resource type="Material" uid="uid://s6xe8igevnv2" path="res://shaders/shader_edu.tres" id="1_41nty"] -[ext_resource type="Script" path="res://scenes/canvas.gd" id="2_ci66x"] -[ext_resource type="PackedScene" uid="uid://c73ahpv8uiuc7" path="res://scenes/sector.tscn" id="3_4r7tl"] -[ext_resource type="Shader" path="res://shaders/sector.gdshader" id="4_4000y"] +[ext_resource type="Material" uid="uid://s6xe8igevnv2" path="res://shaders/shader_edu.tres" id="1_itkeo"] +[ext_resource type="Script" path="res://scenes/canvas.gd" id="2_clpjo"] +[ext_resource type="PackedScene" uid="uid://c73ahpv8uiuc7" path="res://scenes/sector.tscn" id="3_kddns"] +[ext_resource type="Shader" path="res://shaders/sector.gdshader" id="4_q0nxn"] [sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_2bft1"] size = Vector2(1600, 1200) -[sub_resource type="ShaderMaterial" id="ShaderMaterial_uqrmv"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_ys1x2"] resource_local_to_scene = true -shader = ExtResource("4_4000y") +shader = ExtResource("4_q0nxn") shader_parameter/color = Color(1, 1, 1, 0.168627) shader_parameter/clip_color = Color(1, 0.5, 0.5, 1) shader_parameter/width = 45.0 @@ -20,12 +20,12 @@ shader_parameter/dir = 0.0 shader_parameter/inner_clip = 0.045 [node name="canvas" type="Sprite2D"] -material = ExtResource("1_41nty") +material = ExtResource("1_itkeo") texture = SubResource("PlaceholderTexture2D_2bft1") centered = false -script = ExtResource("2_ci66x") +script = ExtResource("2_clpjo") -[node name="строб" parent="." instance=ExtResource("3_4r7tl")] -material = SubResource("ShaderMaterial_uqrmv") +[node name="строб" parent="." instance=ExtResource("3_kddns")] +material = SubResource("ShaderMaterial_ys1x2") position = Vector2(560, 560) scale = Vector2(1100, 1100) diff --git a/scenes/frm_ecm_list.tscn b/scenes/frm_ecm_list.tscn index 83312ce..e19e309 100644 --- a/scenes/frm_ecm_list.tscn +++ b/scenes/frm_ecm_list.tscn @@ -1,15 +1,16 @@ -[gd_scene load_steps=4 format=3 uid="uid://7rvw671tlx2i"] +[gd_scene load_steps=5 format=3 uid="uid://7rvw671tlx2i"] -[ext_resource type="Texture2D" uid="uid://cs6i1xwx0pmdk" path="res://data/рамка-панели.png" id="1_rrqe5"] -[ext_resource type="Script" path="res://table/table.gd" id="2_jufhc"] -[ext_resource type="PackedScene" uid="uid://da7w3vkhadfwe" path="res://scenes/button-flat.tscn" id="3_o3p72"] +[ext_resource type="Texture2D" uid="uid://cs6i1xwx0pmdk" path="res://data/рамка-панели.png" id="1_6swor"] +[ext_resource type="Script" path="res://scenes/scroll-ecm-list.gd" id="2_3x81o"] +[ext_resource type="Script" path="res://table/table.gd" id="3_4hydx"] +[ext_resource type="PackedScene" uid="uid://da7w3vkhadfwe" path="res://scenes/button-flat.tscn" id="4_7ys3c"] [node name="frm_ecm_list" type="NinePatchRect"] offset_right = 480.0 offset_bottom = 288.0 size_flags_horizontal = 3 size_flags_vertical = 3 -texture = ExtResource("1_rrqe5") +texture = ExtResource("1_6swor") patch_margin_left = 15 patch_margin_top = 30 patch_margin_right = 15 @@ -33,10 +34,11 @@ offset_left = 8.0 offset_top = 57.0 offset_right = 472.0 offset_bottom = 237.0 +script = ExtResource("2_3x81o") [node name="table" type="GridContainer" parent="scroll"] layout_mode = 2 -script = ExtResource("2_jufhc") +script = ExtResource("3_4hydx") [node name="grd_forced" type="GridContainer" parent="."] layout_mode = 0 @@ -46,7 +48,7 @@ offset_right = 472.0 offset_bottom = 281.0 columns = 4 -[node name="btn_srn" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("3_o3p72")] +[node name="btn_srn" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("4_7ys3c")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 @@ -54,7 +56,7 @@ tooltip_text = "Включает принудительную помеху" text = "СРН" metadata/rfi_name = "ozp1" -[node name="btn_jtids" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("3_o3p72")] +[node name="btn_jtids" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("4_7ys3c")] editor_description = "Кнопка для принудительного включения группы секторов в режим JTIDS" layout_mode = 2 size_flags_horizontal = 3 @@ -62,7 +64,7 @@ size_flags_vertical = 3 text = "JTIDS" metadata/rfi_name = "ozp1" -[node name="btn_kupd" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("3_o3p72")] +[node name="btn_kupd" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("4_7ys3c")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 @@ -70,7 +72,7 @@ tooltip_text = "Кнопка для принудительного включе text = "КУПД" metadata/rfi_name = "ozp1" -[node name="btn_cancel" parent="grd_forced" groups=["прин-секторы-срн"] instance=ExtResource("3_o3p72")] +[node name="btn_cancel" parent="grd_forced" groups=["прин-секторы-срн"] instance=ExtResource("4_7ys3c")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 diff --git a/scenes/frm_ecm_params.tscn b/scenes/frm_ecm_params.tscn index fc15b42..2e904e7 100644 --- a/scenes/frm_ecm_params.tscn +++ b/scenes/frm_ecm_params.tscn @@ -1,12 +1,12 @@ [gd_scene load_steps=3 format=3 uid="uid://b1o10yvgjpb0j"] -[ext_resource type="Texture2D" uid="uid://cs6i1xwx0pmdk" path="res://data/рамка-панели.png" id="1_wpofl"] -[ext_resource type="Script" path="res://table/table.gd" id="2_0mbgy"] +[ext_resource type="Texture2D" uid="uid://cs6i1xwx0pmdk" path="res://data/рамка-панели.png" id="1_q1ow7"] +[ext_resource type="Script" path="res://table/table.gd" id="2_82yax"] [node name="frm_ecm_params" type="NinePatchRect"] size_flags_horizontal = 3 size_flags_vertical = 3 -texture = ExtResource("1_wpofl") +texture = ExtResource("1_q1ow7") patch_margin_left = 15 patch_margin_top = 30 patch_margin_right = 15 @@ -33,4 +33,4 @@ offset_bottom = 282.0 [node name="table" type="GridContainer" parent="scroll"] layout_mode = 2 -script = ExtResource("2_0mbgy") +script = ExtResource("2_82yax") diff --git a/scenes/frm_params.tscn b/scenes/frm_params.tscn index 8860ac5..f7e6073 100644 --- a/scenes/frm_params.tscn +++ b/scenes/frm_params.tscn @@ -1,13 +1,13 @@ [gd_scene load_steps=4 format=3 uid="uid://t54wukutvmjq"] -[ext_resource type="Texture2D" uid="uid://cs6i1xwx0pmdk" path="res://data/рамка-панели.png" id="1_3vj3c"] -[ext_resource type="Script" path="res://scenes/scroll-params.gd" id="2_go6hj"] -[ext_resource type="Script" path="res://table/table.gd" id="3_07em2"] +[ext_resource type="Texture2D" uid="uid://cs6i1xwx0pmdk" path="res://data/рамка-панели.png" id="1_65sy4"] +[ext_resource type="Script" path="res://scenes/scroll-params.gd" id="2_f8bq4"] +[ext_resource type="Script" path="res://table/table.gd" id="3_y0507"] [node name="frm_params" type="NinePatchRect"] size_flags_horizontal = 3 size_flags_vertical = 3 -texture = ExtResource("1_3vj3c") +texture = ExtResource("1_65sy4") patch_margin_left = 15 patch_margin_top = 30 patch_margin_right = 15 @@ -31,8 +31,8 @@ offset_left = 4.0 offset_top = 27.0 offset_right = 476.0 offset_bottom = 282.0 -script = ExtResource("2_go6hj") +script = ExtResource("2_f8bq4") [node name="table" type="GridContainer" parent="scroll"] layout_mode = 2 -script = ExtResource("3_07em2") +script = ExtResource("3_y0507") diff --git a/scenes/frm_threats.tscn b/scenes/frm_threats.tscn index f167f32..bb8543b 100644 --- a/scenes/frm_threats.tscn +++ b/scenes/frm_threats.tscn @@ -1,13 +1,13 @@ [gd_scene load_steps=4 format=3 uid="uid://bsd67ktk8xp5a"] -[ext_resource type="Texture2D" uid="uid://cs6i1xwx0pmdk" path="res://data/рамка-панели.png" id="1_sbj4k"] -[ext_resource type="Script" path="res://scenes/scroll-threats.gd" id="2_7amn7"] -[ext_resource type="Script" path="res://table/table.gd" id="3_u1k3o"] +[ext_resource type="Texture2D" uid="uid://cs6i1xwx0pmdk" path="res://data/рамка-панели.png" id="1_m3no0"] +[ext_resource type="Script" path="res://scenes/scroll-threats.gd" id="2_empn3"] +[ext_resource type="Script" path="res://table/table.gd" id="3_4bupu"] [node name="frm_threats" type="NinePatchRect"] size_flags_horizontal = 3 size_flags_vertical = 3 -texture = ExtResource("1_sbj4k") +texture = ExtResource("1_m3no0") patch_margin_left = 15 patch_margin_top = 30 patch_margin_right = 15 @@ -31,9 +31,9 @@ offset_left = 4.0 offset_top = 51.0 offset_right = 476.0 offset_bottom = 282.0 -script = ExtResource("2_7amn7") +script = ExtResource("2_empn3") [node name="table" type="GridContainer" parent="scroll"] layout_mode = 2 columns = 4 -script = ExtResource("3_u1k3o") +script = ExtResource("3_4bupu") diff --git a/scenes/grd_btns.tscn b/scenes/grd_btns.tscn index 7d12989..a07c67a 100644 --- a/scenes/grd_btns.tscn +++ b/scenes/grd_btns.tscn @@ -1,105 +1,105 @@ [gd_scene load_steps=2 format=3 uid="uid://cnkbk53mi7viu"] -[ext_resource type="PackedScene" uid="uid://da7w3vkhadfwe" path="res://scenes/button-flat.tscn" id="1_ufj4t"] +[ext_resource type="PackedScene" uid="uid://da7w3vkhadfwe" path="res://scenes/button-flat.tscn" id="1_uiv1n"] [node name="grd_btns" type="GridContainer"] offset_right = 1096.0 offset_bottom = 54.0 columns = 14 -[node name="btn_off" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_ufj4t")] +[node name="btn_off" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_uiv1n")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 text = "Откл." pressed = true -metadata/rfi_name = "" +metadata/rfi_name = "off" -[node name="btn_auto_rfi" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_ufj4t")] +[node name="btn_auto_rfi" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_uiv1n")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 text = "Автомат" -metadata/rfi_name = "" +metadata/rfi_name = "auto" -[node name="btn_p12" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_ufj4t")] +[node name="btn_p12" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_uiv1n")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 text = "МЧМ-1" metadata/rfi_name = "mchm1" -[node name="btn_p16" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_ufj4t")] +[node name="btn_p16" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_uiv1n")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 text = "СРН-И1" metadata/rfi_name = "srni1" -[node name="btn_p15" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_ufj4t")] +[node name="btn_p15" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_uiv1n")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 text = "СРН-М2" metadata/rfi_name = "srnm2" -[node name="btn_p14" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_ufj4t")] +[node name="btn_p14" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_uiv1n")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 text = "ПД-М4" metadata/rfi_name = "pdm4" -[node name="btn_p13" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_ufj4t")] +[node name="btn_p13" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_uiv1n")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 text = "ПД-М2" metadata/rfi_name = "pdm2" -[node name="btn_p11" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_ufj4t")] +[node name="btn_p11" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_uiv1n")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 text = "ЛЧМ-1" metadata/rfi_name = "lchm1" -[node name="btn_p10" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_ufj4t")] +[node name="btn_p10" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_uiv1n")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 text = "ПД-М4С" metadata/rfi_name = "pdm4s" -[node name="btn_p9" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_ufj4t")] +[node name="btn_p9" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_uiv1n")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 text = "ПД-ЧМ" metadata/rfi_name = "pdchm" -[node name="btn_p8" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_ufj4t")] +[node name="btn_p8" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_uiv1n")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 text = "СВ-И1" metadata/rfi_name = "svi1" -[node name="btn_p7" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_ufj4t")] +[node name="btn_p7" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_uiv1n")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 text = "K1" metadata/rfi_name = "k1" -[node name="btn_p6" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_ufj4t")] +[node name="btn_p6" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_uiv1n")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 text = "СВ-М2" metadata/rfi_name = "svm2" -[node name="btn_p5" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_ufj4t")] +[node name="btn_p5" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_uiv1n")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 diff --git a/scenes/grd_side.tscn b/scenes/grd_side.tscn index 3025295..7836388 100644 --- a/scenes/grd_side.tscn +++ b/scenes/grd_side.tscn @@ -1,9 +1,9 @@ [gd_scene load_steps=5 format=3 uid="uid://dem3fcec25awh"] -[ext_resource type="PackedScene" uid="uid://bsd67ktk8xp5a" path="res://scenes/frm_threats.tscn" id="1_fxbx3"] -[ext_resource type="PackedScene" uid="uid://t54wukutvmjq" path="res://scenes/frm_params.tscn" id="2_2jld7"] -[ext_resource type="PackedScene" uid="uid://7rvw671tlx2i" path="res://scenes/frm_ecm_list.tscn" id="3_lrpuw"] -[ext_resource type="PackedScene" uid="uid://b1o10yvgjpb0j" path="res://scenes/frm_ecm_params.tscn" id="4_tqj2i"] +[ext_resource type="PackedScene" uid="uid://bsd67ktk8xp5a" path="res://scenes/frm_threats.tscn" id="1_swvxc"] +[ext_resource type="PackedScene" uid="uid://t54wukutvmjq" path="res://scenes/frm_params.tscn" id="2_1dbju"] +[ext_resource type="PackedScene" uid="uid://7rvw671tlx2i" path="res://scenes/frm_ecm_list.tscn" id="3_pdajn"] +[ext_resource type="PackedScene" uid="uid://b1o10yvgjpb0j" path="res://scenes/frm_ecm_params.tscn" id="4_pmt7h"] [node name="grd_side" type="GridContainer"] offset_left = 1112.0 @@ -11,14 +11,14 @@ offset_top = 6.0 offset_right = 1592.0 offset_bottom = 1169.0 -[node name="frm_threats" parent="." instance=ExtResource("1_fxbx3")] +[node name="frm_threats" parent="." instance=ExtResource("1_swvxc")] layout_mode = 2 -[node name="frm_params" parent="." instance=ExtResource("2_2jld7")] +[node name="frm_params" parent="." instance=ExtResource("2_1dbju")] layout_mode = 2 -[node name="frm_ecm_list" parent="." instance=ExtResource("3_lrpuw")] +[node name="frm_ecm_list" parent="." instance=ExtResource("3_pdajn")] layout_mode = 2 -[node name="frm_ecm_params" parent="." instance=ExtResource("4_tqj2i")] +[node name="frm_ecm_params" parent="." instance=ExtResource("4_pmt7h")] layout_mode = 2 diff --git a/scenes/scroll-ecm-list.gd b/scenes/scroll-ecm-list.gd new file mode 100644 index 0000000..94086e6 --- /dev/null +++ b/scenes/scroll-ecm-list.gd @@ -0,0 +1,49 @@ +extends ScrollContainer + + +## Отображает список помех в таблице. +const CellLineEdit = preload('res://scenes/ячейка-2.tscn') ## Ячейка таблицы. +const TableHeader = preload('res://table/header.tscn') ## Ячейка заголовок таблицы. + +const TABLE_HEADER = [ TableHeader, TableHeader, TableHeader, TableHeader , TableHeader ] ## Описание ряда заголовка. +const TABLE_ROW = [ CellLineEdit, CellLineEdit, CellLineEdit, CellLineEdit , CellLineEdit ] ## Описание ряда. +const TABLE_HEADERS_TEXT = ['Номер', 'Название', 'Частота, МГц', 'Пеленг', 'Состояние' ] ## Заголовки таблицы. +const TABLE_COLUMN_SIZE = [ 65, 80, 120, 80, 90 ] ## Ширины колонок. + +## Состояние выполнения сеанса помехи +const INTERFER_STATE = { + 0: 'Подготовка', + 1: 'Выполняется', + 2: 'Ошибка', + 3: 'Занято', + 4: 'Неисправность', + 5: 'Передача' } + +## Индексы колонок +const COLUMN_NUMBER = 0 +const COLUMN_NAME = 1 +const COLUMN_FREQ = 2 +const COLUMN_AOA = 3 +const COLUMN_STATE = 4 + +# Called when the node enters the scene tree for the first time. +func _ready(): + var table_index: = Dictionary() + signaller.connect('interfer_new', Callable(self, 'on_interfer_new').bind(table_index)) + call_deferred('init_table') + + +func init_table(): + $table.set_header(TABLE_HEADER) + $table.set_header_text(TABLE_HEADERS_TEXT) + $table.set_columns_min_size(TABLE_COLUMN_SIZE) + $table.pin_header(self, get_parent()) + + +func on_interfer_new(ecm, table_index): + print_debug() + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta): + pass diff --git a/scenes/tab-switch.tscn b/scenes/tab-switch.tscn index 31d472f..7071609 100644 --- a/scenes/tab-switch.tscn +++ b/scenes/tab-switch.tscn @@ -1,32 +1,32 @@ [gd_scene load_steps=7 format=3 uid="uid://3slb0i3pvowc"] -[ext_resource type="Script" path="res://scenes/tab-switch.gd" id="1_ddefd"] -[ext_resource type="PackedScene" uid="uid://b276iygic5itk" path="res://scenes/работа.tscn" id="2_dgwu2"] -[ext_resource type="PackedScene" uid="uid://lwmw4egynmd1" path="res://scenes/контроль.tscn" id="3_wh23t"] -[ext_resource type="PackedScene" uid="uid://trt0q8th3bn2" path="res://scenes/журнал.tscn" id="4_38go3"] -[ext_resource type="PackedScene" uid="uid://dab6loryocc73" path="res://scenes/эмс.tscn" id="5_qasm0"] -[ext_resource type="PackedScene" uid="uid://bnptm4rlp60dq" path="res://scenes/настройки.tscn" id="6_h83md"] +[ext_resource type="Script" path="res://scenes/tab-switch.gd" id="1_fg0vd"] +[ext_resource type="PackedScene" uid="uid://b276iygic5itk" path="res://scenes/работа.tscn" id="2_u7p16"] +[ext_resource type="PackedScene" uid="uid://lwmw4egynmd1" path="res://scenes/контроль.tscn" id="3_txp0s"] +[ext_resource type="PackedScene" uid="uid://trt0q8th3bn2" path="res://scenes/журнал.tscn" id="4_cu5k8"] +[ext_resource type="PackedScene" uid="uid://dab6loryocc73" path="res://scenes/эмс.tscn" id="5_u71bh"] +[ext_resource type="PackedScene" uid="uid://bnptm4rlp60dq" path="res://scenes/настройки.tscn" id="6_i8iv3"] [node name="tab_switch" type="TabContainer"] offset_right = 1600.0 offset_bottom = 1200.0 -script = ExtResource("1_ddefd") +script = ExtResource("1_fg0vd") -[node name="Работа" parent="." instance=ExtResource("2_dgwu2")] +[node name="Работа" parent="." instance=ExtResource("2_u7p16")] layout_mode = 2 -[node name="Контроль" parent="." instance=ExtResource("3_wh23t")] +[node name="Контроль" parent="." instance=ExtResource("3_txp0s")] visible = false layout_mode = 2 -[node name="Журнал" parent="." instance=ExtResource("4_38go3")] +[node name="Журнал" parent="." instance=ExtResource("4_cu5k8")] visible = false layout_mode = 2 -[node name="ЭМС" parent="." instance=ExtResource("5_qasm0")] +[node name="ЭМС" parent="." instance=ExtResource("5_u71bh")] visible = false layout_mode = 2 -[node name="Настройки" parent="." instance=ExtResource("6_h83md")] +[node name="Настройки" parent="." instance=ExtResource("6_i8iv3")] visible = false layout_mode = 2 diff --git a/scenes/работа.gd b/scenes/работа.gd index c39b5d3..d9726f9 100644 --- a/scenes/работа.gd +++ b/scenes/работа.gd @@ -127,6 +127,7 @@ func on_button_strobe_pressed() -> void: ## Поведение радиокнопок в группе. Управляет состоянием кнопок в радиогруппе func on_button_pressed(btn_this, btn_others) -> void: for btn_other in btn_others: btn_other.set_pressed(btn_this == btn_other) + signaller.emit_signal('interfer_init', btn_this) ## Возвращает ширину строба по направлению diff --git a/scenes/работа.tscn b/scenes/работа.tscn index b03abb7..aa0349f 100644 --- a/scenes/работа.tscn +++ b/scenes/работа.tscn @@ -1,25 +1,25 @@ [gd_scene load_steps=13 format=3 uid="uid://b276iygic5itk"] -[ext_resource type="Script" path="res://scenes/работа.gd" id="1_rb8fv"] -[ext_resource type="PackedScene" uid="uid://nl1vklubr5kr" path="res://scenes/bip.tscn" id="2_1ntlf"] -[ext_resource type="PackedScene" uid="uid://dem3fcec25awh" path="res://scenes/grd_side.tscn" id="3_6vmv5"] -[ext_resource type="PackedScene" uid="uid://b5kjdyxuwsot5" path="res://scenes/canvas.tscn" id="4_7dvd8"] -[ext_resource type="PackedScene" uid="uid://cnkbk53mi7viu" path="res://scenes/grd_btns.tscn" id="5_kpx5b"] -[ext_resource type="PackedScene" uid="uid://dymo732qc2doa" path="res://scenes/count_all_pad.tscn" id="6_x6urv"] -[ext_resource type="PackedScene" uid="uid://bwti82byphl68" path="res://scenes/count_danger_pad.tscn" id="7_b0iag"] -[ext_resource type="PackedScene" uid="uid://da7w3vkhadfwe" path="res://scenes/button-flat.tscn" id="8_cha28"] -[ext_resource type="PackedScene" uid="uid://0uqi1ghf7sma" path="res://scenes/btn_scale.tscn" id="9_e8unk"] -[ext_resource type="PackedScene" uid="uid://bbq6nklh36yij" path="res://scenes/tilemap.tscn" id="10_rp4rk"] -[ext_resource type="Shader" path="res://shaders/tilemap.gdshader" id="11_ked7m"] +[ext_resource type="Script" path="res://scenes/работа.gd" id="1_niok4"] +[ext_resource type="PackedScene" uid="uid://nl1vklubr5kr" path="res://scenes/bip.tscn" id="2_br3s6"] +[ext_resource type="PackedScene" uid="uid://dem3fcec25awh" path="res://scenes/grd_side.tscn" id="3_s2j0e"] +[ext_resource type="PackedScene" uid="uid://b5kjdyxuwsot5" path="res://scenes/canvas.tscn" id="4_lryxs"] +[ext_resource type="PackedScene" uid="uid://cnkbk53mi7viu" path="res://scenes/grd_btns.tscn" id="5_2jnbs"] +[ext_resource type="PackedScene" uid="uid://dymo732qc2doa" path="res://scenes/count_all_pad.tscn" id="6_e3re7"] +[ext_resource type="PackedScene" uid="uid://bwti82byphl68" path="res://scenes/count_danger_pad.tscn" id="7_2arls"] +[ext_resource type="PackedScene" uid="uid://da7w3vkhadfwe" path="res://scenes/button-flat.tscn" id="8_k0iv2"] +[ext_resource type="PackedScene" uid="uid://0uqi1ghf7sma" path="res://scenes/btn_scale.tscn" id="9_oey3x"] +[ext_resource type="PackedScene" uid="uid://bbq6nklh36yij" path="res://scenes/tilemap.tscn" id="10_gtwyg"] +[ext_resource type="Shader" path="res://shaders/tilemap.gdshader" id="11_ekapd"] -[sub_resource type="ShaderMaterial" id="ShaderMaterial_xpefk"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_2t5si"] resource_local_to_scene = true -shader = ExtResource("11_ked7m") +shader = ExtResource("11_ekapd") shader_parameter/radius = 0.4 [node name="Работа" type="Panel"] -script = ExtResource("1_rb8fv") -Bip = ExtResource("2_1ntlf") +script = ExtResource("1_niok4") +Bip = ExtResource("2_br3s6") col_grey = Color(0.34902, 0.643137, 0.772549, 0.168627) col_red = Color(1, 0.568627, 0.431373, 0.239216) drag_scale_band = 0.05 @@ -36,7 +36,7 @@ strob_min_width = 5.0 metadata/_edit_vertical_guides_ = [] metadata/_edit_lock_ = true -[node name="grd_side" parent="." instance=ExtResource("3_6vmv5")] +[node name="grd_side" parent="." instance=ExtResource("3_s2j0e")] layout_mode = 0 offset_left = 1114.0 offset_top = 7.0 @@ -44,10 +44,10 @@ offset_right = 1594.0 offset_bottom = 1170.0 metadata/_edit_lock_ = true -[node name="canvas" parent="." instance=ExtResource("4_7dvd8")] +[node name="canvas" parent="." instance=ExtResource("4_lryxs")] metadata/_edit_lock_ = true -[node name="grd_btns" parent="." instance=ExtResource("5_kpx5b")] +[node name="grd_btns" parent="." instance=ExtResource("5_2jnbs")] layout_mode = 0 offset_left = 10.0 offset_top = 1116.0 @@ -55,14 +55,14 @@ offset_right = 1106.0 offset_bottom = 1170.0 metadata/_edit_lock_ = true -[node name="count_all_pad" parent="." instance=ExtResource("6_x6urv")] +[node name="count_all_pad" parent="." instance=ExtResource("6_e3re7")] layout_mode = 0 offset_left = 100.0 offset_top = 117.0 offset_right = 133.0 offset_bottom = 140.0 -[node name="count_danger_pad" parent="." instance=ExtResource("7_b0iag")] +[node name="count_danger_pad" parent="." instance=ExtResource("7_2arls")] layout_mode = 0 offset_left = 96.0 offset_top = 29.0 @@ -94,7 +94,7 @@ offset_right = 83.0 offset_bottom = 72.0 text = "Опасных:" -[node name="btn_auto_threat" parent="." instance=ExtResource("8_cha28")] +[node name="btn_auto_threat" parent="." instance=ExtResource("8_k0iv2")] layout_mode = 0 offset_left = 1034.0 offset_top = 7.0 @@ -104,7 +104,7 @@ size_flags_horizontal = 3 size_flags_vertical = 3 text = "Автомат" -[node name="btn_strob" parent="." instance=ExtResource("8_cha28")] +[node name="btn_strob" parent="." instance=ExtResource("8_k0iv2")] layout_mode = 2 offset_left = 1034.0 offset_top = 67.0 @@ -115,7 +115,7 @@ size_flags_vertical = 3 tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой" text = "Строб" -[node name="btn_view" parent="." instance=ExtResource("8_cha28")] +[node name="btn_view" parent="." instance=ExtResource("8_k0iv2")] layout_mode = 2 offset_left = 874.0 offset_top = 1023.0 @@ -125,15 +125,15 @@ size_flags_horizontal = 3 size_flags_vertical = 3 text = "Вид" -[node name="btn_scale" parent="." instance=ExtResource("9_e8unk")] +[node name="btn_scale" parent="." instance=ExtResource("9_oey3x")] layout_mode = 0 offset_left = 952.0 offset_top = 1038.0 offset_right = 1104.0 offset_bottom = 1056.0 -[node name="tilemap" parent="." instance=ExtResource("10_rp4rk")] -material = SubResource("ShaderMaterial_xpefk") +[node name="tilemap" parent="." instance=ExtResource("10_gtwyg")] +material = SubResource("ShaderMaterial_2t5si") [connection signal="drag_begin" from="." to="." method="_on_drag_begin"] [connection signal="drag_continue" from="." to="." method="_on_drag_continue"] diff --git a/scripts/capsrpb.gd b/scripts/capsrpb.gd index aef472a..2ff95e3 100644 --- a/scripts/capsrpb.gd +++ b/scripts/capsrpb.gd @@ -15,10 +15,12 @@ class CapsRpb: signal parse_error(unit: CapsRpb, msg: String) ## Сигнал ошибки разбора сообщения static var json_conv: = JSON.new() - var online: = false ## Состояние связи с источником сообщений - var name: String ## Имя экземпляра - var json_dic: Dictionary ## Аппарат для разбора сообщений - var tick: = 0 ## Тик время последнего обновления, мс + var online: = false ## Состояние связи с источником сообщений + var name: String ## Имя экземпляра + var json_dic: Dictionary ## Аппарат для разбора сообщений + var tick: = 0 ## Тик время последнего обновления, мс + var tx_data: = PackedByteArray() ## Пакет для отправки + var tx_stack: Array ## Массив пакетов для отправки func _to_string() -> String: return String('капсрпб: "%s" %s ' % [self.name, ['отключен', 'на связи'][int(online)]]) func _init(nm): self.name = nm @@ -40,3 +42,9 @@ class CapsRpb: if online and ((now_tick - tick) > ONLINE_TIMEOUT): online = false emit_signal('line_changed', self) + if len(tx_stack): + tx_data = tx_stack[0] + tx_stack.remove_at(0) + return Error.OK + else: + return Error.ERR_UNAVAILABLE diff --git a/scripts/interfer.gd b/scripts/interfer.gd index b03cb62..ac5a85f 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -2,14 +2,6 @@ extends Node ## Представление помехи -## Состояние выполнения сеанса помехи -const INTERFER_STATE = { - 0: 'идёт подготовка к выполнению', - 1: 'выполняется', - 2: 'не выполнена по причине ошибки в команде', - 3: 'не выполнена по причине занятости', - 4: 'не выполнена по причине_неисправности' } - ## Режимы помехи const ITERFER_MODE = { @@ -26,19 +18,39 @@ const ITERFER_MODE = { 'k1': ['K1', ['freq', 'width', 'dur', 'period']], 'ozp1': ['ОЗП-1', ['freq', 'width']] } +const ID_INTERFERS_LEN = 63 ## Размер пула номеров целей +var msg_ss: int = 0 ## счётчик сообщений +var id_array: Array ## Массив id воздействий +var thrs: Dictionary ## Словарь воздействия для целей, ключ - id воздействия + ## Сеанс помехи class Interfer: var ss: int = 0 ## Счётчик сообщений. var ispp: int = 0 ## Индекс сеанса. - var state: = 0 ## Состояние сеанса. Ответ КАПСРПБ. Возможные значения в [param ITERFER_STATE]. + var svk: = 0 ## Состояние сеанса. Ответ КАПСРПБ. Возможные значения в [param ITERFER_STATE]. var krp: String = '' ## Тип помехи. Возможные значения в [param INTERFER_MODE]. var powp: float = 0.0 ## Мощность излучения выраженная в процентах. var kni: = 0.0 ## Курсовой угол направления излучения. var params: = {} ## Параметры помехи. var get: Array[String] ## Запрос массива параметров (список запрошенных параметров). var retss: int ## Значение счётчика сообщения в котором был произведён запрос массива параметров. + var tick_rx: int ## Тик время обновления цели, мс. + func get_msg6_data(): + var data_to_json : Dictionary = {} + data_to_json['ts'] = 6 + data_to_json['ss'] = ss + data_to_json['ispp'] = ispp + data_to_json['krp'] = krp + if krp != 'off': + data_to_json['kni'] = kni + data_to_json['powp'] = powp # Необходимо добавить управление мощностью + data_to_json['get'] = [] + data_to_json['params'] = params + var json = JSON.new().stringify(data_to_json) + var pac = json.to_utf8_buffer() + return pac func set_from_dic(dic: Dictionary): var names: = tools.get_members_names(self) @@ -49,10 +61,18 @@ signal interfer_preparing(ecm: Interfer) ## Вызывается в м signal interfer_run(ecm: Interfer) ## Вызывается в момент начала работы помехи. signal interfer_error(ecm: Interfer, msg: String) ## Вызывается при ошибке. signal interfer_update(ecm: Interfer) ## Вызывается при обновлении помехи. -signal interfer_new(ecm: Interfer) ## Вызывается при создании новой помехи. signal interfer_resized(ecms: Dictionary) ## Вызывается при изменении количества сеансов помех. +func _ready(): + var ecms: Dictionary = {} ## Словарь помех + for i in range(ID_INTERFERS_LEN): # Заполняет массив ID целей + id_array.append(i+1) + var unit_key = repsettings.get_unit_key('уарэп-капсрпб-отп') + var unit = repnetwork.units[unit_key] + signaller.connect('interfer_create', Callable(self, 'on_interfer_create').bind(unit, ecms)) + + ## Производит приём состояния помех. [param unit] -> [param ecms] func on_data_capsrpb_received(unit: capsrpb.CapsRpb, ecms: Dictionary): if not unit.json_dic.has('ts'): return @@ -77,6 +97,53 @@ func on_data_capsrpb_received(unit: capsrpb.CapsRpb, ecms: Dictionary): ecm.set_from_dic(dic_msvk) ecms[ispp] = ecm ecm.tick_rx = unit.tick - call_deferred('emit_signal', 'interfer_new', ecm) if sz != ecms.size(): call_deferred('emit_signal', 'interfer_resized', ecms) + + +## Вызыватся, когда пользователь выбрал помеху и выбраны цели +func on_interfer_create(btn, sel_threats, unit, ecms): + for item in sel_threats: + var ispp: int = 0 + var interfer_name: String = btn.get_meta('rfi_name') + var param: Dictionary = {} + var kni: float = item.aoa + param['freq'] = item.freq + param['width'] = item.width + if interfer_name == 'k1': + param['dur'] = 1.0 # Необходимо добавить параметры управления + param['period'] = 1.0 # Необходимо добавить параметры управления + var key = thrs.find_key(item.id) + if key != null: + ispp = key + else: + ispp = pop_id() + if ispp == 0: return + msg_ss += 1 + var ecm: Interfer + if ecms.has(ispp): + ecm = ecms[ispp] + else: + ecm = Interfer.new() + ecm.ispp = ispp + ecm.ss = msg_ss + ecm.kni = kni + ecm.krp = interfer_name + ecm.params = param + ecm.powp = 100.0 # Необходимо добавить управление мощностью + thrs[ispp] = item.id + var json_data = ecm.get_msg6_data() + unit.tx_stack.append(json_data) + signaller.emit_signal('interfer_new', ecm) + + +func pop_id(): + var id = 0 + if len(id_array): + id = id_array[0] + id_array.remove_at(0) + return id + + +func push_id(id : int): + id_array.append(id) diff --git a/scripts/repnetwork.gd b/scripts/repnetwork.gd index 52e6413..5fd74d9 100644 --- a/scripts/repnetwork.gd +++ b/scripts/repnetwork.gd @@ -68,6 +68,6 @@ func _process(_delta: float) -> void: for addr in units: var unit = units[addr] match unit.process(tick): - Error.OK: sock_unicast.send_to(addr, unit.data_tx) + Error.OK: sock_unicast.send_to(addr, unit.tx_data) Error.FAILED: emit_signal('socket_error', 'ошибка: %s %s:%d' % [unit, addr[0], addr[1]]) poll_sockets.any(func(sock): poll_receive(sock, tick)) diff --git a/scripts/signaller.gd b/scripts/signaller.gd index f60f3a4..b2253d9 100644 --- a/scripts/signaller.gd +++ b/scripts/signaller.gd @@ -25,3 +25,18 @@ signal full_screen(id: int) ## Вызывается, когда пользователь выбирает цель ## [param bip] - Отметка цели на экране signal rto_threat_sel (bip: Control) + + +## Вызывается, когда пользователь выбирает помеху +## [param btn] - Нажатая кнопка помехи +signal interfer_init (btn: PanelContainer) + + +## Вызывается, когда выбраны цели для постановки помех +## [param btn] - Нажатая кнопка помехи, [param sel_threats] - список целей +signal interfer_create (btn: PanelContainer, sel_threats: Array) + + +## Вызывается, когда создалась новая помеха +## [param ecm] - Новая помеха +signal interfer_new (ecm: interfer.Interfer) diff --git a/scripts/threats.gd b/scripts/threats.gd index 3411101..939bd92 100644 --- a/scripts/threats.gd +++ b/scripts/threats.gd @@ -55,7 +55,7 @@ func _ready() -> void: timer_check_lost.start(repsettings.ThreatParams.time_lost / 1000.0) signaller.connect('rto_threat_sel', Callable(self, 'on_rto_threat_sel').bind(threats)) signaller.connect('threat_selected', Callable(self, 'on_threat_selected').bind(threats)) - + signaller.connect('interfer_init', Callable(self, 'on_interfer_init').bind(threats)) ## Периодически удаляет устаревшие цели @@ -84,6 +84,17 @@ func on_threat_selected(th, threats): th.selected = true +## Формирует список выбранных целей для включения помехи +func on_interfer_init(btn, threats): + var sel_threats: Array = [] + for threat in threats.values(): + if threat.selected: + sel_threats.append(threat) + if len(sel_threats): + signaller.emit_signal('interfer_create', btn, sel_threats) + + + ## Производит приём целей func on_data_capsrpb_received(unit: capsrpb.CapsRpb, threats: Dictionary): if not unit.json_dic.has('ts'): return