Skip to content

Commit

Permalink
Remove the effect wrapper structs
Browse files Browse the repository at this point in the history
  • Loading branch information
4JX committed Nov 17, 2024
1 parent c3a738c commit ce13415
Show file tree
Hide file tree
Showing 13 changed files with 413 additions and 451 deletions.
96 changes: 46 additions & 50 deletions app/src/effects/ambient.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,68 +15,64 @@ struct ScreenDimensions {
dest: (u32, u32),
}

pub(super) struct AmbientLight;
pub fn play(manager: &mut super::Inner, fps: u8, saturation_boost: f32) {
while !manager.stop_signals.manager_stop_signal.load(Ordering::SeqCst) {
//Display setup
let display = Display::all().unwrap().remove(0);

impl AmbientLight {
pub fn play(manager: &mut super::Inner, fps: u8, saturation_boost: f32) {
while !manager.stop_signals.manager_stop_signal.load(Ordering::SeqCst) {
//Display setup
let display = Display::all().unwrap().remove(0);
let mut capturer = Capturer::new(display).expect("Couldn't begin capture.");

let mut capturer = Capturer::new(display).expect("Couldn't begin capture.");
let dimensions = ScreenDimensions {
src: (capturer.width() as u32, capturer.height() as u32),
dest: (4, 1),
};

let dimensions = ScreenDimensions {
src: (capturer.width() as u32, capturer.height() as u32),
dest: (4, 1),
};
let seconds_per_frame = Duration::from_nanos(1_000_000_000 / u64::from(fps));
let mut resizer = fr::Resizer::new();

let seconds_per_frame = Duration::from_nanos(1_000_000_000 / u64::from(fps));
let mut resizer = fr::Resizer::new();
#[cfg(target_os = "windows")]
let mut try_gdi = 1;

#[cfg(target_os = "windows")]
let mut try_gdi = 1;
while !manager.stop_signals.keyboard_stop_signal.load(Ordering::SeqCst) {
let now = Instant::now();

while !manager.stop_signals.keyboard_stop_signal.load(Ordering::SeqCst) {
let now = Instant::now();
#[allow(clippy::single_match)]
match capturer.frame(seconds_per_frame) {
Ok(frame) => {
let rgb = process_frame(frame, dimensions, &mut resizer, saturation_boost);

#[allow(clippy::single_match)]
match capturer.frame(seconds_per_frame) {
Ok(frame) => {
let rgb = process_frame(frame, dimensions, &mut resizer, saturation_boost);

manager.keyboard.set_colors_to(&rgb).unwrap();
#[cfg(target_os = "windows")]
{
try_gdi = 0;
}
manager.keyboard.set_colors_to(&rgb).unwrap();
#[cfg(target_os = "windows")]
{
try_gdi = 0;
}
Err(error) => match error.kind() {
std::io::ErrorKind::WouldBlock =>
{
#[cfg(target_os = "windows")]
if try_gdi > 0 && !capturer.is_gdi() {
if try_gdi > 3 {
capturer.set_gdi();
try_gdi = 0;
}
try_gdi += 1;
}
}
_ =>
{
#[cfg(windows)]
if !capturer.is_gdi() {
}
Err(error) => match error.kind() {
std::io::ErrorKind::WouldBlock =>
{
#[cfg(target_os = "windows")]
if try_gdi > 0 && !capturer.is_gdi() {
if try_gdi > 3 {
capturer.set_gdi();
continue;
try_gdi = 0;
}
try_gdi += 1;
}
},
}
}
_ =>
{
#[cfg(windows)]
if !capturer.is_gdi() {
capturer.set_gdi();
continue;
}
}
},
}

let elapsed_time = now.elapsed();
if elapsed_time < seconds_per_frame {
thread::sleep(seconds_per_frame - elapsed_time);
}
let elapsed_time = now.elapsed();
if elapsed_time < seconds_per_frame {
thread::sleep(seconds_per_frame - elapsed_time);
}
}
}
Expand Down
152 changes: 74 additions & 78 deletions app/src/effects/christmas.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,96 +2,92 @@ use std::{sync::atomic::Ordering, thread, time::Duration};

use rand::Rng;

pub(super) struct Christmas;

impl Christmas {
pub fn play(manager: &mut super::Inner, thread_rng: &mut rand::rngs::ThreadRng) {
let xmas_color_array = [[255, 10, 10], [255, 255, 20], [30, 255, 30], [70, 70, 255]];
let subeffect_count = 4;
let mut last_subeffect = -1;
while !manager.stop_signals.manager_stop_signal.load(Ordering::SeqCst) {
let mut subeffect = thread_rng.gen_range(0..subeffect_count);
while last_subeffect == subeffect {
subeffect = thread_rng.gen_range(0..subeffect_count);
}
last_subeffect = subeffect;
pub fn play(manager: &mut super::Inner, thread_rng: &mut rand::rngs::ThreadRng) {
let xmas_color_array = [[255, 10, 10], [255, 255, 20], [30, 255, 30], [70, 70, 255]];
let subeffect_count = 4;
let mut last_subeffect = -1;
while !manager.stop_signals.manager_stop_signal.load(Ordering::SeqCst) {
let mut subeffect = thread_rng.gen_range(0..subeffect_count);
while last_subeffect == subeffect {
subeffect = thread_rng.gen_range(0..subeffect_count);
}
last_subeffect = subeffect;

match subeffect {
0 => {
for _i in 0..3 {
for colors in xmas_color_array {
manager.keyboard.solid_set_colors_to(colors).unwrap();
thread::sleep(Duration::from_millis(500));
}
match subeffect {
0 => {
for _i in 0..3 {
for colors in xmas_color_array {
manager.keyboard.solid_set_colors_to(colors).unwrap();
thread::sleep(Duration::from_millis(500));
}
}
1 => {
let color_1_index = thread_rng.gen_range(0..4);
let used_colors_1: [u8; 3] = xmas_color_array[color_1_index];
}
1 => {
let color_1_index = thread_rng.gen_range(0..4);
let used_colors_1: [u8; 3] = xmas_color_array[color_1_index];

let mut color_2_index = thread_rng.gen_range(0..4);
while color_1_index == color_2_index {
color_2_index = thread_rng.gen_range(0..4);
}
let used_colors_2: [u8; 3] = xmas_color_array[color_2_index];
let mut color_2_index = thread_rng.gen_range(0..4);
while color_1_index == color_2_index {
color_2_index = thread_rng.gen_range(0..4);
}
let used_colors_2: [u8; 3] = xmas_color_array[color_2_index];

for _i in 0..4 {
manager.keyboard.solid_set_colors_to(used_colors_1).unwrap();
thread::sleep(Duration::from_millis(400));
manager.keyboard.solid_set_colors_to(used_colors_2).unwrap();
thread::sleep(Duration::from_millis(400));
}
for _i in 0..4 {
manager.keyboard.solid_set_colors_to(used_colors_1).unwrap();
thread::sleep(Duration::from_millis(400));
manager.keyboard.solid_set_colors_to(used_colors_2).unwrap();
thread::sleep(Duration::from_millis(400));
}
2 => {
let steps = 100;
manager.keyboard.transition_colors_to(&[0; 12], steps, 1).unwrap();
let mut used_colors_array: [u8; 12] = [0; 12];
let left_or_right = thread_rng.gen_range(0..2);
if left_or_right == 0 {
for color in xmas_color_array {
for j in (0..12).step_by(3) {
used_colors_array[j] = color[0];
used_colors_array[j + 1] = color[1];
used_colors_array[j + 2] = color[2];
manager.keyboard.transition_colors_to(&used_colors_array, steps, 1).unwrap();
}
for j in (0..12).step_by(3) {
used_colors_array[j] = 0;
used_colors_array[j + 1] = 0;
used_colors_array[j + 2] = 0;
manager.keyboard.transition_colors_to(&used_colors_array, steps, 1).unwrap();
}
}
2 => {
let steps = 100;
manager.keyboard.transition_colors_to(&[0; 12], steps, 1).unwrap();
let mut used_colors_array: [u8; 12] = [0; 12];
let left_or_right = thread_rng.gen_range(0..2);
if left_or_right == 0 {
for color in xmas_color_array {
for j in (0..12).step_by(3) {
used_colors_array[j] = color[0];
used_colors_array[j + 1] = color[1];
used_colors_array[j + 2] = color[2];
manager.keyboard.transition_colors_to(&used_colors_array, steps, 1).unwrap();
}
} else {
for i in 0..4 {
for j in (0..12).step_by(3) {
used_colors_array[11 - j] = xmas_color_array[3 - i][0];
used_colors_array[11 - (j + 1)] = xmas_color_array[3 - i][1];
used_colors_array[11 - (j + 2)] = xmas_color_array[3 - i][2];
manager.keyboard.transition_colors_to(&used_colors_array, steps, 1).unwrap();
}
for j in (0..12).step_by(3) {
used_colors_array[11 - j] = 0;
used_colors_array[11 - (j + 1)] = 0;
used_colors_array[11 - (j + 2)] = 0;
manager.keyboard.transition_colors_to(&used_colors_array, steps, 1).unwrap();
}
for j in (0..12).step_by(3) {
used_colors_array[j] = 0;
used_colors_array[j + 1] = 0;
used_colors_array[j + 2] = 0;
manager.keyboard.transition_colors_to(&used_colors_array, steps, 1).unwrap();
}
}
}
3 => {
let state1 = [255, 255, 255, 0, 0, 0, 255, 255, 255, 0, 0, 0];
let state2 = [0, 0, 0, 255, 255, 255, 0, 0, 0, 255, 255, 255];
let steps = 30;
for _i in 0..4 {
manager.keyboard.transition_colors_to(&state1, steps, 1).unwrap();
thread::sleep(Duration::from_millis(400));
manager.keyboard.transition_colors_to(&state2, steps, 1).unwrap();
thread::sleep(Duration::from_millis(400));
} else {
for i in 0..4 {
for j in (0..12).step_by(3) {
used_colors_array[11 - j] = xmas_color_array[3 - i][0];
used_colors_array[11 - (j + 1)] = xmas_color_array[3 - i][1];
used_colors_array[11 - (j + 2)] = xmas_color_array[3 - i][2];
manager.keyboard.transition_colors_to(&used_colors_array, steps, 1).unwrap();
}
for j in (0..12).step_by(3) {
used_colors_array[11 - j] = 0;
used_colors_array[11 - (j + 1)] = 0;
used_colors_array[11 - (j + 2)] = 0;
manager.keyboard.transition_colors_to(&used_colors_array, steps, 1).unwrap();
}
}
}
_ => unreachable!("Subeffect index for Christmas effect is out of range."),
}
3 => {
let state1 = [255, 255, 255, 0, 0, 0, 255, 255, 255, 0, 0, 0];
let state2 = [0, 0, 0, 255, 255, 255, 0, 0, 0, 255, 255, 255];
let steps = 30;
for _i in 0..4 {
manager.keyboard.transition_colors_to(&state1, steps, 1).unwrap();
thread::sleep(Duration::from_millis(400));
manager.keyboard.transition_colors_to(&state2, steps, 1).unwrap();
thread::sleep(Duration::from_millis(400));
}
}
_ => unreachable!("Subeffect index for Christmas effect is out of range."),
}
}
}
20 changes: 8 additions & 12 deletions app/src/effects/disco.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,14 @@ use rand::Rng;

use crate::profile::Profile;

pub(super) struct Disco;
pub fn play(manager: &mut super::Inner, p: &Profile, thread_rng: &mut rand::rngs::ThreadRng) {
while !manager.stop_signals.manager_stop_signal.load(Ordering::SeqCst) {
let colors = [[255, 0, 0], [255, 255, 0], [0, 255, 0], [0, 255, 255], [0, 0, 255], [255, 0, 255]];
let colors_index = thread_rng.gen_range(0..6);
let new_values = colors[colors_index];

impl Disco {
pub fn play(manager: &mut super::Inner, p: &Profile, thread_rng: &mut rand::rngs::ThreadRng) {
while !manager.stop_signals.manager_stop_signal.load(Ordering::SeqCst) {
let colors = [[255, 0, 0], [255, 255, 0], [0, 255, 0], [0, 255, 255], [0, 0, 255], [255, 0, 255]];
let colors_index = thread_rng.gen_range(0..6);
let new_values = colors[colors_index];

let zone_index = thread_rng.gen_range(0..4);
manager.keyboard.set_zone_by_index(zone_index, new_values).unwrap();
thread::sleep(Duration::from_millis(2000 / (u64::from(p.speed) * 4)));
}
let zone_index = thread_rng.gen_range(0..4);
manager.keyboard.set_zone_by_index(zone_index, new_values).unwrap();
thread::sleep(Duration::from_millis(2000 / (u64::from(p.speed) * 4)));
}
}
60 changes: 28 additions & 32 deletions app/src/effects/fade.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,48 +11,44 @@ use device_query::DeviceQuery;

use crate::profile::Profile;

pub(super) struct Fade;
pub fn play(manager: &mut super::Inner, p: &Profile) {
let stop_signals = manager.stop_signals.clone();

impl Fade {
pub fn play(manager: &mut super::Inner, p: &Profile) {
let stop_signals = manager.stop_signals.clone();
let kill_thread = Arc::new(AtomicBool::new(false));
let exit_thread = kill_thread.clone();

let kill_thread = Arc::new(AtomicBool::new(false));
let exit_thread = kill_thread.clone();
let state = device_query::DeviceState::new();

thread::spawn(move || {
let state = device_query::DeviceState::new();

thread::spawn(move || {
let state = device_query::DeviceState::new();
loop {
if !state.get_keys().is_empty() {
stop_signals.keyboard_stop_signal.store(true, Ordering::SeqCst);
}

loop {
if !state.get_keys().is_empty() {
stop_signals.keyboard_stop_signal.store(true, Ordering::SeqCst);
}
if exit_thread.load(Ordering::SeqCst) {
break;
}

if exit_thread.load(Ordering::SeqCst) {
break;
}
thread::sleep(Duration::from_millis(5));
}
});

thread::sleep(Duration::from_millis(5));
}
});

let mut now = Instant::now();
while !manager.stop_signals.manager_stop_signal.load(Ordering::SeqCst) {
if state.get_keys().is_empty() {
if now.elapsed() > Duration::from_secs(20 / u64::from(p.speed)) {
manager.keyboard.transition_colors_to(&[0; 12], 230, 3).unwrap();
} else {
thread::sleep(Duration::from_millis(20));
}
let mut now = Instant::now();
while !manager.stop_signals.manager_stop_signal.load(Ordering::SeqCst) {
if state.get_keys().is_empty() {
if now.elapsed() > Duration::from_secs(20 / u64::from(p.speed)) {
manager.keyboard.transition_colors_to(&[0; 12], 230, 3).unwrap();
} else {
manager.keyboard.set_colors_to(&p.rgb_array()).unwrap();
manager.stop_signals.keyboard_stop_signal.store(false, Ordering::SeqCst);
now = Instant::now();
thread::sleep(Duration::from_millis(20));
}
} else {
manager.keyboard.set_colors_to(&p.rgb_array()).unwrap();
manager.stop_signals.keyboard_stop_signal.store(false, Ordering::SeqCst);
now = Instant::now();
}

kill_thread.store(true, Ordering::SeqCst);
}

kill_thread.store(true, Ordering::SeqCst);
}
Loading

0 comments on commit ce13415

Please sign in to comment.