extends Node3D @export var light_array: Array[Vector3]: set(points): light_array = points if is_inside_tree(): rebuild() @onready var wires:LineRenderer3D = $wires @onready var diodes:MultiMeshInstance3D = $diodes @export var rng_seed:int = 42 var rng = RandomNumberGenerator.new() @export var size:float = 0.1: set(new_size): size = new_size rebuild() if is_inside_tree(): wires.end_thickness = size*0.1 wires.start_thickness = size*0.1 # Called when the node enters the scene tree for the first time. func _ready(): rebuild() func rebuild(): rng.seed = rng_seed rng.state = 0 for child in wires.get_children(): child.free() wires.points = light_array diodes.multimesh.instance_count = light_array.size() var meshBuffer:PackedFloat32Array for point in light_array: var base:Basis = Basis(Vector3(rng.randf_range(-1, 1), rng.randf_range(-1, 1), rng.randf_range(-1, 1)).normalized(), rng.randf_range(0, PI*2)) base = base.scaled(Vector3(size, size, size)) meshBuffer.append_array([base.x.x, base.x.y, base.x.z, point.x, base.y.x, base.y.y, base.y.z, point.y, base.z.x, base.z.y, base.z.z, point.z]) diodes.multimesh.buffer = meshBuffer