pulsar/shared/pflags.lua

54 lines
1.2 KiB
Lua
Raw Normal View History

2024-03-16 22:21:50 +00:00
pflags=klass()
function pflags:init(o)
self.speed = o.speed or 15
self.len = o.len or 32
self.noiz = o.noiz or 0
self.buzz = o.buzz or 0
self.detune = o.detune or 0
self.reverb = o.reverb or 0
self.dampen = o.dampen or 0
self.editormode = o.editormode or 1
end
function pflags:validate()
local speed,len,noiz,buzz,detune,reverb,dampen,editormode
=self.speed,self.len,self.noiz,self.buzz,
self.detune,self.reverb,self.dampen,self.editormode
assert_range(speed,1,255,"speed")
assert_range(len,1,33,"len")
assert_range(noiz,0,2,"noiz")
assert_range(buzz,0,2,"buzz")
assert_range(detune,0,3,"detune")
assert_range(reverb,0,3,"reverb")
assert_range(dampen,0,3,"dampen")
assert_range(editormode,0,2,"editormode")
end
function pflags:encode()
local speed,len,noiz,buzz,detune,reverb,dampen,editormode
=self.speed,self.len,self.noiz,self.buzz,
self.detune,self.reverb,self.dampen,self.editormode
speed &= 0xffff
len &= 0xffff
noiz &= 0xffff
buzz &= 0xffff
detune &= 0xffff
reverb &= 0xffff
dampen &= 0xffff
editormode &= 0xffff
self:validate()
local byte0 = (
dampen*72 +
reverb*24 +
detune*8 +
buzz*4 +
noiz*2 +
editormode -- "in editor mode" flag
)
return len | speed>>8 | byte0 >>16
end