Рефактор

This commit is contained in:
sasha80
2025-04-30 09:12:53 +03:00
parent 008f7efc54
commit 4b5ff5023d
6 changed files with 41 additions and 43 deletions

View File

@@ -2,7 +2,7 @@ class_name pribor_rtr extends 'res://scenes/контроль/прибор.gd'
@export var prefix_path: String = ''
static var json_parser: JSON = JSON.new()
static var json_conv: JSON = JSON.new()
## Преобразует путь в виде целой строки в массив отдельных элементов пути.[br]
## [param solid] - Входная строка содержащая путь, которая имеет следующий примерный вид:[br]
@@ -43,9 +43,9 @@ func _on_request_rtr_request_completed(result, _response_code, headers, body: Pa
push_error('не удаётся получить строку utf8 из данных (%s)' % headers)
return
var rc = json_parser.parse(json_str)
var rc = json_conv.parse(json_str)
if rc != Error.OK:
var err = json_parser.get_error_message()
var err = json_conv.get_error_message()
push_error('разбор json прерван - \"%s\" (%s)' % [err, headers])
return
@@ -55,7 +55,7 @@ func _on_request_rtr_request_completed(result, _response_code, headers, body: Pa
map_solid_to_array(prefix_path, ppp)
var ret_val = [null, false, 0]
var pp_copy = pp.duplicate(true)
tools.get_value_by_path(json_parser.data, pp, ret_val)
tools.get_value_by_path(json_conv.data, pp, ret_val)
if not ret_val[1]:
push_error('путь %s не найден (%s)' % [pp_copy, ret_val[2]])
return
@@ -68,22 +68,22 @@ func _on_request_rtr_request_completed(result, _response_code, headers, body: Pa
var bort_rtr = bb[ret_val[0]]
for child in bort_rtr.get_node('konverter/grid').get_children():
map_value_to_item(json_parser.data, child, 'value0')
map_value_to_item(json_parser.data, child, 'value1')
map_value_to_item(json_parser.data, child, 'value2')
map_error_codes_to_item(json_parser.data, child, 'state', 0)
map_value_to_item(json_conv.data, child, 'value0')
map_value_to_item(json_conv.data, child, 'value1')
map_value_to_item(json_conv.data, child, 'value2')
map_error_codes_to_item(json_conv.data, child, 'state', 0)
for child in bort_rtr.get_node('antenna1/grid').get_children():
map_value_to_item(json_parser.data, child, 'value0')
map_value_to_item(json_parser.data, child, 'value1')
map_error_codes_to_item(json_parser.data, child, 'state', 0)
map_value_to_item(json_conv.data, child, 'value0')
map_value_to_item(json_conv.data, child, 'value1')
map_error_codes_to_item(json_conv.data, child, 'state', 0)
for child in bort_rtr.get_node('antenna2/grid').get_children():
map_value_to_item(json_parser.data, child, 'value0')
map_value_to_item(json_parser.data, child, 'value1')
map_error_codes_to_item(json_parser.data, child, 'state', 0)
map_value_to_item(json_conv.data, child, 'value0')
map_value_to_item(json_conv.data, child, 'value1')
map_error_codes_to_item(json_conv.data, child, 'state', 0)
for child in bort_rtr.get_children():
map_value_to_item(json_parser.data, child, 'value0')
map_value_to_item(json_parser.data, child, 'value1')
map_error_codes_to_item(json_parser.data, child, 'state', 0)
map_value_to_item(json_conv.data, child, 'value0')
map_value_to_item(json_conv.data, child, 'value1')
map_error_codes_to_item(json_conv.data, child, 'state', 0)
func map_value_to_item(data, item, value_name: StringName):

View File

@@ -532,34 +532,28 @@ func get_tile(x: int, y: int, z: int, create: bool = true) -> Tile:
x = -x - 1
x = int(n - 1) - (x % int(n))
# out of bounds
if z < 0 or y < 0 or y >= n:
return null
# get tile index
var idx = xyz_to_idx(x, y, z)
var tile = null
# retrieve from current requests...
var req = get_node_or_null(NodePath(str(idx)))
if req:
tile = req.get_meta('tile')
tile.t = now
return tile
# retrieve from cache
tile = _cache.get(idx)
if tile:
tile.t = now
return tile
# retrieve from queue
tile = _queue.get(idx)
if tile:
tile.t = now
return tile
# create a new tile - add it to queue
var queue_size: = _queue.size()
if create and (not $canvas/player.is_playing()):
tile = Tile.new(idx, x, y, z)
@@ -609,12 +603,13 @@ class Tile:
func haversine_m(lat1, lon1, lat2, lon2):
# Радиус Земли в метрах
var R: = 6372795.0
const R: = 6372795.0
# Преобразование градусов в радианы
var rlat1: = deg_to_rad(lat1)
var rlon1: = deg_to_rad(lon1)
var rlat2: = deg_to_rad(lat2)
var rlon2: = deg_to_rad(lon2)
# вычисления длины большого круга
var cl1: = cos(rlat1)
var cl2: = cos(rlat2)
var sl1: = sin(rlat1)
@@ -622,8 +617,7 @@ func haversine_m(lat1, lon1, lat2, lon2):
var delta: = rlon2 - rlon1
var cdelta: = cos(delta)
var sdelta: = sin(delta)
# вычисления длины большого круга
var y: = sqrt(pow(cl2 * sdelta, 2) + pow(cl1 * sl2 - sl1 * cl2 * cdelta, 2))
var y: = sqrt(pow(cl2 * sdelta, 2.0) + pow(cl1 * sl2 - sl1 * cl2 * cdelta, 2.0))
var x: = sl1 * sl2 + cl1 * cl2 * cdelta
var ad: = atan2(y, x)
var dist: = ad * R

View File

@@ -197,6 +197,7 @@ offset_left = 115.0
offset_top = 1085.0
offset_right = 257.0
offset_bottom = 1112.0
action_mode = 0
text = "Автоматически"
[node name="line0" type="Line2D" parent="chk_auto"]

View File

@@ -15,7 +15,7 @@ class CapsRpb extends unit.Unit:
var tick: = 0 ## Тик время последнего обновления, мс.
var tx_stack: Array ## Массив пакетов для отправки.
func _to_string() -> String: return String('капсрпб: "%s" %s ' % [self.name, ['отключен', 'на связи'][int(online)]])
func _to_string() -> String: return String('CapsRpb(\"%s\")' % self.name)
func _init(nm): self.name = nm
func parse(data: PackedByteArray, now_tick: int):

View File

@@ -29,7 +29,7 @@ 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_enabled: bool = false ## Режим автомата
var emit_enable: bool = true ## Разрешить излучение
## Сеанс помехи.
@@ -88,6 +88,18 @@ signal interfer_update(ecm: Interfer) ## Вызывается пр
signal interfer_resized(ecms: Dictionary) ## Вызывается при изменении количества сеансов помех.
## Отправляет словарь помех в юнит, для запаковки и отправки в 5П28.
func on_get_interfers(unit, ecms): unit.pack_interfers(cu, ecms)
## Автмат выключен
func on_manual_control(): auto_enabled = false
## Автмат отключен
func on_full_auto(): auto_enabled = true
func _ready():
var ecms: Dictionary = {} ## Словарь помех.
for i in ID_INTERFERS_LEN: # Заполняет массив ID целей
@@ -125,14 +137,6 @@ func on_timer_check_state(unit, ecms, resend_timeout):
ecm.tick_tx = tick
func on_manual_control():
auto_status = 0
func on_full_auto():
auto_status = 3
func on_th_aoa_update(threats: Dictionary, ecms: Dictionary, unit):
for thr in threats.values():
var th_id = thr.id
@@ -145,10 +149,10 @@ func on_th_aoa_update(threats: Dictionary, ecms: Dictionary, unit):
signaller.emit_signal('fs_update_color', ecms)
prd.update_fs_state(ecms)
if auto_status == 0:
if not auto_enabled:
return
if auto_status == 3:
if auto_enabled:
for thr in threats.values():
thr.auto_selected = true
signaller.emit_signal('interfer_init', 'lchm1', [])
@@ -312,14 +316,11 @@ func pop_id() -> int:
return id
func push_id(id : int):
func push_id(id: int):
id_array.append(id)
id_array.sort()
## Отправляет словарь помех в юнит, для запаковки и отправки в 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():

View File

@@ -8,7 +8,8 @@ const pow_2_30: = pow(2.0, 30.0)
## Источник данных навигации
class NaviSource extends unit.Unit:
var cmd_tick_rx: int = 0
var data: = {}
var data: = {} ## Принятые данные
var source_addr: = [] ## Адрес отправителя
const akng_mode = {0:'тестовый', 1:'основной', 2:'резервный', 3:'аварийный'}
func _to_string() -> String:
return String('NaviSource: %s %s' % [self.name, 'на связи' if online else 'отключен'])
@@ -18,6 +19,7 @@ class NaviSource extends unit.Unit:
if online and ((tick - cmd_tick_rx) > ONLINE_TIMEOUT):
online = false
emit_signal('line_changed', self)
source_addr.clear()
func parse(rx_data: PackedByteArray, tick: int) -> bool:
cmd_tick_rx = tick