Рефактор
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"]
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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():
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user