Исправление. Неверные индексы элементов

This commit is contained in:
sasha80
2023-08-08 14:04:43 +03:00
parent 539afb5266
commit 93b0449efa

View File

@@ -378,59 +378,52 @@ func remove_row(i_row: int):
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)
rehash()
func next_index(indexes: Vector2i):
indexes.x += 1
if indexes.x == columns:
indexes.x = 0
indexes.y += 1
func next_index(indexes: Array) -> void:
indexes[0].x += 1
if indexes[0].x == columns:
indexes[0].x = 0
indexes[0].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])
func swap_nodes(nodes_copy, node_key_format, i0, i1) -> void:
var key0 = node_key_format % [i0.y, i0.x]
var key1 = node_key_format % [i1.y, i1.x]
nodes_copy[key1] = nodes[key0]
nodes_copy[key1].name = key1
swaps.append([key0, key1])
return true
func rehash(swaps: Array):
# TODO: Не работает
func rehash():
""" Переназначает ключи в соответствии с размерами таблицы.
После вызова swaps содержит массив пар [<прежний ключ>, <текущий ключ>] """
assert(not swaps.size(), 'ошибка: swaps не пустой')
var i_node: = Vector2i()
var i_hdr: = Vector2i()
var i_slct: = Vector2i()
var i_conn: = Vector2i()
var i_data: = Vector2i()
var db = []
var i_node: = [Vector2i()]
var i_hdr: = [Vector2i()]
var i_slct: = [Vector2i()]
var i_conn: = [Vector2i()]
var i_data: = [Vector2i()]
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)
for key in nodes:
var iv = get_key_indexes(key)
var i0 = Vector2(iv[0], iv[1])
if HEAD_PREFIX in key:
swap_nodes(nodes_copy, HEAD_KEY_FORMAT, i0, i_hdr[0])
next_index(i_hdr)
elif NODE_PREFIX in key:
swap_nodes(nodes_copy, NODE_KEY_FORMAT, i0, i_node[0])
next_index(i_node)
elif SLCT_PREFIX in key:
swap_nodes(nodes_copy, ROW_SELECTOR_KEY_FORMAT, i0, i_slct[0])
next_index(i_slct)
elif CONN_PREFIX in key:
swap_nodes(nodes_copy, CONNECTED_KEY_FORMAT, i0, i_conn[0])
next_index(i_conn)
elif DATA_PREFIX in key:
swap_nodes(nodes_copy, DATA_KEY_FORMAT, i0, i_data[0])
next_index(i_data)
nodes.clear()
nodes.merge(nodes_copy)
print_debug('после: %s' % str(nodes.keys()))
func clear_rows() -> void: