diff --git a/scenes/frame-ecm-list/scroll-ecm-list.gd b/scenes/frame-ecm-list/scroll-ecm-list.gd index 1ff8dc60..39933aae 100644 --- a/scenes/frame-ecm-list/scroll-ecm-list.gd +++ b/scenes/frame-ecm-list/scroll-ecm-list.gd @@ -4,11 +4,13 @@ extends ScrollContainer ## Отображает список помех в таблице. const CellLineEdit = preload('res://table/ячейка-2.tscn') ## Ячейка таблицы. const TableHeader = preload('res://table/header.tscn') ## Ячейка заголовок таблицы. +const EmitLed = preload('res://scenes/frame-threats/emit-led.tscn') ## Ячейка символа излучения + +const TABLE_HEADER = [ TableHeader, TableHeader, TableHeader , TableHeader , TableHeader ] ## Описание ряда заголовка. +const TABLE_ROW = [ CellLineEdit, CellLineEdit, CellLineEdit , CellLineEdit , EmitLed ] ## Описание ряда. +const TABLE_HEADERS_TEXT = ['№', 'Название', 'Пеленг', 'Состояние' , 'Излучение' ] ## Заголовки таблицы. +const TABLE_COLUMN_SIZE = [ 65, 80, 80, 130 , 90 ] ## Ширины колонок. -const TABLE_HEADER = [ TableHeader, TableHeader, TableHeader , TableHeader ] ## Описание ряда заголовка. -const TABLE_ROW = [ CellLineEdit, CellLineEdit, CellLineEdit , CellLineEdit ] ## Описание ряда. -const TABLE_HEADERS_TEXT = ['№', 'Название', 'Пеленг', 'Состояние' ] ## Заголовки таблицы. -const TABLE_COLUMN_SIZE = [ 65, 100, 90, 170 ] ## Ширины колонок. ## Состояние выполнения сеанса помехи const INTERFER_STATE = { @@ -45,8 +47,11 @@ const COLUMN_NUMBER = 0 const COLUMN_NAME = 1 const COLUMN_AOA = 2 const COLUMN_STATE = 3 +const COLUMN_EMITED = 4 +const TABLE_TEXT_ROWS = 4 var course = 0.0 ## Курс корабля +var color_emit: Color func on_rto_threat_unsel(_th_id): $table.clear_rows_selected() @@ -91,6 +96,7 @@ func _ready(): call_deferred('init_table') var unit_nav = network.get_unit_instance('навигация') unit_nav.connect('data_received', on_navi_data_received) + ProjectSettings.connect('settings_changed', on_settings_changed) func init_table(): @@ -102,9 +108,19 @@ func init_table(): func on_interfer_update(ecm, table_index): var row = map_th_to_row(ecm) - if table_index.has(ecm.ispp): - var i_row = table_index[ecm.ispp] - $table.set_row_text(i_row, row) + if not table_index.has(ecm.ispp): return + var i_row = table_index[ecm.ispp] + $table.set_row_text(i_row, row) + var power: bool = prd.get_fs_power(ecm.nmfs) + var emit_node = $table.get_node2(COLUMN_EMITED, i_row) + var emit_txr = emit_node.get_node('texture-led') + emit_txr.position.x = 40.0 + ecm.active = power + if power: + emit_txr.visible = true + emit_txr.self_modulate = color_emit + else: + emit_txr.visible = false func on_interfer_new(ecm, table_index): @@ -116,7 +132,7 @@ func on_interfer_new(ecm, table_index): var i_row = $table.get_rows_count() $table.add_row(TABLE_ROW) $table.set_row_text(i_row, row) - $table.set_row_editable(i_row, false) + disable_edit($table, TABLE_TEXT_ROWS, i_row) $table.set_node_user_data(0, i_row, ecm) table_index[ecm.ispp] = i_row $table.clear_rows_selected() @@ -149,7 +165,7 @@ func rehash(table_index: Dictionary): ## Преобразует цель в строку таблицы func map_th_to_row(ecm) -> Array: var row: = Array() - row.resize(TABLE_ROW.size()) + row.resize(TABLE_ROW.size() - 1) row[COLUMN_NUMBER] = '%s' % ecm.ispp row[COLUMN_NAME] = '' if INTERFER_NAMES.has(ecm.krp): @@ -175,3 +191,19 @@ func on_interfer_recommendate(ecm): func on_navi_data_received(data: Dictionary): course = data.get('k', 0.0) + + +func on_settings_changed(): + 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_emit = Color(arr_col[0], arr_col[1], arr_col[2], arr_col[3]) + + +## Отключает возможность редактирования LineEdit в таблице.[br] +## [param tbl] - таблица,[br] +## [param num_col] - номер колонки,[br] +## [param i_row] - номер столбца.[br] +func disable_edit(tbl, num_col: int, i_row: int): + for col in num_col: + var node: LineEdit = tbl.get_node2(col, i_row) + node.editable = false diff --git a/scripts/prd.gd b/scripts/prd.gd index 8a56a356..24d6c0d9 100644 --- a/scripts/prd.gd +++ b/scripts/prd.gd @@ -3,6 +3,7 @@ extends Node enum PrdState {WORK, CONTROL} const TIME_YAU07_SEND = 50 +const MIN_UM_POWER = 200 ## минимальная мощность с усилителя, что бы отобразить значёк излучения ## Границы секторов блоков ФС по частоте в режиме РТО. const FS_BAND_RTO: Dictionary = { @@ -86,10 +87,10 @@ const FS_PRD: Dictionary = { 26: ['уарэп-яу07-3к', 37], 27: ['уарэп-яу07-2к', 27], } -var fs_dict: Dictionary ## Словарь с модулями ФС -var prd_dict: Dictionary ## Словарь с приборами ПРД -var course = 0.0 ## Курс корабля -var fs_caps_id: Dictionary ## Словарь соответствия номеров ФС от КАПС РПБ внутрипрограммной нумерации +var fs_dict: Dictionary ## Словарь с модулями ФС +var prd_dict: Dictionary ## Словарь с приборами ПРД +var course = 0.0 ## Курс корабля +var fs_caps_id: Dictionary ## Словарь соответствия номеров ФС от КАПС РПБ внутрипрограммной нумерации class Fs: @@ -124,14 +125,17 @@ class Fs: var ready: bool = false ## Готовность сектора к излучению var caps_online: bool = false ## Состояние связи с КАПС РПБ var yau_07_online: bool = false ## Состояние связи ЯУ-07 + var lit: int ## Литера ФС + var power: bool = false ## Признак излучения усилителей signal update_modulation(index) func _init(i, p_name): prd_name = p_name index = i - if UM_PORTS.has(index/4): - um_port = UM_PORTS[index/4] + lit = index/4 + if UM_PORTS.has(lit): + um_port = UM_PORTS[lit] func set_modulation(val): modulation = val @@ -158,6 +162,14 @@ class Fs: func set_ready(): ready = isg and caps_online and yau_07_online + func set_power(power_arr: Array): + power = false + for val in power_arr: + if val > MIN_UM_POWER: + power = true + break + + class PRD: enum STATE_DEVICE { NONE, @@ -502,3 +514,13 @@ func on_yau07_line_changed(unit_yau07, prd_pribor): fs.yau_07_online = unit_yau07.online fs.set_ready() signaller.emit_signal('fs_update_state', fs_dict) + + +func get_fs_power(nmfs: int): + if not fs_caps_id.has(nmfs): return false + var fs_index: int = fs_caps_id[nmfs] + var prd_obj: PRD = prd_dict[FS_PRD[fs_index][0]] + var fs: Fs = prd_obj.fs_dic[fs_index] + var power_arr: Array = prd_obj.unit_control.power_um_ukp(prd_obj.unit_yau07.status, fs.lit + 1, [], true) + fs.set_power(power_arr) + return fs.power diff --git a/scripts/pribor-prd.gd b/scripts/pribor-prd.gd index 39577c58..182ca5e1 100644 --- a/scripts/pribor-prd.gd +++ b/scripts/pribor-prd.gd @@ -310,7 +310,7 @@ func on_data_received(unit_pribor: Object) -> void: if interes == 'RAY_CTRL': count_packets_power += 1 elif interes != '': - tek_litera[_get_ray_key(state)] = power_um_ukp(status, current_litera, tek_litera[_get_ray_key(state)]) + tek_litera[_get_ray_key(state)] = power_um_ukp(status, current_litera, tek_litera[_get_ray_key(state)], false) power_for_litera[current_litera] = tek_litera count_packets_power += 1 @@ -1157,50 +1157,52 @@ static func _should_apply_rule(fs_num: int, rule: Dictionary, results: Dictionar ## Получение мощности при выполнении контроля -static func power_um_ukp(status: PackedByteArray, litera: int, pwr_result: Array) -> Array: +static func power_um_ukp(status: PackedByteArray, litera: int, pwr_result: Array, mode_work: bool) -> Array: const Constants: Dictionary = {'POWER_UKP_1' : 31, 'POWER_UKP_2': 63} var power_values: Array = [] var base_offset = 0 var iteration: int = 6 - var ug_valid: bool = (status[0] >> 2) & 1 - + if not len(status): return power_values + var ukp1_valid: bool = (status[0] >> 2) & 1 + var ukp2_valid: bool = (status[0] >> 3) & 1 match litera: 1: var value = status.decode_u16(Constants.POWER_UKP_1 + 2 * 7) - if ug_valid: + if ukp1_valid: power_values = [value] 2: base_offset = Constants.POWER_UKP_1 - if ug_valid: + if ukp1_valid: for i in iteration: power_values.append(status.decode_u16(base_offset + 2 * i)) 3: base_offset = Constants.POWER_UKP_2 - if ug_valid: + if ukp2_valid: for i in iteration: power_values.append(status.decode_u16(base_offset + 2 * i)) 4: base_offset = Constants.POWER_UKP_1 - if ug_valid: + if ukp1_valid: for i in iteration: power_values.append(status.decode_u16(base_offset + 2 * i)) 5: base_offset = Constants.POWER_UKP_2 - if ug_valid: + if ukp2_valid: for i in iteration: power_values.append(status.decode_u16(base_offset + 2 * i)) 6: base_offset = Constants.POWER_UKP_1 - if ug_valid: + if ukp1_valid: for i in iteration: power_values.append(status.decode_u16(base_offset + 2 * i)) 7: base_offset = Constants.POWER_UKP_2 - if ug_valid: + if ukp2_valid: for i in iteration: power_values.append(status.decode_u16(base_offset + 2 * i)) - power_values = update_max_power_values(power_values, pwr_result) + if not mode_work: + power_values = update_max_power_values(power_values, pwr_result) return power_values