godot-artnet/scripts/artnet.gd
2025-02-27 14:26:20 +01:00

69 lines
1.6 KiB
GDScript

extends Node2D
#nc -ul 2115
var socket = PacketPeerUDP.new()
var data = []
@export_range(0,255,1) var master = 0
@export_range(0,255,1) var red = 0
@export_range(0,255,1) var green = 0
@export_range(0,255,1) var blue = 0
@export var ip_destination = "127.0.0.1"
@export_range(1,100,1) var update_frequency=10
var last_update_delta=0
func _ready() -> void:
socket.set_dest_address(ip_destination, 6454)
print("connecting to:"+str(ip_destination))
data.resize(512)
data.fill(0)
func _process(delta: float) -> void:
last_update_delta+=delta
if last_update_delta>1.0/update_frequency:
last_update_delta=0
setDMXChannel(1,master) #master dimmer
setDMXChannel(3,red) #red
setDMXChannel(4,green) #green
setDMXChannel(5,blue) #blue
sendDMX(data)
func setDMXChannel(ch,val,twobytes:bool=false):
if (ch-1>512):
print("DMX Error: Channel out of bounds")
return 0
if (!twobytes):
data[ch-1]=val
else:
data[ch-1]=val/256
data[ch-1+1]=val%256
return 1
func setDMXChannel_Array(chstart,arr:Array):
var ch=chstart
for a in arr:
if (ch-1<=512):
data[ch-1]=a
ch+=1
else:
print("DMX Error: Channel out of bounds")
return 0
return 1
func sendDMX(data:Array):
var buffer=PackedByteArray([65, 114, 116, 45, 78, 101, 116, 0, 0, 80, 0, 14]) # Art-Net\0 / OpCodeLo / OpCodeHi / ProtoHi /ProtoLow
var universe=0
buffer.append_array([0,0,universe,0]) # Seq / Physical / SubUni/Net
var length_upper = floor(data.size() / 256)
var length_lower = data.size() % 256
buffer.append_array([length_upper, length_lower])
buffer.append_array(data)
var error=socket.put_packet(buffer)
return error