Merge remote-tracking branch 'MaD_CaT/master'

# Conflicts:
#	scenes/btn_scale.tscn
#	scenes/tilemap.gd
#	scenes/работа.gd
#	scenes/работа.tscn
#	scripts/signaller.gd
This commit is contained in:
sasha80
2023-11-16 14:33:51 +03:00
22 changed files with 348 additions and 143 deletions

View File

@@ -6,10 +6,10 @@ 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
func _on_pressed():
print_debug('Click')
func _on_bip_pressed():
signaller.emit_signal('rto_threat_sel', self)

View File

@@ -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_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_w4jcf")
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_d16rn")
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)
@@ -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 = 20.0
offset_bottom = 20.0
script = ExtResource("1_4t8mr")
[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"]

View File

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

View File

@@ -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_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_vipcu"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_ys1x2"]
resource_local_to_scene = true
shader = ExtResource("4_nkch3")
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_27ax3")
material = ExtResource("1_itkeo")
texture = SubResource("PlaceholderTexture2D_2bft1")
centered = false
script = ExtResource("2_5wost")
script = ExtResource("2_clpjo")
[node name="строб" parent="." instance=ExtResource("3_rminv")]
material = SubResource("ShaderMaterial_vipcu")
[node name="строб" parent="." instance=ExtResource("3_kddns")]
material = SubResource("ShaderMaterial_ys1x2")
position = Vector2(560, 560)
scale = Vector2(1100, 1100)

View File

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

View File

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

View File

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

View File

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

View File

@@ -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 = "<off>"
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 = "<auto>"
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

View File

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

49
scenes/scroll-ecm-list.gd Normal file
View File

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

View File

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

View File

@@ -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_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_qroqt")
script = ExtResource("1_fg0vd")
[node name="Работа" parent="." instance=ExtResource("2_pdbvn")]
[node name="Работа" parent="." instance=ExtResource("2_u7p16")]
layout_mode = 2
[node name="Контроль" parent="." instance=ExtResource("3_2apbp")]
[node name="Контроль" parent="." instance=ExtResource("3_txp0s")]
visible = false
layout_mode = 2
[node name="Журнал" parent="." instance=ExtResource("4_yq6c0")]
[node name="Журнал" parent="." instance=ExtResource("4_cu5k8")]
visible = false
layout_mode = 2
[node name="ЭМС" parent="." instance=ExtResource("5_tlyql")]
[node name="ЭМС" parent="." instance=ExtResource("5_u71bh")]
visible = false
layout_mode = 2
[node name="Настройки" parent="." instance=ExtResource("6_rxq15")]
[node name="Настройки" parent="." instance=ExtResource("6_i8iv3")]
visible = false
layout_mode = 2

View File

@@ -71,6 +71,8 @@ func _ready():
threats.connect('threat_update', Callable(self, 'on_threat_update'))
call_deferred('_on_btn_scale_pressed')
signaller.connect('zoom_complete', Callable(self, '_on_zoom_complete'))
signaller.connect('rto_threat_sel', Callable(self, 'on_rto_threat_sel'))
signaller.connect('threat_selected', Callable(self, 'on_threat_selected'))
## Производит отображение цели на диаграмму
@@ -106,6 +108,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
@@ -115,6 +134,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)
## Возвращает ширину строба по направлению

View File

@@ -1,16 +1,16 @@
[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_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_idugi"]
resource_local_to_scene = true
@@ -18,8 +18,8 @@ shader = ExtResource("11_7ohqv")
shader_parameter/radius = 0.39
[node name="Работа" type="Panel"]
script = ExtResource("1_vmjjl")
Bip = ExtResource("2_ew6j4")
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_7lxgd")]
[node name="grd_side" parent="." instance=ExtResource("3_s2j0e")]
layout_mode = 0
offset_left = 1114.0
offset_top = 7.0
@@ -50,7 +50,7 @@ material = SubResource("ShaderMaterial_idugi")
[node name="canvas" parent="." instance=ExtResource("7_pvt8f")]
metadata/_edit_lock_ = true
[node name="grd_btns" parent="." instance=ExtResource("5_0a5o3")]
[node name="grd_btns" parent="." instance=ExtResource("5_2jnbs")]
layout_mode = 0
offset_left = 10.0
offset_top = 1116.0
@@ -58,14 +58,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_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_f41cy")]
[node name="count_danger_pad" parent="." instance=ExtResource("7_2arls")]
layout_mode = 0
offset_left = 96.0
offset_top = 29.0
@@ -97,7 +97,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_k0iv2")]
layout_mode = 0
offset_left = 1034.0
offset_top = 7.0
@@ -107,7 +107,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_k0iv2")]
layout_mode = 2
offset_left = 1034.0
offset_top = 67.0
@@ -118,7 +118,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_k0iv2")]
layout_mode = 2
offset_left = 874.0
offset_top = 1023.0

View File

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

View File

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

View File

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

View File

@@ -5,7 +5,7 @@ class_name Signaller extends Node
## два и более узла, из разных файлов.
## Вызывается, когда оператор выбирает цель.
## Вызывается, когда оператор выбирает цель в таблице.
## [param threats] - Словарь. Ключ - идентификатор (номер) цели. Значение - цель [br]
## [param th] - Выбранная цель [br]
signal threat_selected(threats: Dictionary, th)
@@ -22,6 +22,26 @@ signal threat_unselected(threats: Dictionary, th)
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)
## Вызывается при запросе изменения уровня детализации карты
## [param zoom] - Вновь установленный уровень детализации
signal zoom_changed(zoom: int)

View File

@@ -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 '<Threat>: номер:%d пеленг:%0.1f частота:%0.1f МГц' % [id, aoa, freq]
@@ -52,7 +53,9 @@ 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))
signaller.connect('interfer_init', Callable(self, 'on_interfer_init').bind(threats))
## Периодически удаляет устаревшие цели
func on_timer_check_lost(time_lost: int, threats: Dictionary):
@@ -66,6 +69,31 @@ 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_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

View File

@@ -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, но это не так */

View File

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