Доработка. Управление модуляцией усилителей. Кнопка подавление определяет режим по умолчанию для всех помех.

This commit is contained in:
MaD_CaT
2025-02-17 16:09:30 +03:00
parent 7676966c9c
commit 33ee5bbf96
10 changed files with 94 additions and 33 deletions

View File

@@ -34,10 +34,10 @@ func on_btn_pressed(btn_this, btn_others):
signaller.emit_signal('interfer_off_all')
signaller.emit_signal('rto_threat_unsel_all')
if btn_this == $grd_forced/btn_panika:
signaller.emit_signal('interfer_prenuditelno', panika_sectors)
signaller.emit_signal('interfer_prinuditelno', panika_sectors)
elif btn_this == $grd_forced/btn_jtids:
signaller.emit_signal('interfer_prenuditelno', jtids_sectors)
signaller.emit_signal('interfer_prinuditelno', jtids_sectors)
elif btn_this == $grd_forced/btn_kupd:
signaller.emit_signal('interfer_prenuditelno', kupd_sectors)
signaller.emit_signal('interfer_prinuditelno', kupd_sectors)
elif btn_this == $grd_forced/btn_srn:
signaller.emit_signal('interfer_prenuditelno', srn_sectors)
signaller.emit_signal('interfer_prinuditelno', srn_sectors)

View File

@@ -34,7 +34,7 @@ func init_table():
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, MOD_ROW_INDEX, 'Модуляция')
$table.set_node_text(0, MOD_ROW_INDEX, 'Подавление')
$table.set_node_alligment(0, MOD_ROW_INDEX, HORIZONTAL_ALIGNMENT_LEFT)
$table.set_node_editable(0, MOD_ROW_INDEX, false)
var taggle_node = $table.get_node2(1, MOD_ROW_INDEX)
@@ -52,6 +52,7 @@ func init_table():
$table.set_meta('id', 0)
signaller.connect('interfer_selected', Callable(self, 'on_interfer_selected').bind(taggle_btn))
signaller.connect('rto_threat_unsel', Callable(self, 'on_rto_threat_unsel'))
signaller.connect('emit_changed', Callable(self, 'on_emit_changed').bind(taggle_btn))
## Called when the node enters the scene tree for the first time.
@@ -120,3 +121,8 @@ func on_taggle_btn(taggle_btn):
if not $table.has_meta('ecm'): return
var ecm: interfer.Interfer = $table.get_meta('ecm')
ecm.modulation = taggle_btn.button_pressed
func on_emit_changed(state, taggle_btn):
if not taggle_btn.disabled:
taggle_btn.button_pressed = state

View File

