Исправление. Неверные индексы элементов
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user