Change speed scale, Implement reset
This commit is contained in:
parent
7eba49d07f
commit
a5dbe91bc1
@ -14,7 +14,8 @@ export class ChaserPattern implements Pattern {
|
|||||||
value: 0.2,
|
value: 0.2,
|
||||||
},
|
},
|
||||||
rgbw: [255, 0, 0, 0],
|
rgbw: [255, 0, 0, 0],
|
||||||
speed: 0
|
speed: 1,
|
||||||
|
reset: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
let result = [];
|
let result = [];
|
||||||
|
@ -2,7 +2,7 @@ import { MovingHeadState } from "rust_native_module";
|
|||||||
|
|
||||||
export type Time = {
|
export type Time = {
|
||||||
absolute: number,
|
absolute: number,
|
||||||
beat_relative: number,
|
beat_relative: number, //
|
||||||
};
|
};
|
||||||
|
|
||||||
export interface Pattern {
|
export interface Pattern {
|
||||||
|
4
rust_native_module/index.d.ts
vendored
4
rust_native_module/index.d.ts
vendored
@ -20,7 +20,9 @@ declare module rust_native_module {
|
|||||||
tilt: number, // [-pi/2, pi/2]
|
tilt: number, // [-pi/2, pi/2]
|
||||||
brightness: Brightness,
|
brightness: Brightness,
|
||||||
rgbw: [number, number, number, number], // RGBW, [0, 255]
|
rgbw: [number, number, number, number], // RGBW, [0, 255]
|
||||||
speed: number, // [255, 0]
|
speed: number, // [0, 1]
|
||||||
|
|
||||||
|
reset: boolean,
|
||||||
}
|
}
|
||||||
|
|
||||||
type OutputHandle = {
|
type OutputHandle = {
|
||||||
|
@ -23,7 +23,9 @@ pub struct MovingHead {
|
|||||||
pub tilt: f64, // -pi/2 to pi/2
|
pub tilt: f64, // -pi/2 to pi/2
|
||||||
pub brightness: Brightness,
|
pub brightness: Brightness,
|
||||||
pub rgbw: (u8, u8, u8, u8), // RGBW
|
pub rgbw: (u8, u8, u8, u8), // RGBW
|
||||||
pub speed: u8, // reversed
|
pub speed: f64, // 0 to 1, mapping to (255 to 0)
|
||||||
|
|
||||||
|
pub reset: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait DMXFixture {
|
pub trait DMXFixture {
|
||||||
@ -32,6 +34,8 @@ pub trait DMXFixture {
|
|||||||
|
|
||||||
impl DMXFixture for MovingHead {
|
impl DMXFixture for MovingHead {
|
||||||
fn render(&self, dst: &mut [u8]) {
|
fn render(&self, dst: &mut [u8]) {
|
||||||
|
// TODO use pan_fine and tilt_fine for more accuracy
|
||||||
|
|
||||||
let pan = rescale(self.pan, (-1.5 * PI, 1.5 * PI), (255.0, 0.0)) as u8;
|
let pan = rescale(self.pan, (-1.5 * PI, 1.5 * PI), (255.0, 0.0)) as u8;
|
||||||
let pan_fine = 0;
|
let pan_fine = 0;
|
||||||
|
|
||||||
@ -47,10 +51,14 @@ impl DMXFixture for MovingHead {
|
|||||||
|
|
||||||
let (r, g, b, w) = self.rgbw;
|
let (r, g, b, w) = self.rgbw;
|
||||||
|
|
||||||
|
let speed = rescale(self.speed, (0.0, 1.0), (255.0, 0.0)) as u8;
|
||||||
|
|
||||||
|
let reset = if self.reset { 175 } else { 0 };
|
||||||
|
|
||||||
let offset = self.start_address - 1;
|
let offset = self.start_address - 1;
|
||||||
|
|
||||||
let channels = [
|
let channels = [
|
||||||
pan, pan_fine, tilt, tilt_fine, self.speed, dimmer, r, g, b, w, 0, 0, 0, 0,
|
pan, pan_fine, tilt, tilt_fine, speed, dimmer, r, g, b, w, 0, 0, 0, reset,
|
||||||
];
|
];
|
||||||
|
|
||||||
dst[offset..offset + channels.len()].copy_from_slice(&channels);
|
dst[offset..offset + channels.len()].copy_from_slice(&channels);
|
||||||
|
@ -139,7 +139,12 @@ fn set_output(mut cx: FunctionContext) -> JsResult<JsObject> {
|
|||||||
speed: head
|
speed: head
|
||||||
.get(&mut cx, "speed")?
|
.get(&mut cx, "speed")?
|
||||||
.downcast_or_throw::<JsNumber, _>(&mut cx)?
|
.downcast_or_throw::<JsNumber, _>(&mut cx)?
|
||||||
.value(&mut cx) as u8,
|
.value(&mut cx),
|
||||||
|
|
||||||
|
reset: head
|
||||||
|
.get(&mut cx, "reset")?
|
||||||
|
.downcast_or_throw::<JsBoolean, _>(&mut cx)?
|
||||||
|
.value(&mut cx),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@ const movingHeads = [
|
|||||||
},
|
},
|
||||||
rgbw: [255, 0, 0, 0],
|
rgbw: [255, 0, 0, 0],
|
||||||
speed: 0,
|
speed: 0,
|
||||||
|
reset: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
startAddress: 15,
|
startAddress: 15,
|
||||||
@ -28,6 +29,7 @@ const movingHeads = [
|
|||||||
},
|
},
|
||||||
rgbw: [255, 0, 0, 0],
|
rgbw: [255, 0, 0, 0],
|
||||||
speed: 0,
|
speed: 0,
|
||||||
|
reset: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
startAddress: 29,
|
startAddress: 29,
|
||||||
@ -39,6 +41,7 @@ const movingHeads = [
|
|||||||
},
|
},
|
||||||
rgbw: [255, 0, 0, 0],
|
rgbw: [255, 0, 0, 0],
|
||||||
speed: 0,
|
speed: 0,
|
||||||
|
reset: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
startAddress: 43,
|
startAddress: 43,
|
||||||
@ -48,8 +51,9 @@ const movingHeads = [
|
|||||||
type: "dimmer",
|
type: "dimmer",
|
||||||
value: 1,
|
value: 1,
|
||||||
},
|
},
|
||||||
rgbw: [0, 0, 0, 255],
|
rgbw: [0, 255, 0, 0],
|
||||||
speed: 0,
|
speed: 1,
|
||||||
|
reset: false,
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user