Доработка. Добавлена возможность включать помеху по сектору.
This commit is contained in:
@@ -23,7 +23,7 @@ func _on_bip_gui_input(event):
|
||||
if event is InputEventMouseButton and event.pressed:
|
||||
match event.button_index:
|
||||
MOUSE_BUTTON_LEFT:
|
||||
signaller.emit_signal('rto_threat_sel', name.to_int())
|
||||
signaller.emit_signal('bip_pressed', name.to_int())
|
||||
MOUSE_BUTTON_RIGHT:
|
||||
if selected:
|
||||
signaller.emit_signal('rto_threat_unsel', name.to_int())
|
||||
|
||||
@@ -23,10 +23,9 @@ var save_modulate: Color
|
||||
$button.set_disabled(val)
|
||||
$back.disabled = val
|
||||
if val:
|
||||
save_modulate = $state.modulate
|
||||
$state.modulate *= Color(1.0, 1.0, 1.0, 0.5)
|
||||
$state.modulate.a = 0.5
|
||||
else:
|
||||
$state.modulate = save_modulate
|
||||
$state.modulate.a = 1.0
|
||||
get: return $button.disabled
|
||||
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ editor_description = "Кнопка для принудительного вкл
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
text = "JTIDS"
|
||||
text = "СПРС"
|
||||
metadata/rfi_name = "ozp1"
|
||||
|
||||
[node name="btn_kupd" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("4_7ys3c")]
|
||||
|
||||
@@ -53,6 +53,8 @@ func on_row_pressed(i_row: int):
|
||||
if interfer.thrs.has(ecm.ispp):
|
||||
signaller.emit_signal('rto_threat_sel', interfer.thrs[ecm.ispp])
|
||||
else:
|
||||
if interfer.fs.has(ecm.ispp):
|
||||
signaller.emit_signal('fs_selected', ecm)
|
||||
signaller.emit_signal('interfer_selected', ecm)
|
||||
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@ func on_interfer_selected(ecm):
|
||||
|
||||
|
||||
func on_ecm_update():
|
||||
for item in range(len(TABLE_PARAMS)):
|
||||
for item in len(TABLE_PARAMS):
|
||||
$table.set_node_text(1, item, '')
|
||||
$table.set_node_editable(1, item, false)
|
||||
if $table.has_meta('ecm') == false: return
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
extends NinePatchRect
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
$grd_forced/btn_cancel.button_connect('pressed', Callable(self, 'on_btn_cancel_pressed').bind($grd_forced/btn_cancel))
|
||||
|
||||
|
||||
func on_btn_cancel_pressed(btn):
|
||||
signaller.emit_signal('interfer_off_all')
|
||||
await get_tree().create_timer(0.1).timeout
|
||||
btn.pressed = false
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta):
|
||||
pass
|
||||
@@ -21,28 +21,22 @@ extends Panel
|
||||
@export var window_0_id: int ## Идетификатор окна. Присваивается godot от 0 до количества созданных окон
|
||||
|
||||
|
||||
var drag_button: MouseButton ## Кнопка мыши нажатая при перетаскивании
|
||||
var drag_fsm: DragFSM = DragFSM.IDLE ## Текущее состояние перетаскивания
|
||||
var drag_pos_begin: Vector2 ## Точка начала перетаскивания
|
||||
var max_zoom: int ## Максимальный уровень детализации
|
||||
var min_zoom: int ## Минимальный уровень детализации
|
||||
var shift_pressed: bool ## Кнопка SHIFT нажата
|
||||
var strob_band_begin: float ## Ширина строба в момент начала перетаскивания
|
||||
var strob_dir_begin: float ## Направление антенны в момент начала перетаскивания
|
||||
var strob_width_begin: float ## Ширина строба по углу в момент начала перетаскивания
|
||||
var drag_button: MouseButton ## Кнопка мыши нажатая при перетаскивании
|
||||
var drag_fsm: DragFSM = DragFSM.IDLE ## Текущее состояние перетаскивания
|
||||
var btn_select: BtnSel = BtnSel.THREAT ## Текущее состояние кнопки выбора цели
|
||||
var drag_pos_begin: Vector2 ## Точка начала перетаскивания
|
||||
var max_zoom: int ## Максимальный уровень детализации
|
||||
var min_zoom: int ## Минимальный уровень детализации
|
||||
var shift_pressed: bool ## Кнопка SHIFT нажата
|
||||
var strob_band_begin: float ## Ширина строба в момент начала перетаскивания
|
||||
var strob_dir_begin: float ## Направление антенны в момент начала перетаскивания
|
||||
var strob_width_begin: float ## Ширина строба по углу в момент начала перетаскивания
|
||||
|
||||
|
||||
signal drag_begin ## Вызывается в момент начала перетаскивания
|
||||
signal drag_continue ## Вызывается во время продолжения перетаскивания
|
||||
signal drag_end ## Вызывается в момент завершения перетаскивания
|
||||
|
||||
## Границы секторов блоков ФС по пеленгу
|
||||
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_band_rto: Dictionary = {
|
||||
0: [200.0, 250.0],
|
||||
@@ -63,6 +57,12 @@ const fs_band_rls: Dictionary = {
|
||||
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: [400.0, 1200.0],
|
||||
@@ -73,12 +73,10 @@ const fs_freq: Dictionary = {
|
||||
5: [4400.0, 5200.0],
|
||||
6: [5200.0, 6000.0] }
|
||||
|
||||
|
||||
var fs_band = fs_band_rto # Текущий режим блоков ФС по частоте
|
||||
var fs_default_colors: Array # Цвета по умолчанию для блоков ФС
|
||||
var fs_colors: Array # Текущие цвета блоков ФС
|
||||
var fs_selected: Array # Массив выбранных секторов
|
||||
var th_selected: bool = false # Флаг, того, что выбрана цель.
|
||||
var fs_selected: Dictionary # Словарь выбранных секторов
|
||||
var fs_active: Dictionary # Словарь секторов назначенных на подавление
|
||||
|
||||
## Состояние перетаскивания
|
||||
enum DragFSM {
|
||||
@@ -87,6 +85,12 @@ enum DragFSM {
|
||||
OFF ## Выключено
|
||||
}
|
||||
|
||||
## Состояние перетаскивания
|
||||
enum BtnSel {
|
||||
SECTOR, ## В процессе
|
||||
THREAT, ## Не активно, ожидание
|
||||
FS ## Выключено
|
||||
}
|
||||
|
||||
## Обработчик сигнала изменения списка целей
|
||||
func on_threats_resized(threats: Dictionary): $count_all_pad/count_all.text = '%02d' % threats.size()
|
||||
@@ -139,11 +143,13 @@ func _ready():
|
||||
threats.connect('threat_update', Callable(self, 'on_threat_update'))
|
||||
signaller.connect('zoom_complete', Callable(self, '_on_zoom_complete'))
|
||||
signaller.connect('rto_threat_sel', Callable(self, 'on_rto_threat_sel').bind(nodes))
|
||||
signaller.connect('bip_pressed', Callable(self, 'on_bip_pressed').bind(nodes))
|
||||
signaller.connect('rto_threat_unsel', Callable(self, 'on_rto_threat_unsel').bind(nodes))
|
||||
signaller.connect('threat_selected', Callable(self, 'on_threat_selected').bind(nodes))
|
||||
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, 'interfer_off_all'))
|
||||
signaller.connect('interfer_off_all', Callable(self, 'on_interfer_off_all'))
|
||||
signaller.connect('fs_selected', Callable(self, 'on_fs_selected'))
|
||||
interfer.connect('interfer_update', Callable(self, 'on_interfer_new'))
|
||||
|
||||
|
||||
@@ -174,25 +180,28 @@ func on_threat_update(th):
|
||||
## Обработчик выбора помехи для цели
|
||||
func on_interfer_new(ecm):
|
||||
if interfer.thrs.has(ecm.ispp):
|
||||
var th_id = interfer.thrs[ecm.ispp]
|
||||
var bip = get_node('%d' % th_id)
|
||||
if ecm.krp != interfer.INTERFER_OFF:
|
||||
bip.set_track_visible(true)
|
||||
if ecm.svk == 1:
|
||||
bip.set_ecm_visible(true)
|
||||
else: bip.set_ecm_visible(false)
|
||||
else:
|
||||
bip.set_ecm_visible(false)
|
||||
bip.set_track_visible(false)
|
||||
if interfer.thrs.has(ecm.ispp):
|
||||
var th_id = interfer.thrs[ecm.ispp]
|
||||
var bip = get_node('%d' % th_id)
|
||||
if ecm.krp != interfer.INTERFER_OFF:
|
||||
bip.set_track_visible(true)
|
||||
if ecm.svk == 1:
|
||||
bip.set_ecm_visible(true)
|
||||
else: bip.set_ecm_visible(false)
|
||||
else:
|
||||
bip.set_ecm_visible(false)
|
||||
bip.set_track_visible(false)
|
||||
set_fs_color(ecm)
|
||||
|
||||
|
||||
## Обработчик выключения всех помех
|
||||
func interfer_off_all():
|
||||
func on_interfer_off_all():
|
||||
var bips: Array = get_children().filter(func(item): return item.name.is_valid_int())
|
||||
for bip in bips:
|
||||
bip.set_ecm_visible(false)
|
||||
bip.set_track_visible(false)
|
||||
fs_active.clear()
|
||||
update_fs_colors()
|
||||
|
||||
|
||||
## Обработчик сигнала обнаружения цели
|
||||
@@ -210,31 +219,33 @@ func on_threat_lost(th) -> void:
|
||||
bip.free()
|
||||
|
||||
|
||||
## обработчик нажатия на цель на экране
|
||||
func on_bip_pressed(th_id, _ecm_btns):
|
||||
if btn_select == BtnSel.THREAT:
|
||||
signaller.emit_signal('rto_threat_sel', th_id)
|
||||
|
||||
|
||||
## Обработчик выбора РТО цели
|
||||
func on_rto_threat_sel(th_id, ecm_btns):
|
||||
var bips: Array = get_children().filter(func(item): return item.name.is_valid_int())
|
||||
for item in bips:
|
||||
if th_id == item.name.to_int():
|
||||
item.set_sel_visible(true)
|
||||
unsel_fs_all(false)
|
||||
else:
|
||||
item.set_sel_visible(false)
|
||||
for btn in ecm_btns:
|
||||
btn.set_disabled(false)
|
||||
th_selected = true
|
||||
await get_tree().create_timer(0.2).timeout
|
||||
th_selected = false
|
||||
|
||||
|
||||
## Обработчик снятия выбора РТО цели
|
||||
func on_rto_threat_unsel(th_id, ecm_btns):
|
||||
func on_rto_threat_unsel(th_id, _ecm_btns):
|
||||
var bips: Array = get_children().filter(func(item): return item.name.is_valid_int())
|
||||
for item in bips:
|
||||
if th_id == item.name.to_int():
|
||||
item.set_sel_visible(false)
|
||||
break
|
||||
for btn in ecm_btns:
|
||||
btn.set_pressed(false)
|
||||
btn.set_disabled(true)
|
||||
set_ecm_btns_state(true)
|
||||
|
||||
|
||||
## Обработчик нажатия кнопки "Строб". Управляет отображением строба
|
||||
@@ -246,13 +257,20 @@ func on_button_strobe_pressed() -> void:
|
||||
## Поведение радиокнопок в группе. Управляет состоянием кнопок выбора целей
|
||||
func on_button_select(btn_this, btn_others) -> void:
|
||||
for btn_other in btn_others: btn_other.set_pressed(btn_this == btn_other)
|
||||
btn_select = btn_this.get_meta('state')
|
||||
on_button_strobe_pressed()
|
||||
signaller.emit_signal('rto_threat_unsel_all')
|
||||
unsel_fs_all(true)
|
||||
set_ecm_btns_state(true)
|
||||
|
||||
|
||||
## Поведение радиокнопок в группе. Управляет состоянием кнопок в радиогруппе
|
||||
func on_button_pressed(btn_this, btn_others) -> void:
|
||||
var fs_arr: Array = []
|
||||
for btn_other in btn_others: btn_other.set_pressed(btn_this == btn_other)
|
||||
signaller.emit_signal('interfer_init', btn_this)
|
||||
for key in fs_selected.keys():
|
||||
fs_arr.append(get_fs_param(key))
|
||||
signaller.emit_signal('interfer_init', btn_this, fs_arr)
|
||||
|
||||
|
||||
## Управляет состоянием кнопок в радиогруппе при выборе помехи
|
||||
@@ -329,7 +347,7 @@ func _input(event) -> void:
|
||||
drag_fsm = DragFSM.DRAG
|
||||
emit_signal('drag_begin', event)
|
||||
else:
|
||||
if (event.button_index == MOUSE_BUTTON_LEFT) and (not $btns_select/btn_strob.pressed):
|
||||
if btn_select == BtnSel.FS:
|
||||
sel_fs_sector(event)
|
||||
drag_fsm = DragFSM.IDLE
|
||||
emit_signal('drag_end', event)
|
||||
@@ -351,40 +369,7 @@ func _on_zoom_complete(zoom: int) -> void:
|
||||
var prefix = $btn_zoom.get_meta('prefix')
|
||||
$btn_zoom/lbl.text = '%s %d' % [prefix, zoom]
|
||||
$btn_zoom.set_meta('zoom', zoom)
|
||||
|
||||
|
||||
# Обработчик нажатия по сектору формирователя сигналов
|
||||
func sel_fs_sector(event):
|
||||
var center: Vector2 = $tilemap.position
|
||||
var center_offset: Vector2 = ProjectSettings.get_setting('application/interfer/center_offset', Vector2i(0, 25))
|
||||
var angle: float = event.position.angle_to_point(center + center_offset) * 180/PI - 45.0
|
||||
if angle < 0:
|
||||
angle +=360
|
||||
var distance: float = event.position.distance_to(center + center_offset)
|
||||
var sector: int
|
||||
var band: int
|
||||
var has_band: bool = false
|
||||
for sec in fs_sectors.values():
|
||||
if angle >= sec[0] and angle <= sec[1]:
|
||||
sector = 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)
|
||||
has_band = true
|
||||
if not has_band:
|
||||
return
|
||||
var fs_index = band * 4 + sector
|
||||
var select_color: Vector3 = ProjectSettings.get_setting('application/interfer/select_color', Vector3(1.0, 1.0, 1.0))
|
||||
if not th_selected:
|
||||
if len(fs_selected) > 0:
|
||||
for fs_sector in fs_selected:
|
||||
fs_colors[fs_sector[0]] = fs_sector[1]
|
||||
fs_selected.clear()
|
||||
fs_selected.append([fs_index, fs_colors[fs_index]])
|
||||
fs_colors[fs_index] = select_color
|
||||
$canvas.set_band_colors(fs_colors)
|
||||
signaller.emit_signal('rto_threat_unsel_all')
|
||||
|
||||
|
||||
## Закрашивание по умолчанию блоков ФС цветами из настроек
|
||||
func set_def_colors():
|
||||
@@ -397,12 +382,92 @@ func set_def_colors():
|
||||
fs_default_colors.append(col_arr[int(col)])
|
||||
col = not col
|
||||
col = not col
|
||||
fs_colors = fs_default_colors
|
||||
$canvas.set_band_colors(fs_default_colors)
|
||||
|
||||
|
||||
# Обработчик нажатия по сектору формирователя сигналов
|
||||
func sel_fs_sector(event):
|
||||
if (event.button_index == MOUSE_BUTTON_LEFT) or (event.button_index == MOUSE_BUTTON_RIGHT):
|
||||
var center: Vector2 = $tilemap.position
|
||||
var center_offset: Vector2 = ProjectSettings.get_setting('application/interfer/center_offset', Vector2i(0, 25))
|
||||
var angle: float = event.position.angle_to_point(center + center_offset) * 180/PI - 45.0
|
||||
if angle < 0:
|
||||
angle +=360
|
||||
var distance: float = event.position.distance_to(center + center_offset)
|
||||
var sector: int
|
||||
var band: int
|
||||
var has_band: bool = false
|
||||
for sec in fs_sectors.values():
|
||||
if angle >= sec[0] and angle <= sec[1]:
|
||||
sector = 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)
|
||||
has_band = true
|
||||
if not has_band:
|
||||
return
|
||||
var fs_index = band * 4 + sector
|
||||
if event.button_index == MOUSE_BUTTON_LEFT:
|
||||
fs_selected[fs_index] = null
|
||||
else:
|
||||
fs_selected.erase(fs_index)
|
||||
update_fs_colors()
|
||||
signaller.emit_signal('rto_threat_unsel_all')
|
||||
var btn_state = len(fs_selected) == 0
|
||||
set_ecm_btns_state(btn_state)
|
||||
|
||||
|
||||
func set_fs_color(ecm):
|
||||
var fs_index = get_fs_index(ecm)
|
||||
if ecm.krp != interfer.INTERFER_OFF:
|
||||
fs_active[fs_index] = null
|
||||
else:
|
||||
fs_active.erase(fs_index)
|
||||
update_fs_colors()
|
||||
|
||||
|
||||
func update_fs_colors():
|
||||
var fs_colors = fs_default_colors.duplicate()
|
||||
var color_ecm: Vector3 = ProjectSettings.get_setting('application/interfer/interfer_color', Vector3(0.58, 0.47, 0.51))
|
||||
var color_select: Vector3 = ProjectSettings.get_setting('application/interfer/select_color', Vector3(1.0, 1.0, 1.0))
|
||||
for key in fs_active.keys():
|
||||
fs_colors[key] = color_ecm
|
||||
for key in fs_selected.keys():
|
||||
fs_colors[key] = color_select
|
||||
$canvas.set_band_colors(fs_colors)
|
||||
|
||||
|
||||
func unsel_fs_all(need_btns_off: bool):
|
||||
fs_selected.clear()
|
||||
update_fs_colors()
|
||||
if need_btns_off:
|
||||
set_ecm_btns_state(true)
|
||||
|
||||
|
||||
func set_ecm_btns_state(value: bool):
|
||||
var btns: Array = get_tree().get_nodes_in_group('группа-режим-помехи')
|
||||
for btn in btns:
|
||||
btn.set_pressed(false)
|
||||
btn.set_disabled(value)
|
||||
|
||||
|
||||
func get_fs_param(index: int) -> Array:
|
||||
var freq = (fs_freq[index / 4][0] + fs_freq[index / 4][1])/2
|
||||
var sector = (fs_sectors[index % 4][0] + 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]
|
||||
return [sector, freq, width, index]
|
||||
|
||||
|
||||
func on_fs_selected(ecm):
|
||||
var fs_index = get_fs_index(ecm)
|
||||
fs_selected.clear()
|
||||
fs_selected[fs_index] = null
|
||||
update_fs_colors()
|
||||
|
||||
|
||||
func get_fs_index(ecm):
|
||||
var sector: int
|
||||
var band: int
|
||||
var angle: float = ecm.kni + 45.0
|
||||
@@ -416,10 +481,4 @@ func set_fs_color(ecm):
|
||||
if ecm.params['freq'] >= diap[0] and ecm.params['freq'] <= diap[1]:
|
||||
band = fs_freq.find_key(diap)
|
||||
var fs_index = band * 4 + sector
|
||||
var fs_is_selected: bool = false
|
||||
for item in fs_selected:
|
||||
if fs_index == item[0]:
|
||||
fs_is_selected = true
|
||||
if not fs_is_selected:
|
||||
fs_colors[fs_index] = color_ecm
|
||||
$canvas.set_band_colors(fs_colors)
|
||||
return fs_index
|
||||
|
||||
@@ -137,6 +137,7 @@ size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой"
|
||||
text = "Строб"
|
||||
metadata/state = 0
|
||||
|
||||
[node name="btn_threats" parent="btns_select" instance=ExtResource("8_k0iv2")]
|
||||
layout_mode = 2
|
||||
@@ -144,6 +145,8 @@ size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой"
|
||||
text = "Цель"
|
||||
pressed = true
|
||||
metadata/state = 1
|
||||
|
||||
[node name="btn_fs_sector" parent="btns_select" instance=ExtResource("8_k0iv2")]
|
||||
layout_mode = 2
|
||||
@@ -151,6 +154,7 @@ size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой"
|
||||
text = "Сектор"
|
||||
metadata/state = 2
|
||||
|
||||
[connection signal="drag_begin" from="." to="." method="_on_drag_begin"]
|
||||
[connection signal="drag_continue" from="." to="." method="_on_drag_continue"]
|
||||
|
||||
@@ -2,7 +2,6 @@ extends Node
|
||||
|
||||
## Представление помехи
|
||||
|
||||
|
||||
## Режимы помехи
|
||||
const ITERFER_MODE = {
|
||||
'off': ['Откл', ['freq', 'width']],
|
||||
@@ -20,26 +19,29 @@ const ITERFER_MODE = {
|
||||
'k1': ['K1', ['freq', 'width', 'dur', 'period']],
|
||||
'ozp1': ['ОЗП-1', ['freq', 'width']] }
|
||||
|
||||
const TYPE_TH = ['th','fs']
|
||||
const ID_INTERFERS_LEN = 63 ## Размер пула номеров целей
|
||||
const INTERFER_OFF = 'off'
|
||||
const STATE_TSMT = 5 ## Значение svk для цели, когда ответ ещё не получен
|
||||
var msg_ss: int = 0 ## счётчик сообщений
|
||||
var id_array: Array ## Массив id воздействий
|
||||
var thrs: Dictionary ## Словарь воздействия для целей, ключ - id воздействия
|
||||
var fs: Dictionary ## Словарь воздействий для секторов, ключ - id воздействия
|
||||
|
||||
|
||||
## Сеанс помехи
|
||||
class Interfer:
|
||||
var ss: int = 0 ## Счётчик сообщений.
|
||||
var ispp: int = 0 ## Индекс сеанса.
|
||||
var svk: = 0 ## Состояние сеанса. Ответ КАПСРПБ. Возможные значения в [param ITERFER_STATE].
|
||||
var krp: String = '' ## Тип помехи. Возможные значения в [param INTERFER_MODE].
|
||||
var powp: float = 0.0 ## Мощность излучения выраженная в процентах.
|
||||
var kni: = 0.0 ## Курсовой угол направления излучения.
|
||||
var params: = {} ## Параметры помехи.
|
||||
var get_params: Array[String] ## Запрос массива параметров (список запрошенных параметров).
|
||||
var retss: int ## Значение счётчика сообщения в котором был произведён запрос массива параметров.
|
||||
var tick_tx: int ## Тик время обновления цели, мс.
|
||||
var ss: int = 0 ## Счётчик сообщений.
|
||||
var ispp: int = 0 ## Индекс сеанса.
|
||||
var svk: = 0 ## Состояние сеанса. Ответ КАПСРПБ. Возможные значения в [param ITERFER_STATE].
|
||||
var krp: String = '' ## Тип помехи. Возможные значения в [param INTERFER_MODE].
|
||||
var powp: float = 0.0 ## Мощность излучения выраженная в процентах.
|
||||
var kni: = 0.0 ## Курсовой угол направления излучения.
|
||||
var params: = {} ## Параметры помехи.
|
||||
var get_params: Array[String] ## Запрос массива параметров (список запрошенных параметров).
|
||||
var retss: int ## Значение счётчика сообщения в котором был произведён запрос массива параметров.
|
||||
var tick_tx: int ## Тик время обновления цели, мс.
|
||||
var type_th: String = '' ## Тип объекта по которой поставлена помеха
|
||||
|
||||
func _to_string() -> String:
|
||||
return 'номер: %d название: %s частота: %0.1f МГц пеленг: %0.1f гр.' % [ispp, ITERFER_MODE[krp][0], params['freq'], kni]
|
||||
@@ -138,46 +140,60 @@ func on_data_capsrpb_received(unit: capsrpb.CapsRpb, ecms: Dictionary):
|
||||
|
||||
|
||||
## Вызыватся, когда пользователь выбрал помеху и выбраны цели
|
||||
func on_interfer_create(btn, sel_threats, unit, ecms):
|
||||
func on_interfer_create(btn, sel_threats, fs_arr, _unit, ecms):
|
||||
for item in sel_threats:
|
||||
var ispp: int = 0
|
||||
var interfer_name: String = btn.get_meta('rfi_name')
|
||||
var param: Dictionary = {}
|
||||
var kni: float = item.aoa
|
||||
var id = item.id
|
||||
param['freq'] = item.freq
|
||||
param['width'] = item.width
|
||||
if interfer_name == 'k1':
|
||||
param['dur'] = 1.0 # Необходимо добавить параметры управления
|
||||
param['period'] = 1.0 # Необходимо добавить параметры управления
|
||||
var key = thrs.find_key(item.id)
|
||||
if key != null:
|
||||
ispp = key
|
||||
else:
|
||||
if interfer_name == 'off':
|
||||
return
|
||||
ispp = pop_id()
|
||||
if ispp == 0: return
|
||||
msg_ss += 1
|
||||
var ecm: Interfer
|
||||
if ecms.has(ispp):
|
||||
ecm = ecms[ispp]
|
||||
else:
|
||||
ecm = Interfer.new()
|
||||
ecm.ispp = ispp
|
||||
ecms[ispp] = ecm
|
||||
ecm.svk = STATE_TSMT # Подготовка к передаче сообщения
|
||||
ecm.ss = msg_ss
|
||||
ecm.kni = kni
|
||||
ecm.krp = interfer_name
|
||||
ecm.params = param
|
||||
ecm.powp = 100.0 # Необходимо добавить управление мощностью
|
||||
thrs[ispp] = item.id
|
||||
signaller.emit_signal('interfer_new', ecm)
|
||||
interfer_create(btn, ecms, param, kni, id, thrs, item, TYPE_TH[0])
|
||||
|
||||
for item in fs_arr:
|
||||
var param: Dictionary = {}
|
||||
var kni: float = item[0]
|
||||
var id = item[3]
|
||||
param['freq'] = item[1]
|
||||
param['width'] = item[2]
|
||||
interfer_create(btn, ecms, param, kni, id, fs, item, TYPE_TH[1])
|
||||
|
||||
|
||||
func interfer_create(btn, ecms, param, kni, id, dict, item, type_th):
|
||||
var ispp: int = 0
|
||||
var interfer_name: String = btn.get_meta('rfi_name')
|
||||
if interfer_name == 'k1':
|
||||
param['dur'] = 1.0 # Необходимо добавить параметры управления
|
||||
param['period'] = 1.0 # Необходимо добавить параметры управления
|
||||
var key = dict.find_key(id)
|
||||
if key != null:
|
||||
ispp = key
|
||||
else:
|
||||
if interfer_name == 'off':
|
||||
signaller.emit_signal('interfer_off', ecm, ecms, thrs)
|
||||
push_id(ecm.ispp)
|
||||
thrs.erase(ispp)
|
||||
ecm.tick_tx = Time.get_ticks_msec()
|
||||
return
|
||||
ispp = pop_id()
|
||||
if ispp == 0: return
|
||||
dict[ispp] = id
|
||||
msg_ss += 1
|
||||
var ecm: Interfer
|
||||
if ecms.has(ispp):
|
||||
ecm = ecms[ispp]
|
||||
else:
|
||||
ecm = Interfer.new()
|
||||
ecm.ispp = ispp
|
||||
ecms[ispp] = ecm
|
||||
ecm.svk = STATE_TSMT # Подготовка к передаче сообщения
|
||||
ecm.ss = msg_ss
|
||||
ecm.kni = kni
|
||||
ecm.krp = interfer_name
|
||||
ecm.params = param
|
||||
ecm.powp = 100.0 # Необходимо добавить управление мощностью
|
||||
ecm.type_th = type_th
|
||||
signaller.emit_signal('interfer_new', ecm)
|
||||
if interfer_name == 'off':
|
||||
signaller.emit_signal('interfer_off', ecm, ecms, thrs)
|
||||
push_id(ecm.ispp)
|
||||
thrs.erase(ispp)
|
||||
ecm.tick_tx = Time.get_ticks_msec()
|
||||
|
||||
|
||||
func send_ecm(ecm, unit):
|
||||
|
||||
@@ -27,6 +27,11 @@ signal full_screen(id: int)
|
||||
signal rto_threat_sel (th_id: int)
|
||||
|
||||
|
||||
## Вызывается, когда пользователь нажимает на значёк цели
|
||||
## [param th_id] - Отметка цели на экране
|
||||
signal bip_pressed (th_id: int)
|
||||
|
||||
|
||||
## Вызывается, когда пользователь снимает выделение с цели
|
||||
## [param th_id] - Отметка цели на экране
|
||||
signal rto_threat_unsel (th_id: int)
|
||||
@@ -38,13 +43,13 @@ signal rto_threat_unsel_all ()
|
||||
|
||||
## Вызывается, когда пользователь выбирает помеху
|
||||
## [param btn] - Нажатая кнопка помехи.
|
||||
signal interfer_init (btn: PanelContainer)
|
||||
signal interfer_init (btn: PanelContainer, fs_arr: Array)
|
||||
|
||||
|
||||
## Вызывается, когда выбраны цели для постановки помех
|
||||
## [param btn] - Нажатая кнопка помехи.[br]
|
||||
## [param sel_threats] - Cписок целей.
|
||||
signal interfer_create (btn: PanelContainer, sel_threats: Array)
|
||||
signal interfer_create (btn: PanelContainer, sel_threats: Array, fs_arr: Array)
|
||||
|
||||
|
||||
## Вызывается, когда создалась новая помеха
|
||||
@@ -67,6 +72,11 @@ signal interfer_off_all ()
|
||||
signal interfer_selected (ecm: interfer.Interfer)
|
||||
|
||||
|
||||
## Вызывается, когда отключается выбираем помеху по сектору в таблице
|
||||
## [param ecm] - Выбранная помеха
|
||||
signal fs_selected(ecm: interfer.Interfer)
|
||||
|
||||
|
||||
## Вызывается при запросе изменения уровня детализации карты
|
||||
## [param zoom] - Вновь установленный уровень детализации
|
||||
signal zoom_changed(zoom: int)
|
||||
|
||||
@@ -93,13 +93,13 @@ func on_threat_selected(th, threats):
|
||||
|
||||
|
||||
## Формирует список выбранных целей для включения помехи
|
||||
func on_interfer_init(btn, threats):
|
||||
func on_interfer_init(btn, fs_arr, threats):
|
||||
var sel_threats: Array = []
|
||||
for threat in threats.values():
|
||||
if threat.selected:
|
||||
sel_threats.append(threat)
|
||||
if len(sel_threats):
|
||||
signaller.emit_signal('interfer_create', btn, sel_threats)
|
||||
if len(sel_threats) or (len(fs_arr)):
|
||||
signaller.emit_signal('interfer_create', btn, sel_threats, fs_arr)
|
||||
|
||||
|
||||
## Производит приём целей
|
||||
|
||||
Reference in New Issue
Block a user