diff --git a/scenes/pribor-rtr/pribor-rtr.gd b/scenes/pribor-rtr/pribor-rtr.gd index 7176d19..3972995 100644 --- a/scenes/pribor-rtr/pribor-rtr.gd +++ b/scenes/pribor-rtr/pribor-rtr.gd @@ -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): diff --git a/scenes/tilemap/tilemap.gd b/scenes/tilemap/tilemap.gd index f6fb34a..5eee485 100644 --- a/scenes/tilemap/tilemap.gd +++ b/scenes/tilemap/tilemap.gd @@ -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 diff --git a/scenes/работа/работа.tscn b/scenes/работа/работа.tscn index 1e972e4..196c974 100644 --- a/scenes/работа/работа.tscn +++ b/scenes/работа/работа.tscn @@ -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"] diff --git a/scripts/capsrpb.gd b/scripts/capsrpb.gd index 79343b5..31f2ec1 100644 --- a/scripts/capsrpb.gd +++ b/scripts/capsrpb.gd @@ -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): diff --git a/scripts/interfer.gd b/scripts/interfer.gd index e249c7f..3bd6031 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -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(): diff --git a/scripts/navigation.gd b/scripts/navigation.gd index 41b323c..a46a2a5 100644 --- a/scripts/navigation.gd +++ b/scripts/navigation.gd @@ -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