fixed the path rebuilding lag

This commit is contained in:
2026-02-08 02:10:23 +11:00
parent fd9b62faba
commit e441a121ff
26 changed files with 629 additions and 385 deletions

View File

@@ -4,10 +4,62 @@ extends Node
@export var flow_field: FlowField
func create_grid(x: int, y: int, gap: int) -> Array[FlowNode]:
#return flow_field.create_grid(x, y, gap)
return []
func create_grid(x_size: int, y_size: int, gap: float) -> Array[FlowNodeData]:
flow_field.data.grids += 1
var grid_id: int = flow_field.data.grids
var grid: Array[Array] = []
var created_nodes: Array[FlowNodeData] = []
for x: int in x_size:
var row: Array[FlowNodeData] = []
for y: int in y_size:
var point_position: Vector3 = Vector3((x - floori(x_size / 2.0)) * gap, 0, (y - floori(y_size / 2.0)) * gap)
var created_node: FlowNodeData = create_node(point_position, grid_id, x, y)
created_nodes.append(created_node)
row.append(created_node)
grid.append(row)
for x: int in grid.size():
for y: int in grid[x].size():
if y > 0:
connect_nodes(grid[x][y], grid[x][y - 1])
if x > 0:
connect_nodes(grid[x][y], grid[x - 1][y])
if y < grid[x].size() - 1:
connect_nodes(grid[x][y], grid[x][y + 1])
if x < grid.size() - 1:
connect_nodes(grid[x][y], grid[x + 1][y])
return created_nodes
func create_node(pos: Vector3 = Vector3.ZERO, grid_id: int = -1, grid_x: int = 0, grid_y: int = 0) -> FlowNode:
return flow_field.create_node(pos, grid_id, grid_x, grid_y)
func create_node(pos: Vector3 = Vector3.ZERO, grid_id: int = -1, grid_x: int = 0, grid_y: int = 0) -> FlowNodeData:
var node: FlowNodeData = FlowNodeData.new()
node.node_id = flow_field.data.nodes.size()
node.grid_id = grid_id
node.grid_x = grid_x
node.grid_y = grid_y
node.position = pos
flow_field.data.nodes.append(node)
return node
func delete_node(node: FlowNodeData) -> void:
for neighbor: FlowNodeData in node.connections:
disconnect_nodes(node, neighbor)
flow_field.data.nodes.erase(node)
func connect_nodes(a: FlowNodeData, b: FlowNodeData) -> void:
if a != b:
if a.connected_nodes.has(b):
a.connected_nodes.append(b)
if b.connected_nodes.has(a):
b.add_connection(a)
func disconnect_nodes(a: FlowNodeData, b: FlowNodeData) -> void:
if a != b:
if a.connected_nodes.has(b):
a.connected_nodes.erase(b)
if b.connected_nodes.has(a):
b.connected_nodes.erase(a)