В процессе
This commit is contained in:
@@ -13,7 +13,7 @@ func get_strob_visible() -> bool: return $строб.visible
|
||||
func get_strob_width() -> float: return $строб.material.get('shader_parameter/width')
|
||||
func get_strob_band() -> float: return $строб.material.get('shader_parameter/band') * 125.0
|
||||
func get_strob_radius(val: float): return $строб.material.set('shader_parameter/radius', sv(val))
|
||||
func get_radius_max() -> float: return $строб.scale.x / 2.0
|
||||
func get_radius_min() -> float: return 200.0
|
||||
func get_radius_max() -> float: return $строб.scale.x / 3.3
|
||||
func get_radius_min() -> float: return 212.0
|
||||
|
||||
func sv(val: float) -> float: return val / ($строб.scale.x / 2.0) * 0.125
|
||||
|
||||
@@ -18,8 +18,7 @@ func init_table():
|
||||
$scrl_threats/tbl_threats.connect('row_pressed', Callable(self, 'on_row_pressed'))
|
||||
|
||||
|
||||
func on_row_pressed(i_row: int):
|
||||
$scrl_threats/tbl_threats.set_row_selected(i_row, true)
|
||||
func on_row_pressed(i_row: int): $scrl_threats/tbl_threats.set_row_selected(i_row, true)
|
||||
|
||||
|
||||
func _on_btn_add_thr_pressed() -> void:
|
||||
@@ -31,5 +30,4 @@ func _on_btn_add_thr_pressed() -> void:
|
||||
func _on_btn_del_thr_pressed() -> void:
|
||||
var i_rows: = Array()
|
||||
$scrl_threats/tbl_threats.get_selected_rows(i_rows)
|
||||
for i in i_rows:
|
||||
$scrl_threats/tbl_threats.remove_row(i)
|
||||
for i in i_rows: $scrl_threats/tbl_threats.remove_row(i)
|
||||
|
||||
@@ -1,15 +1,3 @@
|
||||
extends TabContainer
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
pass
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(_delta: float) -> void:
|
||||
pass
|
||||
|
||||
|
||||
func _enter_tree() -> void:
|
||||
REPNetwork.logger_page = $журнал
|
||||
func _enter_tree() -> void: REPNetwork.logger_page = $журнал
|
||||
|
||||
@@ -185,6 +185,3 @@ func on_item_selected(item_num, node):
|
||||
func on_mouse_entered(btn, i, j):
|
||||
$marker_in.position.y = $tbl_in.position.y + btn.position.y + btn.size.y / 2
|
||||
$marker_out.position.y = $tbl_out.position.y + (btn.size.y + 4) * i + btn.size.y / 2
|
||||
|
||||
func _process(delta):
|
||||
pass
|
||||
|
||||
@@ -73,7 +73,7 @@ func _ready():
|
||||
Threats.connect('threat_lost', Callable(self, 'on_threats_changed'))
|
||||
|
||||
|
||||
func pos_calc(freq, aoa, pos0: Vector2, r0, r1, f0: float, df: float):
|
||||
func pos_calc(freq: float, aoa: float, pos0: Vector2, r0: float, r1: float, f0: float, df: float):
|
||||
var r = ((freq - f0) / df) * r1 + r0
|
||||
var aoa_rad = Tools.radians(aoa) - PI / 2.0
|
||||
var x = cos(aoa_rad) * r + pos0.x
|
||||
@@ -104,7 +104,6 @@ func on_threat_new(threats: Dictionary, th: Object):
|
||||
add_child(bip)
|
||||
|
||||
|
||||
|
||||
func on_threat_lost(threats: Dictionary, th: Object):
|
||||
var bip = get_node('%d' % th.id)
|
||||
remove_child(bip)
|
||||
|
||||
@@ -18,10 +18,7 @@ class CapsRpb:
|
||||
var tick_rx: = 0.0
|
||||
|
||||
func _to_string() -> String: return String('капсрпб: "%s" %s ' % [self.name, ['отключен', 'на связи'][int(online)]])
|
||||
|
||||
func _init(nm):
|
||||
self.name = nm
|
||||
|
||||
func _init(nm): self.name = nm
|
||||
|
||||
func parse(data):
|
||||
tick_rx = tick
|
||||
@@ -36,7 +33,6 @@ class CapsRpb:
|
||||
var msg = json_conv.get_error_message()
|
||||
emit_signal('parse_error', self, msg)
|
||||
|
||||
|
||||
func process(delta: float):
|
||||
tick += delta
|
||||
if online and ((tick - tick_rx) > ONLINE_TIMEOUT):
|
||||
|
||||
@@ -24,7 +24,7 @@ extends Node
|
||||
|
||||
|
||||
@export var ThreatParams = {
|
||||
'time_lost': [5000, 'Время после последнего обновления в мс, через которое цель считается потерянной'],
|
||||
'time_lost': [5.0, 'Время после последнего обновления в с, через которое цель считается потерянной'],
|
||||
'freq_min': [200.0, 'Нижняя рабочая частота, МГЦ'],
|
||||
'freq_max': [6000.0, 'Нижняя рабочая частота, МГЦ'] }
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
extends Node
|
||||
|
||||
@onready var timer_check_lost: = Timer.new()
|
||||
|
||||
class Threat:
|
||||
var alt: float # Текущая высота, метры.
|
||||
@@ -23,10 +22,9 @@ class Threat:
|
||||
var tmod: String # Тип модуляции.
|
||||
var utime: Dictionary # Время крайнего обновления.
|
||||
var width: float # Ширина занимаемого диапазона частот, МГц.
|
||||
var id: int # Идентификатор цели
|
||||
var id: int # Идентификатор цел.
|
||||
|
||||
func _init(): Tools.get_members_names(self).any(func(vn): fflags[vn] = false)
|
||||
|
||||
func _to_string() -> String: return 'номер:%d пеленг:%0.1f частота:%0.1f МГц' % [id, aoa, freq]
|
||||
|
||||
func set_from_dic(dic_vals: Dictionary):
|
||||
@@ -50,16 +48,15 @@ func _ready() -> void:
|
||||
var unit_key = REPSettings.get_unit_key('уарэп-капсрпб-отп')
|
||||
var unit = REPNetwork.units[unit_key]
|
||||
unit.connect('data_received', Callable(self, 'on_data_capsrpb_received'))
|
||||
var timer_check_lost: = Timer.new()
|
||||
add_child(timer_check_lost)
|
||||
timer_check_lost.connect('timeout', Callable(self, 'on_timer_check_lost'))
|
||||
timer_check_lost.start(REPSettings.ThreatParams.time_lost[0] / 2000.0)
|
||||
timer_check_lost.connect('timeout', Callable(self, 'on_timer_check_lost').bind(unit, REPSettings.ThreatParams.time_lost[0]))
|
||||
timer_check_lost.start(REPSettings.ThreatParams.time_lost[0] / 2.0)
|
||||
|
||||
|
||||
func on_timer_check_lost():
|
||||
var tick = Time.get_ticks_msec()
|
||||
for id in threats.keys():
|
||||
var th = threats[id]
|
||||
if (tick - th.atick) >= REPSettings.ThreatParams.time_lost[0]:
|
||||
func on_timer_check_lost(unit, time_lost: int):
|
||||
for th in threats.values():
|
||||
if (unit.tick - th.atick) >= time_lost:
|
||||
threats.erase(th.id)
|
||||
call_deferred('emit_signal', 'threat_lost', threats, th)
|
||||
|
||||
@@ -74,12 +71,12 @@ func on_data_capsrpb_received(unit: capsrpb.CapsRpb):
|
||||
if id in threats:
|
||||
var th = threats[id]
|
||||
th.set_from_dic(dic_th)
|
||||
th.atick = Time.get_ticks_msec()
|
||||
th.atick = unit.tick
|
||||
call_deferred('emit_signal', 'threat_update', threats, th)
|
||||
else:
|
||||
var th = Threat.new()
|
||||
th.set_from_dic(dic_th)
|
||||
th.atick = Time.get_ticks_msec()
|
||||
th.atick = unit.tick
|
||||
th.fflags['atick'] = true
|
||||
threats[id] = th
|
||||
call_deferred('emit_signal', 'threat_new', threats, th)
|
||||
|
||||
@@ -2,6 +2,8 @@ extends Node
|
||||
|
||||
|
||||
func radians(val: float): return (val * PI) / 180.0
|
||||
func ibytes_to_word(buf: PackedByteArray, i: int) -> int: return buf[i] + (buf[i + 1] * 256)
|
||||
func hypot(x: float, y: float) -> float: return sqrt(x * x + y * y)
|
||||
|
||||
|
||||
func get_members_names(obj: Object) -> Array:
|
||||
@@ -24,13 +26,7 @@ func map_dec_to_rad(pos0: Vector2, pos: Vector2) -> Vector2:
|
||||
var x1: float = pos.x - pos0.x
|
||||
var y1: float = pos.y - pos0.y
|
||||
var ang: float = (atan2(y1, x1) * 180.0) / PI
|
||||
ang += 360.0 * float(ang < 0.0)
|
||||
var radius: float = hypot(x1, y1)
|
||||
return Vector2(ang, radius)
|
||||
|
||||
|
||||
func hypot(x: float, y: float) -> float:
|
||||
return sqrt(x * x + y * y)
|
||||
return Vector2(ang + 360.0 * float(ang < 0.0), hypot(x1, y1))
|
||||
|
||||
|
||||
func is_overlap(x1, x2, y1, y2):
|
||||
@@ -38,10 +34,6 @@ func is_overlap(x1, x2, y1, y2):
|
||||
return max(x1, y1) <= min(x2, y2)
|
||||
|
||||
|
||||
func ibytes_to_word(buf: PackedByteArray, i: int) -> int:
|
||||
return buf[i] + (buf[i + 1] * 256)
|
||||
|
||||
|
||||
func map_range(val: float, a0: float, a1: float, b0: float, b1: float) -> float:
|
||||
""" Переводит значение val из диапазона a0...a1 в диапазон b0...b1 """
|
||||
return (((val - a0) * (b1 - b0)) / (a1 - a0)) + b0
|
||||
@@ -52,10 +44,6 @@ func type_is_num(val) -> bool:
|
||||
return (typeof(val) == TYPE_INT) or (typeof(val) == typeof(0.0))
|
||||
|
||||
|
||||
func sort_ascending_0(a, b) -> bool:
|
||||
return a[0] < b[0]
|
||||
|
||||
|
||||
func is_point_in_polygon(pos: Vector2, p: PackedVector2Array) -> bool:
|
||||
var j: int = len(p) - 1
|
||||
var odd_nodes: int = 0
|
||||
|
||||
@@ -79,12 +79,12 @@ class YaU07:
|
||||
|
||||
|
||||
func send_isa(cmd_code: int, ports_data: Array) -> bool:
|
||||
if (cmd_state == CmdState.WAIT) or (cmd_state == CmdState.SEND):
|
||||
if (cmd_state == CmdState.WAIT) \
|
||||
or (cmd_state == CmdState.SEND) \
|
||||
or (cmd_state == CmdState.UNCK):
|
||||
return false
|
||||
if not ((cmd_code == CmdCode.READ_ISA) or (cmd_code == CmdCode.WRITE_ISA)):
|
||||
return false
|
||||
if cmd_state == CmdState.UNCK:
|
||||
return false
|
||||
|
||||
cmd_num_tx = (cmd_num_rx + 1) % 0xffff
|
||||
|
||||
|
||||
@@ -2,43 +2,43 @@ extends Node
|
||||
|
||||
|
||||
class InDev:
|
||||
var id: int # Идентификатор индекс устройства
|
||||
var dev_name: String # Имя подключаемого комплекса
|
||||
var connector: String # Номер разъёма в приборе
|
||||
var delay: float # Задержка фронта импульса
|
||||
var offset: float # Смещение фронта импульса
|
||||
var state: int # Состояние входа
|
||||
var freq: int # Предполагаемая частота на которой работает комплекс
|
||||
var ports_data: Dictionary # Словарь состояния портов устройства
|
||||
var tbl_row_id: int # Индекс устройства в таблице входов
|
||||
var out_dots: Array # Список выходных устройств в порядке, как в таблице и точки матрицы
|
||||
|
||||
func _init(dev_id : int, params : Array, row_id : int):
|
||||
id = dev_id
|
||||
dev_name = String(params[0])
|
||||
connector = String(params[1])
|
||||
delay = float(params[2])
|
||||
offset = float(params[3])
|
||||
tbl_row_id = row_id
|
||||
|
||||
|
||||
var id: int # Идентификатор индекс устройства
|
||||
var dev_name: String # Имя подключаемого комплекса
|
||||
var connector: String # Номер разъёма в приборе
|
||||
var delay: float # Задержка фронта импульса
|
||||
var offset: float # Смещение фронта импульса
|
||||
var state: int # Состояние входа
|
||||
var freq: int # Предполагаемая частота на которой работает комплекс
|
||||
var ports_data: Dictionary # Словарь состояния портов устройства
|
||||
var tbl_row_id: int # Индекс устройства в таблице входов
|
||||
var out_dots: Array # Список выходных устройств в порядке, как в таблице и точки матрицы
|
||||
|
||||
func _init(dev_id : int, params : Array, row_id : int):
|
||||
id = dev_id
|
||||
dev_name = String(params[0])
|
||||
connector = String(params[1])
|
||||
delay = float(params[2])
|
||||
offset = float(params[3])
|
||||
tbl_row_id = row_id
|
||||
|
||||
|
||||
class OutDev:
|
||||
var id: int # Идентификатор индекс устройства
|
||||
var dev_name: String # Имя подключаемого комплекса
|
||||
var connector: String # Номер разъёма в приборе
|
||||
var delay: float # Задержка фронта импульса
|
||||
var offset: float # Смещение фронта импульса
|
||||
var state: int # Состояние входа
|
||||
var freq: int # Предполагаемая частота на которой работает комплекс
|
||||
var ports_data: Dictionary # Словарь состояния портов устройства
|
||||
var tbl_row_id: int # Индекс устройства в таблице выходов
|
||||
var mode: int # Режим работы выхода
|
||||
|
||||
func _init(dev_id : int, params : Array, row_id : int):
|
||||
id = dev_id
|
||||
dev_name = String(params[0])
|
||||
connector = String(params[1])
|
||||
delay = float(params[2])
|
||||
offset = float(params[3])
|
||||
tbl_row_id = row_id
|
||||
mode = 0
|
||||
var id: int # Идентификатор индекс устройства
|
||||
var dev_name: String # Имя подключаемого комплекса
|
||||
var connector: String # Номер разъёма в приборе
|
||||
var delay: float # Задержка фронта импульса
|
||||
var offset: float # Смещение фронта импульса
|
||||
var state: int # Состояние входа
|
||||
var freq: int # Предполагаемая частота на которой работает комплекс
|
||||
var ports_data: Dictionary # Словарь состояния портов устройства
|
||||
var tbl_row_id: int # Индекс устройства в таблице выходов
|
||||
var mode: int # Режим работы выхода
|
||||
|
||||
func _init(dev_id : int, params : Array, row_id : int):
|
||||
id = dev_id
|
||||
dev_name = String(params[0])
|
||||
connector = String(params[1])
|
||||
delay = float(params[2])
|
||||
offset = float(params[3])
|
||||
tbl_row_id = row_id
|
||||
mode = 0
|
||||
|
||||
@@ -3,7 +3,7 @@ shader_type canvas_item;
|
||||
/* Закрашенная окружность */
|
||||
|
||||
uniform vec4 color: source_color = vec4(1, 1, 1, 1);
|
||||
const float ds = 0.005; /* Относительное расстояние на котором выполняется сглаживание краёв */
|
||||
const float ds = 0.01; /* Относительное расстояние на котором выполняется сглаживание краёв */
|
||||
const vec2 center = vec2(0.125, 0.125); /* Центр должен быть в (0.5, 0.5), но это не так */
|
||||
const float radius = 0.125 - ds * 2.0; /* Радиус должен быть 0.5, но это не так */
|
||||
|
||||
|
||||
140
table/table.gd
140
table/table.gd
@@ -36,6 +36,10 @@ var scroll: Control
|
||||
var scroll_adj: = Vector2(0, 0)
|
||||
|
||||
|
||||
func get_node_scene(): return node_type_file
|
||||
func _assert_meta(i_col: int, i_row: int, pname: String, node): assert(node.has_meta(pname), 'ошибка: нет мета-свойства \"%s\" у ячейки колонка:%d ряд:%d' % [pname, i_col, i_row])
|
||||
|
||||
|
||||
func pin_header(scrl: ScrollContainer, prnt):
|
||||
scrl.remove_child(header)
|
||||
prnt.add_child(header)
|
||||
@@ -95,10 +99,6 @@ func load_node_scene(file_name: String):
|
||||
ScnNode = load(file_name)
|
||||
|
||||
|
||||
func get_node_scene():
|
||||
return node_type_file
|
||||
|
||||
|
||||
func _ready():
|
||||
ScnSelector = load(selector_type_file)
|
||||
ScnNode = load(node_type_file)
|
||||
@@ -113,10 +113,6 @@ func align_to_left_bottompos(hdr: Control, gap: = Vector2(0, 0)):
|
||||
position.y = hdr.position.y + hdr.size.y + gap.y
|
||||
|
||||
|
||||
func _assert_meta(i_col: int, i_row: int, pname: String, node):
|
||||
assert(node.has_meta(pname), 'ошибка: нет мета-свойства \"%s\" у ячейки (%s): колонка:%d ряд:%d' % [pname, typeof(node), i_col, i_row])
|
||||
|
||||
|
||||
func set_node_meta(i_col: int, i_row: int, pname: String, val) -> void:
|
||||
var key: = get_node_key(NODE_KEY_FORMAT, i_col, i_row)
|
||||
var node = nodes[key]
|
||||
@@ -287,22 +283,24 @@ func add_row(row_types: Array) -> void:
|
||||
set_columns(row_types.size())
|
||||
else:
|
||||
assert(columns == row_types.size(), 'ошибка: %s количество колонок установлено ранее - %d, но требуется %d' % [self, columns, row_types.size()])
|
||||
var rows_count: int = get_rows_count()
|
||||
assert(rows_count < MAX_INDEX, 'ошибка: слишком много рядов, больше %d' % (MAX_INDEX + 1))
|
||||
var i_row: int = get_rows_count()
|
||||
assert(i_row < MAX_INDEX, 'ошибка: слишком много рядов, больше %d' % (MAX_INDEX + 1))
|
||||
for i_col in columns:
|
||||
var node = row_types[i_col].instantiate()
|
||||
var head = nodes[HEAD_KEY_FORMAT % [0, i_col]]
|
||||
node.custom_minimum_size.x = head.custom_minimum_size.x
|
||||
node.size.x = head.size.x
|
||||
var key: String = NODE_KEY_FORMAT % [rows_count, i_col]
|
||||
node.name = key
|
||||
var node_key: String = NODE_KEY_FORMAT % [i_row, i_col]
|
||||
node.name = node_key
|
||||
add_child(node)
|
||||
nodes[key] = node
|
||||
node.connect('focus_entered', Callable(self, '_on_focus_entered').bind(key))
|
||||
nodes[node_key] = node
|
||||
var conn = Callable(self, '_on_focus_entered').bind(node)
|
||||
node.connect('focus_entered', conn)
|
||||
set_node_meta(i_col, i_row, 'callable_focus_entered', conn)
|
||||
|
||||
|
||||
func _on_focus_entered(key):
|
||||
var indexes = get_key_indexes(key)
|
||||
func _on_focus_entered(node):
|
||||
var indexes = get_key_indexes(node.name)
|
||||
emit_signal('row_pressed', indexes[1])
|
||||
|
||||
|
||||
@@ -351,71 +349,87 @@ func get_node_user_data(i_col: int, i_row: int) -> Object:
|
||||
|
||||
func remove_row(i_row: int):
|
||||
var sel_key: String = ROW_SELECTOR_KEY_FORMAT % [i_row, 0]
|
||||
|
||||
if nodes.has(sel_key):
|
||||
var selector = nodes[sel_key]
|
||||
var node_key: String = get_node_key(NODE_KEY_FORMAT, 0, i_row)
|
||||
var node = nodes[node_key]
|
||||
node.remove_child(selector)
|
||||
scroll.get_parent().remove_child(selector)
|
||||
selector.queue_free()
|
||||
nodes.erase(sel_key)
|
||||
for i_col in columns:
|
||||
var node_key: String = get_node_key(NODE_KEY_FORMAT, i_col, i_row)
|
||||
var conn_key: String = CONNECTED_KEY_FORMAT % [i_row, i_col]
|
||||
var data_key: String = DATA_KEY_FORMAT % [i_row, i_col]
|
||||
var node = nodes[node_key]
|
||||
nodes.erase(node_key)
|
||||
remove_child(node)
|
||||
node.queue_free()
|
||||
|
||||
for i_col in columns:
|
||||
|
||||
var node_key: String = NODE_KEY_FORMAT % [i_row, i_col]
|
||||
var node = nodes[node_key]
|
||||
|
||||
var conn_key: String = CONNECTED_KEY_FORMAT % [i_row, i_col]
|
||||
var conn = get_node_meta(i_col, i_row, 'callable_focus_entered')
|
||||
node.disconnect('focus_entered', conn)
|
||||
|
||||
var data_key: String = DATA_KEY_FORMAT % [i_row, i_col]
|
||||
if nodes.has(data_key):
|
||||
nodes.erase(data_key)
|
||||
|
||||
if nodes.has(conn_key):
|
||||
var conn = nodes[conn_key]
|
||||
var callback = conn[0]
|
||||
var dest_node = conn[1]
|
||||
node.disconnect('pressed', Callable(dest_node, callback))
|
||||
conn = nodes[conn_key]
|
||||
node.disconnect('pressed', conn)
|
||||
nodes.erase(conn_key)
|
||||
|
||||
remove_child(node)
|
||||
nodes.erase(node_key)
|
||||
node.queue_free()
|
||||
|
||||
var swaps: = []
|
||||
var c0 = nodes.size()
|
||||
rehash(swaps)
|
||||
var c1 = nodes.size()
|
||||
assert(c0 == c1)
|
||||
|
||||
|
||||
func next_index(indexes: Vector2i):
|
||||
indexes.x += 1
|
||||
if indexes.x == columns:
|
||||
indexes.x = 0
|
||||
indexes.y += 1
|
||||
|
||||
|
||||
func swap_nodes(nodes_copy, swaps, node_key_format, i0, i1) -> bool:
|
||||
var key0: = String(node_key_format % [i0.y, i0.x])
|
||||
if not nodes.has(key0):
|
||||
return false
|
||||
var key1: = String(node_key_format % [i1.y, i0.x])
|
||||
nodes_copy[key1] = nodes[key0]
|
||||
nodes_copy[key1].name = key1
|
||||
swaps.append([key0, key1])
|
||||
return true
|
||||
|
||||
|
||||
func rehash(swaps: Array):
|
||||
# TODO: Не работает
|
||||
""" Переназначает ключи в соответствии с размерами таблицы.
|
||||
После вызова swaps содержит массив пар [<прежний ключ>, <текущий ключ>] """
|
||||
assert(not swaps.size(), 'ошибка: swaps не пустой')
|
||||
var nodes_copy: = {}
|
||||
var i_col: = 0
|
||||
var i_row: = 0
|
||||
for key0 in nodes:
|
||||
if NODE_PREFIX in key0:
|
||||
var node_key1: String = NODE_KEY_FORMAT % [i_row, i_col]
|
||||
nodes_copy[node_key1] = nodes[key0]
|
||||
swaps.append([key0, node_key1])
|
||||
var i_node: = Vector2i()
|
||||
var i_hdr: = Vector2i()
|
||||
var i_slct: = Vector2i()
|
||||
var i_conn: = Vector2i()
|
||||
var i_data: = Vector2i()
|
||||
var db = []
|
||||
var nodes_copy = {}
|
||||
print_debug('до: %s' % str(nodes.keys()))
|
||||
for node in nodes.values():
|
||||
var iv = get_key_indexes(node.name)
|
||||
var i0 := Vector2i(iv[0], iv[1])
|
||||
db.append(iv)
|
||||
if swap_nodes(nodes_copy, swaps, HEAD_KEY_FORMAT, i0, i_hdr): next_index(i_hdr)
|
||||
if swap_nodes(nodes_copy, swaps, NODE_KEY_FORMAT, i0, i_node): next_index(i_node)
|
||||
#if swap_nodes(nodes_copy, swaps, ROW_SELECTOR_KEY_FORMAT, i0, i_slct): next_index(i_slct)
|
||||
#if swap_nodes(nodes_copy, swaps, CONNECTED_KEY_FORMAT, i0, i_conn): next_index(i_conn)
|
||||
#if swap_nodes(nodes_copy, swaps, DATA_KEY_FORMAT, i0, i_data): next_index(i_data)
|
||||
print_debug(db)
|
||||
|
||||
var indxs = get_key_indexes(key0)
|
||||
|
||||
var slct_key0: String = ROW_SELECTOR_KEY_FORMAT % [indxs[1], indxs[0]]
|
||||
if nodes.has(slct_key0):
|
||||
var slct_key1: String = ROW_SELECTOR_KEY_FORMAT % [i_row, i_col]
|
||||
nodes_copy[slct_key1] = nodes[slct_key0]
|
||||
swaps.append([slct_key0, slct_key1])
|
||||
|
||||
var conn_key0: String = CONNECTED_KEY_FORMAT % [indxs[1], indxs[0]]
|
||||
if nodes.has(conn_key0):
|
||||
var conn_key1: String = CONNECTED_KEY_FORMAT % [i_row, i_col]
|
||||
nodes_copy[conn_key1] = nodes[conn_key0]
|
||||
swaps.append([conn_key0, conn_key1])
|
||||
|
||||
var data_key0: String = DATA_KEY_FORMAT % [indxs[1], indxs[0]]
|
||||
if nodes.has(data_key0):
|
||||
var data_key1: String = DATA_KEY_FORMAT % [i_row, i_col]
|
||||
nodes_copy[data_key1] = nodes[data_key0]
|
||||
swaps.append([data_key0, data_key1])
|
||||
|
||||
i_col += 1
|
||||
if i_col == columns:
|
||||
i_col = 0
|
||||
i_row += 1
|
||||
nodes.clear()
|
||||
nodes.merge(nodes_copy)
|
||||
print_debug('после: %s' % str(nodes.keys()))
|
||||
|
||||
|
||||
func clear_rows() -> void:
|
||||
|
||||
Reference in New Issue
Block a user