Compare commits

...

64 Commits

Author SHA1 Message Date
Maxim
964d41b822 Добавление файлов конфигурации для SkySensor и MP550Service 2025-12-25 10:57:16 +03:00
sasha80
af90c48694 Merge remote-tracking branch 'MaD_CaT/master'
# Conflicts:
#	scenes/настройки/настройки.gd
2025-12-24 16:14:06 +03:00
sasha80
8a06ab5fc9 Регрессия. Две одинаковые строки 2025-12-24 16:03:08 +03:00
MaD_CaT
d65dc6d0dc Доработка. Начало формирования сообщения для КАПС РПБ №9 в threats.gd 2025-12-24 15:59:27 +03:00
MaD_CaT
57f9494ad4 Регрессия. Остправление пропадания настройки времени отправки помехи. 2025-12-24 15:58:50 +03:00
sasha80
449b3d6e8c Регрессия. Управление стробом работает неверно 2025-12-24 15:26:17 +03:00
MaD_CaT
e7a240bc8a Merge remote-tracking branch 'sasha/master' 2025-12-24 14:53:34 +03:00
MaD_CaT
a2255610b5 Доработка. Помехе ЕЛРС присвоено правильное имя в таблице помех. 2025-12-24 14:30:31 +03:00
sasha80
57e7e0cc0b Рефактор. 2025-12-24 13:41:47 +03:00
sasha80
76a079dd23 Регрессия. Цели отображаются на не правильной частоте 2025-12-24 13:41:27 +03:00
sasha80
fa84118149 Исправление. E 0:00:03:969 эмс-тг.gd:13 @ on_trassa_line_changed(): Node not found: "СкруглённыйПрямоугольникБелый/Label3" (relative to "/root/panel/tab_switch/ЭМС ТГ").
<Ошибка C++>  Method/function failed. Returning: nullptr
  <Исходный код C++>scene/main/node.cpp:1877 @ get_node()
  <Трассировка стека>эмс-тг.gd:13 @ on_trassa_line_changed()
                trassa.gd:57 @ parse()
                network.gd:338 @ poll_receive_udp()
                network.gd:429 @ _process()
2025-12-24 13:40:18 +03:00
sasha80
ff85c6f80a Исправление. E 0:00:02:004 настройки.gd:260 @ button_settings(): In Object of type 'LineEdit': Attempt to connect nonexistent signal 'popup_closed' to callable 'Panel(configure)::on_color_closed_w'.
<Ошибка C++>  Condition "!signal_is_valid" is true. Returning: ERR_INVALID_PARAMETER
  <Исходный код C++>core/object/object.cpp:1439 @ connect()
  <Трассировка стека>настройки.gd:260 @ button_settings()
                настройки.gd:231 @ setting_tab()
                настройки.gd:96 @ _ready()
