Merge remote-tracking branch 'sasha/master'
# Conflicts: # scripts/interfer.gd
This commit is contained in:
@@ -25,7 +25,8 @@ const SOURCE_INTERFER = ['th','fs','cu']
|
||||
const ID_INTERFERS_LEN = 63 ## Размер пула номеров целей.
|
||||
const INTERFER_OFF = 'off'
|
||||
const POW_DEFAULT: float = 100.0
|
||||
var msg_num: int = 0 ## Счётчик сообщений.
|
||||
var msg6_num: int = 0 ## Счётчик сообщений "тип 6"
|
||||
var msg8_num: int = 0 ## Счётчик сообщений "тип 8"
|
||||
var id_array: Array ## Массив id воздействий.
|
||||
var thrs: Dictionary ## Словарь воздействия для целей, ключ - id воздействия.
|
||||
var fs: Dictionary ## Словарь воздействий для секторов, ключ - id воздействия.
|
||||
@@ -93,11 +94,11 @@ signal interfer_resized(ecms: Dictionary) ## Вызывается пр
|
||||
func on_get_interfers(unit, ecms) -> void: unit.pack_interfers(cu, ecms)
|
||||
|
||||
|
||||
## Автмат выключен
|
||||
## Автомат выключен
|
||||
func on_manual_control() -> void: auto_enabled = false
|
||||
|
||||
|
||||
## Автмат отключен
|
||||
## Автомат отключен
|
||||
func on_full_auto() -> void: auto_enabled = true
|
||||
|
||||
|
||||
@@ -106,27 +107,46 @@ func _ready() -> void:
|
||||
for i in ID_INTERFERS_LEN: # Заполняет массив ID целей
|
||||
id_array.append(i + 1)
|
||||
var unit_key = settings.get_unit_key('уарэп-капсрпб')
|
||||
var unit = network.units[unit_key]
|
||||
var unit_caps = network.units[unit_key]
|
||||
var unit_5p28_key = settings.get_unit_key('уарэп-5п28')
|
||||
var unit_5p28 = network.units_tcp[unit_5p28_key]
|
||||
var timer_check_state: = Timer.new()
|
||||
add_child(timer_check_state)
|
||||
var resend_timeout = ProjectSettings.get_setting('application/interfer/resend_timeout', 1000.0)
|
||||
timer_check_state.connect('timeout', Callable(self, 'on_timer_check_state').bind(unit, ecms, resend_timeout))
|
||||
timer_check_state.connect('timeout', Callable(self, 'on_timer_check_state').bind(unit_caps, ecms, resend_timeout))
|
||||
timer_check_state.start(resend_timeout / 1000.0)
|
||||
unit.connect('data_received', Callable(self, 'on_data_capsrpb_received').bind(ecms))
|
||||
unit_caps.connect('data_received', Callable(self, 'on_data_capsrpb_received').bind(ecms))
|
||||
unit_5p28.connect('get_interfers', Callable(self, 'on_get_interfers').bind(unit_5p28, ecms))
|
||||
signaller.connect('interfer_create', Callable(self, 'on_interfer_create').bind(unit, ecms))
|
||||
signaller.connect('interfer_create', Callable(self, 'on_interfer_create').bind(unit_caps, ecms))
|
||||
signaller.connect('interfer_rcv', Callable(self, 'on_interfer_rcv').bind(unit_5p28, ecms))
|
||||
signaller.connect('interfer_new', Callable(self, 'send_ecm').bind(unit))
|
||||
signaller.connect('interfer_off_all', Callable(self, 'on_interfer_off_all').bind(unit, ecms))
|
||||
signaller.connect('th_aoa_update', Callable(self, 'on_th_aoa_update').bind(ecms, unit))
|
||||
signaller.connect('interfer_new', Callable(self, 'send_ecm').bind(unit_caps))
|
||||
signaller.connect('interfer_off_all', Callable(self, 'on_interfer_off_all').bind(unit_caps, ecms))
|
||||
signaller.connect('th_aoa_update', Callable(self, 'on_th_aoa_update').bind(ecms, unit_caps))
|
||||
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_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))
|
||||
threats.connect('threat_lost', Callable(self, 'on_threats_lost').bind(ecms, unit_caps))
|
||||
var key = settings.get_unit_key('навигация')
|
||||
var unit_nav = network.units[key]
|
||||
unit_nav.connect('data_received', on_nav_data_received.bind(unit_caps))
|
||||
|
||||
|
||||
func on_nav_data_received(coords: Dictionary, unit_caps):
|
||||
var data_to_json = {
|
||||
'ts': 8,
|
||||
'ss': msg8_num,
|
||||
'roll': coords.get('bk', 0),
|
||||
'trim': coords.get('kk', 0),
|
||||
'long': coords.get('longitude', 0),
|
||||
'lat': coords.get('latitude', 0),
|
||||
'course': coords.get('k', 0),
|
||||
'speed': coords.get('speed', 0) }
|
||||
var json_data = JSON.stringify(data_to_json).to_utf8_buffer()
|
||||
unit_caps.tx_stack.append(json_data)
|
||||
msg8_num += 1
|
||||
msg8_num %= 0xffffffff
|
||||
|
||||
|
||||
## Проверяет состояние отправки пакета и если не доставлен, повторяет отправку.
|
||||
@@ -231,7 +251,7 @@ func on_interfer_rcv(interfer_params: Array, unit0, ecms) -> void:
|
||||
param['width'] = interfer_params[5]
|
||||
if (param['width'] < settings.WIDTH_MIN) and (param['width'] > settings.WIDTH_MAX):
|
||||
err = true
|
||||
var interfer_name: String
|
||||
var interfer_name: = ''
|
||||
for key in ITERFER_MODE:
|
||||
if ITERFER_MODE[key][2] == mode:
|
||||
interfer_name = key
|
||||
@@ -274,10 +294,7 @@ func interfer_create(u, interfer_name, ecms, param, kni, id, dict, source_interf
|
||||
ecm.powp = power
|
||||
ecm.source_interfer = source_interfer
|
||||
ecm.modulation = emit_enable
|
||||
if param.has('um'):
|
||||
ecm.um = param['um']
|
||||
else:
|
||||
ecm.um = 15.0 # Значение по умолчанию
|
||||
ecm.um = param.get('um', 15.0) # Значение по умолчанию
|
||||
signaller.emit_signal('interfer_new', ecm)
|
||||
if interfer_name == 'off':
|
||||
signaller.emit_signal('interfer_off', ecm, ecms, thrs)
|
||||
@@ -287,8 +304,8 @@ func interfer_create(u, interfer_name, ecms, param, kni, id, dict, source_interf
|
||||
|
||||
|
||||
func send_ecm(ecm, unit0) -> void:
|
||||
msg_num += 1
|
||||
var json_data = ecm.get_msg6_data(msg_num)
|
||||
msg6_num += 1
|
||||
var json_data = ecm.get_msg6_data(msg6_num)
|
||||
unit0.tx_stack.append(json_data)
|
||||
|
||||
|
||||
|
||||
@@ -297,15 +297,15 @@ func get_tcp_data(sock: SocketTCP, peer, len_rx):
|
||||
func _process(_delta: float) -> void:
|
||||
tick = Time.get_ticks_msec()
|
||||
RenderingServer.global_shader_parameter_set('tick_curent', tick)
|
||||
for addr in units_udp:
|
||||
var unit_udp = units_udp[addr]
|
||||
for key in units_udp:
|
||||
var unit_udp = units_udp[key]
|
||||
if Error.OK == unit_udp.process(tick):
|
||||
var sock = send_sockets[unit_udp.name]
|
||||
var dst_port = dst_ports[addr]
|
||||
var dst_port = dst_ports[key]
|
||||
var tx_data = unit_udp.tx_data.slice(0, unit_udp.tx_len)
|
||||
sock.send_to([addr[0], dst_port], tx_data)
|
||||
for addr in units_udprx:
|
||||
var unit_udprx = units_udprx[addr]
|
||||
sock.send_to([key[0], dst_port], tx_data)
|
||||
for key in units_udprx:
|
||||
var unit_udprx = units_udprx[key]
|
||||
unit_udprx.process(tick)
|
||||
for key in units_serial:
|
||||
var unit_serial = units_serial[key]
|
||||
|
||||
@@ -30,13 +30,13 @@ const FS_SECTORS: Dictionary = {
|
||||
1: [270.0, 360.0] }
|
||||
|
||||
const FS_FREQ: Dictionary = {
|
||||
0: [390.0, 800.0, 433.0],
|
||||
1: [800.0, 1065.0, 860.0],
|
||||
0: [390.0, 510.0, 450.0],
|
||||
1: [800.0, 1065.0, 932.0],
|
||||
2: [1065.0, 1210.0, 1137.0],
|
||||
3: [1150.0, 1490.0, 1227.0],
|
||||
3: [1150.0, 1280.0, 1215.0],
|
||||
4: [1490.0, 2000.0, 1575.0],
|
||||
5: [2000.0, 3500.0, 2450.0],
|
||||
6: [3500.0, 6000.0, 5800.0] }
|
||||
5: [2000.0, 3500.0, 2750.0],
|
||||
6: [3500.0, 6000.0, 4750.0] }
|
||||
|
||||
## Названия приборов ПРД
|
||||
const PRD_NAMES: Array = [
|
||||
|
||||
@@ -35,6 +35,34 @@ func allways(val: bool, msg: String = '<не указано>'):
|
||||
get_tree().quit(Error.FAILED)
|
||||
|
||||
|
||||
## Преобразует путь в виде целой строки в массив отдельных элементов пути.[br]
|
||||
## [param solid] - Входная строка содержащая путь, которая имеет следующий примерный вид:[br]
|
||||
## [code]SelfTest[1].DevList[2]['CurrentValue'][/code][br]
|
||||
## [param paths] - Массив содержащий отдельные элементы пути.[br]
|
||||
## [param tokens] - Разделители используемые во входной строке для разделения элементов пути.[br]
|
||||
func map_solid_to_array(solid: String, paths: Array, tokens: Array = ['[', ']', '.']) -> void:
|
||||
paths.clear()
|
||||
var i_chs = []
|
||||
for sep in tokens:
|
||||
var i = 0
|
||||
while i != -1:
|
||||
i = solid.find(sep, i + 1)
|
||||
i_chs.append(i)
|
||||
i_chs.pop_back()
|
||||
i_chs.sort()
|
||||
|
||||
var i0 = 0
|
||||
for i1 in i_chs:
|
||||
var ss: = [String()]
|
||||
get_string_slice(solid, ss, i0, i1)
|
||||
if ss[0].is_valid_int():
|
||||
paths.append(ss[0].to_int())
|
||||
else:
|
||||
if ss[0]:
|
||||
paths.append(ss[0])
|
||||
i0 = i1 + 1
|
||||
|
||||
|
||||
func check_index(obj, index) -> bool:
|
||||
if obj is Dictionary:
|
||||
if obj.has(index):
|
||||
|
||||
Reference in New Issue
Block a user