From 98b3b50537e08e9f594eb5cb8ab852d429450f57 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Wed, 5 Feb 2025 11:10:44 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0.=20=D0=9F=D0=B5=D1=80=D0=B5=D0=B8=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D0=BE=D0=B4=D0=B0=20=D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D0=B8=20?= =?UTF-8?q?=D1=84=D0=BB=D0=B0=D0=B3=D0=B0=20=D0=AD=D0=9C=D0=A1-=D0=93=20?= =?UTF-8?q?=D0=B2=20=D0=AF=D0=A3-07.=20=D0=9F=D0=B5=D1=80=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=20=D0=AD?= =?UTF-8?q?=D0=9C=D0=A1=20=D0=B2=20=D1=81=D1=86=D0=B5=D0=BD=D1=83=20=D0=AD?= =?UTF-8?q?=D0=9C=D0=A1.=20=D0=9D=D0=B0=D1=87=D0=B0=D0=BB=D0=BE=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BC?= =?UTF-8?q?=D0=BE=D0=B4=D1=83=D0=BB=D1=8F=D1=86=D0=B8=D0=B8=20=D1=83=D1=81?= =?UTF-8?q?=D0=B8=D0=BB=D0=B8=D1=82=D0=B5=D0=BB=D0=B5=D0=B9.=20=D0=9D?= =?UTF-8?q?=D0=BE=D0=B2=D1=8B=D0=B9=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8C?= =?UTF-8?q?=20prd.gd.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- project.godot | 10 +- scenes/frame-ecm-params/scroll-ecm-params.gd | 20 ++- scenes/работа/работа.gd | 73 +++-------- {scripts => scenes/эмс}/yems-boards.gd | 2 +- {scripts => scenes/эмс}/yems-consts.gd | 0 {scripts => scenes/эмс}/yems-devs.gd | 0 {scripts => scenes/эмс}/yems-g.gd | 10 ++ scenes/эмс/кнопка-эмс.tscn | 14 +-- scripts/interfer.gd | 5 +- scripts/prd.gd | 125 +++++++++++++++++++ scripts/yau07.gd | 6 +- 11 files changed, 192 insertions(+), 73 deletions(-) rename {scripts => scenes/эмс}/yems-boards.gd (99%) rename {scripts => scenes/эмс}/yems-consts.gd (100%) rename {scripts => scenes/эмс}/yems-devs.gd (100%) rename {scripts => scenes/эмс}/yems-g.gd (95%) create mode 100644 scripts/prd.gd diff --git a/project.godot b/project.godot index a5bc886..81ef43c 100644 --- a/project.godot +++ b/project.godot @@ -54,10 +54,10 @@ yau07="*res://scripts/yau07.gd" capsrpb="*res://scripts/capsrpb.gd" table="*res://table/table.gd" threats="*res://scripts/threats.gd" -yemsdevs="*res://scripts/yems-devs.gd" -yemsboards="*res://scripts/yems-boards.gd" -yemsconsts="*res://scripts/yems-consts.gd" -yemsg="*res://scripts/yems-g.gd" +yemsdevs="*res://scenes/эмс/yems-devs.gd" +yemsboards="*res://scenes/эмс/yems-boards.gd" +yemsconsts="*res://scenes/эмс/yems-consts.gd" +yemsg="*res://scenes/эмс/yems-g.gd" interfer="*res://scripts/interfer.gd" hotkeys="*res://scripts/hotkeys.gd" mercator="*res://scripts/mercator.gd" @@ -65,6 +65,7 @@ tcp5p28="*res://scripts/tcp5p28.gd" sch3="*res://scripts/sch3.gd" spt25="*res://scripts/spt25.gd" astrakb="*res://scripts/astra_kb.gd" +prd="*res://scripts/prd.gd" [debug] @@ -85,7 +86,6 @@ gdscript/warnings/integer_division=0 window/size/viewport_width=1600 window/size/viewport_height=1200 -window/size/mode=3 window/subwindows/embed_subwindows=false window/stretch/mode="canvas_items" window/dpi/allow_hidpi=false diff --git a/scenes/frame-ecm-params/scroll-ecm-params.gd b/scenes/frame-ecm-params/scroll-ecm-params.gd index 5e90d51..859c585 100644 --- a/scenes/frame-ecm-params/scroll-ecm-params.gd +++ b/scenes/frame-ecm-params/scroll-ecm-params.gd @@ -4,9 +4,11 @@ class_name scroll_ecm_params extends ScrollContainer const CellLineEdit = preload('res://table/ячейка-2.tscn') ## Ячейка таблицы. const TableHeader = preload('res://table/header.tscn') ## Ячейка заголовок таблицы. +const CellTaggleBtn = preload('res://table/taggle.tscn') const TABLE_HEADER = [ TableHeader, TableHeader ] ## Описание ряда заголовка. const TABLE_ROW = [ CellLineEdit, CellLineEdit ] ## Описание ряда. +const TABLE_TAGGLE_BTN = [ CellLineEdit, CellTaggleBtn ] ## Описание ряда c кнопкой. const TABLE_HEADERS_TEXT = ['Параметр', 'Значение' ] ## Назания колонок. const TABLE_COLUMN_SIZE = [ 370, 85 ] ## Ширины колонок. @@ -28,7 +30,20 @@ func init_table(): $table.set_node_editable(0, p[0], false) $table.set_node_editable(1, p[0], false) $table.set_node_user_data(1, p[0], key) - $table.connect_columns(self, 'text_submitted', 'on_edit_entry', [1], []) + var node = $table.get_node2(1, p[0]) + node.connect('text_submitted', Callable(self, 'on_edit_entry').bind(node)) + $table.add_row(TABLE_TAGGLE_BTN) + $table.set_node_text(0, 6, 'Модуляция') + $table.set_node_alligment(0, 6, HORIZONTAL_ALIGNMENT_LEFT) + $table.set_node_editable(0, 6, false) + var taggle_btn = $table.get_node2(1, 6) + for item in taggle_btn.get_children(): + item.size.x = 85 + item.size.y = 25 + item.position.x = 0 + item.position.y = 0 + taggle_btn.size.x = 85 + taggle_btn.size.y = 25 $table.set_columns_min_size(TABLE_COLUMN_SIZE) $table.set_meta('id', 0) @@ -41,9 +56,10 @@ func _ready(): func on_edit_entry(text : String, entry): + print_debug() var ecm = $table.get_meta('ecm') if $table.has_meta('ecm') == false: return - var indexis = $table.get_key_indexes(entry[0].name) + var indexis = $table.get_key_indexes(entry.name) var row_i = indexis[1] var param = $table.get_node_user_data(1, row_i) var p = TABLE_PARAMS[param] diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd index e53c15f..dd7a43b 100644 --- a/scenes/работа/работа.gd +++ b/scenes/работа/работа.gd @@ -36,50 +36,14 @@ signal drag_continue ## Вызывается во время продолжен signal drag_end ## Вызывается в момент завершения перетаскивания. -## Границы секторов блоков ФС по частоте в режиме РТО. -const fs_band_rto: Dictionary = { - 0: [200.0, 250.0], - 1: [250.0, 300.0], - 2: [300.0, 350.0], - 3: [350.0, 400.0], - 4: [400.0, 450.0], - 5: [450.0, 500.0], - 6: [500.0, 550.0] } - -## Границы секторов блоков ФС по частоте в режиме РЛС. -const fs_band_rls: Dictionary = { - 0: [480.0, 490.0], - 1: [490.0, 500.0], - 2: [500.0, 510.0], - 3: [510.0, 520.0], - 4: [520.0, 530.0], - 5: [530.0, 540.0], - 6: [540.0, 550.0] } - -## Границы секторов блоков ФС по пеленгу. -const fs_sectors: Dictionary = { - 0: [0.0, 90.0], - 3: [90.0, 180.0], - 2: [180.0, 270.0], - 1: [270.0, 360.0] } - -const fs_freq: Dictionary = { - 0: [390.0, 510.0, 200.0, 250.0, 433.0], - 1: [800.0, 1065.0, 250.0, 300.0, 860.0], - 2: [1065.0, 1210.0, 300.0, 350.0, 1137.0], - 3: [1150.0, 1280.0, 350.0, 400.0, 1227.0], - 4: [1490.0, 2000.0, 400.0, 450.0, 1575.0], - 5: [2000.0, 3500.0, 450.0, 500.0, 2450.0], - 6: [3500.0, 6000.0, 500.0, 550.0, 5800.0] - } - ## Размеры карты для разных режимов РТО и РЛС соответственно const map_sizes = [ Rect2i(360, 360, 400, 400), Rect2i(82, 82, 955, 955)] -var fs_band = fs_band_rto ## Текущий режим блоков ФС по частоте +var fs_band = prd.fs_band_rto ## Текущий режим блоков ФС по частоте var fs_selected: Dictionary ## Словарь выбранных секторов var fs_active: Dictionary ## Словарь секторов назначенных на подавление + ## Состояние перетаскивания. enum DragFSM { DRAG, ## В процессе. @@ -110,7 +74,7 @@ func on_enter_tree() -> void: call_deferred('on_button_strobe_pressed') ## Обработчик нажатия на кнопку вид. func on_button_view_toggled(toggled: bool): signaller.emit_signal('map_mode_changed', int(toggled)) - fs_band = fs_band_rls if toggled else fs_band_rto + fs_band = prd.fs_band_rls if toggled else prd.fs_band_rto var s = map_sizes[int(toggled)] $tilemap.size = s.size $tilemap.position = s.position @@ -173,17 +137,17 @@ func map_threat_to_bip(th: threats.Threat, bip: Control): var freq = th.freq var sector_key = null var sector_width = 50.0 - for key in fs_freq: - var freq_range = fs_freq[key] + for key in prd.fs_freq: + var freq_range = prd.fs_freq[key] var _num_values = (freq_range[1]- freq_range[0]) / sector_width if freq_range[0] <= freq and freq <= freq_range[1]: sector_key = key break if sector_key!= null: - radius_internal = fs_freq[sector_key][2] - radius_outter = fs_freq[sector_key][3] - freq_low = fs_freq[sector_key][0] - freq_high = fs_freq[sector_key][1] + radius_internal = prd.fs_freq[sector_key][2] + radius_outter = prd.fs_freq[sector_key][3] + freq_low = prd.fs_freq[sector_key][0] + freq_high = prd.fs_freq[sector_key][1] bip.position = tools.pos_calc( th.freq, th.aoa, @@ -407,9 +371,9 @@ func sel_fs_sector(event): var sector: int var band: int var has_band: bool = false - for sec in fs_sectors.values(): + for sec in prd.fs_sectors.values(): if angle >= sec[0] and angle <= sec[1]: - sector = fs_sectors.find_key(sec) + sector = prd.fs_sectors.find_key(sec) for diap in fs_band.values(): if distance >= diap[0] and distance <= diap[1]: band = fs_band.find_key(diap) @@ -417,6 +381,7 @@ func sel_fs_sector(event): if not has_band: return var fs_index = band * 4 + sector + print_debug(fs_index) if event.button_index == MOUSE_BUTTON_LEFT: fs_selected[fs_index] = null else: @@ -465,11 +430,11 @@ func set_ecm_btns_state(value: bool): func get_fs_param(index: int) -> Array: - var freq = (fs_freq[index / 4][4]) - var sector = (fs_sectors[index % 4][0] + fs_sectors[index % 4][1])/2 - 45.0 + var freq = (prd.fs_freq[index / 4][4]) + var sector = (prd.fs_sectors[index % 4][0] + prd.fs_sectors[index % 4][1])/2 - 45.0 if sector < 0: sector += 360.0 - var width = fs_freq[index / 4][1] - fs_freq[index / 4][0] + var width = prd.fs_freq[index / 4][1] - prd.fs_freq[index / 4][0] return [sector, freq, width, index] @@ -488,13 +453,13 @@ func get_fs_index(ecm, fs_index_arr): var angle: float = ecm.kni + 45.0 if angle > 360.0: angle -= 360.0 - for sec in fs_sectors.values(): + for sec in prd.fs_sectors.values(): if float(angle) >= sec[0] and float(angle) <= sec[1]: - sector = fs_sectors.find_key(sec) - for diap in fs_freq.values(): + sector = prd.fs_sectors.find_key(sec) + for diap in prd.fs_freq.values(): if ecm.params.has('freq'): if ecm.params['freq'] >= diap[0] and ecm.params['freq'] <= diap[1]: - band.append(fs_freq.find_key(diap)) + band.append(prd.fs_freq.find_key(diap)) for item in band: fs_index_arr.append(item * 4 + sector) diff --git a/scripts/yems-boards.gd b/scenes/эмс/yems-boards.gd similarity index 99% rename from scripts/yems-boards.gd rename to scenes/эмс/yems-boards.gd index b72794a..e34cc91 100644 --- a/scripts/yems-boards.gd +++ b/scenes/эмс/yems-boards.gd @@ -283,4 +283,4 @@ class EmsBoard: cur_dev.ports_data[base_addr_isa + 10] = int(ports['%d'%(base_addr_isa + 10)]) func set_load_done(): - unit_ems.send_other(unit_ems.CmdCode.LOAD_EMG_DONE) + unit_ems.send_load_ems_done(unit_ems.CmdCode.LOAD_EMS_DONE) diff --git a/scripts/yems-consts.gd b/scenes/эмс/yems-consts.gd similarity index 100% rename from scripts/yems-consts.gd rename to scenes/эмс/yems-consts.gd diff --git a/scripts/yems-devs.gd b/scenes/эмс/yems-devs.gd similarity index 100% rename from scripts/yems-devs.gd rename to scenes/эмс/yems-devs.gd diff --git a/scripts/yems-g.gd b/scenes/эмс/yems-g.gd similarity index 95% rename from scripts/yems-g.gd rename to scenes/эмс/yems-g.gd index 94e9c18..ade970d 100644 --- a/scripts/yems-g.gd +++ b/scenes/эмс/yems-g.gd @@ -1,5 +1,15 @@ extends Node +const modulation_dev: Dictionary = { + 0 : 50, + 1 : 51, + 2 : 52, + 3 : 51, + 4 : 52, + 5 : 51, + 6 : 52, +} + var ems_board: Dictionary = {} # Called when the node enters the scene tree for the first time. diff --git a/scenes/эмс/кнопка-эмс.tscn b/scenes/эмс/кнопка-эмс.tscn index 562b190..9d90065 100644 --- a/scenes/эмс/кнопка-эмс.tscn +++ b/scenes/эмс/кнопка-эмс.tscn @@ -5,15 +5,15 @@ [sub_resource type="StyleBoxEmpty" id="1"] -[sub_resource type="StyleBoxEmpty" id="6"] +[sub_resource type="StyleBoxEmpty" id="4"] + +[sub_resource type="StyleBoxEmpty" id="5"] [sub_resource type="StyleBoxEmpty" id="2"] [sub_resource type="StyleBoxEmpty" id="3"] -[sub_resource type="StyleBoxEmpty" id="5"] - -[sub_resource type="StyleBoxEmpty" id="4"] +[sub_resource type="StyleBoxEmpty" id="6"] [node name="container" type="PanelContainer"] offset_right = 30.0 @@ -36,11 +36,11 @@ axis_stretch_vertical = 2 [node name="button" type="Button" parent="."] layout_mode = 2 -theme_override_styles/normal = SubResource("6") +theme_override_styles/focus = SubResource("4") +theme_override_styles/disabled = SubResource("5") theme_override_styles/hover = SubResource("2") theme_override_styles/pressed = SubResource("3") -theme_override_styles/disabled = SubResource("5") -theme_override_styles/focus = SubResource("4") +theme_override_styles/normal = SubResource("6") toggle_mode = true clip_text = true diff --git a/scripts/interfer.gd b/scripts/interfer.gd index 3149ee2..9996402 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -86,7 +86,6 @@ class Interfer: else: self.set(value_key, value) - signal interfer_preparing(ecm: Interfer) ## Вызывается в момент запуска помехи. signal interfer_run(ecm: Interfer) ## Вызывается в момент начала работы помехи. signal interfer_error(ecm: Interfer, msg: String) ## Вызывается при ошибке. @@ -130,12 +129,15 @@ func on_timer_check_state(unit, ecms, resend_timeout): send_ecm(ecm, unit) ecm.tick_tx = tick + func on_manual_control(): auto_status = 0 + func on_full_auto(): auto_status = 3 + func on_th_aoa_update(threats: Dictionary, ecms: Dictionary, unit): for thr in threats.values(): var th_id = thr.id @@ -277,6 +279,7 @@ func on_interfer_off_all(unit, ecms): send_ecm(ecm, unit) signaller.emit_signal('interfer_off',ecm, ecms, thrs) + func on_threats_lost(th, ecms, unit): for key in interfer.thrs: if interfer.thrs[key] == th.id: diff --git a/scripts/prd.gd b/scripts/prd.gd new file mode 100644 index 0000000..30e2b39 --- /dev/null +++ b/scripts/prd.gd @@ -0,0 +1,125 @@ +extends Node + + +## Границы секторов блоков ФС по частоте в режиме РТО. +const fs_band_rto: Dictionary = { + 0: [200.0, 250.0], + 1: [250.0, 300.0], + 2: [300.0, 350.0], + 3: [350.0, 400.0], + 4: [400.0, 450.0], + 5: [450.0, 500.0], + 6: [500.0, 550.0] } + +## Границы секторов блоков ФС по частоте в режиме РЛС. +const fs_band_rls: Dictionary = { + 0: [480.0, 490.0], + 1: [490.0, 500.0], + 2: [500.0, 510.0], + 3: [510.0, 520.0], + 4: [520.0, 530.0], + 5: [530.0, 540.0], + 6: [540.0, 550.0] } + +## Границы секторов блоков ФС по пеленгу. +const fs_sectors: Dictionary = { + 0: [0.0, 90.0], + 3: [90.0, 180.0], + 2: [180.0, 270.0], + 1: [270.0, 360.0] } + +const fs_freq: Dictionary = { + 0: [390.0, 510.0, 200.0, 250.0, 433.0], + 1: [800.0, 1065.0, 250.0, 300.0, 860.0], + 2: [1065.0, 1210.0, 300.0, 350.0, 1137.0], + 3: [1150.0, 1280.0, 350.0, 400.0, 1227.0], + 4: [1490.0, 2000.0, 400.0, 450.0, 1575.0], + 5: [2000.0, 3500.0, 450.0, 500.0, 2450.0], + 6: [3500.0, 6000.0, 500.0, 550.0, 5800.0] } + +const prd_names: Array = [ + 'уарэп-яу07-1н', + 'уарэп-яу07-1в', + 'уарэп-яу07-1к', + 'уарэп-яу07-2н', + 'уарэп-яу07-2в', + 'уарэп-яу07-2к', + 'уарэп-яу07-3н', + 'уарэп-яу07-3в', + 'уарэп-яу07-3к', + 'уарэп-яу07-4н', + 'уарэп-яу07-4в', + 'уарэп-яу07-4к', ] + +const fs_ampls: Dictionary = { + 0: ['уарэп-яу07-1к'], + 1: ['уарэп-яу07-4к'], + 2: ['уарэп-яу07-3к'], + 3: ['уарэп-яу07-2к'], + 4: ['уарэп-яу07-1н'], + 5: ['уарэп-яу07-4н'], + 6: ['уарэп-яу07-3н'], + 7: ['уарэп-яу07-2н'], + 8: ['уарэп-яу07-1н'], + 9: ['уарэп-яу07-4н'], + 10: ['уарэп-яу07-3н'], + 11: ['уарэп-яу07-2н'], + 12: ['уарэп-яу07-1в'], + 13: ['уарэп-яу07-4в'], + 14: ['уарэп-яу07-3в'], + 15: ['уарэп-яу07-2в'], + 16: ['уарэп-яу07-1в'], + 17: ['уарэп-яу07-4в'], + 18: ['уарэп-яу07-3в'], + 19: ['уарэп-яу07-2в'], + 20: ['уарэп-яу07-1к'], + 21: ['уарэп-яу07-4к'], + 22: ['уарэп-яу07-3к'], + 23: ['уарэп-яу07-2к'], + 24: ['уарэп-яу07-1к'], + 25: ['уарэп-яу07-4к'], + 26: ['уарэп-яу07-3к'], + 27: ['уарэп-яу07-2к'], } + +var fs_dict: Dictionary +var prd_dict: Dictionary + +class FsAmpl: + var index ## Индекс блока усилителей + var modulation: int ## Состояние модуляции + var prd_name: String ## Ипя прибора ПРД в котором стоит модуль + + func _init(i, p_name): + prd_name = p_name + index = i + + func set_modulation(val): + modulation = val + + +class PRD: + var prd_name: String ## Имя прибора + var unit_yau07 ## Юнит эмс + var fs_dic: Dictionary ## Массив блоков ФС + var yemsg_board ## Плата ЭМС-Г + + func _init(u_name ,u, yems_board): + prd_name = u_name + unit_yau07 = u + yemsg_board = yems_board + + +func _ready() -> void: + for prd_name in prd_names: + var unit_key = settings.get_unit_key(prd_name) + var unit_prd = network.units[unit_key] + for yemsg_board in yemsg.ems_board.values(): + if yemsg_board[1] == unit_prd: + var yemsg_b = yemsg_board[0] + var new_prd = PRD.new(prd_name, unit_prd, yemsg_b) + prd_dict[prd_name] = new_prd + for key in fs_ampls.keys(): + var fs_ampl = FsAmpl.new(key, fs_ampls[key][0]) + fs_dict[key] = fs_ampl + if prd_dict.has(fs_ampl.prd_name): + prd_dict[fs_ampl.prd_name].fs_dic[key] = fs_ampl diff --git a/scripts/yau07.gd b/scripts/yau07.gd index a4175ae..8476f95 100644 --- a/scripts/yau07.gd +++ b/scripts/yau07.gd @@ -24,7 +24,7 @@ class YaU07 extends unit.Unit: WRITE_FLASH_MP550 = 55, ## Код команды "записать данные из FLASH в КЭМС" ячейки ЯУ-07 WRITE_BLOCK = 60, ## Код команды "записать блок данных ISA" внешней шины ячейки ЯУ-07 READ_BLOCK = 61, ## Код команды "читать блок данных ISA" внешней шины ячейки ЯУ-07 - LOAD_EMG_DONE = 70, ## Код команды "читать блок данных ISA" внешней шины ячейки ЯУ-07 + LOAD_EMS_DONE = 70, ## Код команды "читать блок данных ISA" внешней шины ячейки ЯУ-07 } var cmd_num_rx: = 0 ## Номер команды принятый @@ -173,12 +173,12 @@ class YaU07 extends unit.Unit: cmd_code_tx = cmd_code return true - func send_other(cmd_code: int): + func send_load_ems_done(cmd_code: int): if (cmd_state == CmdState.WAIT) \ or (cmd_state == CmdState.SEND) \ or (cmd_state == CmdState.UNCK): return false - if not (cmd_code == CmdCode.LOAD_EMG_DONE): + if not (cmd_code == CmdCode.LOAD_EMS_DONE): return false cmd_num_tx = (cmd_num_rx + 1) % 0xffff tx_data.encode_u16(0, cmd_retry)