@@ -5,7 +5,7 @@ const VAL_TO_EVENT = { 0: 'manual_control', 1: 'interfer_auto', 2: 'threat_auto'
func _ready():
on_value_changed(0)
signaller.connect('interfer_prenuditelno', Callable(self, 'on_interfer_prenuditelno'))
signaller.connect('interfer_prinuditelno', Callable(self, 'on_interfer_prinuditelno'))
func on_value_changed(val):
@@ -18,6 +18,6 @@ func on_value_changed(val):
signaller.emit_signal(VAL_TO_EVENT[val])
func on_interfer_prenuditelno(_interfer_sectors):
func on_interfer_prinuditelno(_interfer_sectors):
self.set_value_no_signal(0)
on_value_changed(0)

View File

@@ -103,6 +103,7 @@ func _ready():
max_zoom = ProjectSettings.get_setting('application/config/map_maximum_zoom', 19)
drag_fsm = DragFSM.OFF
var btns_select: Array = $btns_select.get_children()
$btn_activate.button_connect('pressed', Callable(self, 'on_btn_activate').bind($btn_activate))
btns_select.any(func(btn): btn.button_connect('pressed', Callable(self, 'on_button_select').bind(btn, btns_select)))
$btn_view.button_connect('toggled', Callable(self, 'on_button_view_toggled'))
var nodes: Array = get_tree().get_nodes_in_group('группа-режим-помехи')
@@ -118,7 +119,7 @@ func _ready():
signaller.connect('interfer_selected', Callable(self, 'on_interfer_selected').bind(nodes))
signaller.connect('interfer_new', Callable(self, 'on_interfer_new'))
signaller.connect('interfer_off_all', Callable(self, 'on_interfer_off_all'))
signaller.connect('interfer_prenuditelno', Callable(self, 'on_interfer_prenuditelno').bind(nodes))
signaller.connect('interfer_prinuditelno', Callable(self, 'on_interfer_prinuditelno').bind(nodes))
signaller.connect('fs_selected', Callable(self, 'on_fs_selected'))
signaller.connect('fs_update_color', Callable(self, 'on_fs_update_color'))
interfer.connect('interfer_update', Callable(self, 'on_interfer_new'))
@@ -462,7 +463,7 @@ func on_fs_update_color(ecms):
update_fs_colors()
func on_interfer_prenuditelno (prenuditelno_sectors, btns):
func on_interfer_prinuditelno (prenuditelno_sectors, btns):
for key in prenuditelno_sectors:
var sectors = []
for sector in prenuditelno_sectors[key]:
@@ -472,3 +473,7 @@ func on_interfer_prenuditelno (prenuditelno_sectors, btns):
for btn in btns:
btn.set_pressed(false)
set_btns_disabled(true, btn)
func on_btn_activate(btn):
signaller.emit_signal('emit_changed', btn.is_pressed())

View File

@@ -114,6 +114,7 @@ size_flags_horizontal = 3
size_flags_vertical = 3
strips_rotation = 15.0
text = "Подавление"
pressed = true
toggle_mode = true
[node name="bt_navig_u" type="TextureButton" parent="."]

View File

@@ -4,6 +4,15 @@ class EmsBoard:
enum {WAIT, WR_DEV_NUM_W, WRITE, WR_DEV_NUM_R, READ, READ_FLASH, WRITE_FLASH,
WRITE_FLASH_BEGIN, LOAD_KEMS, WRITE_FLASH_END, LOAD_FAIL} ## Состояния платы
const modulation_dev: Dictionary = { ## Словарь соответствия диапазона номеру устройства
0 : 50,
1 : 51,
2 : 52,
3 : 51,
4 : 52,
5 : 51,
6 : 52, }
var id_board: int ## id платы
var in_devs: Dictionary ## Словарь с входными устройствами.
var out_devs: Dictionary ## Словарь с выходными устройствами.
@@ -26,6 +35,7 @@ class EmsBoard:
var need_flash_wr: bool = false ## Флаг, что надо записать данные в флеш
var need_write: bool = false ## Флаг, что надо записать данные в ячейку ЭМС
var ems_g_fn: String = '' ## Имя файла настроек ЭМС-Г
var cmd_array: Array ## Очередь выполнения команд
signal upd_delay_offset(board, cur_dev) ## Сигнал о обновлении данных задержек
signal upd_o_state(board, cur_dev) ## Сигнал о обновлении данных режима выходов
@@ -284,3 +294,17 @@ class EmsBoard:
func set_load_done():
unit_ems.send_load_ems_done(unit_ems.CmdCode.LOAD_EMS_DONE)
func execute_cmd():
if len(cmd_array):
var cmd: Array = cmd_array.pop_front()
change_mode(cmd[0], cmd[1])
func add_cmd(band, mode_state):
var state = 2
if mode_state:
state = 3
cmd_array.append([modulation_dev[band], state])
func get_dev_mode(fs_index):
return out_devs[modulation_dev[fs_index/4]].mode

View File

@@ -1,15 +1,5 @@
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.
@@ -51,10 +41,12 @@ func on_data_ems_received(unit_ems, board):
board.set_status(unit_ems.status)
if board.state_board == board.WAIT and board.state_cmd == board.WAIT:
if board.online:
if board.need_write:
if board.need_write and (not board.ems_load):
start_load(board)
elif not board.ems_load:
board.set_load_done()
elif board.ems_load and len(board.cmd_array):
board.execute_cmd()
else:
board.need_write = true

View File

@@ -35,7 +35,8 @@ var id_array: Array ## Массив id воздействий.
var thrs: Dictionary ## Словарь воздействия для целей, ключ - id воздействия.
var fs: Dictionary ## Словарь воздействий для секторов, ключ - id воздействия.
var cu: Dictionary ## Словарь воздействий для 5П-28, ключ - id воздействия.
var auto_status: int = 0 # Статус скролла автомата
var auto_status: int = 0 ## Статус скролла автомата
var emit_enable: bool = true ## Разрешить излучение
## Сеанс помехи.
class Interfer:
@@ -117,7 +118,8 @@ func _ready():
signaller.connect('interfer_off', Callable(self, 'on_interfer_off'))
signaller.connect('manual_control', Callable(self, 'on_manual_control'))
signaller.connect('full_auto', Callable(self, 'on_full_auto'))
signaller.connect('interfer_prenuditelno', Callable(self, 'on_interfer_prenuditelno'))
signaller.connect('interfer_prinuditelno', Callable(self, 'on_interfer_prinuditelno'))
signaller.connect('emit_changed', Callable(self, 'on_emit_changed').bind(ecms))
threats.connect('threat_lost', Callable(self, 'on_threats_lost').bind(ecms, unit))
@@ -263,6 +265,7 @@ func interfer_create(interfer_name, ecms, param, kni, id, dict, source_interfer)
ecm.params = param
ecm.powp = 100.0 # Необходимо добавить управление мощностью
ecm.source_interfer = source_interfer
ecm.modulation = emit_enable
signaller.emit_signal('interfer_new', ecm)
if interfer_name == 'off':
signaller.emit_signal('interfer_off', ecm, ecms, thrs)
@@ -307,3 +310,8 @@ func push_id(id : int):
## Отправляет словарь помех в юнит, для запаковки и отправки в 5П28.
func on_get_interfers(unit, ecms): unit.pack_interfers(cu, ecms)
func on_emit_changed(state, ecms):
emit_enable = state
for ecm in ecms.values():
ecm.modulation = state

View File

@@ -51,7 +51,7 @@ const prd_names: Array = [
'уарэп-яу07-4в',
'уарэп-яу07-4к', ]
const fs_ampls: Dictionary = {
const fs_prd: Dictionary = {
0: ['уарэп-яу07-1к'],
1: ['уарэп-яу07-4к'],
2: ['уарэп-яу07-3к'],
@@ -84,11 +84,13 @@ const fs_ampls: Dictionary = {
var fs_dict: Dictionary
var prd_dict: Dictionary
class FsAmpl:
class Fs:
var index ## Индекс блока усилителей
var modulation: int ## Состояние модуляции
var modulation: bool ## Состояние модуляции
var prd_name: String ## Ипя прибора ПРД в котором стоит модуль
signal update_modulation(index)
func _init(i, p_name):
prd_name = p_name
index = i
@@ -108,6 +110,9 @@ class PRD:
unit_yau07 = u
yemsg_board = yems_board
func on_update_modulation(index):
yemsg_board.add_cmd(index/4, fs_dic[index].modulation)
func _ready() -> void:
for prd_name in prd_names:
@@ -118,11 +123,12 @@ func _ready() -> void:
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
for key in fs_prd.keys():
var fs = Fs.new(key, fs_prd[key][0])
fs_dict[key] = fs
if prd_dict.has(fs.prd_name):
prd_dict[fs.prd_name].fs_dic[key] = fs
fs.connect('update_modulation', prd_dict[fs.prd_name].on_update_modulation.bind(fs.index))
func get_fs_index(ecm, fs_index_arr):
@@ -143,8 +149,20 @@ func get_fs_index(ecm, fs_index_arr):
func update_fs_state(ecms):
for fs in fs_dict.values():
fs.set_modulation(false)
for ecm in ecms.values():
var fs_ids: Array
get_fs_index(ecm, fs_ids)
pass
for fs_index in fs_ids:
var fs = fs_dict[fs_index]
fs.set_modulation(ecm.modulation)
for prd_module in prd_dict.values():
if not prd_module.unit_yau07.online: continue
for fs in prd_module.fs_dic.values():
var dev_mode = prd_module.yemsg_board.get_dev_mode(fs.index)
var fs_state = 2
if fs.modulation:
fs_state = 3
if dev_mode != fs_state:
fs.emit_signal('update_modulation')

View File

@@ -115,7 +115,7 @@ signal interfer_off_all()
## Вызывается при нажатии паника.
signal interfer_prenuditelno(interfer_sectors: Dictionary)
signal interfer_prinuditelno(interfer_sectors: Dictionary)
## Вызывается при получении внешнего целеуказания.
@@ -151,8 +151,10 @@ signal th_aoa_update(threats: Dictionary)
## [param ecms] - <...>
signal fs_update_color(ecms: Dictionary)
signal socket_error(error: String)
## Вызывается при нажатии на кнопку экранной клавиатуры
## [param state] - состояние нажатого переключателя виртуальной клавиатуры астры
signal kb_pressed(state)
@@ -161,3 +163,8 @@ signal kb_pressed(state)
## Вызывается при нажатии на кнопку экранной клавиатуры
## [param state] - состояние скрытия кнопки ЭМС2
signal ems2_hide_pressed(state)
## Вызывается при нажатии на кнопку экранной клавиатуры
## [param state] - состояние скрытия кнопки ЭМС2
signal emit_changed(state)