2025-12-24 12:59:10 +03:00
sasha80
a680537a1b Merge remote-tracking branch 'lepshiy/master'
# Conflicts:
#	scenes/настройки/настройки.gd
2025-12-24 11:53:25 +03:00
sasha80
63d6643475 Регрессия. Вид диаграммы 2025-12-24 11:49:59 +03:00
sasha80
cd39124daa Регрессия. Изменить размер диаграммы в зависимости от режима отображения РТО/обзорная 2025-12-24 11:47:49 +03:00
lepshiy
8d3b80cf4c Динамическое изменение цвета схемы Э2. Изменение значков в ЭМС ТГ и Контроль 2025-12-24 11:17:05 +03:00
sasha80
76ef0d4ac6 Рефактор. 2025-12-24 09:45:45 +03:00
sasha80
0292d2ef71 Исправление. Регрессия. Режим карты не переключается 2025-12-24 09:14:31 +03:00
sasha80
cda50a0e07 Рефактор. 2025-12-24 09:13:36 +03:00
sasha80
3a4a2c1eca Исправление. Неверный индекс 2025-12-24 08:24:02 +03:00
sasha80
a48d45d0b5 Рефактор. 2025-12-23 16:21:43 +03:00
sasha80
5b69f0f53f Регрессия. 2025-12-23 16:21:43 +03:00
sasha80
ea3509ffb0 Чистка. 2025-12-23 16:21:42 +03:00
sasha80
3136fba978 Рефактор. 2025-12-23 16:21:42 +03:00
sasha80
40f0ac7ade Исправление. Проседание частоты кадров в режиме Работа 2025-12-23 16:21:42 +03:00
sasha80
3d161fd37f WIP Исправление. Поиск причины проседания частоты кадров в режиме Работа 2025-12-23 16:21:42 +03:00
sasha80
358fd20f53 Рефактор. 2025-12-23 16:21:42 +03:00
sasha80
f517066638 Доработка. Цвет для диаграммы получить из настроек 2025-12-23 16:21:42 +03:00
MaD_CaT
ffc1cd4c32 Исправления. Исправлен вылет при попытке назначить помеху на несуществующий сектор nmfs 2025-12-19 15:28:56 +03:00
sasha80
9b28fe1352 Merge pull request 'master' (#49) from MaD_CaT/uarep-ctl:master into master
Reviewed-on: http://gitea.srez.local:3000/sasha80/uarep-ctl/pulls/49
2025-12-19 10:51:48 +03:00
MaD_CaT
0a11dac42a Исправления. Убраны объявления переменных необходимых для отладки. 2025-12-18 11:33:09 +03:00
MaD_CaT
f9e00e3976 Исправления. Исправлен вылет, если цель приходит в режиме контроля с отключеными сигналами в работе. 2025-12-18 10:44:29 +03:00
MaD_CaT
bbb119017c Исправление. Убран лишний принт и вызов текущего времени. 2025-12-17 11:31:48 +03:00
MaD_CaT
2ca8e591e7 Исправление. Убран лишний пробел. 2025-12-17 11:28:29 +03:00
MaD_CaT
cd72001881 Доработка. Изменение алгоритма отправки помехи. Теперь таймер для каждой помехи свой. Добавлена настройка времени повторной отправки. 2025-12-17 11:09:02 +03:00
sasha80
802ac0afd7 Рефактор. 2025-12-17 08:12:43 +03:00
MaD_CaT
ef33862d37 Исправление. Название кнопки помехи ЕЛРС. 2025-12-16 14:28:23 +03:00
MaD_CaT
0d67b086ba Доработка. Добавлены тултипы для кнопок помех. 2025-12-16 13:58:41 +03:00
MaD_CaT
3b5bf2ce2c Доработка. Добавлена возможность изменять ширину полосы излучения из настроек. 2025-12-16 11:24:37 +03:00
MaD_CaT
45c19973af Исправления. Восстановлено состояние секторов после постановки помехи. 2025-12-16 11:19:30 +03:00
lepshiy
7e3f1bfb81 Merge remote-tracking branch 'refs/remotes/sasha/master'
# Conflicts:
#	scenes/эмс2/эмс2.tscn
2025-12-16 11:06:20 +03:00
MaD_CaT
f50810a152 Merge remote-tracking branch 'sasha/master'
# Conflicts:
#	scenes/работа/работа.tscn
2025-12-15 15:42:09 +03:00
sasha80
fb6ea53d3c Merge remote-tracking branch 'origin/master-prd' 2025-12-15 15:37:04 +03:00
sasha80
88e0ea58ab Исправление. Не отображается изображение шкалы частот в ЭМС2 2025-12-15 15:35:03 +03:00
sasha80
857d2a9f9d Чистка. 2025-12-15 14:54:05 +03:00
sasha80
814f013da1 Рефактор. 2025-12-15 14:53:54 +03:00
sasha80
5d40fc1e1b Merge remote-tracking branch 'MaD_CaT/master-prd'
# Conflicts:
#	scenes/frame-ecm-list/scroll-ecm-list.gd
#	scenes/настройки/настройки.gd
#	scenes/работа/работа.gd
#	scenes/эмс2/эмс2.tscn
2025-12-15 14:30:48 +03:00
MaD_CaT
69a72ae993 Исправления. Убрано ограничение на время отправки команд в ЯУ-07. 2025-12-15 14:17:24 +03:00
Maxim
a8e7a1c6aa WIP Исправление. Рассинхрон данных во время работы контроля. 2025-12-15 14:09:00 +03:00
MaD_CaT
bbd3f9aa7f Godot4. Автоматически убраны лишние пробелы. 2025-12-15 14:00:24 +03:00
MaD_CaT
f2034a0edd Исправление. Имя power в threats изменено на pow 2025-12-15 14:00:02 +03:00
MaD_CaT
b274a655cd Godot4. Error -> Warn (ShadowNames) 2025-12-15 13:52:02 +03:00
sasha80
36811852fc Исправление.
ERROR: Unable to open file: res://.godot/imported/Окно частот0.png-6b01791c971bddb01337caf9077bf060.ctex.
   at: _load_data (scene/resources/compressed_texture.cpp:41)
ERROR: Unable to open file: res://.godot/imported/Скруглённый квадрат серый.png-4655829309cca3b1dec2c9ae01376d54.ctex.
   at: _load_data (scene/resources/compressed_texture.cpp:41)
2025-12-11 13:39:30 +03:00
sasha80
4057da3b75 Рефактор. 2025-12-11 11:22:56 +03:00
sasha80
304a8c6453 Рефактор. 2025-12-11 11:14:38 +03:00
sasha80
94f5159ad9 Доработка. В процессее. Проверка входных данных. Здесь не нужно 2025-12-10 10:32:32 +03:00
sasha80
9a8763a9d7 Исправление. Возможно обращение к отсутсвующему элементу 2025-12-10 10:29:24 +03:00
sasha80
788a62505f Рефактор. 2025-12-10 10:28:20 +03:00
sasha80
b3322ee591 Рефактор. 2025-12-09 12:42:31 +03:00
sasha80
9be115a535 Доработка. Пусть событие "выполнено" вызывается если разбор ответа успешно пройден 2025-12-09 12:19:30 +03:00
sasha80
92ff74efef Рефактор. 2025-12-09 12:17:03 +03:00
sasha80
4ea8a4c254 Доработка. Добавлена настройка цвета для кнопки "Подавление" 2025-12-09 12:16:02 +03:00
sasha80
55253b0915 Godot4.4 2025-12-09 11:17:16 +03:00
lepshiy
723f6535ac Доработка. Восстановление потерянных таблиц в "ЭМС ТГ" 2025-12-05 13:21:45 +03:00
71 changed files with 5543 additions and 1202 deletions

84
config/banned_ranges.json Normal file
View File

@@ -0,0 +1,84 @@
{
"ranges": [
{
"max": 404993123,
"min": 402777013
},
{
"max": 488584484,
"min": 420111389
},
{
"max": 559113065,
"min": 549071634
},
{
"max": 590394020,
"min": 581828010
},
{
"max": 671113646,
"min": 661072214
},
{
"max": 825534007,
"min": 784914374
},
{
"max": 964027611,
"min": 931531905
},
{
"max": 1097550064,
"min": 1076907893
},
{
"max": 1217532686,
"min": 1173668071
},
{
"max": 1529745530,
"min": 1500072408
},
{
"max": 1790501904,
"min": 1703047870
},
{
"max": 1903884888,
"min": 1798093759
},
{
"max": 1982005472,
"min": 1917112535
},
{
"max": 2174813389,
"min": 2103855925
},
{
"max": 2397985516,
"min": 2299661838
},
{
"max": 2696028220,
"min": 2594107498
},
{
"max": 3627192359,
"min": 3576902218
},
{
"max": 5215200272,
"min": 5186186730
},
{
"max": 5397018474,
"min": 5255819232
},
{
"max": 5967607190,
"min": 5944388619
}
]
}

3454
config/complex.json Normal file

File diff suppressed because it is too large Load Diff

15
config/service_config.ini Normal file
View File

@@ -0,0 +1,15 @@
[MP550]
host=192.168.11.105
port=42023
transmit_interval_ms=100
[RDMP]
host=127.0.0.1
port=55000
identity=MP550Service
keep_alive_interval_ms=9000
[Service]
autorun=false
host=192.168.11.102
port=42022

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cwfdur4we51wo"
path="res://.godot/imported/2разъединение.png-a5736ca86ce553a4d764d6fc09130f8a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://data/2разъединение.png"
dest_files=["res://.godot/imported/2разъединение.png-a5736ca86ce553a4d764d6fc09130f8a.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bajrbvv7twq7m"
path="res://.godot/imported/2соединение.png-b014241f07700023165f09936094354c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://data/2соединение.png"
dest_files=["res://.godot/imported/2соединение.png-b014241f07700023165f09936094354c.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://b1dw06ahtftq2"
uid="uid://csxruavk0s40l"
path="res://.godot/imported/Окно частот0.png-79ada2e7504614b9bdf58bce1aff61fb.ctex"
metadata={
"vram_texture": false

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c73tjrn8gr00o"
path="res://.godot/imported/Передатчик.png-a9919ed2f6d748be55f63a536bcda2ff.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://data/Передатчик.png"
dest_files=["res://.godot/imported/Передатчик.png-a9919ed2f6d748be55f63a536bcda2ff.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

BIN
data/Приёмник.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c6etralq2tvxg"
path="res://.godot/imported/Приёмник.png-37dec39ffb59b71e3909414fe8f5fd1e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://data/Приёмник.png"
dest_files=["res://.godot/imported/Приёмник.png-37dec39ffb59b71e3909414fe8f5fd1e.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bymxiptkbufvs"
uid="uid://fuhhvsa5um4m"
path="res://.godot/imported/Скруглённый квадрат серый.png-2111d7338e52a03a41f05d6ffbbc3eb6.ctex"
metadata={
"vram_texture": false

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://6ar7sux3vcv1"
path="res://.godot/imported/Состояние РЭС 2.png-7acd4e8d9bd67ea07a3eadee4b22c22d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://data/Состояние РЭС 2.png"
dest_files=["res://.godot/imported/Состояние РЭС 2.png-7acd4e8d9bd67ea07a3eadee4b22c22d.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b85f1ne2wrwhg"
path="res://.godot/imported/Состояние РЭС 4.png-d46f69e8c351fe747cf68bce4af4b8eb.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://data/Состояние РЭС 4.png"
dest_files=["res://.godot/imported/Состояние РЭС 4.png-d46f69e8c351fe747cf68bce4af4b8eb.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://docnrxrm2f022"
path="res://.godot/imported/Угловой квадрат3.png-7973b0c96861e98d72e8e1ea32d59204.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://data/Угловой квадрат3.png"
dest_files=["res://.godot/imported/Угловой квадрат3.png-7973b0c96861e98d72e8e1ea32d59204.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b0wa068b6gl1y"
path="res://.godot/imported/разъединение.png-285b8ee2e2b500484829beae0ee4e16b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://data/разъединение.png"
dest_files=["res://.godot/imported/разъединение.png-285b8ee2e2b500484829beae0ee4e16b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

BIN
data/связь.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://blx6c1o1nogks"
path="res://.godot/imported/связь.png-dc3eae4c11f71101d4ba94487cecfaaa.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://data/связь.png"
dest_files=["res://.godot/imported/связь.png-dc3eae4c11f71101d4ba94487cecfaaa.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bf1e2xlk3x1aw"
path="res://.godot/imported/соединение.png-aac09e55b0c5d57ef3c31c34daaf336b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://data/соединение.png"
dest_files=["res://.godot/imported/соединение.png-aac09e55b0c5d57ef3c31c34daaf336b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View File

@@ -21,7 +21,7 @@ script_export_mode=0
[preset.0.options]
custom_template/debug=""
custom_template/release="/home/user/temp/godot.linuxbsd.template_release.x86_64"
custom_template/release=""
debug/export_console_wrapper=0
binary_format/embed_pck=true
texture_format/s3tc_bptc=true

View File

@@ -29,7 +29,6 @@ interfer/default_color0=Color(0.38, 0.47, 0.51, 1)
interfer/default_color1=Color(0.39, 0.44, 0.5, 1)
interfer/select_color=Color(1, 1, 1, 1)
interfer/interfer_color=Color(0.9, 0.1, 0.25, 0.9)
interfer/resend_timeout=1000.0
config/external_cu=false
config/unit_rr_request_period=20.0
config/kems_files_path="user://kems/"
@@ -38,6 +37,64 @@ config/settings_path="user://settings.json"
config/unit_bpo_request_period=20.0
interfer/emit_color=Color(0.9, 0.1, 0.25, 0.5)
interfer/closed_sectors=Color(0, 0, 0, 1)
"config/Адрес АФСП левого борта"=""
"config/Адрес АФСП правого борта"=""
"config/Адрес БПО левого борта"=""
"config/Адрес БПО правого борта"=""
"config/Виртуальная клавиатура"=false
"config/Включить работу по своим целям"=true
"config/Внешнее указание Трасса"=false
"config/Внешнее управление"=false
"config/Кнопка «JTIDS»"=false
"config/Кнопка «К1»"=false
"config/Кнопка «КУПД»"=false
"config/Кнопка «ЛЧМ-1»"=false
"config/Кнопка «МЧМ-1»"=false
"config/Кнопка «ОЗП-1»"=false
"config/Кнопка «ОРН-И1»"=false
"config/Кнопка «ОРН-М2»"=false
"config/Кнопка «ОРН»"=false
"config/Кнопка «ПД-М2»"=false
"config/Кнопка «ПД-М4»"=false
"config/Кнопка «ПД-М4С»"=false
"config/Кнопка «ПД-ЧМ»"=false
"config/Кнопка «Подавление»"=false
"config/Кнопка «СВ-И1»"=false
"config/Кнопка «СВ-М2»"=false
"config/Ограниченный режим"=false
"config/Отладка контроля"=false
"config/Период опроса состояния АФСП, секунды"=""
"config/Период опроса состояния БПО, секунды"=""
"config/Скрыть вкладку ЭМС 2"=true
"config/Список своих протоколов"=""
"config/Текущая версия ПО УАРЭП"="master 3bff1cd Tue Nov 4 15:33:24 2025 +0300"
"config/Цвет кнопки \"Подавление\""="[0.972549021244049,0.0117647061124444,0.423529416322708,1.0]"
"config/Цвет схемы"="[0.972549021244049,0.0117647061124444,0.0274509806185961,1.0]"
"config/Цвет фона схемы"="[0.0941176488995552,0.149019613862038,1.0,1.0]"
"config/Шаблон адреса сервера карт"="https://tile.openstreetmap.org/{z}/{x}/{y}.png"
"config/навигация"=["*", 60000, true, true]
"config/уарэп-5п28"=["127.0.0.1", 50777]
"config/уарэп-капсрпб"=["127.0.0.1", "127.0.0.1", 42023, 42022, false, true]
"config/уарэп-спт25-1"=["/home/user/tty0", 0, 19200, "N", 8, 1]
"config/уарэп-спт25-2"=["/home/user/tty1", 0, 19200, "N", 8, 1]
"config/уарэп-трасса"=["192.168.11.34", "192.168.11.105", 50200, 10004, false, true]
"config/уарэп-щ3"=["/home/user/tty3", 7, 19200, "N", 8, 1, 50000]
"config/уарэп-эмс"=["10.1.1.52", 50052, false, false]
"config/уарэп-яу07-1в"=["10.1.1.12", 50012, false, false]
"config/уарэп-яу07-1к"=["10.1.1.13", 50013, false, false]
"config/уарэп-яу07-1н"=["10.1.1.11", 50011, false, false]
"config/уарэп-яу07-2в"=["10.1.1.22", 50022, false, false]
"config/уарэп-яу07-2к"=["10.1.1.23", 50023, false, false]
"config/уарэп-яу07-2н"=["10.1.1.21", 50021, false, false]
"config/уарэп-яу07-3в"=["10.1.1.32", 50032, false, false]
"config/уарэп-яу07-3к"=["10.1.1.33", 50033, false, false]
"config/уарэп-яу07-3н"=["10.1.1.31", 50031, false, false]
"config/уарэп-яу07-4в"=["10.1.1.42", 50042, false, false]
"config/уарэп-яу07-4к"=["10.1.1.43", 50043, false, false]
"config/уарэп-яу07-4н"=["10.1.1.41", 50041, false, false]
"config/уарэп-яу07-общий"=["*", 50000, true, true]
"config/уарэп-яу07-частный"=["10.1.1.253", 50253, false, true]
config/="[0.215686276555061,0.976470589637756,1.0,1.0]"
[autoload]
@@ -74,7 +131,6 @@ gdscript/warnings/unassigned_variable_op_assign=2
gdscript/warnings/unused_signal=0
gdscript/warnings/shadowed_variable=2
gdscript/warnings/shadowed_variable_base_class=2
gdscript/warnings/shadowed_global_identifier=2
gdscript/warnings/unsafe_cast=1
gdscript/warnings/assert_always_true=2
gdscript/warnings/assert_always_false=2
@@ -90,6 +146,7 @@ window/subwindows/embed_subwindows=false
window/frame_pacing/android/enable_frame_pacing=false
window/stretch/mode="canvas_items"
window/dpi/allow_hidpi=false
window/vsync/vsync_mode=0
[editor]
@@ -207,6 +264,8 @@ common/enable_object_picking=false
[rendering]
shader_compiler/shader_cache/strip_debug=true
textures/default_filters/anisotropic_filtering_level=0
anti_aliasing/screen_space_roughness_limiter/enabled=false
quality/driver/fallback_to_gles2=true
[shader_globals]

View File

@@ -37,6 +37,12 @@ var _pressed: = false
$button.set_text(val)
@export var btn_tooltip: String = '':
set(val):
btn_tooltip = val
$button.set_tooltip_text(val)
@export var disabled: bool = false:
set(val):
disabled = val

View File

@@ -1,44 +1,53 @@
class_name Diagram extends Sprite2D
class_name Diagram extends ColorRect
const NUM_OF_RANGE = 7
const NUM_OF_DIRECTIONS = 4
var fs_default_colors: Array[Color] ## Цвета по умолчанию для блоков ФС.
const color0_default: Color = Color(0.38, 0.47, 0.51, 1.0)
const color1_default: Color = Color(0.39, 0.44, 0.50, 1.0)
var color0: Color = color0_default
var color1: Color = color1_default
var fs_default_colors: PackedColorArray ## Цвета по умолчанию для блоков ФС.
@export var SecZap: PackedScene
@export var inner_radius_0: = 0.36 ## Внутренний радиус диаграммы в режиме РТО
@export var inner_radius_1: = 0.855 ## Внутренний радиус диаграммы в обзора
func _ready() -> void:
signaller.connect('map_mode_changed', Callable(self, 'set_view_mode'))
ProjectSettings.connect('settings_changed', _on_settings_changed)
_on_settings_changed()
set_def_colors()
func sv(val: float) -> float: return val / ($строб.scale.x / 2.0) * 0.125
func set_canvas_rotation(val: float) -> void: material.set('shader_parameter/rotation', val)
func set_strob_visible(val: bool): $строб.visible = val
func set_strob_center(val: Vector2): $строб.position = val
func set_strob_dir(val: float): $строб.set_instance_shader_parameter('dir', val)
func set_strob_width(val: float): $строб.set_instance_shader_parameter('width', val)
func set_strob_band(val: float): $строб.set_instance_shader_parameter('band', val / 125.0)
func set_strob_radius(val: float): $строб.set_instance_shader_parameter('radius', sv(val))
func set_strob_color(val: Color): $строб.set_instance_shader_parameter('color', val)
func set_band_colors(val: PackedColorArray): material.set('shader_parameter/ant_band_c', val)
func set_band_failures(val: PackedInt32Array): material.set('shader_parameter/ant_band_m', val)
func set_canvas_rotation(val: float): material.set('shader_parameter/rotation', val)
func set_radius_inner_frac(val: float): material.set('shader_parameter/inner_radius', val)
func set_strob_band(val: float): $строб.set_instance_shader_parameter('band', val / 125.0)
func set_strob_center(val: Vector2): $строб.position = val
func set_strob_color(val: Color): $строб.set_instance_shader_parameter('color', val)
func set_strob_dir(val: float): $строб.set_instance_shader_parameter('dir', val)
func set_strob_radius(val: float): $строб.set_instance_shader_parameter('radius', sv(val))
func set_strob_visible(val: bool): $строб.visible = val
func set_strob_width(val: float): $строб.set_instance_shader_parameter('width', val)
func get_strob_center() -> Vector2: return $строб.position
func get_strob_visible() -> bool: return $строб.visible
func get_strob_dir() -> float: return $строб.get_instance_shader_parameter('dir')
func get_strob_width() -> float: return $строб.get_instance_shader_parameter('width')
func get_strob_band() -> float: return $строб.get_instance_shader_parameter('band') * 125.0
func get_strob_radius() -> float: return $строб.get_instance_shader_parameter('radius') * 125.0
func get_strob_color() -> float: return $строб.get_instance_shader_parameter('color')
func get_band_colors(_val: Array): return material.get('shader_parameter/ant_band_c')
func get_band_failures(_val: Array): return material.get('shader_parameter/ant_band_m')
func get_canvas_rotation() -> float: return material.get('shader_parameter/rotation')
func get_radius_outter() -> float: return size.x / scale.x
func get_radius_inner_frac() -> float: return material.get('shader_parameter/inner_radius')
func get_strob_band() -> float: return $строб.get_instance_shader_parameter('band') * 125.0
func get_strob_center() -> Vector2: return $строб.position
func get_strob_color() -> float: return $строб.get_instance_shader_parameter('color')
func get_strob_dir() -> float: return $строб.get_instance_shader_parameter('dir')
func get_strob_radius() -> float: return $строб.get_instance_shader_parameter('radius') * 125.0
func get_strob_visible() -> bool: return $строб.visible
func get_strob_width() -> float: return $строб.get_instance_shader_parameter('width')
func get_canvas_rotation() -> float: return material.get('shader_parameter/rotation')
func get_radius_outter() -> float: return material.get('shader_parameter/radius_outter')
func get_radius_inner_0() -> float: return material.get('shader_parameter/radius_inner_0')
func get_radius_inner_1() -> float: return material.get('shader_parameter/radius_inner_1')
func get_band_colors(_val: Array): return material.get('shader_parameter/ant_band_c')
func get_band_failures(_val: Array): return material.get('shader_parameter/ant_band_m')
func set_band_colors(val: Array): material.set('shader_parameter/ant_band_c', val)
func set_band_failures(val: Array): material.set('shader_parameter/ant_band_m', val)
## Добавляет сектор запрета[br]
## [param id] - Индекс сектора запрета.[br]
@@ -87,30 +96,32 @@ func clear_all_seczap():
child.queue_free()
func set_seczap_color(id: int, color: Color):
func set_seczap_color(id: int, c: Color):
var seczap: = get_node('SECZAP%d' % id)
seczap.set_instance_shader_parameter('color', color)
seczap.set_instance_shader_parameter('color', c)
func set_view_mode(val: int):
if val == 1:
material.set('shader_parameter/inner_radius', inner_radius_1)
$строб.hide()
else:
material.set('shader_parameter/inner_radius', inner_radius_0)
$строб.show()
material.set('shader_parameter/mode', val)
func _on_settings_changed():
color0 = ProjectSettings.get_setting('application/interfer/default_color0', color0_default)
color1 = ProjectSettings.get_setting('application/interfer/default_color1', color1_default)
color0 *= Color(1.0, 1.0, 1.0, 0.0)
color1 *= Color(1.0, 1.0, 1.0, 0.0)
## Закрашивание по умолчанию блоков ФС цветами из настроек.
func set_def_colors():
var color0: Color = ProjectSettings.get_setting('application/interfer/default_color0', Color(0.38, 0.47, 0.51, 1.0))
var color1: Color = ProjectSettings.get_setting('application/interfer/default_color1', Color(0.39, 0.44, 0.50, 1.0))
color0 *= Color(1.0, 1.0, 1.0, 0.0)
color1 *= Color(1.0, 1.0, 1.0, 0.0)
var col_arr: Array = [color0, color1]
var col = false
var col_arr: PackedColorArray = [color0, color1]
for i in NUM_OF_RANGE:
for j in NUM_OF_DIRECTIONS:
fs_default_colors.append(col_arr[int(col)])
col = not col
col = not col
fs_default_colors.append(col_arr[i & 1])
i += 1
set_band_colors(fs_default_colors)

View File

@@ -1,25 +1,39 @@
[gd_scene load_steps=7 format=3 uid="uid://b5kjdyxuwsot5"]
[ext_resource type="Material" uid="uid://s6xe8igevnv2" path="res://shaders/antenas.tres" id="1_newdt"]
[ext_resource type="Shader" path="res://shaders/antenas.gdshader" id="1_8cjpq"]
[ext_resource type="Script" uid="uid://b85scuflwlqom" path="res://scenes/diagram/diagram.gd" id="2_8xjuy"]
[ext_resource type="PackedScene" uid="uid://c73ahpv8uiuc7" path="res://scenes/diagram/sector.tscn" id="3_tgnog"]
[ext_resource type="Shader" uid="uid://k36g8tww5yo" path="res://shaders/sector.gdshader" id="4_obn6s"]
[sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_2bft1"]
size = Vector2(1600, 1200)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_oqtdt"]
shader = ExtResource("1_8cjpq")
shader_parameter/grid_cells_angle = 4
shader_parameter/grid_layers_radius = 7
shader_parameter/alpha = 0.5
shader_parameter/inner_radius = 0.36
shader_parameter/outer_radius = 1.0
shader_parameter/grid_line_width = 0.0025
shader_parameter/rotation = 0.0
shader_parameter/ffr = 0.15
shader_parameter/sfr = 0.0
shader_parameter/pfr = 0.025
shader_parameter/ant_band_c = PackedColorArray(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
shader_parameter/ant_band_m = PackedInt32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_lniyv"]
resource_local_to_scene = true
shader = ExtResource("4_obn6s")
[node name="canvas" type="Sprite2D"]
material = ExtResource("1_newdt")
texture = SubResource("PlaceholderTexture2D_2bft1")
centered = false
[node name="canvas" type="ColorRect"]
texture_filter = 1
material = SubResource("ShaderMaterial_oqtdt")
offset_right = 560.0
offset_bottom = 560.0
scale = Vector2(2, 2)
script = ExtResource("2_8xjuy")
SecZap = ExtResource("3_tgnog")
[node name="строб" parent="." instance=ExtResource("3_tgnog")]
material = SubResource("ShaderMaterial_lniyv")
position = Vector2(560, 560)
scale = Vector2(1100, 1100)
position = Vector2(280, 280)
scale = Vector2(550, 550)

View File

@@ -57,6 +57,7 @@ size_flags_vertical = 3
tooltip_text = "Включает принудительную помеху"
strips_rotation = 15.0
text = "СРН"
btn_tooltip = "Включает подавление радионавигации"
metadata/rfi_name = "srn"
[node name="btn_jtids" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("4_7ys3c")]
@@ -64,8 +65,10 @@ editor_description = "Кнопка для принудительного вкл
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
tooltip_text = "Включает подавление каналов связи типа JTIDS"
strips_rotation = 15.0
text = "JTIDS"
btn_tooltip = "Включает подавление радиосвязи типа JTIDS"
metadata/rfi_name = "sprs"
[node name="btn_kupd" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("4_7ys3c")]
@@ -75,6 +78,7 @@ size_flags_vertical = 3
tooltip_text = "Кнопка для принудительного включения группы секторов в режим КУПД"
strips_rotation = 15.0
text = "КУПД"
btn_tooltip = "Включает подавление каналов управления передачи данных"
metadata/rfi_name = "kupd"
[node name="btn_panika" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("4_7ys3c")]
@@ -84,6 +88,7 @@ size_flags_vertical = 3
tooltip_text = "Кнопка для принудительного включения группы секторов в режим КУПД"
strips_rotation = 15.0
text = "Паника"
btn_tooltip = "Включает подавление JTIDS и КУПД"
metadata/rfi_name = "<off>"
[node name="btn_cancel" parent="grd_forced" groups=["прин-секторы-срн"] instance=ExtResource("4_7ys3c")]
@@ -92,4 +97,5 @@ size_flags_horizontal = 3
size_flags_vertical = 3
strips_rotation = 15.0
text = "Очистить"
btn_tooltip = "Выключает все сеансы помех"
metadata/rfi_name = "<off>"

View File

@@ -37,7 +37,7 @@ const INTERFER_NAMES = {
'k1': 'K1',
'svm2': 'СВ-М2',
'ozp1': 'ОЗП-1',
'eprls': 'ЕПРЛС',}
'elrs': 'ЕЛРС' }
## Индексы колонок
@@ -119,16 +119,17 @@ func on_interfer_new(ecm, table_index):
$table.set_row_editable(i_row, false)
$table.set_node_user_data(0, i_row, ecm)
table_index[ecm.ispp] = i_row
# Будем надеяться, что отложенные вызовы производятся в том же порядке
$table.call_deferred('clear_rows_selected')
$table.call_deferred('set_row_selected', i_row, true)
$table.clear_rows_selected()
$table.set_row_selected(i_row, true)
if not interfer.auto_enabled:
signaller.emit_signal('interfer_selected', ecm)
func on_interfer_off(ecm, table_index):
if not table_index.has(ecm.ispp): return
$table.remove_row(table_index[ecm.ispp])
if not table_index.has(ecm.ispp):
return
var i_row = table_index[ecm.ispp]
$table.remove_row(i_row)
rehash(table_index)
var sel_rows: Array
$table.get_selected_rows(sel_rows)

View File

@@ -13,6 +13,7 @@ size_flags_horizontal = 3
size_flags_vertical = 3
strips_rotation = 30.0
text = "Откл."
btn_tooltip = "Выключает помеху"
disabled = true
metadata/rfi_name = "off"
@@ -22,6 +23,7 @@ size_flags_horizontal = 3
size_flags_vertical = 3
strips_rotation = 30.0
text = "МЧМ-1"
btn_tooltip = "Включает помеху МЧМ-1"
disabled = true
metadata/rfi_name = "mchm1"
@@ -31,6 +33,7 @@ size_flags_horizontal = 3
size_flags_vertical = 3
strips_rotation = 30.0
text = "СРН-И1"
btn_tooltip = "Включает помеху СРН-И1"
disabled = true
metadata/rfi_name = "srni1"
@@ -40,6 +43,7 @@ size_flags_horizontal = 3
size_flags_vertical = 3
strips_rotation = 30.0
text = "СРН-М2"
btn_tooltip = "Включает помеху СРН-М2"
disabled = true
metadata/rfi_name = "srnm2"
@@ -49,6 +53,7 @@ size_flags_horizontal = 3
size_flags_vertical = 3
strips_rotation = 30.0
text = "СРН-GPS"
btn_tooltip = "Включает помеху СРН-GPS"
disabled = true
metadata/rfi_name = "srngps"
@@ -58,6 +63,7 @@ size_flags_horizontal = 3
size_flags_vertical = 3
strips_rotation = 30.0
text = "ПД-М4"
btn_tooltip = "Включает помеху МП-М4"
disabled = true
metadata/rfi_name = "pdm4"
@@ -67,6 +73,7 @@ size_flags_horizontal = 3
size_flags_vertical = 3
strips_rotation = 30.0
text = "ПД-М2"
btn_tooltip = "Включает помеху МП-М2"
disabled = true
metadata/rfi_name = "pdm2"
@@ -76,6 +83,7 @@ size_flags_horizontal = 3
size_flags_vertical = 3
strips_rotation = 30.0
text = "ЛЧМ-1"
btn_tooltip = "Включает помеху ЛЧМ-1"
disabled = true
metadata/rfi_name = "lchm1"
@@ -85,6 +93,7 @@ size_flags_horizontal = 3
size_flags_vertical = 3
strips_rotation = 30.0
text = "ЛЧМ-2"
btn_tooltip = "Включает помеху ЛЧМ-2"
disabled = true
metadata/rfi_name = "lchm2"
@@ -94,6 +103,7 @@ size_flags_horizontal = 3
size_flags_vertical = 3
strips_rotation = 30.0
text = "ПД-М4С"
btn_tooltip = "Включает помеху ПД-М4C"
disabled = true
metadata/rfi_name = "pdm4s"
@@ -103,6 +113,7 @@ size_flags_horizontal = 3
size_flags_vertical = 3
strips_rotation = 30.0
text = "ПД-ЧМ"
btn_tooltip = "Включает помеху ПД-ЧМ"
disabled = true
metadata/rfi_name = "pdchm"
@@ -112,6 +123,7 @@ size_flags_horizontal = 3
size_flags_vertical = 3
strips_rotation = 30.0
text = "СВ-И1"
btn_tooltip = "Включает помеху СВ-И1"
disabled = true
metadata/rfi_name = "svi1"
@@ -121,6 +133,7 @@ size_flags_horizontal = 3
size_flags_vertical = 3
strips_rotation = 30.0
text = "K1"
btn_tooltip = "Включает помеху К1"
disabled = true
metadata/rfi_name = "k1"
@@ -130,6 +143,7 @@ size_flags_horizontal = 3
size_flags_vertical = 3
strips_rotation = 30.0
text = "СВ-М2"
btn_tooltip = "Включает помеху СВ-М2"
disabled = true
metadata/rfi_name = "svm2"
@@ -139,6 +153,7 @@ size_flags_horizontal = 3
size_flags_vertical = 3
strips_rotation = 30.0
text = "ОЗП-1"
btn_tooltip = "Включает помеху ОЗП-1"
disabled = true
metadata/rfi_name = "ozp1"
@@ -147,6 +162,7 @@ layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
strips_rotation = 30.0
text = "ЕРЛС"
text = "ЕЛРС"
btn_tooltip = "Включает помеху ЕЛРС"
disabled = true
metadata/rfi_name = "eprls"
metadata/rfi_name = "elrs"

View File

@@ -30,15 +30,12 @@ func _ready() -> void:
func _process(_delta: float) -> void:
if Engine.is_editor_hint():
return
set_frame($input_0, unit_prd_k.ems_g_sock_dic.ems_input_1)
set_frame($input_1, unit_prd_k.ems_g_sock_dic.ems_input_2)
set_frame($input_2, unit_prd_k.ems_g_sock_dic.ems_input_lit_1)
set_frame($output_0, unit_prd_k.ems_g_sock_dic.ems_output_1)
set_frame($output_1, unit_prd_k.ems_g_sock_dic.ems_output_2)
set_frame($output_2, unit_prd_k.ems_g_sock_dic.ems_output_lit_1)
func set_frame(node_frame: Node, val: int): node_frame.set_frame(val)
$input_0.set_frame(unit_prd_k.ems_g_sock_dic.ems_input_1)
$input_1.set_frame(unit_prd_k.ems_g_sock_dic.ems_input_2)
$input_2.set_frame(unit_prd_k.ems_g_sock_dic.ems_input_lit_1)
$output_0.set_frame(unit_prd_k.ems_g_sock_dic.ems_output_1)
$output_1.set_frame(unit_prd_k.ems_g_sock_dic.ems_output_2)
$output_2.set_frame(unit_prd_k.ems_g_sock_dic.ems_output_lit_1)
func _on_start_control() -> void:
@@ -60,12 +57,6 @@ func _enter_tree() -> void:
_update_status_text(unit_prd_k.get_current_status())
func _exit_tree() -> void:
if Engine.is_editor_hint():
return
#prd_k_module.cmd_array.append([unit_prd_k.CmdCode.WRITE_ISA, [constants_k.ADDR_UG_LITERA_1, ug_work_1, constants_k.ADDR_UG_LITERA_2, ug_work_2, constants_k.ADDR_UG_LITERA_3, ug_work_3]])
static func temperature_fill(temperature_arr_node: Array, temperature_dic: Dictionary)->void:
for i_node_temperature in temperature_arr_node:
var temperature_meta: String = i_node_temperature.get_meta('um')
@@ -112,31 +103,18 @@ static func power_fill(pow_dic: Dictionary, fs_result: Dictionary, power_amplifi
func on_press_device(_name_davice: String) -> void:
var nodes_y5: Array = get_tree().get_nodes_in_group('y-5')
var node_ip_power_arr: Array = get_tree().get_nodes_in_group('power_supply')
var fs_nodes: Array = get_tree().get_nodes_in_group('fs_group')
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
var default_reset_array_node: Array = get_tree().get_nodes_in_group('default_reset')
var module_fs_1: Node = $kasseta_fs_kd/ref_A2
var module_fs_6: Node = $kasseta_fs_kd/ref_A4
var dou_6: Node = $dou6_A7
var module_fs_7: Node = $kasseta_fs_kd/ref_A7
var dou_7: Node = $dou7_A8
var control_data: Dictionary = unit_prd_k.get_control_results()
var for_control_result: Dictionary = {
'nodes_y5': nodes_y5,
'node_ip_power_arr': node_ip_power_arr,
'fs_nodes': fs_nodes,
'power_amplifier': power_amplifier,
'default_reset_array_node': default_reset_array_node,
'module_fs_1': module_fs_1,
'module_fs_6': module_fs_6,
'dou_6': dou_6,
'module_fs_7': module_fs_7,
'dou_7': dou_7,
}
for_control_result.merge(control_data, true)
on_control_result(for_control_result)
control_data['nodes_y5'] = get_tree().get_nodes_in_group('y-5')
control_data['node_ip_power_arr'] = get_tree().get_nodes_in_group('power_supply')
control_data['fs_nodes'] = get_tree().get_nodes_in_group('fs_group')
control_data['power_amplifier'] = get_tree().get_nodes_in_group('power_amplifier')
control_data['default_reset_array_node'] = get_tree().get_nodes_in_group('default_reset')
control_data['module_fs_1'] = $kasseta_fs_kd/ref_A2
control_data['module_fs_6'] = $kasseta_fs_kd/ref_A4
control_data['dou_6'] = $dou6_A7
control_data['module_fs_7'] = $kasseta_fs_kd/ref_A7
control_data['dou_7'] = $dou7_A8
on_control_result(control_data)
static func on_control_result(for_result_dic: Dictionary) -> void:
@@ -169,6 +147,7 @@ static func on_control_result(for_result_dic: Dictionary) -> void:
set_default_state(for_result_dic.default_reset_array_node)
set_default_state(for_result_dic.power_amplifier)
return
var result_dic: Dictionary = for_result_dic.result_dic
for f in for_result_dic.fs_nodes:
var fs_meta: String = f.get_meta('fs')
@@ -196,16 +175,16 @@ static func on_control_result(for_result_dic: Dictionary) -> void:
func find_labels(node1: Node):
if node1 is Label:
if node1.name in ["lbl_rname", "rname"]:
if not node1.has_meta("tooltip_set"):
if node1.name in ['lbl_rname', 'rname']:
if not node1.has_meta('tooltip_set'):
ctrl_pos += 1
var box_number = ceili(float(ctrl_pos) / 10.0)
var position_number = ctrl_pos % 10
if position_number == 0:
position_number = 10
node1.tooltip_text = "Ящик - %d, Позиция - %d" % [box_number, position_number]
node1.tooltip_text = 'Ящик - %d, Позиция - %d' % [box_number, position_number]
node1.mouse_filter = Control.MOUSE_FILTER_STOP
node1.set_meta("tooltip_set", true)
node1.set_meta('tooltip_set', true)
for child in node1.get_children():
find_labels(child)
@@ -217,12 +196,12 @@ func _on_status_updated(status_text: String) -> void:
func _update_status_text(text: String) -> void:
$control_result.text = text
# Можно добавить смену цвета в зависимости от статуса
if "Ошибка" in text or "неисправен" in text:
if 'Ошибка' in text or 'неисправен' in text:
$control_result.add_theme_color_override('font_color', Color.RED)
log.message(Logger.INFO, 'Прибор ПРД-%s неисправен' % [unit_prd_k.self_name])
elif "Ограничена" in text or "Предупреждение" in text:
elif 'Ограничена' in text or 'Предупреждение' in text:
$control_result.add_theme_color_override('font_color', Color.YELLOW)
elif "исправен" in text or "завершён" in text:
elif 'исправен' in text or 'завершён' in text:
$control_result.add_theme_color_override('font_color', Color.GREEN)
log.message(Logger.INFO, 'Прибор ПРД-%s исправен' % [unit_prd_k.self_name])
else:

View File

@@ -30,13 +30,10 @@ func _ready() -> void:
func _process(_delta: float) -> void:
if Engine.is_editor_hint():
return
set_frame($input_0, unit_prd_n.ems_g_sock_dic.ems_input_1)
set_frame($input_1, unit_prd_n.ems_g_sock_dic.ems_input_2)
set_frame($output_0, unit_prd_n.ems_g_sock_dic.ems_output_1)
set_frame($output_1, unit_prd_n.ems_g_sock_dic.ems_output_2)
func set_frame(node_frame: Node, val: int): node_frame.set_frame(val)
$input_0.set_frame(unit_prd_n.ems_g_sock_dic.ems_input_1)
$input_1.set_frame(unit_prd_n.ems_g_sock_dic.ems_input_2)
$output_0.set_frame(unit_prd_n.ems_g_sock_dic.ems_output_1)
$output_1.set_frame(unit_prd_n.ems_g_sock_dic.ems_output_2)
func _on_start_control() -> void:
@@ -60,12 +57,6 @@ func _enter_tree() -> void:
_update_status_text(unit_prd_n.get_current_status())
func _exit_tree() -> void:
if Engine.is_editor_hint():
return
#prd_n_module.cmd_array.append([unit_prd_n.CmdCode.WRITE_ISA, [constants_n.ADDR_UG_LITERA_1, ug_work_1, constants_n.ADDR_UG_LITERA_2, ug_work_2]])
static func temperature_fill(temperature_arr_node: Array, temperature_dic: Dictionary)->void:
for i_node_temperature in temperature_arr_node:
var temperature_meta: String = i_node_temperature.get_meta('um')
@@ -182,16 +173,16 @@ static func on_control_result(for_result_dic: Dictionary) -> void:
func find_labels(node1: Node):
if node1 is Label:
if node1.name in ["lbl_rname", "rname"]:
if not node1.has_meta("tooltip_set"):
if node1.name in ['lbl_rname', 'rname']:
if not node1.has_meta('tooltip_set'):
ctrl_pos += 1
var box_number = ceili(float(ctrl_pos) / 10.0)
var position_number = ctrl_pos % 10
if position_number == 0:
position_number = 10
node1.tooltip_text = "Ящик - %d, Позиция - %d" % [box_number, position_number]
node1.tooltip_text = 'Ящик - %d, Позиция - %d' % [box_number, position_number]
node1.mouse_filter = Control.MOUSE_FILTER_STOP
node1.set_meta("tooltip_set", true)
node1.set_meta('tooltip_set', true)
for child in node1.get_children():
find_labels(child)
@@ -203,12 +194,12 @@ func _on_status_updated(status_text: String) -> void:
func _update_status_text(text: String) -> void:
$control_result.text = text
# Можно добавить смену цвета в зависимости от статуса
if "Ошибка" in text or "неисправен" in text:
if 'Ошибка' in text or 'неисправен' in text:
$control_result.add_theme_color_override('font_color', Color.RED)
log.message(Logger.INFO, 'Прибор ПРД-%s неисправен' % [unit_prd_n.self_name])
elif "Ограничена" in text or "Предупреждение" in text:
elif 'Ограничена' in text or 'Предупреждение' in text:
$control_result.add_theme_color_override('font_color', Color.YELLOW)
elif "исправен" in text or "завершён" in text:
elif 'исправен' in text or 'завершён' in text:
$control_result.add_theme_color_override('font_color', Color.GREEN)
log.message(Logger.INFO, 'Прибор ПРД-%s исправен' % [unit_prd_n.self_name])
else:

View File

@@ -30,13 +30,10 @@ func _ready() -> void:
func _process(_delta: float) -> void:
if Engine.is_editor_hint():
return
set_frame($input_0, unit_prd_v.ems_g_sock_dic.ems_input_1)
set_frame($input_1, unit_prd_v.ems_g_sock_dic.ems_input_2)
set_frame($output_0, unit_prd_v.ems_g_sock_dic.ems_output_1)
set_frame($output_1, unit_prd_v.ems_g_sock_dic.ems_output_2)
func set_frame(node_frame: Node, val: int): node_frame.set_frame(val)
$input_0.set_frame(unit_prd_v.ems_g_sock_dic.ems_input_1)
$input_1.set_frame(unit_prd_v.ems_g_sock_dic.ems_input_2)
$output_0.set_frame(unit_prd_v.ems_g_sock_dic.ems_output_1)
$output_1.set_frame(unit_prd_v.ems_g_sock_dic.ems_output_2)
func _on_start_control() -> void:
@@ -60,11 +57,6 @@ func _enter_tree() -> void:
_update_status_text(unit_prd_v.get_current_status())
func _exit_tree() -> void:
if Engine.is_editor_hint():
return
static func temperature_fill(temperature_arr_node: Array, temperature_dic: Dictionary)->void:
for i_node_temperature in temperature_arr_node:
var temperature_meta: String = i_node_temperature.get_meta('um')
@@ -178,16 +170,16 @@ static func on_control_result(for_result_dic: Dictionary) -> void:
func find_labels(node1: Node):
if node1 is Label:
if node1.name in ["lbl_rname", "rname"]:
if not node1.has_meta("tooltip_set"):
if node1.name in ['lbl_rname', 'rname']:
if not node1.has_meta('tooltip_set'):
ctrl_pos += 1
var box_number = ceili(float(ctrl_pos) / 10.0)
var position_number = ctrl_pos % 10
if position_number == 0:
position_number = 10
node1.tooltip_text = "Ящик - %d, Позиция - %d" % [box_number, position_number]
node1.tooltip_text = 'Ящик - %d, Позиция - %d' % [box_number, position_number]
node1.mouse_filter = Control.MOUSE_FILTER_STOP
node1.set_meta("tooltip_set", true)
node1.set_meta('tooltip_set', true)
for child in node1.get_children():
find_labels(child)
@@ -199,12 +191,12 @@ func _on_status_updated(status_text: String) -> void:
func _update_status_text(text: String) -> void:
$control_result.text = text
# Можно добавить смену цвета в зависимости от статуса
if "Ошибка" in text or "неисправен" in text:
if 'Ошибка' in text or 'неисправен' in text:
$control_result.add_theme_color_override('font_color', Color.RED)
log.message(Logger.INFO, 'Прибор ПРД-%s неисправен' % [unit_prd_v.self_name])
elif "Ограничена" in text or "Предупреждение" in text:
elif 'Ограничена' in text or 'Предупреждение' in text:
$control_result.add_theme_color_override('font_color', Color.YELLOW)
elif "исправен" in text or "завершён" in text:
elif 'исправен' in text or 'завершён' in text:
$control_result.add_theme_color_override('font_color', Color.GREEN)
log.message(Logger.INFO, 'Прибор ПРД-%s исправен' % [unit_prd_v.self_name])
else:

View File

@@ -102,15 +102,15 @@ func status_uf(status_uf_dic: Dictionary) -> void:
func find_labels(node1: Node):
if node1 is Label:
if node1.name in ["lbl_rname", "rname"]:
if not node1.has_meta("tooltip_set"):
if node1.name in ['lbl_rname', 'rname']:
if not node1.has_meta('tooltip_set'):
ctrl_pos += 1
var box_number = ceili(float(ctrl_pos) / 10.0)
var position_number = ctrl_pos % 10
if position_number == 0:
position_number = 10
node1.tooltip_text = "Ящик - %d, Позиция - %d" % [box_number, position_number]
node1.tooltip_text = 'Ящик - %d, Позиция - %d' % [box_number, position_number]
node1.mouse_filter = Control.MOUSE_FILTER_STOP
node1.set_meta("tooltip_set", true)
node1.set_meta('tooltip_set', true)
for child in node1.get_children():
find_labels(child)

View File

@@ -37,16 +37,16 @@ func on_data_received(yau: Object) -> void:
'''Обработка полученных данных от УФ'''
var new_ems_status = control_ems(yau.status)
var status_changed = false
# Обновляем только ключи КЭМС/ЭМС, сохраняя 'УФ-онлайн'
for key in ['КЭМС-Б1', 'ЭМС-Б1', 'ЭМС-Б2', 'ИП220-27Б']:
var old_value = uf_status.get(key, false)
var new_value = new_ems_status.get(key, false)
if old_value != new_value:
uf_status[key] = new_value
status_changed = true
if status_changed:
update_serviceability()
#endregion
@@ -64,7 +64,7 @@ func is_operational() -> bool:
func update_serviceability() -> void:
'''Обновление общего статуса сервисабельности'''
var new_serviceability: int = STATE_VAL.GOOD
# Проверяем онлайн-статус
if uf_status.get('УФ-онлайн', false) == false:
new_serviceability = STATE_VAL.NONE
@@ -84,7 +84,7 @@ static func control_ems(status: Array) -> Dictionary:
var status_dic: Dictionary = {}
if status.is_empty() or status.size() < 3:
return status_dic
status_dic['КЭМС-Б1'] = bool((status[StatusIndex.SOCKETS] >> 0) & 1) and bool((status[StatusIndex.SOCKETS] >> 3) & 1)
status_dic['ЭМС-Б1'] = bool((status[StatusIndex.SOCKETS] >> 1) & 1) and bool((status[StatusIndex.SOCKETS] >> 4) & 1)
status_dic['ЭМС-Б2'] = bool((status[StatusIndex.SOCKETS] >> 2) & 1) and bool((status[StatusIndex.SOCKETS] >> 5) & 1)

View File

@@ -31,7 +31,6 @@ class DeviceObserver:
func update_control_results(results: Dictionary) -> bool:
var changed := false
last_results = results.duplicate()
if results.get('is_over_control', false):
# Контроль завершен - проверяем все результаты
@@ -162,8 +161,7 @@ func _recalculate_overall_state() -> void:
func _update_display() -> void:
var config: Dictionary = STATUS_CONFIG[overall_prd_state].duplicate()
var config: Dictionary
text = config.text
modulate = config.color
add_theme_color_override("font_color", config.font_color)
@@ -258,7 +256,7 @@ func get_device_status(device_name: String) -> Dictionary:
"online": observer.status[DEVICE_STATUS.ONLINE],
"operational": observer.status[DEVICE_STATUS.STATUS],
"control_complete": observer.status[DEVICE_STATUS.CONTROL],
"last_results": observer.last_results.duplicate(),
"last_results": observer.last_results,
"status_uf": status_uf
}
return {}

View File

@@ -1,11 +1,11 @@
extends Button
func _ready():
connect("toggled", Callable(self, "_on_button_toggled"))
connect('toggled', Callable(self, '_on_button_toggled'))
func _on_button_toggled(mode: bool):
if mode:
tooltip_text = "Режим \"Тренаж\" задействован\nТекущее состояние: включено"
tooltip_text = 'Режим \"Тренаж\" задействован\nТекущее состояние: включено'
else:
tooltip_text = "Задейстовать режим \"Тренаж\"\nТекущее состояние: отключено"
tooltip_text = 'Задейстовать режим \"Тренаж\"\nТекущее состояние: отключено'

View File

@@ -745,7 +745,7 @@ func _on_threat_new(th) -> void:
func _on_threat_update(th) -> void:
var target = get_parent().get_node(str(th.id))
var target = get_parent().get_node_or_null(str(th.id))
if not target:
return
var new_position = lonlat_to_world(th.lon, th.lat)
@@ -834,5 +834,4 @@ func draw_ship_radius() -> void:
var radius_point_world = Vector2(ship_world_pos.x + radius_world, ship_world_pos.y)
var radius_point_screen = world_to_screen(radius_point_world)
var radius_screen = ship_screen_pos.distance_to(radius_point_screen)
#draw_arc(ship_screen_pos, radius_screen, 0, TAU, 64, Color.ORANGE, 2.0) # отрисовка контура
draw_circle(ship_screen_pos, radius_screen, Color.ORANGE_RED * Color(1, 1, 1, 0.1)) # отрисовка заливки

View File

@@ -3,5 +3,7 @@ extends AnimatedSprite2D
## Изменяет состояние значка "прибор на связи"
func set_val(val: bool):
set_frame(val)
if val: modulate = Color(0.3, 1.0, 0.3, 1)
else: modulate = Color(0.5, 0.5, 0.5, 1)
if val:
modulate = Color(0.3, 1.0, 0.3, 1)
else:
modulate = Color(0.5, 0.5, 0.5, 1)

View File

@@ -0,0 +1,11 @@
extends PanelContainer
## Изменяет состояние значка "прибор на связи"
func set_val(val: bool):
$connect_pribor.set_frame(val)
if val:
$connect_pribor.modulate = Color(0.3, 1.0, 0.3, 1) # зелёный
set_tooltip_text("Есть связь")
else:
$connect_pribor.modulate = modulate # изначальный
set_tooltip_text("Нет связи")

View File

@@ -0,0 +1 @@
uid://j16hg3u2uvu5

View File

@@ -9,4 +9,4 @@ func _ready() -> void:
func on_line_changed(unit_instance: unit.Unit):
$connect_pribor.set_val(unit_instance.online)
$panel_pribor.set_val(unit_instance.online)

View File

@@ -8,12 +8,14 @@ extends TextureButton
func _ready():
toggle_mode = true
focus_mode = Control.FOCUS_ALL
connect("focus_entered", _on_focus_entered)
connect("focus_exited", _on_focus_exited)
connect('focus_entered', _on_focus_entered)
connect('focus_exited', _on_focus_exited)
ProjectSettings.connect("settings_changed", Callable(self, "_on_settings_changed"))
_on_settings_changed()
func _enter_tree() -> void:
if has_node("label"):
if is_inside_tree():
$label.self_modulate = state_colors[state]
@@ -21,11 +23,11 @@ func update_progress_bar(target_value) -> void:
if tween:
tween.kill()
tween = create_tween()
tween.tween_property($control_progress, "value", target_value, 0.3)
tween.tween_property($control_progress, 'value', target_value, 0.3)
func _on_toggled(toggled_on):
if has_node("frame"):
if has_node('frame'):
$frame.visible = toggled_on
@@ -40,15 +42,24 @@ func _on_focus_exited():
func enter_press():
var enter_event = InputEventAction.new()
enter_event.action = "ui_accept"
enter_event.action = 'ui_accept'
enter_event.pressed = true
Input.parse_input_event(enter_event)
func _on_settings_changed():
if not is_inside_tree(): return
var white_color = ProjectSettings.get_setting('Схема прибора. Белый цвет', Color.LIGHT_GRAY)
var black_color = ProjectSettings.get_setting('Схема прибора. Чёрный цвет', Color.BLACK)
var white_color = ProjectSettings.get_setting('application/config/%s' % 'Цвет фона схемы', Color.DIM_GRAY)
var json_col_w = ProjectSettings.get_setting('application/config/%s' % 'Цвет фона схемы', '[0.0, 0.0, 0.0, 0.0]')
var arr_col_w = JSON.parse_string(json_col_w)
white_color = Color(arr_col_w[0], arr_col_w[1], arr_col_w[2], arr_col_w[3]) if arr_col_w else Color.DIM_GRAY
var black_color = ProjectSettings.get_setting('application/config/%s' % 'Цвет схемы', Color.WHITE_SMOKE)
var json_col_b = ProjectSettings.get_setting('application/config/%s' % 'Цвет схемы', '[1.0, 1.0, 1.0, 1.0]')
var arr_col_b = JSON.parse_string(json_col_b)
black_color = Color(arr_col_b[0], arr_col_b[1], arr_col_b[2], arr_col_b[3]) if arr_col_b else Color.WHITE_SMOKE
$pic_functional.material.set('shader_parameter/white', white_color)
$pic_functional.material.set('shader_parameter/black', black_color)
@@ -57,14 +68,13 @@ func _on_settings_changed():
set(v):
v = 0 if v < 0 else v % state_colors.size()
state = v
if is_inside_tree() and has_node("label"):
if is_inside_tree():
$label.self_modulate = state_colors[v]
@export var progress_value: float = 0.0:
set(v):
progress_value = v
if is_inside_tree():
update_progress_bar(v)
var max_val = $control_progress.get('max_value')

View File

@@ -1,16 +1,15 @@
[gd_scene load_steps=33 format=3 uid="uid://lwmw4egynmd1"]
[gd_scene load_steps=34 format=3 uid="uid://lwmw4egynmd1"]
[ext_resource type="Texture2D" uid="uid://bar8k5qef7kch" path="res://data/УФ.png" id="2_0nvm1"]
[ext_resource type="Script" uid="uid://q3gmpsqspjfp" path="res://scenes/контроль/внешний.gd" id="2_8r80x"]
[ext_resource type="Texture2D" uid="uid://bb80aigvv648i" path="res://data/кнопка-внешние-0.png" id="2_oysma"]
[ext_resource type="Script" uid="uid://bj4nndrurbunl" path="res://scenes/контроль/кнопка-прибора.gd" id="3_4pt7j"]
[ext_resource type="Texture2D" uid="uid://blx6c1o1nogks" path="res://data/связь.png" id="3_8tygn"]
[ext_resource type="Texture2D" uid="uid://dkqlvd750pplc" path="res://data/СПТ.png" id="3_hhadv"]
[ext_resource type="Texture2D" uid="uid://b0o8jhb5jbrev" path="res://data/рамка-1.png" id="4_rasbe"]
[ext_resource type="Texture2D" uid="uid://bdlbqs88bki8x" path="res://data/connect-a.png" id="5_c621m"]
[ext_resource type="Texture2D" uid="uid://d2jxmtd6n5jd1" path="res://data/Щ3.png" id="5_kvnex"]
[ext_resource type="Texture2D" uid="uid://bos68thpqqvn" path="res://data/ПРД.png" id="6_i1yfn"]
[ext_resource type="Texture2D" uid="uid://c6nve6f8sfyj2" path="res://data/состояние-исправности-0.png" id="7_6j01w"]
[ext_resource type="Texture2D" uid="uid://u3tnejvpm8it" path="res://data/disconnect-a.png" id="8_gs2be"]
[ext_resource type="Texture2D" uid="uid://dnreyfh3cd1k2" path="res://data/состояние-исправности-1.png" id="8_isjua"]
[ext_resource type="Shader" uid="uid://83fx15q1xlid" path="res://shaders/two-color.gdshader" id="9_71ec4"]
[ext_resource type="Texture2D" uid="uid://b4isaggma6q3" path="res://data/Грани22.png" id="9_iqgf5"]
@@ -25,6 +24,7 @@
[ext_resource type="Texture2D" uid="uid://c3cyog3gy24ft" path="res://data/У-ЭП.png" id="16_gjf0t"]
[ext_resource type="Script" uid="uid://xjs7owe2iexn" path="res://scenes/контроль/control_prd.gd" id="18_lbx5w"]
[ext_resource type="Texture2D" uid="uid://b2vf7en1jj8dv" path="res://data/У-РЭП-РПД-В.png" id="20_l5wui"]
[ext_resource type="Script" path="res://scenes/контроль/panel_container.gd" id="21_l5wui"]
[ext_resource type="Texture2D" uid="uid://cllxcfa130vqu" path="res://data/УА-РЭП.png" id="22_1s34a"]
[sub_resource type="GDScript" id="GDScript_iqgf5"]
@@ -88,7 +88,7 @@ func _ready():
var header_text = PRIBORS_RES[k][1]
pribor_node.set_button_group(group)
pribor_node.connect('button_down', Callable(self, 'on_pribor_press').bind(pribor_path, header_text, pribor_node))
var conn_node = pribor_node.get_node('connect_pribor')
var conn_node = pribor_node.get_node('panel_pribor')
var unit_names = pribor_node.get_meta('unit_name', [])
var pribor_proc = pribor_node.get_meta('online_proc', '')
if pribor_proc == '':
@@ -114,7 +114,7 @@ func _ready():
for pribor_node in get_tree().get_nodes_in_group('pribor_pics'):
var unit_name = pribor_node.get_meta('unit_name')
var unit_instance: = network.get_unit_instance(unit_name)
var conn_node: = pribor_node.get_node('connect_pribor')
var conn_node: = pribor_node.get_node('panel_pribor')
unit_instance.connect('line_changed', on_line_changed.bind(conn_node, unit_name))
@@ -190,14 +190,14 @@ func _on_control_prd_pressed() -> void:
# Показываем прогресс бар
$pribor_uf/control_progress.visible = true
$pribor_uf/control_progress.value = 0
# Создаем твин для анимации с плавным началом и концом
var tween = create_tween()
tween.tween_property($pribor_uf/control_progress, \"value\", 100, 2.0)\\
.set_trans(Tween.TRANS_SINE)\\
.set_ease(Tween.EASE_IN_OUT)
tween.tween_callback(func():
tween.tween_callback(func():
$pribor_uf/control_progress.visible = false
$pribor_uf.state = uf_control.serviceability_uf
)
@@ -255,14 +255,17 @@ func _on_gui_input(event: InputEvent) -> void:
$frame_button/chk_show_functional.disabled = true
"
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_4plr2"]
bg_color = Color(0.176471, 0.176471, 0.176471, 0)
[sub_resource type="SpriteFrames" id="SpriteFrames_foasq"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": ExtResource("8_gs2be")
"texture": ExtResource("3_8tygn")
}, {
"duration": 1.0,
"texture": ExtResource("5_c621m")
"texture": ExtResource("3_8tygn")
}],
"loop": true,
"name": &"default",
@@ -271,8 +274,8 @@ animations = [{
[sub_resource type="ShaderMaterial" id="ShaderMaterial_71ec4"]
shader = ExtResource("9_71ec4")
shader_parameter/white = Vector3(0, 0, 0)
shader_parameter/black = Vector3(1, 1, 1)
shader_parameter/white = Vector3(0.14, 0.13, 0.13)
shader_parameter/black = Vector3(0.95, 0.55, 0.05)
shader_parameter/gamma = 2.0
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_6hcgs"]
@@ -336,12 +339,24 @@ text = "КАПС РПБ"
horizontal_alignment = 1
vertical_alignment = 1
[node name="connect_pribor" type="AnimatedSprite2D" parent="capsrpb"]
[node name="panel_pribor" type="PanelContainer" parent="capsrpb"]
custom_minimum_size = Vector2(10, 10)
layout_mode = 0
offset_left = 16.0
offset_top = -36.0
offset_right = 107.0
offset_bottom = 55.0
scale = Vector2(0.7, 0.7)
tooltip_text = "Нет связи"
theme_override_styles/panel = SubResource("StyleBoxFlat_4plr2")
script = ExtResource("21_l5wui")
[node name="connect_pribor" type="AnimatedSprite2D" parent="capsrpb/panel_pribor"]
light_mask = 3
position = Vector2(56, -4)
scale = Vector2(2.6, 2.6)
position = Vector2(45.7142, 45.7143)
scale = Vector2(2.113, 2.1)
sprite_frames = SubResource("SpriteFrames_foasq")
script = ExtResource("11_u7tym")
frame_progress = 0.72355
[node name="5p28" type="TextureRect" parent="." groups=["pribor_pics"]]
editor_description = "Кнопка для отображения внешних соединений."
@@ -370,13 +385,24 @@ text = "5П28"
horizontal_alignment = 1
vertical_alignment = 1
[node name="connect_pribor" type="AnimatedSprite2D" parent="5p28"]
[node name="panel_pribor" type="PanelContainer" parent="5p28"]
custom_minimum_size = Vector2(10, 10)
layout_mode = 0
offset_left = 16.0
offset_top = -36.0
offset_right = 107.0
offset_bottom = 55.0
scale = Vector2(0.7, 0.7)
tooltip_text = "Нет связи"
theme_override_styles/panel = SubResource("StyleBoxFlat_4plr2")
script = ExtResource("21_l5wui")
[node name="connect_pribor" type="AnimatedSprite2D" parent="5p28/panel_pribor"]
light_mask = 3
position = Vector2(52, -4)
scale = Vector2(2.6, 2.6)
position = Vector2(45.7142, 45.7143)
scale = Vector2(2.113, 2.1)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
script = ExtResource("11_u7tym")
[node name="akng" type="TextureRect" parent="." groups=["pribor_pics"]]
editor_description = "Кнопка для отображения внешних соединений."
@@ -405,13 +431,24 @@ text = "АКНГ"
horizontal_alignment = 1
vertical_alignment = 1
[node name="connect_pribor" type="AnimatedSprite2D" parent="akng"]
[node name="panel_pribor" type="PanelContainer" parent="akng"]
custom_minimum_size = Vector2(10, 10)
layout_mode = 0
offset_left = 16.0
offset_top = -36.0
offset_right = 107.0
offset_bottom = 55.0
scale = Vector2(0.7, 0.7)
tooltip_text = "Нет связи"
theme_override_styles/panel = SubResource("StyleBoxFlat_4plr2")
script = ExtResource("21_l5wui")
[node name="connect_pribor" type="AnimatedSprite2D" parent="akng/panel_pribor"]
light_mask = 3
position = Vector2(47.9999, -4)
scale = Vector2(2.6, 2.6)
position = Vector2(45.7142, 45.7143)
scale = Vector2(2.113, 2.1)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
script = ExtResource("11_u7tym")
[node name="maps" type="TextureRect" parent="." groups=["pribor_pics"]]
editor_description = "Кнопка для отображения внешних соединений."
@@ -440,13 +477,24 @@ text = "Карты"
horizontal_alignment = 1
vertical_alignment = 1
[node name="connect_pribor" type="AnimatedSprite2D" parent="maps"]
[node name="panel_pribor" type="PanelContainer" parent="maps"]
custom_minimum_size = Vector2(10, 10)
layout_mode = 0
offset_left = 16.0
offset_top = -36.0
offset_right = 107.0
offset_bottom = 55.0
scale = Vector2(0.7, 0.7)
tooltip_text = "Нет связи"
theme_override_styles/panel = SubResource("StyleBoxFlat_4plr2")
script = ExtResource("21_l5wui")
[node name="connect_pribor" type="AnimatedSprite2D" parent="maps/panel_pribor"]
light_mask = 3
position = Vector2(47.9999, -4)
scale = Vector2(2.6, 2.6)
position = Vector2(45.7142, 45.7143)
scale = Vector2(2.113, 2.1)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
script = ExtResource("11_u7tym")
[node name="trassa" type="TextureRect" parent="." groups=["pribor_pics"]]
editor_description = "Кнопка для отображения внешних соединений."
@@ -475,13 +523,24 @@ text = "Трасса"
horizontal_alignment = 1
vertical_alignment = 1
[node name="connect_pribor" type="AnimatedSprite2D" parent="trassa"]
[node name="panel_pribor" type="PanelContainer" parent="trassa"]
custom_minimum_size = Vector2(10, 10)
layout_mode = 0
offset_left = 16.0
offset_top = -36.0
offset_right = 107.0
offset_bottom = 55.0
scale = Vector2(0.7, 0.7)
tooltip_text = "Нет связи"
theme_override_styles/panel = SubResource("StyleBoxFlat_4plr2")
script = ExtResource("21_l5wui")
[node name="connect_pribor" type="AnimatedSprite2D" parent="trassa/panel_pribor"]
light_mask = 3
position = Vector2(47.9999, -4)
scale = Vector2(2.6, 2.6)
position = Vector2(45.7142, 45.7143)
scale = Vector2(2.113, 2.1)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
script = ExtResource("11_u7tym")
[node name="pribor_prd_n_1" type="TextureButton" parent="." groups=["pribor_buttons"]]
editor_description = "Кнопка для выбора прибора."
@@ -527,14 +586,6 @@ patch_margin_top = 16
patch_margin_right = 16
patch_margin_bottom = 16
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_n_1"]
light_mask = 3
position = Vector2(35, -10)
scale = Vector2(0.625, 0.625)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
script = ExtResource("11_u7tym")
[node name="control_progress" type="TextureProgressBar" parent="pribor_prd_n_1"]
visible = false
layout_mode = 0
@@ -570,6 +621,25 @@ offset_bottom = 830.0
scale = Vector2(0.97094, 0.97094)
texture = ExtResource("9_qe1go")
[node name="panel_pribor" type="PanelContainer" parent="pribor_prd_n_1"]
custom_minimum_size = Vector2(10, 10)
layout_mode = 0
offset_left = 27.0
offset_top = -19.0
offset_right = 50.0
offset_bottom = 5.0
scale = Vector2(0.7, 0.7)
tooltip_text = "Нет связи"
theme_override_styles/panel = SubResource("StyleBoxFlat_4plr2")
script = ExtResource("21_l5wui")
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_n_1/panel_pribor"]
light_mask = 3
position = Vector2(11.4285, 12.8571)
scale = Vector2(0.6, 0.596)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
[node name="pribor_uf" type="TextureButton" parent="." groups=["pribor_buttons"]]
editor_description = "Кнопка для выбора прибора."
layout_mode = 0
@@ -613,14 +683,6 @@ patch_margin_top = 16
patch_margin_right = 16
patch_margin_bottom = 16
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_uf"]
light_mask = 3
position = Vector2(52, -6)
scale = Vector2(0.625, 0.625)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
script = ExtResource("11_u7tym")
[node name="pic_functional" type="TextureRect" parent="pribor_uf"]
visible = false
z_index = 1
@@ -656,6 +718,25 @@ texture_progress = ExtResource("10_lbx5w")
tint_under = Color(1, 1, 1, 0.419608)
tint_progress = Color(0.890196, 0.486275, 0.196078, 1)
[node name="panel_pribor" type="PanelContainer" parent="pribor_uf"]
custom_minimum_size = Vector2(10, 10)
layout_mode = 0
offset_left = 44.0
offset_top = -22.0
offset_right = 67.0
offset_bottom = 2.0
scale = Vector2(0.7, 0.7)
tooltip_text = "Нет связи"
theme_override_styles/panel = SubResource("StyleBoxFlat_4plr2")
script = ExtResource("21_l5wui")
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_uf/panel_pribor"]
light_mask = 3
position = Vector2(11.4285, 12.8571)
scale = Vector2(0.6, 0.596)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
[node name="pribor_rtr" type="TextureButton" parent="." groups=["pribor_buttons"]]
editor_description = "Кнопка для выбора прибора."
layout_mode = 0
@@ -710,14 +791,6 @@ text = "РТР"
horizontal_alignment = 1
vertical_alignment = 1
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_rtr"]
light_mask = 3
position = Vector2(53, -15)
scale = Vector2(0.625, 0.625)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
script = ExtResource("11_u7tym")
[node name="pic_functional" type="TextureRect" parent="pribor_rtr"]
visible = false
z_index = 1
@@ -730,6 +803,25 @@ offset_bottom = 595.0
scale = Vector2(0.792688, 0.792688)
texture = ExtResource("13_32yvq")
[node name="panel_pribor" type="PanelContainer" parent="pribor_rtr"]
custom_minimum_size = Vector2(10, 10)
layout_mode = 0
offset_left = 44.0
offset_top = -26.0
offset_right = 67.0
offset_bottom = -2.0
scale = Vector2(0.7, 0.7)
tooltip_text = "Нет связи"
theme_override_styles/panel = SubResource("StyleBoxFlat_4plr2")
script = ExtResource("21_l5wui")
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_rtr/panel_pribor"]
light_mask = 3
position = Vector2(11.4285, 12.8571)
scale = Vector2(0.6, 0.596)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
[node name="pribor_afsp_1" type="TextureButton" parent="." groups=["pribor_buttons"]]
editor_description = "Кнопка для выбора прибора."
layout_mode = 0
@@ -788,14 +880,6 @@ text = "АФСП 1"
horizontal_alignment = 1
vertical_alignment = 1
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_afsp_1"]
light_mask = 3
position = Vector2(415, -40)
scale = Vector2(3, 3)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
script = ExtResource("11_u7tym")
[node name="pic_functional" type="TextureRect" parent="pribor_afsp_1"]
visible = false
z_index = 1
@@ -808,6 +892,25 @@ offset_bottom = 93.9999
scale = Vector2(3.96323, 3.96323)
texture = ExtResource("13_32yvq")
[node name="panel_pribor" type="PanelContainer" parent="pribor_afsp_1"]
custom_minimum_size = Vector2(10, 10)
layout_mode = 0
offset_left = 375.0
offset_top = -105.0
offset_right = 490.0
offset_bottom = 9.0
scale = Vector2(0.7, 0.7)
tooltip_text = "Нет связи"
theme_override_styles/panel = SubResource("StyleBoxFlat_4plr2")
script = ExtResource("21_l5wui")
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_afsp_1/panel_pribor"]
light_mask = 3
position = Vector2(57.1431, 57.1429)
scale = Vector2(3, 2.981)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
[node name="pribor_afsp_2" type="TextureButton" parent="." groups=["pribor_buttons"]]
editor_description = "Кнопка для выбора прибора."
layout_mode = 0
@@ -867,14 +970,6 @@ text = "АФСП 2"
horizontal_alignment = 1
vertical_alignment = 1
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_afsp_2"]
light_mask = 3
position = Vector2(415, -40)
scale = Vector2(3, 3)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
script = ExtResource("11_u7tym")
[node name="pic_functional" type="TextureRect" parent="pribor_afsp_2"]
visible = false
z_index = 1
@@ -887,6 +982,25 @@ offset_bottom = 89.0001
scale = Vector2(3.96409, 4.54663)
texture = ExtResource("13_32yvq")
[node name="panel_pribor" type="PanelContainer" parent="pribor_afsp_2"]
custom_minimum_size = Vector2(10, 10)
layout_mode = 0
offset_left = 375.0
offset_top = -105.0
offset_right = 490.0
offset_bottom = 9.0
scale = Vector2(0.7, 0.7)
tooltip_text = "Нет связи"
theme_override_styles/panel = SubResource("StyleBoxFlat_4plr2")
script = ExtResource("21_l5wui")
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_afsp_2/panel_pribor"]
light_mask = 3
position = Vector2(57.1431, 57.1429)
scale = Vector2(3, 2.981)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
[node name="pribor_uyep" type="TextureButton" parent="." groups=["pribor_buttons"]]
editor_description = "Кнопка для выбора прибора."
layout_mode = 0
@@ -930,14 +1044,6 @@ patch_margin_top = 16
patch_margin_right = 16
patch_margin_bottom = 16
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_uyep"]
light_mask = 3
position = Vector2(45, -10)
scale = Vector2(0.625, 0.625)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.872305
script = ExtResource("11_u7tym")
[node name="pic_functional" type="TextureRect" parent="pribor_uyep"]
visible = false
z_index = 1
@@ -950,6 +1056,25 @@ offset_bottom = 764.0
scale = Vector2(0.736875, 0.814493)
texture = ExtResource("16_gjf0t")
[node name="panel_pribor" type="PanelContainer" parent="pribor_uyep"]
custom_minimum_size = Vector2(10, 10)
layout_mode = 0
offset_left = 37.0
offset_top = -22.0
offset_right = 60.0
offset_bottom = 2.0
scale = Vector2(0.7, 0.7)
tooltip_text = "Нет связи"
theme_override_styles/panel = SubResource("StyleBoxFlat_4plr2")
script = ExtResource("21_l5wui")
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_uyep/panel_pribor"]
light_mask = 3
position = Vector2(11.4285, 12.8571)
scale = Vector2(0.6, 0.596)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
[node name="pribor_prd_v_2" type="TextureButton" parent="." groups=["pribor_buttons"]]
editor_description = "Кнопка для выбора прибора."
layout_mode = 0
@@ -994,14 +1119,6 @@ patch_margin_top = 16
patch_margin_right = 16
patch_margin_bottom = 16
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_v_2"]
light_mask = 3
position = Vector2(37, -10)
scale = Vector2(0.625, 0.625)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
script = ExtResource("11_u7tym")
[node name="control_progress" type="TextureProgressBar" parent="pribor_prd_v_2"]
visible = false
layout_mode = 0
@@ -1037,6 +1154,25 @@ offset_bottom = 328.0
scale = Vector2(0.977411, 0.977411)
texture = ExtResource("20_l5wui")
[node name="panel_pribor" type="PanelContainer" parent="pribor_prd_v_2"]
custom_minimum_size = Vector2(10, 10)
layout_mode = 0
offset_left = 29.0
offset_top = -21.0
offset_right = 52.0
offset_bottom = 3.0
scale = Vector2(0.7, 0.7)
tooltip_text = "Нет связи"
theme_override_styles/panel = SubResource("StyleBoxFlat_4plr2")
script = ExtResource("21_l5wui")
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_v_2/panel_pribor"]
light_mask = 3
position = Vector2(11.4285, 12.8571)
scale = Vector2(0.6, 0.596)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
[node name="pribor_prd_n_2" type="TextureButton" parent="." groups=["pribor_buttons"]]
editor_description = "Кнопка для выбора прибора."
layout_mode = 0
@@ -1083,14 +1219,6 @@ patch_margin_top = 16
patch_margin_right = 16
patch_margin_bottom = 16
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_n_2"]
light_mask = 3
position = Vector2(37, -10)
scale = Vector2(0.625, 0.625)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
script = ExtResource("11_u7tym")
[node name="pic_functional" type="TextureRect" parent="pribor_prd_n_2"]
visible = false
z_index = 1
@@ -1126,6 +1254,25 @@ texture_progress = ExtResource("10_lbx5w")
tint_under = Color(1, 1, 1, 0.419608)
tint_progress = Color(0.890196, 0.486275, 0.196078, 1)
[node name="panel_pribor" type="PanelContainer" parent="pribor_prd_n_2"]
custom_minimum_size = Vector2(10, 10)
layout_mode = 0
offset_left = 29.0
offset_top = -21.0
offset_right = 52.0
offset_bottom = 3.0
scale = Vector2(0.7, 0.7)
tooltip_text = "Нет связи"
theme_override_styles/panel = SubResource("StyleBoxFlat_4plr2")
script = ExtResource("21_l5wui")
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_n_2/panel_pribor"]
light_mask = 3
position = Vector2(11.4285, 12.8571)
scale = Vector2(0.6, 0.596)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
[node name="pribor_prd_k_2" type="TextureButton" parent="." groups=["pribor_buttons"]]
editor_description = "Кнопка для выбора прибора."
layout_mode = 0
@@ -1170,14 +1317,6 @@ patch_margin_top = 16
patch_margin_right = 16
patch_margin_bottom = 16
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_k_2"]
light_mask = 3
position = Vector2(37, -10)
scale = Vector2(0.625, 0.625)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
script = ExtResource("11_u7tym")
[node name="pic_functional" type="TextureRect" parent="pribor_prd_k_2"]
visible = false
z_index = 1
@@ -1213,6 +1352,25 @@ texture_progress = ExtResource("10_lbx5w")
tint_under = Color(1, 1, 1, 0.419608)
tint_progress = Color(0.890196, 0.486275, 0.196078, 1)
[node name="panel_pribor" type="PanelContainer" parent="pribor_prd_k_2"]
custom_minimum_size = Vector2(10, 10)
layout_mode = 0
offset_left = 29.0
offset_top = -21.0
offset_right = 52.0
offset_bottom = 3.0
scale = Vector2(0.7, 0.7)
tooltip_text = "Нет связи"
theme_override_styles/panel = SubResource("StyleBoxFlat_4plr2")
script = ExtResource("21_l5wui")
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_k_2/panel_pribor"]
light_mask = 3
position = Vector2(11.4285, 12.8571)
scale = Vector2(0.6, 0.596)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
[node name="pribor_prd_v_3" type="TextureButton" parent="." groups=["pribor_buttons"]]
editor_description = "Кнопка для выбора прибора."
layout_mode = 0
@@ -1257,14 +1415,6 @@ patch_margin_top = 16
patch_margin_right = 16
patch_margin_bottom = 16
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_v_3"]
light_mask = 3
position = Vector2(35, -10)
scale = Vector2(0.625, 0.625)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
script = ExtResource("11_u7tym")
[node name="control_progress" type="TextureProgressBar" parent="pribor_prd_v_3"]
visible = false
layout_mode = 0
@@ -1300,6 +1450,25 @@ offset_bottom = 207.0
scale = Vector2(0.975409, 0.975409)
texture = ExtResource("20_l5wui")
[node name="panel_pribor" type="PanelContainer" parent="pribor_prd_v_3"]
custom_minimum_size = Vector2(10, 10)
layout_mode = 0
offset_left = 27.0
offset_top = -20.0
offset_right = 50.0
offset_bottom = 4.0
scale = Vector2(0.7, 0.7)
tooltip_text = "Нет связи"
theme_override_styles/panel = SubResource("StyleBoxFlat_4plr2")
script = ExtResource("21_l5wui")
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_v_3/panel_pribor"]
light_mask = 3
position = Vector2(11.4285, 12.8571)
scale = Vector2(0.6, 0.596)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
[node name="pribor_prd_n_3" type="TextureButton" parent="." groups=["pribor_buttons"]]
editor_description = "Кнопка для выбора прибора."
layout_mode = 0
@@ -1344,14 +1513,6 @@ patch_margin_top = 16
patch_margin_right = 16
patch_margin_bottom = 16
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_n_3"]
light_mask = 3
position = Vector2(33, -10)
scale = Vector2(0.625, 0.625)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
script = ExtResource("11_u7tym")
[node name="control_progress" type="TextureProgressBar" parent="pribor_prd_n_3"]
visible = false
layout_mode = 0
@@ -1387,6 +1548,25 @@ offset_bottom = 219.0
scale = Vector2(0.969291, 0.969291)
texture = ExtResource("9_qe1go")
[node name="panel_pribor" type="PanelContainer" parent="pribor_prd_n_3"]
custom_minimum_size = Vector2(10, 10)
layout_mode = 0
offset_left = 25.0
offset_top = -21.0
offset_right = 48.0
offset_bottom = 3.0
scale = Vector2(0.7, 0.7)
tooltip_text = "Нет связи"
theme_override_styles/panel = SubResource("StyleBoxFlat_4plr2")
script = ExtResource("21_l5wui")
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_n_3/panel_pribor"]
light_mask = 3
position = Vector2(11.4285, 12.8571)
scale = Vector2(0.6, 0.596)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
[node name="pribor_prd_k_3" type="TextureButton" parent="." groups=["pribor_buttons"]]
editor_description = "Кнопка для выбора прибора."
layout_mode = 0
@@ -1431,14 +1611,6 @@ patch_margin_top = 16
patch_margin_right = 16
patch_margin_bottom = 16
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_k_3"]
light_mask = 3
position = Vector2(35, -10)
scale = Vector2(0.625, 0.625)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
script = ExtResource("11_u7tym")
[node name="control_progress" type="TextureProgressBar" parent="pribor_prd_k_3"]
visible = false
layout_mode = 0
@@ -1474,6 +1646,25 @@ offset_bottom = 361.0
scale = Vector2(0.882165, 0.896739)
texture = ExtResource("16_32yvq")
[node name="panel_pribor" type="PanelContainer" parent="pribor_prd_k_3"]
custom_minimum_size = Vector2(10, 10)
layout_mode = 0
offset_left = 27.0
offset_top = -20.0
offset_right = 50.0
offset_bottom = 4.0
scale = Vector2(0.7, 0.7)
tooltip_text = "Нет связи"
theme_override_styles/panel = SubResource("StyleBoxFlat_4plr2")
script = ExtResource("21_l5wui")
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_k_3/panel_pribor"]
light_mask = 3
position = Vector2(11.4285, 12.8571)
scale = Vector2(0.6, 0.596)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
[node name="pribor_prd_v_1" type="TextureButton" parent="." groups=["pribor_buttons"]]
editor_description = "Кнопка для выбора прибора."
layout_mode = 0
@@ -1518,14 +1709,6 @@ patch_margin_top = 16
patch_margin_right = 16
patch_margin_bottom = 16
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_v_1"]
light_mask = 3
position = Vector2(34, -10)
scale = Vector2(0.625, 0.625)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
script = ExtResource("11_u7tym")
[node name="pic_functional" type="TextureRect" parent="pribor_prd_v_1"]
visible = false
z_index = 1
@@ -1561,6 +1744,24 @@ texture_progress = ExtResource("10_lbx5w")
tint_under = Color(1, 1, 1, 0.419608)
tint_progress = Color(0.890196, 0.486275, 0.196078, 1)
[node name="panel_pribor" type="PanelContainer" parent="pribor_prd_v_1"]
custom_minimum_size = Vector2(10, 10)
layout_mode = 0
offset_left = 26.0
offset_top = -20.0
offset_right = 42.0
offset_bottom = -4.0
tooltip_text = "Нет связи"
theme_override_styles/panel = SubResource("StyleBoxFlat_4plr2")
script = ExtResource("21_l5wui")
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_v_1/panel_pribor"]
light_mask = 3
position = Vector2(8, 8)
scale = Vector2(0.4, 0.4)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
[node name="pribor_prd_k_1" type="TextureButton" parent="." groups=["pribor_buttons"]]
editor_description = "Кнопка для выбора прибора."
layout_mode = 0
@@ -1605,14 +1806,6 @@ patch_margin_top = 16
patch_margin_right = 16
patch_margin_bottom = 16
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_k_1"]
light_mask = 3
position = Vector2(35, -10)
scale = Vector2(0.625, 0.625)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
script = ExtResource("11_u7tym")
[node name="control_progress" type="TextureProgressBar" parent="pribor_prd_k_1"]
visible = false
layout_mode = 0
@@ -1648,6 +1841,25 @@ offset_bottom = 973.0
scale = Vector2(0.883479, 0.883479)
texture = ExtResource("16_32yvq")
[node name="panel_pribor" type="PanelContainer" parent="pribor_prd_k_1"]
custom_minimum_size = Vector2(10, 10)
layout_mode = 0
offset_left = 27.0
offset_top = -21.0
offset_right = 50.0
offset_bottom = 3.0
scale = Vector2(0.7, 0.7)
tooltip_text = "Нет связи"
theme_override_styles/panel = SubResource("StyleBoxFlat_4plr2")
script = ExtResource("21_l5wui")
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_k_1/panel_pribor"]
light_mask = 3
position = Vector2(11.4285, 12.8571)
scale = Vector2(0.6, 0.596)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
[node name="pribor_prd_v_4" type="TextureButton" parent="." groups=["pribor_buttons"]]
editor_description = "Кнопка для выбора прибора."
layout_mode = 0
@@ -1691,14 +1903,6 @@ patch_margin_top = 16
patch_margin_right = 16
patch_margin_bottom = 16
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_v_4"]
light_mask = 3
position = Vector2(41, -10)
scale = Vector2(0.625, 0.625)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
script = ExtResource("11_u7tym")
[node name="control_progress" type="TextureProgressBar" parent="pribor_prd_v_4"]
visible = false
layout_mode = 0
@@ -1734,6 +1938,25 @@ offset_bottom = 664.0
scale = Vector2(0.976707, 0.976707)
texture = ExtResource("20_l5wui")
[node name="panel_pribor" type="PanelContainer" parent="pribor_prd_v_4"]
custom_minimum_size = Vector2(10, 10)
layout_mode = 0
offset_left = 33.0
offset_top = -21.0
offset_right = 56.0
offset_bottom = 3.0
scale = Vector2(0.7, 0.7)
tooltip_text = "Нет связи"
theme_override_styles/panel = SubResource("StyleBoxFlat_4plr2")
script = ExtResource("21_l5wui")
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_v_4/panel_pribor"]
light_mask = 3
position = Vector2(11.4285, 12.8571)
scale = Vector2(0.6, 0.596)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
[node name="pribor_prd_n_4" type="TextureButton" parent="." groups=["pribor_buttons"]]
editor_description = "Кнопка для выбора прибора."
layout_mode = 0
@@ -1777,14 +2000,6 @@ patch_margin_top = 16
patch_margin_right = 16
patch_margin_bottom = 16
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_n_4"]
light_mask = 3
position = Vector2(40, -10)
scale = Vector2(0.625, 0.625)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
script = ExtResource("11_u7tym")
[node name="control_progress" type="TextureProgressBar" parent="pribor_prd_n_4"]
visible = false
layout_mode = 0
@@ -1820,6 +2035,25 @@ offset_bottom = 336.0
scale = Vector2(0.968111, 0.968111)
texture = ExtResource("9_qe1go")
[node name="panel_pribor" type="PanelContainer" parent="pribor_prd_n_4"]
custom_minimum_size = Vector2(10, 10)
layout_mode = 0
offset_left = 32.0
offset_top = -20.0
offset_right = 55.0
offset_bottom = 4.0
scale = Vector2(0.7, 0.7)
tooltip_text = "Нет связи"
theme_override_styles/panel = SubResource("StyleBoxFlat_4plr2")
script = ExtResource("21_l5wui")
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_n_4/panel_pribor"]
light_mask = 3
position = Vector2(11.4285, 12.8571)
scale = Vector2(0.6, 0.596)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
[node name="pribor_prd_k_4" type="TextureButton" parent="." groups=["pribor_buttons"]]
editor_description = "Кнопка для выбора прибора."
layout_mode = 0
@@ -1863,14 +2097,6 @@ patch_margin_top = 16
patch_margin_right = 16
patch_margin_bottom = 16
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_k_4"]
light_mask = 3
position = Vector2(39, -10)
scale = Vector2(0.625, 0.625)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
script = ExtResource("11_u7tym")
[node name="control_progress" type="TextureProgressBar" parent="pribor_prd_k_4"]
visible = false
layout_mode = 0
@@ -1906,6 +2132,25 @@ offset_bottom = 648.0
scale = Vector2(0.879295, 0.879295)
texture = ExtResource("16_32yvq")
[node name="panel_pribor" type="PanelContainer" parent="pribor_prd_k_4"]
custom_minimum_size = Vector2(10, 10)
layout_mode = 0
offset_left = 31.0
offset_top = -20.0
offset_right = 54.0
offset_bottom = 4.0
scale = Vector2(0.7, 0.7)
tooltip_text = "Нет связи"
theme_override_styles/panel = SubResource("StyleBoxFlat_4plr2")
script = ExtResource("21_l5wui")
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_k_4/panel_pribor"]
light_mask = 3
position = Vector2(11.4285, 12.8571)
scale = Vector2(0.6, 0.596)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
[node name="txr_legend0" type="TextureRect" parent="."]
layout_mode = 0
offset_left = 316.0
@@ -1998,17 +2243,17 @@ alignment = 1
[node name="connect_legend0" type="AnimatedSprite2D" parent="."]
light_mask = 3
position = Vector2(1219, 1151)
position = Vector2(1312, 1151)
scale = Vector2(0.65, 0.65)
sprite_frames = SubResource("SpriteFrames_foasq")
frame_progress = 0.72355
script = ExtResource("11_u7tym")
[node name="Label" type="Label" parent="connect_legend0"]
offset_left = 36.9231
offset_top = -15.3846
offset_right = 103.923
offset_bottom = 3.61538
offset_left = 27.6924
offset_top = -16.923
offset_right = 94.6923
offset_bottom = 2.07697
scale = Vector2(1.54, 1.54)
text = "Отключен"
metadata/_edit_use_anchors_ = true
@@ -2016,17 +2261,17 @@ metadata/_edit_use_anchors_ = true
[node name="connect_legend1" type="AnimatedSprite2D" parent="."]
self_modulate = Color(0, 1, 0, 1)
light_mask = 3
position = Vector2(975, 1152)
position = Vector2(1072, 1151)
scale = Vector2(0.65, 0.65)
sprite_frames = SubResource("SpriteFrames_foasq")
frame = 1
script = ExtResource("11_u7tym")
[node name="Label" type="Label" parent="connect_legend1"]
offset_left = 36.9231
offset_top = -13.8462
offset_right = 99.9231
offset_bottom = 5.15385
offset_left = 27.6923
offset_top = -16.9231
offset_right = 90.6923
offset_bottom = 2.0769
scale = Vector2(1.54, 1.54)
text = "На связи"
metadata/_edit_use_anchors_ = true

View File

@@ -54,7 +54,7 @@ func _on_resized() -> void:
func _enter_tree() -> void:
if Engine.is_editor_hint(): return
var unit_any = network.get_unit_instance(unit_name)
var unit_any: = network.get_unit_instance(unit_name)
unit_any.connect('data_received', Callable(self, 'on_data_received'))
unit_any.connect('line_changed', Callable(self, 'on_line_changed'))
$margin/vbox.alignment = alignment
@@ -65,6 +65,6 @@ func _enter_tree() -> void:
func _exit_tree() -> void:
if Engine.is_editor_hint(): return
var unit_any = network.get_unit_instance(unit_name)
var unit_any: = network.get_unit_instance(unit_name)
unit_any.disconnect('data_received', Callable(self, 'on_data_received'))
unit_any.disconnect('line_changed', Callable(self, 'on_line_changed'))

View File

@@ -9,61 +9,65 @@ const ALIGNMENT = [HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER]
const HEADER_ROW = [TableHeader, TableHeader]
const HEADER_ROW_TEXT = ['Параметр', 'Значение']
const SETTING_TABLE = [
['Ограниченный режим', TableEdit, TableToggle, 'Ограничть возможности по постановке помех'],
['Кнопка «ПД-М', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «ПД-М', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «ОЗП-1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «МЧМ-1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «ОРН-И1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «ОРН-М', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «ЛЧМ-1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «ПД-М4С»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «ПД-ЧМ»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «СВ-И1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «К', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «СВ-М', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «ОРН»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «JTIDS»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «КУПД»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Внешнее управление', TableEdit, TableToggle, 'Передать управление в 5П28'],
['Внешнее указание Трасса', TableEdit, TableToggle, 'Разрешить постановку помех от Трасса'],
['Кнопка «Подавление»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Виртуальная клавиатура', TableEdit, TableToggle, 'Включить отображение экранной клавиатуры'],
['Скрыть вкладку ЭМС 2', TableEdit, TableToggle, 'Отображать вкладку \"ЭМС-2\"'],
['Отладка контроля', TableEdit, TableToggle, 'Отображать отладку контроля'],
['Текущая версия ПО УАРЭП', TableEdit, TableEdit, 'Время сборки, версия и номер фиксации'],
['уарэп-яу07-частный', TableEdit, TableEdit, 'IP-адрес для получения частных сообщений от ЯУ-07'],
['уарэп-яу07-общий', TableEdit, TableEdit, 'IP-адрес для получения широковещательных сообщений от ЯУ-07'],
['уарэп-капсрпб', TableEdit, TableEdit, 'IP-адрес для связи с КАПС-РПБ [<адрес этого узла>, <адрес удалённого узла>, <порт этого узла>, <порт удалённого узла>]'],
['уарэп-эмс', TableEdit, TableEdit, 'IP-адрес для связи с ЭМС'],
['уарэп-яу07-2в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 2'],
['уарэп-яу07-2н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 2'],
['уарэп-яу07-2к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 2'],
['уарэп-яу07-4в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 4'],
['уарэп-яу07-4н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 4'],
['уарэп-яу07-4к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 4'],
['уарэп-яу07-1в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 1'],
['уарэп-яу07-1н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 1'],
['уарэп-яу07-1к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 1'],
['уарэп-яу07-3в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 3'],
['уарэп-яу07-3н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 3'],
['уарэп-яу07-3к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 3'],
['уарэп-5п28', TableEdit, TableEdit, 'IP-адрес для связи с 5П28'],
['навигация', TableEdit, TableEdit, 'Порт назначения для получения данных от АКНГ'],
['уарэп-щ3', TableEdit, TableEdit, 'Путь к UART-устройству для связи с прибором Щ3'],
['уарэп-спт25-1', TableEdit, TableEdit, 'Путь к UART-устройству для связи с прибором СПТ-25 1'],
['уарэп-спт25-2', TableEdit, TableEdit, 'Путь к UART-устройству для связи с прибором СПТ-25 2'],
['Шаблон адреса сервера карт', TableEdit, TableEdit, 'Шаблон URL-адреса сервера карт, должен содержать поля \"{x}\", \"{y}\", \"{z}\" для подстановки индекса плитки'],
['Адрес АФСП левого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора АФСП'],
['Адрес АФСП правого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора АФСП'],
['Адрес БПО левого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора БПО'],
['Адрес БПО правого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора БПО'],
['Период опроса состояния БПО, секунды', TableEdit, TableEdit, 'Время в секундах' ],
['Период опроса состояния АФСП, секунды', TableEdit, TableEdit, 'Время в секундах' ],
['уарэп-трасса', TableEdit, TableEdit, 'IP-адрес для связи с Трассой [<адрес этого узла>, <адрес удалённого узла>, <порт этого узла>, <порт удалённого узла>]'],
['Включить работу по своим целям', TableEdit, TableToggle, 'Разрешает работу в секторе со своей целью'],
['Список своих протоколов', TableEdit, TableEdit, 'Список протоколов целей, по которым запрещено работать' ],
['Цвет кнопки \"Подавление\"', TableEdit, TableColorPick, 'Цвет кнопки. Введено по требованию ПЗ' ] ]
['Ограниченный режим', TableEdit, TableToggle, 'Ограничть возможности по постановке помех'], # 0
['Кнопка «ПД-М', TableEdit, TableToggle, 'Разрешить отображение кнопки'], # 1
['Кнопка «ПД-М', TableEdit, TableToggle, 'Разрешить отображение кнопки'], # 2
['Кнопка «ОЗП-1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], # 3
['Кнопка «МЧМ-1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], # 4
['Кнопка «ОРН-И1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], # 5
['Кнопка «ОРН-М', TableEdit, TableToggle, 'Разрешить отображение кнопки'], # 6
['Кнопка «ЛЧМ-1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], # 7
['Кнопка «ПД-М4С»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], # 8
['Кнопка «ПД-ЧМ»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], # 9
['Кнопка «СВ-И1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], # 10
['Кнопка «К', TableEdit, TableToggle, 'Разрешить отображение кнопки'], # 11
['Кнопка «СВ-М', TableEdit, TableToggle, 'Разрешить отображение кнопки'], # 12
['Кнопка «ОРН»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], # 13
['Кнопка «JTIDS»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], # 14
['Кнопка «КУПД»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], # 15
['Внешнее управление', TableEdit, TableToggle, 'Передать управление в 5П28'], # 16
['Внешнее указание Трасса', TableEdit, TableToggle, 'Разрешить постановку помех от Трасса'], # 17
['Кнопка «Подавление»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], # 18
['Виртуальная клавиатура', TableEdit, TableToggle, 'Включить отображение экранной клавиатуры'], # 19
['Скрыть вкладку ЭМС 2', TableEdit, TableToggle, 'Отображать вкладку \"ЭМС-2\"'], # 20
['Отладка контроля', TableEdit, TableToggle, 'Отображать отладку контроля'], # 21
['Текущая версия ПО УАРЭП', TableEdit, TableEdit, 'Время сборки, версия и номер фиксации'], # 22
['уарэп-яу07-частный', TableEdit, TableEdit, 'IP-адрес для получения частных сообщений от ЯУ-07'], # 23
['уарэп-яу07-общий', TableEdit, TableEdit, 'IP-адрес для получения широковещательных сообщений от ЯУ-07'], # 24
['уарэп-капсрпб', TableEdit, TableEdit, 'IP-адрес для связи с КАПС-РПБ [<адрес этого узла>, <адрес удалённого узла>, <порт этого узла>, <порт удалённого узла>]'], # 25
['уарэп-эмс', TableEdit, TableEdit, 'IP-адрес для связи с ЭМС'], # 26
['уарэп-яу07-2в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 2'], # 27
['уарэп-яу07-2н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 2'], # 28
['уарэп-яу07-2к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 2'], # 29
['уарэп-яу07-4в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 4'], # 30
['уарэп-яу07-4н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 4'], # 31
['уарэп-яу07-4к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 4'], # 32
['уарэп-яу07-1в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 1'], # 33
['уарэп-яу07-1н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 1'], # 34
['уарэп-яу07-1к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 1'], # 35
['уарэп-яу07-3в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 3'], # 36
['уарэп-яу07-3н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 3'], # 37
['уарэп-яу07-3к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 3'], # 38
['уарэп-5п28', TableEdit, TableEdit, 'IP-адрес для связи с 5П28'], # 39
['навигация', TableEdit, TableEdit, 'Порт назначения для получения данных от АКНГ'], # 40
['уарэп-щ3', TableEdit, TableEdit, 'Путь к UART-устройству для связи с прибором Щ3'], # 41
['уарэп-спт25-1', TableEdit, TableEdit, 'Путь к UART-устройству для связи с прибором СПТ-25 1'], # 42
['уарэп-спт25-2', TableEdit, TableEdit, 'Путь к UART-устройству для связи с прибором СПТ-25 2'], # 43
['Шаблон адреса сервера карт', TableEdit, TableEdit, 'Шаблон URL-адреса сервера карт, должен содержать поля \"{x}\", \"{y}\", \"{z}\" для подстановки индекса плитки'], # 44
['Адрес АФСП левого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора АФСП'], # 45
['Адрес АФСП правого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора АФСП'], # 46
['Адрес БПО левого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора БПО'], # 47
['Адрес БПО правого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора БПО'], # 48
['Период опроса состояния БПО, секунды', TableEdit, TableEdit, 'Время в секундах' ], # 49
['Период опроса состояния АФСП, секунды', TableEdit, TableEdit, 'Время в секундах' ], # 50
['уарэп-трасса', TableEdit, TableEdit, 'IP-адрес для связи с Трассой [<адрес этого узла>, <адрес удалённого узла>, <порт этого узла>, <порт удалённого узла>]'], # 51
['Включить работу по своим целям', TableEdit, TableToggle, 'Разрешает работу в секторе со своей целью'], # 52
['Список своих протоколов', TableEdit, TableEdit, 'Список протоколов целей, по которым запрещено работать' ], # 53
['Цвет кнопки \"Подавление\"', TableEdit, TableColorPick, 'Цвет кнопки. Введено по требованию ПЗ' ], # 54
['Цвет фона схемы', TableEdit, TableColorPick, 'Схема прибора Э2. Изменение цвет фона'], # 55
['Цвет схемы', TableEdit, TableColorPick, 'Схема прибора Э2. Изменение цвет схемы '], # 56
['Коэффициент ширины полосы излучения', TableEdit, TableEdit, 'Изменение ширины полосы излучения помехи в зависимости от цели'] ] # 57
## TODO: Придумать как избавиться от индексов
## Индексы строк таблицы.
@@ -76,6 +80,8 @@ const DEBAG_CONTROL = 21 ## Строка - Отладка контроля
const COMMIT = 22 ## Строка - Версия УАРЭП
const GOS_BTN = 52 ## Разрешить работу по своим целям
const COLOR_BTN_ACT = 54 ## Цвет кнопки "Подавление"
const COLOR_WHITE = 55 ## Цвет фона схемы
const COLOR_BLACK = 56 ## Цвет схемы
var name_to_line_index: = {} ## Для преобразования названия параметра в номер строки
@@ -87,8 +93,8 @@ func on_checkbutton_pressed(i_row: int): on_row_pressed(i_row)
## Вызывается, когда узел впервые попадает в дерево сцены.
func _ready() -> void:
setting_tab()
table_color_instance = TableColorPick.instantiate()
if not OS.get_cmdline_args().has('++ограниченный'): return
if not OS.get_cmdline_args().has('++ограниченный'):
return
$Label2.text = 'Текущий режим доступа: ограниченный'
for node in $GridContainer.get_children().filter(func(b): return b is Button):
node.disabled = true
@@ -219,11 +225,6 @@ func setting_tab():
var psk = 'application/config/%s' % param_name
if ProjectSettings.has_setting(psk):
var unit_data = ProjectSettings.get_setting(psk)
if 'Цвет кнопки \"Подавление\"' in psk:
if not unit_data is Array: return
if unit_data.size() < 4: return
var color_btn_act = $scroll_set/table.get_node2(1, COLOR_BTN_ACT)
color_btn_act.color = Color(unit_data[0], unit_data[1], unit_data[2], unit_data[3])
if is_instance_of(unit_data, TYPE_STRING):
profile.text = unit_data
button_settings()
@@ -250,12 +251,47 @@ func button_settings():
on_debag_control_pressed(debag_control)
var color_btn_act = $scroll_set/table.get_node2(1, COLOR_BTN_ACT)
color_btn_act.connect('popup_closed', on_color_closed.bind(color_btn_act))
var json_col = ProjectSettings.get_setting('application/config/%s' % 'Цвет кнопки \"Подавление\"', '[1.0, 1.0, 1.0, 1.0]')
var arr_col = JSON.parse_string(json_col)
color_btn_act.color = Color(arr_col[0], arr_col[1], arr_col[2], arr_col[3]) if arr_col else Color.WHITE
color_btn_act.text = JSON.stringify(arr_col)
var color_white = $scroll_set/table.get_node2(1, COLOR_WHITE)
color_white.connect('popup_closed', on_color_closed_w.bind(color_white))
var json_col_w = ProjectSettings.get_setting('application/config/%s' % 'Цвет фона схемы', '[0.0, 0.0, 0.0, 0.0]')
var arr_col_w = JSON.parse_string(json_col_w)
color_white.color = Color(arr_col_w[0], arr_col_w[1], arr_col_w[2], arr_col_w[3]) if arr_col_w else Color.DIM_GRAY
color_white.text = JSON.stringify(arr_col_w)
var color_black = $scroll_set/table.get_node2(1, COLOR_BLACK)
color_black.connect('popup_closed', on_color_closed_b.bind(color_black))
var json_col_b = ProjectSettings.get_setting('application/config/%s' % 'Цвет схемы', '[1.0, 1.0, 1.0, 1.0]')
var arr_col_b = JSON.parse_string(json_col_b)
color_black.color = Color(arr_col_b[0], arr_col_b[1], arr_col_b[2], arr_col_b[3]) if arr_col_b else Color.WHITE_SMOKE
color_black.text = JSON.stringify(arr_col_b)
func _update_theme_colors():
var color_white = $scroll_set/table.get_node2(1, COLOR_WHITE)
var color_black = $scroll_set/table.get_node2(1, COLOR_BLACK)
on_color_closed_w(color_white)
on_color_closed_b(color_black)
func on_color_closed_w(color_white: ColorPickerButton):
var col_w = [color_white.color.r, color_white.color.g, color_white.color.b, color_white.color.a]
color_white.text = JSON.stringify(col_w)
ProjectSettings.set_setting('application/config/%s' % 'Цвет фона схемы', color_white.text)
func on_color_closed_b(color_black: ColorPickerButton):
var col_b = [color_black.color.r, color_black.color.g, color_black.color.b, color_black.color.a]
color_black.text = JSON.stringify(col_b)
ProjectSettings.set_setting('application/config/%s' % 'Цвет схемы', color_black.text)
func on_color_closed(color_btn_act: ColorPickerButton):
var col: Color = Color(color_btn_act.color.r, color_btn_act.color.g, color_btn_act.color.b, 1.0)
ProjectSettings.set_setting('application/config/%s' % 'Цвет кнопки \"Подавление\"', col)
table_color_instance.color = col
var col = [color_btn_act.color.r, color_btn_act.color.g, color_btn_act.color.b, color_btn_act.color.a]
color_btn_act.text = JSON.stringify(col)
ProjectSettings.set_setting('application/config/%s' % 'Цвет кнопки \"Подавление\"', color_btn_act.text)
func _on_btn_save_settings_pressed():
@@ -291,10 +327,6 @@ func _on_btn_save_settings_pressed():
else:
var row = $scroll_set/table.get_row(i)
json_data[parameter] = row[1].text
if parameter == 'Цвет кнопки \"Подавление\"':
var col = table_color_instance.color
json_data[parameter] = [col.r, col.g, col.b, col.a]
for key in json_data:
ProjectSettings.set_setting('application/config/%s' % key, json_data[key])
var settings_file: = settings.get_settings_file_path()

View File

@@ -105,7 +105,7 @@ var SIGNALS_CONNECTIONS = [
[signaller, 'interfer_prinuditelno', 'on_interfer_prinuditelno'],
[signaller, 'interfer_selected', 'on_interfer_selected'],
[signaller, 'map_user_panning', 'on_user_panning'],
[signaller, 'on_prog_ecm_off', 'on_interfer_new'],
[signaller, 'prog_ecm_off', 'on_interfer_new'],
[signaller, 'rto_threat_sel', 'on_rto_threat_sel'],
[signaller, 'rto_threat_unsel', 'on_rto_threat_unsel'],
[signaller, 'sector_klaster', 'sector_klaster'],
@@ -149,11 +149,10 @@ func on_settings_changed():
color_emit_sel *= Color(1.0, 1.0, 1.0, 0.2)
color_closed *= Color(1.0, 1.0, 1.0, 0.0)
color_closed_emit *= Color(1.0, 1.0, 1.0, 1.0)
var act_btn_color = ProjectSettings.get_setting('application/config/%s' % 'Цвет кнопки \"Подавление\"', Color.WHITE)
if act_btn_color is Array:
col_btn_act = Color(act_btn_color[0], act_btn_color[1], act_btn_color[2], act_btn_color[3]) if act_btn_color.size() >= 4 else Color.WHITE
else:
col_btn_act = act_btn_color
var json_col = ProjectSettings.get_setting('application/config/%s' % 'Цвет кнопки \"Подавление\"', '[1.0, 1.0, 1.0, 1.0]')
var arr_col = JSON.parse_string(json_col)
col_btn_act = Color(arr_col[0], arr_col[1], arr_col[2], arr_col[3]) if arr_col else Color.WHITE
## Обработчик сигнала изменения списка целей.
@@ -234,12 +233,22 @@ func connect_all() -> void:
else:
var ers = error_string(rc)
push_error('%s: %s %s %s' % [ers, item[0], item[1], item[2]])
signaller.emit_signal('connect_work_signal')
for th in thrs_dict.values():
var bip = Bip.instantiate()
bip.name = '%d' % th.id
map_threat_to_bip(th, bip)
add_child(bip)
func disconnect_all() -> void:
for item in signal_conections:
item[0].disconnect(item[1], item[2])
signal_conections.clear()
var bips: Array = get_children().filter(func(item): return item.name.is_valid_int())
for bip in bips:
remove_child(bip)
bip.free()
func sector_klaster(sector_data):
@@ -458,7 +467,7 @@ func get_strob_band(pos: Vector2, prev: float) -> float:
## Устанавливает центр строба по частоте и направлению.
func set_strob(pos: Vector2) -> void:
var radp: Vector2 = tools.map_dec_to_rad(radius_center, pos)
var radp: Vector2 = tools.map_dec_to_rad(radius_center / 2.0, pos / 2.0)
if radp.y < $canvas.get_radius_outter():
$canvas.set_strob_dir(radp.x)
$canvas.set_strob_radius(radp.y)

View File

@@ -74,18 +74,24 @@ strob_min_band = 0.1
strob_min_width = 5.0
metadata/_edit_vertical_guides_ = []
[node name="btn_view" type="CheckBox" parent="."]
[node name="canvas" parent="." instance=ExtResource("11_b6su4")]
layout_mode = 0
offset_left = 835.0
offset_top = 5.0
offset_right = 994.0
offset_bottom = 32.0
offset_left = 280.0
offset_top = 280.0
offset_right = 840.0
offset_bottom = 840.0
pivot_offset = Vector2(280, 280)
[node name="btn_view" type="CheckBox" parent="canvas"]
layout_mode = 0
offset_left = 417.5
offset_top = 2.5
offset_right = 576.5
offset_bottom = 29.5
scale = Vector2(0.5, 0.5)
action_mode = 0
text = "Обзорная карта"
[node name="canvas" parent="." instance=ExtResource("11_b6su4")]
metadata/_edit_lock_ = true
[node name="tilemap" parent="." instance=ExtResource("10_gtwyg")]
self_modulate = Color(1, 1, 1, 0.415686)
position = Vector2(360, 360)
@@ -378,13 +384,13 @@ texture_normal = ExtResource("14_ggrwd")
[connection signal="drag_begin" from="." to="." method="_on_drag_begin"]
[connection signal="drag_continue" from="." to="." method="_on_drag_continue"]
[connection signal="toggled" from="btn_view" to="." method="on_button_view_toggled"]
[connection signal="toggled" from="canvas/btn_view" to="." method="on_button_view_toggled"]
[connection signal="toggled" from="chk_auto" to="." method="on_value_changed"]
[connection signal="toggled" from="btn_activate" to="." method="on_btn_activate_toggled"]
[connection signal="toggled" from="btn_center" to="." method="on_btn_center_toggled"]
[connection signal="button_down" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_down"]
[connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_up"]
[connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_button_up"]
[connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_up"]
[connection signal="button_down" from="zoom_minus" to="tilemap" method="_on_zoom_minus_button_down"]
[connection signal="button_up" from="zoom_minus" to="tilemap" method="_on_zoom_button_up"]
[connection signal="pressed" from="btn_all_work" to="." method="_on_btn_all_work_pressed"]

View File

@@ -54,9 +54,6 @@ class EmsBoard:
## Устанавливает состояние входов и выходов платы
func set_status(status: PackedByteArray):
if not status.size():
push_error('status.size():%d' % status.size())
return
var offset = 0
if id_board < 3:
offset = yemsconsts.STATUS_OFFSET[id_board]

View File

@@ -4,8 +4,8 @@
[ext_resource type="PackedScene" uid="uid://da7w3vkhadfwe" path="res://scenes/button-flat/button-flat.tscn" id="2_eju8r"]
[ext_resource type="Texture2D" uid="uid://csnts8f155sf7" path="res://data/save1.png" id="3_onafb"]
[ext_resource type="Texture2D" uid="uid://o8mam0a060d8" path="res://data/load1.png" id="4_afjfs"]
[ext_resource type="Texture2D" uid="uid://bdlbqs88bki8x" path="res://data/connect-a.png" id="5_2nrut"]
[ext_resource type="Texture2D" uid="uid://u3tnejvpm8it" path="res://data/disconnect-a.png" id="6_g3q7m"]
[ext_resource type="Texture2D" uid="uid://bdlbqs88bki8x" path="res://data/connect-a.png" id="5_wk8og"]
[ext_resource type="Texture2D" uid="uid://u3tnejvpm8it" path="res://data/disconnect-a.png" id="6_1fbmy"]
[ext_resource type="Script" uid="uid://c5pq0hbrij34d" path="res://table/table.gd" id="8_qcl30"]
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_mu34x"]
@@ -35,30 +35,30 @@ modulate_color = Color(0.8, 0.533333, 0.27451, 1)
texture = ExtResource("4_afjfs")
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_o7qii"]
texture = ExtResource("5_2nrut")
texture = ExtResource("5_wk8og")
modulate_color = Color(0.8, 0.533333, 0.27451, 1)
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_mgr7r"]
texture = ExtResource("5_2nrut")
texture = ExtResource("5_wk8og")
expand_margin_left = 3.0
expand_margin_top = 3.0
modulate_color = Color(0.8, 0.533333, 0.27451, 1)
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_hxhyh"]
texture = ExtResource("5_2nrut")
texture = ExtResource("5_wk8og")
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_tnihm"]
texture = ExtResource("6_g3q7m")
texture = ExtResource("6_1fbmy")
modulate_color = Color(0.8, 0.533333, 0.27451, 1)
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_k1qbi"]
texture = ExtResource("6_g3q7m")
texture = ExtResource("6_1fbmy")
expand_margin_left = 3.0
expand_margin_top = 3.0
modulate_color = Color(0.8, 0.533333, 0.27451, 1)
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_pe5pe"]
texture = ExtResource("6_g3q7m")
texture = ExtResource("6_1fbmy")
[node name="ЭМС" type="Panel"]
offset_right = 1598.0
@@ -126,10 +126,10 @@ theme_override_styles/normal = SubResource("StyleBoxTexture_3ytmi")
[node name="btn_connect" type="Button" parent="."]
layout_mode = 0
offset_left = 627.0
offset_top = 55.0
offset_right = 679.0
offset_bottom = 87.0
offset_left = 716.0
offset_top = 40.0
offset_right = 763.0
offset_bottom = 73.0
focus_mode = 0
theme_override_colors/icon_normal_color = Color(1, 1, 1, 1)
theme_override_styles/focus = SubResource("StyleBoxTexture_o7qii")
@@ -141,10 +141,10 @@ theme_override_styles/normal = SubResource("StyleBoxTexture_hxhyh")
[node name="btn_disconnect" type="Button" parent="."]
layout_mode = 0
offset_left = 714.0
offset_top = 741.0
offset_right = 766.0
offset_bottom = 775.0
offset_left = 718.0
offset_top = 735.0
offset_right = 764.0
offset_bottom = 764.0
focus_mode = 0
theme_override_colors/icon_normal_color = Color(1, 1, 1, 1)
theme_override_styles/focus = SubResource("StyleBoxTexture_tnihm")

View File

@@ -0,0 +1,15 @@
extends Panel
func _ready() -> void:
var unit_trassa = network.get_unit_instance('уарэп-трасса')
unit_trassa.connect('line_changed', Callable(self, 'on_trassa_line_changed'))
signaller.connect('sector_klaster', Callable(self, 'on_sector_klaster').bind(unit_trassa))
func on_trassa_line_changed(unit_trassa):
pass
func on_sector_klaster(_data, unit_trassa):
pass

View File

@@ -6,15 +6,13 @@
[ext_resource type="Texture2D" uid="uid://cckk3jk5r32bh" path="res://data/ГО.png" id="5_qxr47"]
[ext_resource type="Texture2D" uid="uid://kyrnn1mqpc08" path="res://data/РЛС1.png" id="6_8sxps"]
[ext_resource type="Texture2D" uid="uid://cx0f3wcx76u1k" path="res://data/РЛС2.png" id="7_0bfmy"]
[ext_resource type="Texture2D" uid="uid://csxruavk0s40l" path="res://data/Окно частот0.png" id="8_4em3i"]
[ext_resource type="Texture2D" uid="uid://duu8q7sv0jwfh" path="res://data/ННВС.png" id="8_aiy4x"]
[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_5u4bk"]
load_path = "res://.godot/imported/Окно частот0.png-6b01791c971bddb01337caf9077bf060.ctex"
[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_pd85g"]
[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_4em3i"]
[node name="Control" type="Panel"]
[node name="Sprite2D" type="Sprite2D" parent="."]
@@ -94,6 +92,5 @@ scale = Vector2(0.911215, 0.911215)
texture = SubResource("CompressedTexture2D_pd85g")
[node name="ТаблицаЧастот" type="Sprite2D" parent="."]
position = Vector2(808.166, 537.125)
scale = Vector2(0.956689, 0.95669)
texture = SubResource("CompressedTexture2D_4em3i")
position = Vector2(794, 569)
texture = ExtResource("8_4em3i")

File diff suppressed because it is too large Load Diff

View File

@@ -1,38 +0,0 @@
extends Panel
func _ready() -> void:
var unit_trassa = network.get_unit_instance('уарэп-трасса')
unit_trassa.connect('line_changed', Callable(self, 'on_trassa_line_changed'))
signaller.connect('sector_klaster', Callable(self, 'on_sector_klaster').bind(unit_trassa))
func on_trassa_line_changed(unit_trassa):
if unit_trassa.online:
$'454/СостояниеРэс3'.self_modulate = Color.WEB_GREEN
$'СкруглённыйПрямоугольникБелый/Label3'.text = 'Трасса'
$'СкруглённыйПрямоугольникБелый/Label4'.text = 'Трасса'
$'СкруглённыйПрямоугольникБелый/Label5'.text = 'Активный'
$'СкруглённыйПрямоугольникБелый/Label6'.text = str(unit_trassa.daa)
$'СкруглённыйПрямоугольникБелый/Label7'.text = str(unit_trassa.dap)
$'СкруглённыйПрямоугольникБелый/Label8'.text = '1'
$'СкруглённыйПрямоугольникБелый/Label9'.text = str(unit_trassa.lfb)
$'СкруглённыйПрямоугольникБелый/Label10'.text = str(unit_trassa.lfb)
else:
$'454/СостояниеРэс3'.self_modulate = Color.WHITE
$'СкруглённыйПрямоугольникБелый/Label3'.text = '-'
$'СкруглённыйПрямоугольникБелый/Label4'.text = '-'
$'СкруглённыйПрямоугольникБелый/Label5'.text = '-'
$'СкруглённыйПрямоугольникБелый/Label6'.text = '-'
$'СкруглённыйПрямоугольникБелый/Label7'.text = '-'
$'СкруглённыйПрямоугольникБелый/Label8'.text = '-'
$'СкруглённыйПрямоугольникБелый/Label9'.text = '-'
$'СкруглённыйПрямоугольникБелый/Label10'.text = '-'
func on_sector_klaster(_data, unit_trassa):
$'СкруглённыйПрямоугольникБелый/Label6'.text = str(unit_trassa.dap)
$'СкруглённыйПрямоугольникБелый/Label7'.text = str(unit_trassa.daa)
$'СкруглённыйПрямоугольникБелый/Label8'.text = '1'
$'СкруглённыйПрямоугольникБелый/Label9'.text = str(unit_trassa.lfb)
$'СкруглённыйПрямоугольникБелый/Label10'.text = str(unit_trassa.hfb)

View File

@@ -19,7 +19,7 @@ const ITERFER_MODE = {
'svm2': [INTERFER_IQFILE, SVM2_PARAMS, 21],
'k1': [INTERFER_IQFILE, K1_PARAMS, 50],
'ozp1': [INTERFER_IQFILE, OZP1_PARAMS, 51],
'eprls': [INTERFER_IQFILE, EPRLS_PARAMS, 52] }
'elrs': [INTERFER_IQFILE, ELRS_PARAMS, 52] }
const RECOMMEND_INTERFER = {
'ПСП + ФМ-2': 'srni1',
@@ -75,7 +75,7 @@ const SVM2_PARAMS = {'files': {1: ['SVM2_LIT2.pcm', 1017],
2: ['SVM2_LIT3.pcm', 1156]},
'call_proc': 'call_diap',
'par_names' : ['freq', 'filename']}
const EPRLS_PARAMS = {'files' : 'ERLS.pcm',
const ELRS_PARAMS = {'files' : 'ELRS.pcm',
'call_proc' : 'call_all_diap',
'par_names' : ['freq', 'filename']}
# Файл : Ключ (ширина): ['имя файла']
@@ -94,6 +94,9 @@ const INTERFER_OFF = 'off'
const INTERFER_IQFILE = 'IQ-файл'
const POW_DEFAULT: float = 50.0
const PERIOD_DEFAULT = 7.5
const MIN_WIDTH_COEF = 1.0
const MIN_RESEND_TIMEOUT = 0.05
var msg6_num: int = 0 ## Счётчик сообщений "тип 6"
var msg8_num: int = 0 ## Счётчик сообщений "тип 8"
var id_array: Array ## Массив id воздействий.
@@ -109,12 +112,11 @@ var gos_flag = true ## Флаг работать п
var gos_protocols: PackedStringArray ## Список протоколов своих целей
var gos_nmfs: Array ## Список номеров блоков ФС для которых запрещена работа
var fs_closed: Dictionary ## Словарь секторов запрета
var width_coef: float = 1.5 ## Коэффициент расширения полосы
var now: = 0.0 ## Время с момента запуска
var resend_timeout: float = 1.0 ## Время повторной отправки команды
## Режимы работы АФСП и БПО (Протокол ТНИИС-СТЦ, пункт 2.5.10)
enum AFSP_BPO_MODE {
run = 1,
test = 2 }
signal send_ecms(time_now) ## Сигнал отправки помех, если настало время
## Сеанс помехи.
@@ -127,13 +129,12 @@ class Interfer:
var params: = {} ## Параметры помехи.
var get_params: Array[String] ## Запрос массива параметров (список запрошенных параметров).
var retss: int ## Значение счётчика сообщения в котором был произведён запрос массива параметров.
var tick_tx: int ## Тик время обновления цели, мс.
var tick_tx: float ## Тик время обновления цели, мс.
var source_interfer: String = '' ## Тип объекта по которой поставлена помеха.
var modulation: bool ## Модуляция для включения усилителей
var um: float ## Угол места для помехи.
var nmfs: int = 0 ## Номер модуля ФС в нумерации СТЦ
var priority: int = 0 ## Приоритет помехи
static var afsp_bpo_mode: = AFSP_BPO_MODE.run ## Режим работы АФСП и БПО
func _to_string() -> String:
return 'номер: %d название: %s частота: %0.1f МГц пеленг: %0.1f гр.' % [ispp, ITERFER_MODE[krp][0], params['freq'], kni]
@@ -145,7 +146,6 @@ class Interfer:
data_to_json['ispp'] = ispp
data_to_json['krp'] = ITERFER_MODE[krp][0]
data_to_json['nmfs'] = nmfs
data_to_json['sa'] = afsp_bpo_mode
if krp != INTERFER_OFF:
data_to_json['kni'] = kni
data_to_json['powp'] = powp
@@ -199,41 +199,33 @@ func _ready() -> void:
id_array.append(i + 1)
var unit_caps = network.get_unit_instance('уарэп-капсрпб')
var unit_5p28 = network.get_unit_instance('уарэп-5п28')
var timer_check_state: = Timer.new()
add_child(timer_check_state)
var resend_timeout = ProjectSettings.get_setting('application/interfer/resend_timeout', 1000.0)
var ecms: Dictionary = {} ## Словарь помех.
var seczaps: Dictionary = {} ## Словарь секторов запрета
timer_check_state.connect('timeout', Callable(self, 'on_timer_check_state').bind(unit_caps, ecms, resend_timeout))
timer_check_state.start(resend_timeout / 1000.0)
unit_caps.connect('data_received', Callable(self, 'on_data_capsrpb_received').bind(ecms, seczaps))
unit_5p28.connect('get_interfers', Callable(self, 'on_get_interfers').bind(unit_5p28, ecms))
signaller.connect('interfer_create', Callable(self, 'on_interfer_create').bind(unit_caps, ecms))
signaller.connect('interfer_rcv', Callable(self, 'on_interfer_rcv').bind(unit_5p28, unit_caps, ecms))
signaller.connect('interfer_new', Callable(self, 'on_interfer_new').bind(unit_caps))
signaller.connect('interfer_new', Callable(self, 'on_interfer_new'))
signaller.connect('interfer_off_all', Callable(self, 'on_interfer_off_all').bind(unit_caps, ecms))
signaller.connect('th_aoa_update', Callable(self, 'on_th_aoa_update').bind(ecms, unit_caps))
signaller.connect('th_aoa_update', Callable(self, 'on_th_aoa_update').bind(ecms))
signaller.connect('interfer_off', Callable(self, 'on_interfer_off').bind(ecms, unit_caps))
signaller.connect('manual_control', Callable(self, 'on_manual_control'))
signaller.connect('full_auto', Callable(self, 'on_full_auto'))
signaller.connect('interfer_prinuditelno', Callable(self, 'on_interfer_prinuditelno'))
signaller.connect('emit_changed', Callable(self, 'on_emit_changed').bind(ecms))
signaller.connect('режим_тренаж', on_trenazh_mode)
signaller.connect('режим_контроль', on_kontrol_mode)
signaller.connect('режим_работа', on_rabota_mode)
signaller.connect('update_fs_closed', Callable(self, 'on_update_fs_closed'))
threats.connect('threat_lost', Callable(self, 'on_threats_lost').bind(ecms, unit_caps))
threats.connect('threats_resized', Callable(self, 'on_threats_resized'))
threats.connect('threat_update', Callable(self, 'on_threats_update').bind(ecms, unit_caps))
threats.connect('threat_update', Callable(self, 'on_threats_update').bind(ecms))
ProjectSettings.connect('settings_changed', on_settings_changed)
var unit_nav: = network.get_unit_instance('навигация')
unit_nav.connect('data_received', on_nav_data_received.bind(unit_caps))
connect('send_ecms', Callable(self, 'on_send_ecms').bind(ecms, unit_caps))
call_deferred('emit_signal', 'interfer_resized', ecms)
func on_trenazh_mode(val: bool): trenazh_mode = val
func on_kontrol_mode(): Interfer.afsp_bpo_mode = AFSP_BPO_MODE.test
func on_rabota_mode(): Interfer.afsp_bpo_mode = AFSP_BPO_MODE.run
func on_nav_data_received(coords: Dictionary, unit_caps):
@@ -260,20 +252,11 @@ func on_nav_data_received(coords: Dictionary, unit_caps):
msg8_num %= 0xffffffff
## Проверяет состояние отправки пакета и если не доставлен, повторяет отправку.
func on_timer_check_state(unit_instance, ecms, resend_timeout) -> void:
var tick = Time.get_ticks_msec()
for ecm in ecms.values():
if (tick - ecm.tick_tx) >= resend_timeout:
send_ecm(ecm, unit_instance)
ecm.tick_tx = tick
func on_th_aoa_update(threats: Dictionary, ecms: Dictionary, unit_instance) -> void:
func on_th_aoa_update(threats: Dictionary, ecms: Dictionary) -> void:
gos_nmfs.clear()
for thr in threats.values():
var fs_arr: Array = []
var th_aoa = fposmod(thr.aoa - course, 360)
var th_aoa: = fposmod(thr.aoa - course, 360)
prd.find_fs_index(th_aoa, thr.freq, fs_arr)
if fs_arr.size():
for item in fs_arr:
@@ -301,12 +284,8 @@ func on_th_aoa_update(threats: Dictionary, ecms: Dictionary, unit_instance) -> v
ecm.params['freq'] = thr.freq
ecm.kni = fposmod(thr.aoa - course, 360)
call_ecm_proc(ecm)
if ecm.nmfs in gos_nmfs:
if ecm.nmfs in gos_nmfs or prd.fs_caps_id[ecm.nmfs] in fs_closed:
signaller.emit_signal('interfer_off', ecm)
elif prd.fs_caps_id[ecm.nmfs] in fs_closed:
signaller.emit_signal('interfer_off', ecm)
else:
send_ecm(ecm, unit_instance)
signaller.emit_signal('fs_update_color', ecms)
prd.update_fs_state(ecms, trenazh_mode)
@@ -363,7 +342,7 @@ func map_msvk_to_ecms(unit_instance: unit.Unit, ecms: Dictionary):
for ecm in ecms.values():
if (ecm.ispp not in ispp_arr) and (ecm.krp == INTERFER_OFF):
var sz = ecms.size()
signaller.emit_signal('on_prog_ecm_off', ecm)
signaller.emit_signal('prog_ecm_off', ecm)
ecms.erase(ecm.ispp)
thrs.erase(ecm.ispp)
cu.erase(ecm.ispp)
@@ -405,7 +384,7 @@ func on_interfer_create(interfer_name, sel_threats, fs_arr, power, u, ecms) -> v
kni += 360.0
var id = item.id
param['freq'] = item.freq
param['width'] = item.width * 1.5
param['width'] = item.width * width_coef
if (item.rkrp != '') and item.fflags.rkrp and auto_enabled:
var krp = get_krp(item)
if krp != '':
@@ -456,7 +435,7 @@ func on_interfer_rcv(interfer_params: Array, unit0, unit_caps, ecms) -> void:
unit0.on_interfer_accept(err)
func interfer_create(u, interfer_name, ecms, param, kni, id, dict, source_interfer, power) -> void:
func interfer_create(_u, interfer_name, ecms, param, kni, id, dict, source_interfer, power) -> void:
var sz = ecms.size()
var ispp: int = 0
param['dur'] = 1.0 # Необходимо добавить параметры управления
@@ -495,12 +474,13 @@ func interfer_create(u, interfer_name, ecms, param, kni, id, dict, source_interf
var set_nmfs_ok = set_nmfs(ecm)
if set_nmfs_ok != Error.OK:
log.error('Ошибка выбора модуля ФС для помехи: %s' %[ecm.ispp])
ecms.erase(ispp)
dict.erase(ispp)
return
signaller.emit_signal('interfer_new', ecm)
if interfer_name == 'off':
signaller.emit_signal('interfer_off', ecm)
thrs.erase(ispp)
ecm.tick_tx = Time.get_ticks_msec()
send_ecm(ecm, u)
if sz != ecms.size():
call_deferred('emit_signal', 'interfer_resized', ecms)
@@ -586,7 +566,7 @@ func on_threats_resized(th_dic):
thrs_dict = th_dic
func on_threats_update(threat, ecms, unit_caps):
func on_threats_update(threat, ecms):
var th_id = threat.id
var ecm = null
for ecm_i in thrs.keys():
@@ -594,7 +574,7 @@ func on_threats_update(threat, ecms, unit_caps):
ecm = ecms[ecm_i]
ecm.priority = threat.priority
ecm.params['freq'] = threat.freq
var width = threat.width * 1.5
var width = threat.width * width_coef
ecm.params['width'] = width
check_width(ecm.params)
if (threat.rkrp != '') and threat.fflags.rkrp and auto_enabled:
@@ -610,8 +590,6 @@ func on_threats_update(threat, ecms, unit_caps):
if ecm.kni < 0:
ecm.kni += 360
set_nmfs(ecm)
if ecm != null:
send_ecm(ecm, unit_caps)
func find_threat(freq: int, aoa: float):
@@ -634,9 +612,9 @@ func set_rparams(threat: threats.Threat, params: Dictionary):
else:
params['freq'] = threat.freq
if threat.rparams.has('width'):
params['width'] = threat.rparams['width'] * 1.5
params['width'] = threat.rparams['width'] * width_coef
else:
params['width'] = threat.width * 1.5
params['width'] = threat.width * width_coef
check_width(params)
if threat.rparams.has('filename'):
params['filename'] = threat.rparams['filename']
@@ -654,7 +632,7 @@ func get_krp(threat: threats.Threat):
if not ecm_params.has('files'): continue
if typeof(ecm_params['files']) == TYPE_DICTIONARY:
for value in ecm_params['files'].values():
if typeof(value) == TYPE_STRING:
if typeof(value) == TYPE_STRING:
if value == threat.rparams['filename']:
krp = key
return krp
@@ -674,7 +652,7 @@ func on_interfer_off(ecm: Interfer, ecms, unit_caps):
send_ecm(ecm, unit_caps)
if not unit_caps.online:
var sz = ecms.size()
signaller.emit_signal('on_prog_ecm_off', ecm)
signaller.emit_signal('prog_ecm_off', ecm)
ecms.erase(ecm.ispp)
thrs.erase(ecm.ispp)
cu.erase(ecm.ispp)
@@ -684,15 +662,18 @@ func on_interfer_off(ecm: Interfer, ecms, unit_caps):
interfer.call_deferred('emit_signal', 'interfer_resized', ecms)
func on_interfer_new(ecm, unit_caps):
func on_interfer_new(ecm):
call_ecm_proc(ecm)
send_ecm(ecm, unit_caps)
func on_settings_changed():
gos_flag = ProjectSettings.get_setting('application/config/Включить работу по своим целям', true)
var protocols: String = ProjectSettings.get_setting('application/config/Список своих протоколов', '')
gos_protocols = protocols.split(",", true)
width_coef = float(ProjectSettings.get_setting('application/config/Коэффициент ширины полосы излучения', 1.5))
if width_coef < MIN_WIDTH_COEF: width_coef = MIN_WIDTH_COEF
resend_timeout = float(ProjectSettings.get_setting('application/config/Время повторной отправки помехи', 1.0))
if resend_timeout < MIN_RESEND_TIMEOUT: resend_timeout = MIN_RESEND_TIMEOUT
func call_ecm_proc(ecm):
@@ -721,3 +702,15 @@ func set_th_emit(th: threats.Threat, ecm: Interfer):
func check_width(param: Dictionary):
if (param['width'] < settings.WIDTH_MIN): param['width'] = settings.WIDTH_MIN
elif (param['width'] > settings.WIDTH_MAX): param['width'] = settings.WIDTH_MAX
func on_send_ecms(time_now, ecms, unit_caps):
for ecm in ecms.values():
if (time_now - ecm.tick_tx) >= resend_timeout:
send_ecm(ecm, unit_caps)
ecm.tick_tx = time_now
func _process(delta: float) -> void:
now += delta
emit_signal('send_ecms', now)

View File

@@ -311,12 +311,9 @@ class PRD:
return STATE_DEVICE.NONE if all_online else STATE_DEVICE.ERROR
func execute_cmd():
var time_now = Time.get_ticks_msec()
if (time_now - unit_yau07.time_tx) < TIME_YAU07_SEND: return
if not len(cmd_array): return
if unit_yau07.cmd_state != unit_yau07.CmdState.DONE: return
var cmd: Array = cmd_array.pop_front()
unit_yau07.time_tx = time_now
unit_yau07.send_isa(cmd[0], cmd[1])
func start_load():

View File

@@ -290,7 +290,7 @@ func _process(_delta: float) -> void:
func on_data_received(unit_pribor: Object) -> void:
var status: PackedByteArray = unit_pribor.status
if status.size() < 100: push_error('Принимаемые значения от ЯУ-07б:%s не коррентны. (размер пакета: %d)' % [self_name, status.size()]); return
temperature_um = check_temperature_um(status)
flags.temperature_ok = check_overheating(temperature_um)
block_ip_config = check_block_ip(status, block_ip_config)
@@ -1140,7 +1140,7 @@ static func _create_fs_mapping(s_name: String) -> Dictionary:
## Получение статуса ФС
static func on_fs_state(packet_type_7: Dictionary, fs_mapping: Dictionary, fs_results: Dictionary, fs_rules_config: Array) -> Dictionary:
var updated_results := fs_results.duplicate()
var updated_results := fs_results
for fs_num in packet_type_7:
if not (fs_num in fs_mapping and fs_mapping[fs_num]['condition']):
continue
@@ -1209,19 +1209,19 @@ static func power_um_ukp(status: PackedByteArray, litera: int, pwr_result: Array
static func update_max_power_values(power_data: Array, max_power_values: Array) -> Array:
if power_data.size() != 6:
if max_power_values.is_empty():
max_power_values = power_data.duplicate()
max_power_values = power_data
elif power_data[0] > max_power_values[0]:
max_power_values = power_data.duplicate()
max_power_values = power_data
return max_power_values
if max_power_values.is_empty():
max_power_values = power_data.duplicate()
max_power_values = power_data
else:
for i in 6:
if power_data[i] > max_power_values[i]:
max_power_values[i] = power_data[i]
return max_power_values.duplicate()
return max_power_values
## Подготовка принятых данных по контролю для передачи в сцену
@@ -1322,7 +1322,7 @@ func _deep_copy_power_structure() -> Dictionary:
for litera in power_for_litera:
copy[litera] = {}
for ray_type in power_for_litera[litera]:
copy[litera][ray_type] = power_for_litera[litera][ray_type].duplicate()
copy[litera][ray_type] = power_for_litera[litera][ray_type]
return copy
## Восстановление состояний по умолчанию

View File

@@ -30,12 +30,15 @@ signal режим_журнал()
## Вызывается при переходе в режим [b]ЭМС[/b].
signal режим_эмс()
## Вызывается при переходе в режим [b]ЭМС ТГ[/b].
signal режим_эмс2()
## Вызывается при переходе в режим [b]Настройка[/b].
signal режимастройки()
## Вызывается при включении/отключении режима [b]Тренаж[/b].[br]
## [param val] - [b]true[/b] тренаж включён.
signal режимренаж(val: bool)
@@ -215,10 +218,10 @@ signal tool_tip(new_ctrl_pos)
signal update_fs_closed(fs_closed: Dictionary)
signal sector_klaster (new_sector_data)
signal sector_klaster(new_sector_data)
signal clear_klaster ()
signal clear_klaster()
## Вызывается при нажатии на кнопку "Запуск контроля".[br]
@@ -227,4 +230,8 @@ signal start_contol_device()
## Вызывается при программном отключении помехи.[br]
## [param ecm] - выключаемая помеха ([b]true[/b]
signal on_prog_ecm_off(ecm: interfer.Interfer)
signal prog_ecm_off(ecm: interfer.Interfer)
## Вызывается при подключении обработчиков в режиме работа.[br]
signal connect_work_signal()

View File

@@ -160,7 +160,7 @@ class TCP5P28 extends unit.Unit:
flags |= 0 << 8 # Флаг рекомендуемой помехи
flags |= int(th.fflags['aoa']) << 9 # Флаг доставерности пеленга
flags |= int(th.fflags['alt']) << 10 # Флаг доставерности высоты
flags |= int(th.fflags['power']) << 11 # Флаг доставерности мощности
flags |= int(th.fflags['pow']) << 11 # Флаг доставерности мощности
flags |= int(th.fflags['baud']) << 12 # Флаг доставерности ск. мод.
flags |= int(th.fflags['slon']) << 13 # Флаг доставерности долготы ст. позиции
flags |= int(th.fflags['slat']) << 14 # Флаг доставерности широты ст. позиции
@@ -174,7 +174,7 @@ class TCP5P28 extends unit.Unit:
th_data.encode_u16(16, int(th.alt)) # Высота объекта
th_data.encode_u16(18, int(th.freq)) # Частота объекта
th_data.encode_u16(20, int(th.width)) # Ширина частотной полосы объекта
th_data.encode_u8(22, int(th.power)) # Мощность излучения объекта
th_data.encode_u8(22, int(th.pow)) # Мощность излучения объекта
var mod = MOD_TYPES.find(th.tmod)
if mod == -1: mod = 0
th_data.encode_u8(23, int(mod)) # Тип модуляции

View File

@@ -1,9 +1,15 @@
extends Node
## Работа с целями.
## Режимы работы АФСП и БПО (Протокол ТНИИС-СТЦ, пункт 2.5.10)
enum AFSP_BPO_MODE {
run = 1,
test = 2 }
var msg9_num: int = 0 ## Счётчик сообщений "тип 9"
var gos_flag = true ## Флаг работать по своим целям
var gos_protocols: PackedStringArray ## Список протоколов своих целей
var afsp_bpo_mode: = AFSP_BPO_MODE.run ## Режим работы АФСП и БПО
## Цель
class Threat:
@@ -17,7 +23,7 @@ class Threat:
var id: int ## Идентификатор цели.
var lat: float ## Текущие координаты, широта в градусах.
var lon: float ## Текущие координаты, долгота в градусах.
var power: float ## Уровень принимаемого сигнала, дБм.
var pow: float ## Уровень принимаемого сигнала, дБм.
var proto: String ## Тип протокола источника сигнала.
var rkrp: String ## Рекомендуемый режим помехи.
var rparams: Dictionary ## Рекомендуемые параметры помехи.
@@ -42,7 +48,6 @@ class Threat:
func set_from_dic(dic: Dictionary):
var items: = fflags.keys().filter(func(vn): return dic.has(vn))
items.any(func(vn): set(vn, dic[vn]); fflags[vn] = true; return false)
if dic.has('pow'): power = dic['pow']
signal threat_new(th: Threat)
@@ -72,7 +77,10 @@ func _ready() -> void:
signaller.connect('rto_threat_unsel_all', Callable(self, 'on_rto_threat_unsel_all').bind(threats))
signaller.connect('threat_selected', Callable(self, 'on_threat_selected').bind(threats))
signaller.connect('interfer_init', Callable(self, 'on_interfer_init').bind(threats))
signaller.connect('connect_work_signal', Callable(self, 'on_connect_work_signal').bind(threats))
signaller.connect('режим_контроль', on_kontrol_mode)
signaller.connect('режим_работа', on_rabota_mode)
ProjectSettings.connect('settings_changed', on_settings_changed.bind(threats))
@@ -167,7 +175,7 @@ func on_data_capsrpb_received(unit: capsrpb.CapsRpb, threats: Dictionary):
call_deferred('emit_signal', 'threats_resized', threats)
func on_settings_changed(ths):
func on_settings_changed(ths: Dictionary):
gos_flag = ProjectSettings.get_setting('application/config/Включить работу по своим целям', true)
var protocols: String = ProjectSettings.get_setting('application/config/Список своих протоколов', '')
gos_protocols = protocols.split(",", true)
@@ -181,3 +189,11 @@ func set_gos(th: Threat):
th.gos = false
elif (th.proto in gos_protocols) and th.fflags.proto:
th.gos = true
func on_connect_work_signal(ths: Dictionary):
emit_signal('threats_resized', ths)
func on_kontrol_mode(): afsp_bpo_mode = AFSP_BPO_MODE.test
func on_rabota_mode(): afsp_bpo_mode = AFSP_BPO_MODE.run

View File

@@ -9,7 +9,7 @@ class Unit extends Object:
SEND, ## Буфер готов для отправки.
WAIT, ## Ожидание выполнения.
DONE, ## Команда выполнена.
FAIL, ## Команда не выполнена.
FAIL ## Команда не выполнена.
}
signal line_changed(unit) ## Вызывается при изменении состояния связи
@@ -18,7 +18,7 @@ class Unit extends Object:
signal parse_failed(unit) ## Вызывается при обнаружении ошибки во входных данных
signal data_received(data) ## Вызывается по приёму данных
var cmd_state = CmdState.UNCK ## Состояние выполнения команды
var cmd_state: = CmdState.UNCK ## Состояние выполнения команды
var tx_data: = PackedByteArray() ## Буфер для отправки.
var tx_len: int = 0 ## Длина последнего отправленного пакета.
var tx_tick: int = 0 ## Тик-время отправки буфера

View File

@@ -41,7 +41,6 @@ class YaU07 extends unit.Unit:
var isa_block: = {} ## Результат выполнения команды "читать массив из порта"
var flash_data: = PackedByteArray() ## Данные прочитанные из Flash
var flash_len: = 0 ## Длинна данных прочитанных из Flash
var time_tx: int = 0 ## Время последней отправки команды
func _to_string() -> String: return String('яу07: %s %s' % [self.name, ['отключен', 'на связи'][int(online)]])
@@ -81,14 +80,14 @@ class YaU07 extends unit.Unit:
rc = Error.FAILED
return rc
func send_flash(cmd_code: int, fl_data: Array, num_byte_rd: int, id_sector: int = 0) -> bool:
func send_flash(cmd_code: CmdCode, fl_data: Array, num_byte_rd: int, id_sector: int = 0) -> bool:
if (cmd_state == CmdState.WAIT) \
or (cmd_state == CmdState.SEND) \
or (cmd_state == CmdState.UNCK):
return false
if not ((cmd_code == CmdCode.ERASE_FLASH) or (cmd_code == CmdCode.WRITE_FLASH) \
or (cmd_code == CmdCode.READ_FLASH) or (cmd_code == CmdCode.LOAD_FLASH)
or (cmd_code == CmdCode.READ_FLASH_MP550) or (cmd_code == CmdCode.WRITE_FLASH_MP550)):
if not cmd_code in [CmdCode.ERASE_FLASH,
CmdCode.WRITE_FLASH, CmdCode.READ_FLASH, CmdCode.LOAD_FLASH,
CmdCode.READ_FLASH_MP550, CmdCode.WRITE_FLASH_MP550]:
return false
cmd_num_tx = (cmd_num_rx + 1) % 0xffff
tx_data.encode_u16(0, cmd_retry)
@@ -123,7 +122,7 @@ class YaU07 extends unit.Unit:
cmd_code_tx = cmd_code
return true
func send_isa(cmd_code: int, ports_data: Array) -> bool:
func send_isa(cmd_code: CmdCode, ports_data: Array) -> bool:
if (cmd_state == CmdState.WAIT) \
or (cmd_state == CmdState.SEND) \
or (cmd_state == CmdState.UNCK):
@@ -151,7 +150,7 @@ class YaU07 extends unit.Unit:
cmd_code_tx = cmd_code
return true
func send_block(cmd_code: int, block_len: int, port: Array) -> bool:
func send_block(cmd_code: CmdCode, block_len: int, port: Array) -> bool:
if (cmd_state == CmdState.WAIT) \
or (cmd_state == CmdState.SEND) \
or (cmd_state == CmdState.UNCK):
@@ -174,7 +173,7 @@ class YaU07 extends unit.Unit:
cmd_code_tx = cmd_code
return true
func send_load_ems_done(cmd_code: int):
func send_load_ems_done(cmd_code: CmdCode) -> bool:
if (cmd_state == CmdState.WAIT) \
or (cmd_state == CmdState.SEND) \
or (cmd_state == CmdState.UNCK):
@@ -188,6 +187,7 @@ class YaU07 extends unit.Unit:
tx_len = 7
cmd_state = CmdState.SEND
cmd_code_tx = cmd_code
return true
## Возвращает код команды ЯУ-07.
## rx_data - Принятые данные.
@@ -308,9 +308,8 @@ class YaU07 extends unit.Unit:
var cmd_code: int = rx_data[cmd_code_pos] # Код команды
cmd_code_rx = cmd_code
if (cmd_state == CmdState.WAIT) and (cmd_num_rx == cmd_num_tx) and (cmd_code == cmd_code_tx):
cmd_code_rx = cmd_code
cmd_state = CmdState.DONE
var rc: = true
if (cmd_code == CmdCode.READ_ISA) or (cmd_code == CmdCode.WRITE_ISA):
rc = parse_isa(rx_data, status_len)
@@ -322,6 +321,7 @@ class YaU07 extends unit.Unit:
rc = parse_flash(rx_data, status_len, cmd_code)
if rc:
cmd_state = CmdState.DONE
emit_signal('command_done', self)
else:
emit_signal('parse_failed', self)

101
shaders/antenas.gdshader Normal file
View File

@@ -0,0 +1,101 @@
shader_type canvas_item;
#include "tools.gdshaderinc"
#define ANT_BAND_READY 1U /* Антенна (модуль ФС) готова или исправна */
#define ANT_BAND_FAILED 0U /* Антенна (модуль ФС) не исправно */
// Конфигурация сетки
uniform int grid_cells_angle = 4; /* Количество секторов (90° каждый) */
uniform int grid_layers_radius = 7; /* Количество слоёв по радиусу */
uniform float alpha: hint_range(0.0, 1.0) = 0.5;
uniform float inner_radius = 0.36; /* Внутренняя незакрашенная окружность. Относительное значение */
uniform float outer_radius = 1.0; /* Внешний радиус. Относительное значение */
uniform float grid_line_width = 0.0025; /* Сетка, ширина линий. Относительное значение */
uniform float rotation: hint_range(0, 360) = 0.0;
uniform float ffr: hint_range(0.0, 1.0) = 0.15; /* Индикация неисправности модулей ФС. Заметность штриховки. Индикация неисправности модулей ФС */
uniform float sfr: hint_range(0.0, 10.0) = 0.0; /* Индикация неисправности модулей ФС. Скорость движения штрховки */
uniform float pfr: hint_range(0.01, 1.0) = 0.025; /* Индикация неисправности модулей ФС. Частота штриховки */
// Вариант 1: Массив цветов для каждой ячейки (4×7 = 28)
uniform vec4 ant_band_c[28]: source_color;
uniform uint ant_band_m[28];
varying vec2 centered_uv;
void vertex()
{
// 1. Переводим UV в координаты относительно центра (-1..1)
centered_uv = (UV - 0.5) * 2.0;
rotate_vec2(centered_uv, radians(rotation + 315.0), vec2(0, 0));
}
void fragment()
{
float dist = length(centered_uv);
// 2. Отсекаем за пределами внешнего радиуса
if (dist > outer_radius) {
COLOR = vec4(0.0);
discard;
}
// 3. Отсекаем внутри внутреннего радиуса
if (dist < inner_radius) {
COLOR = vec4(0.0);
discard;
}
// 4. Вычисляем полярные координаты
float angle = 6.28318530718 - atan(centered_uv.y, centered_uv.x);
// Приводим к диапазону 0..2π
angle = mod(angle + 6.28318530718, 6.28318530718);
// 5. Определяем индексы ячейки
// Сектор (0..3)
float sector_width = 6.28318530718 / float(grid_cells_angle);
int sector_idx = int(angle / sector_width);
// Слой (0..6)
float available_radius = outer_radius - inner_radius;
float normalized_radius = (dist - inner_radius) / available_radius;
float layer_height = 1.0 / float(grid_layers_radius);
int layer_idx = int(normalized_radius / layer_height);
// 6. Проверяем границы (чтобы не выйти за пределы)
if (layer_idx >= grid_layers_radius) {
COLOR = vec4(0.0);
discard;
}
// 7. Рассчитываем глобальный индекс ячейки (0..27)
int cell_index = layer_idx * grid_cells_angle + sector_idx;
// 8. Получаем цвет ячейки (два варианта) из массива цветов
vec4 cell_color = ant_band_c[cell_index];
// Границы по углу
float angle_in_sector = mod(angle, sector_width);
if (angle_in_sector < grid_line_width ||
sector_width - angle_in_sector < grid_line_width) {
cell_color.rgb *= 0.7; // Затемняем границы
}
// Границы по радиусу
float radius_in_layer = mod(normalized_radius, layer_height);
if (radius_in_layer < grid_line_width ||
layer_height - radius_in_layer < grid_line_width) {
cell_color.rgb *= 0.7; // Затемняем границы
}
// Подмешивание шума для включённых
cell_color.a = alpha + random_timed(centered_uv) * cell_color.a;
// Индикация не исправности
if (ant_band_m[cell_index] == ANT_BAND_FAILED)
{
cell_color.a *= (1.0 - ffr) + tanh(10.0 * sin(TIME * sfr + 2.0 * PI * centered_uv.x / pfr)) * ffr;
}
COLOR = cell_color;
}

View File

@@ -0,0 +1 @@
uid://dhipoo0ju5ebg

View File

@@ -1,142 +0,0 @@
[gd_resource type="ShaderMaterial" load_steps=2 format=4 uid="uid://s6xe8igevnv2"]
[sub_resource type="Shader" id="1"]
code = "shader_type canvas_item;
#include \"tools.gdshaderinc\"
#define RADIUS_INNER_0 200.0 /* Радиус внутренний для режима приоритет РТО */
#define RADIUS_INNER_1 480.0 /* Радиус внутренний для режима приоритет РЛС */
#define ANTENAS_COUNT 28 /* Количество антенн */
#define ANT_BAND_READY 1U /* Антенна (модуль ФС) готова или исправна */
#define ANT_BAND_FAILED 0U /* Антенна (модуль ФС) не исправно */
uniform vec2 pc0 = vec2(560, 560); /* Центр сетки антенн */
uniform float rotation: hint_range(0.0, 360.0) = 0.0; /* */
uniform vec4 color0: source_color = vec4(0.38, 0.47, 0.51, 0.4);
uniform vec4 color1: source_color = vec4(0.39, 0.44, 0.50, 0.4);
uniform float radius_inner_0 = RADIUS_INNER_0;
uniform float radius_inner_1 = RADIUS_INNER_1;
uniform float radius_outter = 550.0; /* Радиус внешний. Должно быть равно ant_band_r1_6 */
uniform float alpha: hint_range(0.0, 1.0) = 0.5;
uniform int mode = 0; /* Режим отображения. Приоритет РТО - 0, приоритет РЛС - 1 */
uniform float ffr: hint_range(0.0, 1.0) = 0.2; /* Индикация неисправности модулей ФС. Заметность штриховки. */
uniform float sfr: hint_range(0.0, 10.0) = 0.0; /* Индикация неисправности модулей ФС. Скорость движения штрховки */
uniform float afr: hint_range(0.0, 180.0) = 0.0; /* Индикация неисправности модулей ФС. Наклон штрховки */
uniform float pfr: hint_range(1.0, 20.0) = 10.0; /* Индикация неисправности модулей ФС. Частота штриховки */
const int ant_band_count_0 = 2;
const int ant_band_count_1 = 2;
const int ant_band_count_2 = 2;
const int ant_band_count_3 = 2;
const int ant_band_count_4 = 2;
const int ant_band_count_5 = 2;
const int ant_band_count_6 = 2;
const float ant_band_r0_0[] = {RADIUS_INNER_0, RADIUS_INNER_1};
const float ant_band_r0_1[] = {250.0, 490.0};
const float ant_band_r0_2[] = {300.0, 500.0};
const float ant_band_r0_3[] = {350.0, 510.0};
const float ant_band_r0_4[] = {400.0, 520.0};
const float ant_band_r0_5[] = {450.0, 530.0};
const float ant_band_r0_6[] = {500.0, 540.0};
const float ant_band_r1_0[] = {250.0, 490.0};
const float ant_band_r1_1[] = {300.0, 500.0};
const float ant_band_r1_2[] = {350.0, 510.0};
const float ant_band_r1_3[] = {400.0, 520.0};
const float ant_band_r1_4[] = {450.0, 530.0};
const float ant_band_r1_5[] = {500.0, 540.0};
const float ant_band_r1_6[] = {550.0, 550.0};
uniform vec4 ant_band_c[ANTENAS_COUNT];
uniform uint ant_band_m[ANTENAS_COUNT];
const float d4 = 90.0;
const float ds = 1.0;
void sector(inout vec4 c, vec2 uv, vec2 center, float a, float da, float r0, float r1, vec4 color)
{
float l = distance(center, uv);
vec2 d = uv - center;
float sf = 500.0;
float theta = atan(d.x, d.y) * sf;
da /= 2.0;
float a0 = radians(a - da);
float a1 = radians(a + da);
float va = smooth_px(a0 * sf, theta, ds) - smooth_px(a1 * sf, theta, ds);
float vr = smooth_px(r0, l, ds) - smooth_px(r1, l, ds);
float rgb = sqrt(va * vr);
c.rgb += color.rgb * rgb * color.a;
c.a += rgb * color.a;
}
void antenas(inout vec4 c, vec2 uv, vec2 p0, int cnt, float r0, float r1, inout int index)
{
float da = 180.0 / float(cnt);
for (int i = -cnt; i <= cnt; i ++)
{
vec4 col;
int j = index;
if (i == 2)
{
index--;
j = index - 3;
}
col.rgb = ant_band_c[j].rgb;
index++;
col.a = alpha + (random_timed(uv) - 0.5f) * ant_band_c[j].a;
if (ant_band_m[j] == ANT_BAND_FAILED)
{
vec2 uvr = uv;
rotate_vec2(uvr, radians(afr), pc0);
col.a *= (1.0 - ffr) + tanh(10.0 * sin(TIME * sfr + 2.0 * PI * uvr.x / pfr)) * ffr;
}
float v = float(i & 1);
vec4 color = v * col + (1.0f - v) * col;
sector(c, uv, p0, float(i) * da, da, r0, r1, color);
}
}
void vertex()
{
rotate_vec2(VERTEX, radians(360.0 - rotation), pc0);
}
void fragment()
{
ivec2 isz = textureSize(TEXTURE, 0);
vec2 uv = UV * vec2(float(isz.x), float(isz.y)); // координаты текущей точки в пикселях
COLOR = vec4(0, 0, 0, 0);
int index = 0;
// Сетка антенн
antenas(COLOR, uv, pc0, ant_band_count_0, ant_band_r0_0[mode], ant_band_r1_0[mode], index);
antenas(COLOR, uv, pc0, ant_band_count_1, ant_band_r0_1[mode], ant_band_r1_1[mode], index);
antenas(COLOR, uv, pc0, ant_band_count_2, ant_band_r0_2[mode], ant_band_r1_2[mode], index);
antenas(COLOR, uv, pc0, ant_band_count_3, ant_band_r0_3[mode], ant_band_r1_3[mode], index);
antenas(COLOR, uv, pc0, ant_band_count_4, ant_band_r0_4[mode], ant_band_r1_4[mode], index);
antenas(COLOR, uv, pc0, ant_band_count_5, ant_band_r0_5[mode], ant_band_r1_5[mode], index);
antenas(COLOR, uv, pc0, ant_band_count_6, ant_band_r0_6[mode], ant_band_r1_6[mode], index);
}
"
[resource]
shader = SubResource("1")
shader_parameter/pc0 = Vector2(560, 560)
shader_parameter/rotation = 0.0
shader_parameter/color0 = Color(0.380392, 0.470588, 0.509804, 0.537255)
shader_parameter/color1 = Color(0.3315, 0.45645, 0.51, 0.537255)
shader_parameter/radius_inner_0 = 200.0
shader_parameter/radius_inner_1 = 480.0
shader_parameter/radius_outter = 550.0
shader_parameter/alpha = 0.5
shader_parameter/mode = 0
shader_parameter/ffr = 0.2
shader_parameter/sfr = 0.0
shader_parameter/afr = 0.0
shader_parameter/pfr = 10.0
shader_parameter/ant_band_c = PackedVector4Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
shader_parameter/ant_band_m = PackedInt32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)

View File

@@ -2,5 +2,5 @@ shader_type canvas_item;
void fragment()
{
COLOR.rgb = vec3(1.0, 1.0, 1.0) - log(COLOR.rgb);
COLOR.rgb = vec3(1.0, 1.0, 1.0) - log(COLOR.rgb);
}

View File

@@ -16,42 +16,40 @@ uniform float ant_band_r1_0 = 0.4;
float smooth_px(float r, float R, float dss)
{
return 1.0 - smoothstep(R - dss, R + dss, r);
return 1.0 - smoothstep(R - dss, R + dss, r);
}
void sector(inout vec4 c, vec2 uv, vec2 cnt, float a, float da, float r0, float r1, vec4 col)
{
float l = distance(cnt, uv);
vec2 d = uv - cnt;
float sf = 500.0;
float theta = atan(d.x, d.y) * sf;
da /= 2.0;
float a0 = radians(a - da);
float a1 = radians(a + da);
float va = smooth_px(a0 * sf, theta, dsr) - smooth_px(a1 * sf, theta, dsr);
float vr = smooth_px(r0, l, ds) - smooth_px(r1, l, ds);
float l = distance(cnt, uv);
vec2 d = uv - cnt;
float sf = 500.0;
float theta = atan(d.x, d.y) * sf;
da /= 2.0;
float a0 = radians(a - da);
float a1 = radians(a + da);
float va = smooth_px(a0 * sf, theta, dsr) - smooth_px(a1 * sf, theta, dsr);
float vr = smooth_px(r0, l, ds) - smooth_px(r1, l, ds);
float rgb = sqrt(va * vr);
c.rgb += col.rgb * rgb * col.a;
c.rgb += col.rgb * rgb * col.a;
c.a += rgb * col.a;
}
void antenas(inout vec4 c, vec2 uv, vec2 p0, int cnt, float r0, float r1, vec4 c0, vec4 c1)
{
float da = 180.0f / float(cnt);
float da = 180.0f / float(cnt);
for (int i = -cnt; i <= cnt; i ++)
{
float v = float(i & 1);
vec4 col = v * c0 + (1.0f - v) * c1;
sector(c, uv, p0, float(i) * da, da, r0, r1, col);
}
{
float v = float(i & 1);
vec4 col = v * c0 + (1.0f - v) * c1;
sector(c, uv, p0, float(i) * da, da, r0, r1, col);
}
}
vec2 rotateUVmatrinx(vec2 uv, vec2 pivot, float rotation)
{
mat2 rotation_matrix=mat2( vec2(sin(rotation),-cos(rotation)),
vec2(cos(rotation),sin(rotation))
);
mat2 rotation_matrix=mat2(vec2(sin(rotation), -cos(rotation)), vec2(cos(rotation),sin(rotation)));
uv -= pivot;
uv *= rotation_matrix;
uv += pivot;

View File

@@ -21,7 +21,7 @@ void vertex()
void fragment()
{
COLOR = color;
COLOR = color;
if (disabled)
{
float ds = 1.0 / sharpness;

View File

@@ -8,16 +8,16 @@ float random_timed(vec2 uv)
float smooth_px(float r, float R, float ds)
{
return 1.0 - smoothstep(R - ds, R + ds, r);
return smoothstep(R + ds, R - ds, r);
}
void circle_thin(inout vec3 color, vec2 uv, vec2 p, float r, float w, vec3 c, float a)
{
float d = distance(uv, p);
float v0 = r - w;
float v1 = r + w;
color += a * sqrt(smoothstep(v1, v0, d) * smoothstep(v0, v1, d) * c);
float d = distance(uv, p);
float v0 = r - w;
float v1 = r + w;
color += a * sqrt(smoothstep(v1, v0, d) * smoothstep(v0, v1, d) * c);
}

View File

@@ -19,9 +19,9 @@ uniform float speed: hint_range(0.0, 1024.0) = 0.0;
float line(vec2 p1, vec2 p2, float width, vec2 uv)
{
float dist = distance(p1, p2); // Дистанция между точками
float dist_uv = distance(p1, uv); // Дистанция между точкой и текущим пикселем
return 1.0 - floor(1.0 - (0.001 * width) + distance (mix(p1, p2, clamp(dist_uv / dist, 0.0, 1.0)), uv));
float dist = distance(p1, p2); // Дистанция между точками
float dist_uv = distance(p1, uv); // Дистанция между точкой и текущим пикселем
return 1.0 - floor(1.0 - (0.001 * width) + distance (mix(p1, p2, clamp(dist_uv / dist, 0.0, 1.0)), uv));
}
@@ -65,12 +65,12 @@ void fragment()
float px1 = 0.0;
float py0 = 0.0;
float py1 = 0.0;
COLOR = vec4(1.0, 0.0, 0.0, 0.0); //texture(TEXTURE, UV); // Цвет текущей точки
COLOR = vec4(1.0, 0.0, 0.0, 0.0); // Цвет текущей точки
get_line_points(px0, px1, py0, py1, 330.0);
COLOR.a += line(vec2(px0, py0), vec2(px1, py1), 15.0, UV);
get_line_points(px0, px1, py0, py1, 90.0);
COLOR.a += line(vec2(px0, py0), vec2(px1, py1), 15.0, UV);
get_line_points(px0, px1, py0, py1, 210.0);
COLOR.a += line(vec2(px0, py0), vec2(px1, py1), 15.0, UV);
COLOR *= smooth_px(length(UV-center), radius, DSS);
COLOR *= smooth_px(length(UV - center), radius, DSS);
}

View File

@@ -13,5 +13,5 @@ vec3 bw_to_2color(vec3 c, vec3 dark, vec3 light)
void fragment()
{
COLOR.rgb = bw_to_2color(texture(TEXTURE, UV).rgb, white, black);
COLOR.rgb = bw_to_2color(texture(TEXTURE, UV).rgb, white, black);
}