Rename Class1.cs to DMXDeviceType.cs
When a lighting effect ends, revert the channel value to 0 not to what it was originally -- warning: this is a breaking change to the existing library behavior; this means that if you want to keep a light on constantly and toggle it to an off state, you'll need an effect running constantly. Future changes will fix this behavior.
Implement multiple queues using a guid to uniquely identify a queue. Each queue has a priority and it's own array of byte values for channel data. Queues are flattened in priority order to the output buffer once per cycle. By default, all effects use Guid.Empty as the queue identifier, so this commit behaves identically to the last commit.
Only copy non zero channel values rather than overwriting the whole buffer array.
Use a zeroed buffer as the initial state when merging all the queues so that even though zero values are not merged, you can still turn a channel off if all the queues have a zero value for that channel index
Implement queue system to fix issue with multiple effects on the same channels "getting stuck"
Remove channel class (channels had multiple effects on them) in favour of an effects queue model, so the relationship between channels and effects is now inverted. When you queue an effect, the internal (output) queue is managed automatically, so you can have more than one effect running on a single queue. The effects are applied in the order they were created onto a queue, and then the queues are flattened in priority order to the output buffer. This means that when one effect finishes, if there's still another effect operating on the same set of channels, it will continue.