Merge remote-tracking branch 'MaD_CaT/master'

This commit is contained in:
sasha80
2025-04-03 15:25:57 +03:00
2 changed files with 43 additions and 13 deletions

View File

@@ -1,5 +1,7 @@
class_name Diagram extends Sprite2D
const NUM_OF_RANGE = 7
const NUM_OF_DIRECTIONS = 4
var fs_default_colors: Array ## Цвета по умолчанию для блоков ФС.
func _ready() -> void:
@@ -36,8 +38,8 @@ func set_def_colors():
var color1: Vector3 = ProjectSettings.get_setting('application/interfer/default_color1', Vector3(0.39, 0.44, 0.50))
var col_arr: Array = [color0, color1]
var col = false
for i in 7:
for j in 4:
for i in NUM_OF_RANGE:
for j in NUM_OF_DIRECTIONS:
fs_default_colors.append(col_arr[int(col)])
col = not col
col = not col

View File

@@ -41,15 +41,43 @@ class TCP5P28 extends unit.Unit:
const CMD_TYPE_TH: int = 2
const CMD_TYPE_IN: int = 3
const PR_STATE: Dictionary = {
'уарэп-эмс': [1, 1],
'уарэп-яу07-1н': [9, 8],
'уарэп-яу07-1в': [5, 4],
'уарэп-яу07-1к': [13, 12],
'уарэп-яу07-2н': [10, 9],
'уарэп-яу07-2в': [6, 5],
'уарэп-яу07-2к': [14, 13],
'уарэп-яу07-3н': [11, 10],
'уарэп-яу07-3в': [7, 6],
'уарэп-яу07-3к': [15, 14],
'уарэп-яу07-4н': [12, 11],
'уарэп-яу07-4в': [8, 7],
'уарэп-яу07-4к': [16, 15], }
signal get_threats(unit: TCP5P28) ## Сигнал запрос целей.
signal get_interfers(unit: TCP5P28) ## Запрос состояния выполнения целеуказания.
var tx_stack: Array ## Массив пакетов для отправки.
var ext_cu = false
var uarep_state: int = 1 ## Флаги состояния прибора, 0 бит, состояние ПО
var uarep_line: int = 3 ## Состояние линии связи с прибором
var ext_cu: bool = false
func _init(nm) -> void:
super._init(nm)
ext_cu = ProjectSettings.get_setting('application/config/external_cu', false)
ProjectSettings.connect('settings_changed', on_setting_changed)
init_state()
func init_state():
for key in PR_STATE.keys():
var unit_key = settings.get_unit_key(key)
var unit_pribor = network.units[unit_key]
unit_pribor.connect('line_changed', Callable(self, 'pribor_line_changed').bind(key))
func pribor_line_changed(u, key):
uarep_state = tools.set_bit(uarep_state, PR_STATE[key][0], u.online)
uarep_line = tools.set_bit(uarep_state, PR_STATE[key][1], u.online)
func _to_string() -> String: return String('5П-28: "%s" %s ' % [self.name, ['отключен', 'на связи'][int(online)]])
@@ -79,7 +107,7 @@ class TCP5P28 extends unit.Unit:
else:
return Error.ERR_UNAVAILABLE
func pack_threats(ths):
func pack_threats(ths: Dictionary):
var data = PackedByteArray()
var data_len = 4 + len(ths) * 80 # длинна блока данных в байтах
var tick0 = Time.get_ticks_msec()
@@ -92,17 +120,17 @@ class TCP5P28 extends unit.Unit:
data_to_send.append_array(data)
tx_stack.append(data_to_send)
func pack_interfers(interfers, ecms):
func pack_interfers(interfers: Dictionary, ecms: Dictionary):
var data = PackedByteArray()
var data_len = 12 # длинна блока данных в байтах
data.resize(data_len)
data.encode_u16(0, 0) # Код ошибки
data.encode_u16(2, len(interfers)) # Количество целей
data.encode_u32(4, 0) # Состояние УА-РЕП
data.encode_u32(8, 0) # Состояние линий связи
data.encode_u32(4, uarep_state) # Состояние УА-РЕП
data.encode_u32(8, uarep_line) # Состояние линий связи
var cu_data: PackedByteArray = []
cu_data.resize(4)
for id in interfers.values():
var cu_data: PackedByteArray = []
cu_data.resize(4)
var cu = ecms[id]
cu_data.encode_u16(0, cu.ispp)
var state: int
@@ -117,7 +145,7 @@ class TCP5P28 extends unit.Unit:
data_to_send.append_array(data)
tx_stack.append(data_to_send)
func create_header(data_len):
func create_header(data_len: int):
var head_data = PackedByteArray()
head_data.resize(8) # Размер заголовка
head_data.encode_u16(0, 0) # Код ошибки
@@ -126,7 +154,7 @@ class TCP5P28 extends unit.Unit:
head_data.encode_u32(4, data_len) # Длинна пакета данных
return head_data
func get_threats_data(th, tick0):
func get_threats_data(th: threats.Threat, tick0: int):
var th_data = PackedByteArray()
th_data.resize(80) # Количество байт в массиве
th_data.encode_u64(0, tick0)
@@ -161,13 +189,13 @@ class TCP5P28 extends unit.Unit:
th_data.encode_s32(76, int(th.lat * c1))
return th_data
func to_cp866(proto: String, th_data):
func to_cp866(proto: String, th_data: PackedByteArray):
var cp866_proto: PackedByteArray = proto.to_ascii_buffer()
cp866_proto.resize(36)
for i in len(cp866_proto):
th_data[28 + i] = cp866_proto[i]
func set_interfer(data):
func set_interfer(data: PackedByteArray):
var mode = data.decode_u8(9)
var id = data.decode_u16(10)
var aoa = float(data.decode_u16(12)) / 10