Merge remote-tracking branch 'sasha/master'

This commit is contained in:
MaD_CaT
2025-12-30 13:12:04 +03:00
14 changed files with 3699 additions and 128 deletions

View File

@@ -6,7 +6,7 @@
- Использовать выражения вида `ProjectSettings.set_setting('application/config/%s' % key_name`
и `ProjectSettings.get_setting('application/config/%s % key_name)` для доступа к настройкам.
- `key_name` брать из таблицы `res://scenes/настройки/настройки.gd/SETTING_TABLE`
- Следовать [общим правилам](http://gitea.srez.local:3000/sasha80/gitea-tniis).
- Следовать [общим правилам](http://gitea.srez.local:3000/sasha80/dev-manual).
# Ссылки на составные части

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

@@ -274,3 +274,7 @@ tick_curent={
"type": "int",
"value": 0
}
random_value={
"type": "float",
"value": 0.0
}

View File

@@ -7,14 +7,16 @@ 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 ## Цвета по умолчанию для блоков ФС.
var fs_default_colors: PackedColorArray ## Цвета по умолчанию для блоков ФС
var image: Image
@export var SecZap: PackedScene
@export var inner_radius_0: = 0.36 ## Внутренний радиус диаграммы в режиме РТО
@export var inner_radius_0: = 0.36 ## Внутренний радиус диаграммы в режиме РТО
@export var inner_radius_1: = 0.855 ## Внутренний радиус диаграммы в обзора
func _ready() -> void:
image = Image.create(NUM_OF_RANGE * NUM_OF_DIRECTIONS, 1, false, Image.FORMAT_RGBA8)
signaller.connect('map_mode_changed', Callable(self, 'set_view_mode'))
ProjectSettings.connect('settings_changed', _on_settings_changed)
_on_settings_changed()
@@ -23,7 +25,6 @@ func _ready() -> void:
func sv(val: float) -> float: return val / ($строб.scale.x / 2.0) * 0.125
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)
@@ -49,6 +50,14 @@ func get_strob_visible() -> bool: return $строб.visible
func get_strob_width() -> float: return $строб.get_instance_shader_parameter('width')
## Выставляет цвета для секторов
func set_band_colors(val: PackedColorArray):
for x in val.size():
image.set_pixel(x, 0, val[x])
var tex = ImageTexture.create_from_image(image)
material.set('shader_parameter/sec_colors', tex)
## Добавляет сектор запрета[br]
## [param id] - Индекс сектора запрета.[br]
## [param szv.x] - Центральная частота (198...546).[br]
@@ -102,12 +111,8 @@ func set_seczap_color(id: int, c: Color):
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()
var inner_radius = inner_radius_1 if val == 1 else inner_radius_0
material.set('shader_parameter/inner_radius', inner_radius)
func _on_settings_changed():

View File

@@ -1,6 +1,6 @@
[gd_scene load_steps=7 format=3 uid="uid://b5kjdyxuwsot5"]
[ext_resource type="Shader" path="res://shaders/antenas.gdshader" id="1_8cjpq"]
[ext_resource type="Shader" uid="uid://dhipoo0ju5ebg" 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"]
@@ -16,8 +16,8 @@ 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/pfr = 0.015
shader_parameter/afr = 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"]
@@ -36,4 +36,4 @@ SecZap = ExtResource("3_tgnog")
[node name="строб" parent="." instance=ExtResource("3_tgnog")]
material = SubResource("ShaderMaterial_lniyv")
position = Vector2(280, 280)
scale = Vector2(550, 550)
scale = Vector2(560, 560)

View File

@@ -9,66 +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, TableColorPick, 'Цвет кнопки. Введено по требованию ПЗ' ],
['Цвет фона схемы', TableEdit, TableColorPick, 'Схема прибора Э2. Изменение цвет фона'],
['Цвет схемы', TableEdit, TableColorPick, 'Схема прибора Э2. Изменение цвет схемы '],
['Коэффициент ширины полосы излучения', TableEdit, TableEdit, 'Изменение ширины полосы излучения помехи в зависимости от цели'],
['Время повторной отправки помехи', TableEdit, TableEdit, 'Изменение времени повторной отправки помехи'] ]
['Ограниченный режим', 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: Придумать как избавиться от индексов
## Индексы строк таблицы.

View File

@@ -53,12 +53,12 @@ signal drag_end ## Вызывается в момент завершени
const map_sizes = [
Rect2i(360, 360, 400, 400),
Rect2i(82, 82, 955, 955)]
var fs_band = prd.FS_BAND_RTO ## Текущий режим блоков ФС по частоте
var fs_selected: Dictionary ## Словарь выбранных секторов
var fs_active: Dictionary ## Словарь секторов назначенных на подавление
var fs_emit: Dictionary ## Словарь секторов назначенных на подавление
var fs_closed: Dictionary ## Словарь для секторов запрета
var fs_failed: Array ## Индикация сломанных секторов (модули ФС). AntBandState.ANT_BAND_READY - исправен, AntBandState.ANT_BAND_FAILURE - сломан.
var fs_band = prd.FS_BAND_RTO ## Текущий режим блоков ФС по частоте
var fs_selected: Dictionary ## Словарь выбранных секторов
var fs_active: Dictionary ## Словарь секторов назначенных на подавление
var fs_emit: Dictionary ## Словарь секторов назначенных на подавление
var fs_closed: Dictionary ## Словарь для секторов запрета
var fs_failed: PackedInt32Array ## Индикация сломанных секторов (модули ФС). AntBandState.ANT_BAND_READY - исправен, AntBandState.ANT_BAND_FAILURE - сломан.
## Состояние перетаскивания.
enum DragFSM {
@@ -83,8 +83,9 @@ enum MapViewMode {
enum AntBandState {
ANT_BAND_FAILED = 0,
ANT_BAND_READY = 1,
ANT_BAND_FAILED = 0
ANT_BAND_ASSIGNED = 2
}
const VAL_TO_EVENT = {
@@ -171,6 +172,9 @@ func on_button_view_toggled(toggled: bool):
view_mode = MapViewMode.RLS if toggled else MapViewMode.RTO
if view_mode != MapViewMode.RTO:
fs_selected.clear()
$btns_select/btn_strob.disabled = toggled
$btns_select/btn_fs_sector.disabled = toggled
$'canvas/строб'.visible = $btns_select/btn_strob.pressed and (not toggled)
## Встроенный обратный вызов.
@@ -467,7 +471,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 / 2.0)
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)
@@ -644,7 +648,7 @@ func on_interfer_prinuditelno(prenuditelno_sectors):
## Вызывается при получении информации о состоянии модулей ФС от КАПС РПБ.
func on_fs_update_state(fs_dict: Dictionary):
for key in fs_dict.keys():
fs_failed[key] = fs_dict[key].ready
fs_failed[key] = AntBandState.ANT_BAND_READY if fs_dict[key].ready else AntBandState.ANT_BAND_FAILED
func on_btn_center_toggled(toggled_on: bool) -> void:

View File

@@ -16,9 +16,9 @@ class EmsBoard:
6 : 52, }
var id_board: int ## id платы
var in_devs: Dictionary ## Словарь с входными устройствами.
var out_devs: Dictionary ## Словарь с выходными устройствами.
var base_addr_isa: int ## Базовый адрес ячейки isa.
var in_devs: Dictionary ## Словарь с входными устройствами.
var out_devs: Dictionary ## Словарь с выходными устройствами.
var base_addr_isa: int ## Базовый адрес ячейки isa.
var ports_to_wr: Array ## Порты для записи
var in_tbl: Array
var out_tbl: Array

View File

@@ -400,6 +400,7 @@ func _process(_delta: float) -> void:
if Engine.is_editor_hint(): return
tick = Time.get_ticks_msec()
RenderingServer.global_shader_parameter_set('tick_curent', tick)
RenderingServer.global_shader_parameter_set('random_value', randf())
for unit_name: StringName in units_udptx:
var unit_udptx: = units_udptx[unit_name]
var sock: = send_sockets[unit_name]

View File

@@ -2,8 +2,14 @@ shader_type canvas_item;
#include "tools.gdshaderinc"
#define ANT_BAND_READY 1U /* Антенна (модуль ФС) готова или исправна */
#define ANT_BAND_FAILED 0U /* Антенна (модуль ФС) не исправно */
#define ANT_BAND_FAILED 0U /* Антенна (модуль ФС) не исправно (или нет данных) */
#define ANT_BAND_READY 1U /* Антенна (модуль ФС) готова или исправна */
#define ANT_BAND_ASSIGNED 2U /* Антенна (модуль ФС) назначена на излучение */
#define ANT_BAND_SELECTED 4U /* Антенна (модуль ФС) выбрана оператором */
#define ANT_BAND_ACTIVE 8U /* Антенна (модуль ФС) излучает */
#define ANT_BAND_DENIED 16U /* Антенна (модуль ФС) запрет работы */
#define PI2 (PI * 2.0)
// Конфигурация сетки
uniform int grid_cells_angle = 4; /* Количество секторов (90° каждый) */
@@ -16,9 +22,9 @@ 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; /* Индикация неисправности модулей ФС. Частота штриховки */
uniform float afr: hint_range(0.0, 180.0) = 0.0; /* Индикация неисправности модулей ФС. Угол наклона штриховки */
// Вариант 1: Массив цветов для каждой ячейки (4×7 = 28)
uniform vec4 ant_band_c[28]: source_color;
uniform sampler2D sec_colors; /* Цвета для секторов */
uniform uint ant_band_m[28];
varying vec2 centered_uv;
@@ -35,26 +41,14 @@ 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);
float angle = PI2 - atan(centered_uv.y, centered_uv.x);
// Приводим к диапазону 0..2π
angle = mod(angle + 6.28318530718, 6.28318530718);
angle = mod(angle + PI2, PI2);
// 5. Определяем индексы ячейки
// Сектор (0..3)
float sector_width = 6.28318530718 / float(grid_cells_angle);
float sector_width = PI2 / float(grid_cells_angle);
int sector_idx = int(angle / sector_width);
// Слой (0..6)
@@ -63,39 +57,45 @@ void fragment()
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];
// 8. Получаем цвет ячейки из массива цветов
ivec2 sz = textureSize(sec_colors, 0);
vec4 cell_color = texture(sec_colors, vec2((float(cell_index) + 0.5) / float(sz.x), 4));
// Границы по углу
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 v0 = sector_width - 0.01;
float v1 = sector_width + 0.0001;
cell_color.rgb *= 1.0 - sqrt(smoothstep(v0, v1, angle_in_sector) * smoothstep(v1, v0, angle_in_sector));
// Границы по радиусу
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; // Затемняем границы
}
v0 = layer_height - 0.01;
v1 = layer_height + 0.0001;
cell_color.rgb *= 1.0 - sqrt(smoothstep(v0, v1, radius_in_layer) * smoothstep(v1, v0, radius_in_layer));
// Подмешивание шума для включённых
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;
vec2 uvr = UV;
rotate_vec2(uvr, radians(afr), vec2(0, 0));
cell_color.a *= (1.0 - ffr) + tanh(10.0 * sin(TIME * sfr + 2.0 * PI * uvr.x / pfr)) * ffr;
}
// 2. Отсекаем за пределами внешнего радиуса
v0 = outer_radius - 0.002;
v1 = outer_radius + 0.0001;
cell_color.a *= smoothstep(v1, v0, dist);
// 3. Отсекаем внутри внутреннего радиуса
v0 = inner_radius - 0.0001;
v1 = inner_radius + 0.002;
cell_color.a *= smoothstep(v0, v1, dist);
COLOR = cell_color;
}

