#[no_std, cache_output] constants = import "constants.spwn" extract constants.obj_props extract import "control_flow.spwn" extract import "util.spwn" impl @color { _range_: #[desc("Implementation of the range operator (`..`) for colors") example(" for color in 1c..10c { -> color.set(0,0,0, 0.5) } ")] create_range_macro(@color), set: #[desc("Implementation of the color trigger") example("BG.set(0, 0, 0, 0.5) // turns the background color black")] ( self, #[desc("Red value of the target color")] r: @number, #[desc("Green value of the target color")] g: @number, #[desc("Blue value of the target color")] b: @number, #[desc("Duration of color change")] duration: @number = 0, #[desc("Opacity of target color")] opacity: @number = 1, #[desc("Toggle blending on target color")] blending: @bool = false ){ $.add( trigger{ OBJ_ID: 899, DURATION: duration, TRIGGER_RED: r, TRIGGER_GREEN: g, TRIGGER_BLUE: b, OPACITY: opacity, BLENDING: blending, TARGET_COLOR: self, 36: 1, }) wait(duration) }, //1,899,2,285,3,105,36,1,7,255,8,255,9,255,10,0.5,35,0; pulse: #[desc("Implementation of the pulse trigger for colors") example("BG.pulse(255, 0, 0, fade_out = 0.5) // pulses the background red")] ( self, #[desc("Red value of pulse color (or hue if HSV is enabled)")] r: @number, #[desc("Green value of pulse color (or saturation if HSV is enabled)")] g: @number, #[desc("Blue value of pulse color (or brightness/value if HSV is enabled)")] b: @number, #[desc("Fade-in duration")] fade_in: @number = 0, #[desc("Duration to hold the color")] hold: @number = 0, #[desc("Fade-out duration")] fade_out: @number = 0, #[desc("Weather to prioritize this pulse over simultaneous pulses")] exclusive: @bool = false, #[desc("Toggle HSV mode")] hsv: @bool = false, #[desc("HSV specific: saturation checked")] s_checked: @bool = false, #[desc("HSV specific: brightness checked")] b_checked: @bool = false ) { if hsv { $.add( trigger{ OBJ_ID: 1006, COPIED_COLOR_HVS: r as @string + "a" + g as @string + "a" + b as @string + "a" + s_checked as @number as @string + "a" + b_checked as @number as @string, EXCLUSIVE: exclusive, FADE_IN: fade_in, HOLD: hold, FADE_OUT: fade_out, TARGET: self, PULSE_HSV: hsv, }) } else { $.add( trigger{ OBJ_ID: 1006, TRIGGER_RED: r, TRIGGER_GREEN: g, TRIGGER_BLUE: b, EXCLUSIVE: exclusive, FADE_IN: fade_in, HOLD: hold, FADE_OUT: fade_out, TARGET: self, PULSE_HSV: hsv, }) } wait(fade_in + hold + fade_out) } }