Files
mtd/Scripts/flow_node.gd
2025-06-13 00:06:51 +10:00

62 lines
1.8 KiB
GDScript

class_name FlowNode extends StaticBody3D
@export var connections: Array[FlowNode]
@export var visualisers: Array[Node3D]
var visual_scene: PackedScene = preload("res://cube2.tscn")
@export var traversable: bool = true
@export var buildable: bool = true
var best_path: FlowNode :
get():
return best_path
set(value):
set_connector_color(best_path, Color.DARK_GRAY)
best_path = value
set_connector_color(best_path, Color.DARK_GREEN)
func _ready() -> void:
visualisers = []
for node: FlowNode in connections:
var visual: Node3D = visual_scene.instantiate()
add_child(visual)
visual.owner = self
visualisers.append(visual)
set_connector_color(node, Color.WEB_GRAY)
func _process(delta: float) -> void:
if visible:
for i: int in connections.size():
var distance: float = global_position.distance_to(connections[i].global_position)
visualisers[i].scale = Vector3(0.3, 0.3, 1.0 * (distance / 2.0))
visualisers[i].position = to_local(connections[i].global_position) / 4.0
if distance >= 0.05:
visualisers[i].look_at(connections[i].global_position)
func set_color(new_color: Color) -> void:
$flow_node/Sphere.material_override.albedo_color = new_color
func set_connector_color(node: FlowNode, new_color: Color) -> void:
if visible:
var i: int = connections.find(node)
visualisers[i].get_child(0).material_override.albedo_color = new_color
func add_connection(node: FlowNode) -> void:
if !connections.has(node):
var visual: Node3D = visual_scene.instantiate()
add_child(visual)
visual.owner = self
connections.append(node)
visualisers.append(visual)
set_connector_color(node, Color.WEB_GRAY)
func remove_connection(node: FlowNode) -> void:
if connections.has(node):
var i: int = connections.find(node)
visualisers.pop_at(i).queue_free()
connections.remove_at(i)