70 lines
1.7 KiB
GDScript
70 lines
1.7 KiB
GDScript
extends Node
|
|
|
|
var socket = PacketPeerUDP.new()
|
|
var data = [] #holds dmx channel values. DMX channel 1 is array index 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):
|
|
if val>255:
|
|
print("DMX Error: Value too high")
|
|
return 0
|
|
data[ch-1]=int(val)
|
|
else:
|
|
data[ch-1]=int(val/256)
|
|
data[ch-1+1]=int(val%256)
|
|
|
|
return 1
|
|
|
|
func setDMXChannel_Array(chstart,arr:Array):
|
|
var ch=chstart
|
|
for val in arr:
|
|
if val>255:
|
|
print("DMX Error: Value too high")
|
|
if (ch-1<=512):
|
|
data[ch-1]=int(val)
|
|
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
|