Доработка. Управление модуляцией усилителей. Кнопка подавление определяет режим по умолчанию для всех помех.
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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="."]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user