View File

@@ -1,9 +1,10 @@
const float DS = 0.004; /* Относительное расстояние на котором выполняется сглаживание краёв */
global uniform float random_value;
float random_timed(vec2 uv)
{
return fract(sin(dot(uv + TIME, vec2(12.9898, 78.233))) * 43758.5453);
return fract(sin(dot(uv + TIME * random_value, vec2(12.9898, 78.233))) * 43758.5453);
}
float smooth_px(float r, float R, float ds)

View File

@@ -333,10 +333,7 @@ func _set_row_selected(i_row: int, selected: bool = true) -> void:
push_warning('обращение к удалённому элементу \"%s\"' % selector_key)
elif (not nodes.has(selector_key)) and selected:
var selector = ScnSelector.instantiate()
var rect: = [0, 0, 0, 0]
selector_size_proc.call(i_row, rect)
selector.size.x = rect[2]
selector.size.y = rect[3]
call_deferred('_set_selector_size', selector, i_row)
selector.modulate = selector_color_proc.call(i_row)
selector.z_index = z_index + 1
nodes[selector_key] = selector
@@ -344,6 +341,13 @@ func _set_row_selected(i_row: int, selected: bool = true) -> void:
node.add_child(selector)
func _set_selector_size(selector, i_row):
var rect: = [0, 0, 0, 0]
selector_size_proc.call(i_row, rect)
selector.size.x = rect[2]
selector.size.y = rect[3]
## [param i_row] - Индекс ряда.
func is_row_selected(i_row: int) -> bool:
var key: = SELECTOR_KEY_FORMAT % [i_row, 0]