mirror of
https://gitlab.com/asus-linux/asusctl.git
synced 2026-02-06 00:15:04 +01:00
Bouncy ball example
This commit is contained in:
94
aura/examples/ball.rs
Normal file
94
aura/examples/ball.rs
Normal file
@@ -0,0 +1,94 @@
|
||||
use rog_aura::{AuraDbusWriter, GX502Layout, Key, KeyColourArray, KeyLayout};
|
||||
use std::collections::LinkedList;
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct Ball {
|
||||
position: (i32, i32),
|
||||
direction: (i32, i32),
|
||||
trail: LinkedList<(i32, i32)>,
|
||||
}
|
||||
impl Ball {
|
||||
fn new(x: i32, y: i32, trail_len: u32) -> Self {
|
||||
let mut trail = LinkedList::new();
|
||||
for _ in 1..=trail_len {
|
||||
trail.push_back((x, y));
|
||||
}
|
||||
|
||||
Ball {
|
||||
position: (x, y),
|
||||
direction: (1, 1),
|
||||
trail,
|
||||
}
|
||||
}
|
||||
|
||||
fn update(&mut self, key_map: &Vec<[Key; 17]>) {
|
||||
let pos = self.position;
|
||||
let dir = self.direction;
|
||||
|
||||
if pos.0 + dir.0 > key_map[pos.1 as usize].len() as i32 - 1 || pos.0 + dir.0 < 0 {
|
||||
self.direction.0 *= -1;
|
||||
} else if key_map[(pos.1) as usize][(pos.0 + dir.0) as usize] == Key::None {
|
||||
self.direction.0 *= -1;
|
||||
}
|
||||
|
||||
if pos.1 + dir.1 > key_map.len() as i32 - 1 || pos.1 + dir.1 < 0 {
|
||||
self.direction.1 *= -1;
|
||||
} else if key_map[(pos.1 + dir.1) as usize][(pos.0) as usize] == Key::None {
|
||||
self.direction.1 *= -1;
|
||||
}
|
||||
|
||||
self.trail.pop_front();
|
||||
self.trail.push_back(self.position);
|
||||
|
||||
self.position.0 += self.direction.0;
|
||||
self.position.1 += self.direction.1;
|
||||
|
||||
if self.position.0 > key_map[self.position.1 as usize].len() as i32 {
|
||||
self.position.0 = key_map[self.position.1 as usize].len() as i32 - 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
let mut writer = AuraDbusWriter::new()?;
|
||||
|
||||
let mut colours = KeyColourArray::new();
|
||||
|
||||
let layout = GX502Layout::default();
|
||||
|
||||
let mut balls = [Ball::new(2, 1, 8), Ball::new(4, 6, 6), Ball::new(12, 3, 4)];
|
||||
|
||||
writer.init_effect()?;
|
||||
|
||||
let rows = layout.get_rows();
|
||||
loop {
|
||||
for (n, ball) in balls.iter_mut().enumerate() {
|
||||
ball.update(rows);
|
||||
for (i, pos) in ball.trail.iter().enumerate() {
|
||||
if let Some(c) = colours.key(rows[pos.1 as usize][pos.0 as usize]) {
|
||||
*c.0 = 0;
|
||||
*c.1 = 0;
|
||||
*c.2 = 0;
|
||||
if n == 0 {
|
||||
*c.0 = i as u8 * (255 / ball.trail.len() as u8);
|
||||
} else if n == 1 {
|
||||
*c.1 = i as u8 * (255 / ball.trail.len() as u8);
|
||||
} else if n == 2 {
|
||||
*c.2 = i as u8 * (255 / ball.trail.len() as u8);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
if let Some(c) = colours.key(rows[ball.position.1 as usize][ball.position.0 as usize]) {
|
||||
*c.0 = 255;
|
||||
*c.1 = 255;
|
||||
*c.2 = 255;
|
||||
};
|
||||
}
|
||||
|
||||
writer.write_colour_block(&colours)?;
|
||||
|
||||
// can change 100 times per second, so need to slow it down
|
||||
std::thread::sleep(std::time::Duration::from_millis(60));
|
||||
}
|
||||
}
|
||||
29
aura/examples/comet.rs
Normal file
29
aura/examples/comet.rs
Normal file
@@ -0,0 +1,29 @@
|
||||
use rog_aura::{AuraDbusWriter, GX502Layout, KeyColourArray, KeyLayout};
|
||||
|
||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
let mut writer = AuraDbusWriter::new()?;
|
||||
|
||||
let layout = GX502Layout::default();
|
||||
|
||||
writer.init_effect()?;
|
||||
let rows = layout.get_rows();
|
||||
|
||||
let mut column = 0;
|
||||
loop {
|
||||
let mut key_colours = KeyColourArray::new();
|
||||
for row in rows {
|
||||
if let Some(c) = key_colours.key(row[column as usize]) {
|
||||
*c.0 = 255;
|
||||
};
|
||||
}
|
||||
if column == rows[0].len() - 1 {
|
||||
column = 0
|
||||
} else {
|
||||
column += 1;
|
||||
}
|
||||
|
||||
writer.write_colour_block(&key_colours)?;
|
||||
|
||||
std::thread::sleep(std::time::Duration::from_millis(250));
|
||||
}
|
||||
}
|
||||
@@ -11,29 +11,39 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
loop {
|
||||
for (r, row) in rows.iter().enumerate() {
|
||||
for (k, key) in row.iter().enumerate() {
|
||||
*key_colours.key(*key).0 = 254;
|
||||
if let Some(c) = key_colours.key(*key) {
|
||||
*c.0 = 255;
|
||||
};
|
||||
// Last key of previous row
|
||||
if k == 0 {
|
||||
if r == 0 {
|
||||
let k = &rows[rows.len() - 1][rows[rows.len() - 1].len() - 1];
|
||||
*key_colours.key(*k).0 = 0;
|
||||
if let Some(c) = key_colours.key(*k) {
|
||||
*c.0 = 0;
|
||||
};
|
||||
} else {
|
||||
let k = &rows[r - 1][rows[r - 1].len() - 1];
|
||||
*key_colours.key(*k).0 = 0;
|
||||
if let Some(c) = key_colours.key(*k) {
|
||||
*c.0 = 0;
|
||||
};
|
||||
}
|
||||
} else {
|
||||
let k = &rows[r][k - 1];
|
||||
*key_colours.key(*k).0 = 0;
|
||||
if let Some(c) = key_colours.key(*k) {
|
||||
*c.0 = 0;
|
||||
};
|
||||
}
|
||||
*key_colours.key(Key::Up).0 = 255;
|
||||
*key_colours.key(Key::Left).0 = 255;
|
||||
*key_colours.key(Key::Right).0 = 255;
|
||||
*key_colours.key(Key::Down).0 = 255;
|
||||
if let Some(c) = key_colours.key(Key::Up) {
|
||||
*c.0 = 255;
|
||||
};
|
||||
*key_colours.key(Key::Left).unwrap().0 = 255;
|
||||
*key_colours.key(Key::Right).unwrap().0 = 255;
|
||||
*key_colours.key(Key::Down).unwrap().0 = 255;
|
||||
|
||||
*key_colours.key(Key::W).0 = 255;
|
||||
*key_colours.key(Key::A).0 = 255;
|
||||
*key_colours.key(Key::S).0 = 255;
|
||||
*key_colours.key(Key::D).0 = 255;
|
||||
*key_colours.key(Key::W).unwrap().0 = 255;
|
||||
*key_colours.key(Key::A).unwrap().0 = 255;
|
||||
*key_colours.key(Key::S).unwrap().0 = 255;
|
||||
*key_colours.key(Key::D).unwrap().0 = 255;
|
||||
|
||||
writer.write_colour_block(&key_colours)?;
|
||||
std::thread::sleep(std::time::Duration::from_millis(100));
|
||||
|
||||
@@ -9,21 +9,21 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
loop {
|
||||
let count = 49;
|
||||
for _ in 0..count {
|
||||
*key_colours.key(Key::ROG).0 += 5;
|
||||
*key_colours.key(Key::L).0 += 5;
|
||||
*key_colours.key(Key::I).0 += 5;
|
||||
*key_colours.key(Key::N).0 += 5;
|
||||
*key_colours.key(Key::U).0 += 5;
|
||||
*key_colours.key(Key::X).0 += 5;
|
||||
*key_colours.key(Key::ROG).unwrap().0 += 5;
|
||||
*key_colours.key(Key::L).unwrap().0 += 5;
|
||||
*key_colours.key(Key::I).unwrap().0 += 5;
|
||||
*key_colours.key(Key::N).unwrap().0 += 5;
|
||||
*key_colours.key(Key::U).unwrap().0 += 5;
|
||||
*key_colours.key(Key::X).unwrap().0 += 5;
|
||||
writer.write_colour_block(&key_colours)?;
|
||||
}
|
||||
for _ in 0..count {
|
||||
*key_colours.key(Key::ROG).0 -= 5;
|
||||
*key_colours.key(Key::L).0 -= 5;
|
||||
*key_colours.key(Key::I).0 -= 5;
|
||||
*key_colours.key(Key::N).0 -= 5;
|
||||
*key_colours.key(Key::U).0 -= 5;
|
||||
*key_colours.key(Key::X).0 -= 5;
|
||||
*key_colours.key(Key::ROG).unwrap().0 -= 5;
|
||||
*key_colours.key(Key::L).unwrap().0 -= 5;
|
||||
*key_colours.key(Key::I).unwrap().0 -= 5;
|
||||
*key_colours.key(Key::N).unwrap().0 -= 5;
|
||||
*key_colours.key(Key::U).unwrap().0 -= 5;
|
||||
*key_colours.key(Key::X).unwrap().0 -= 5;
|
||||
writer.write_colour_block(&key_colours)?;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
use rog_aura::{AuraDbusWriter, GX502Layout, Key, KeyColourArray, KeyLayout};
|
||||
use std::ops::Sub;
|
||||
use rog_aura::{AuraDbusWriter, GX502Layout, KeyColourArray, KeyLayout};
|
||||
|
||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
let mut writer = AuraDbusWriter::new()?;
|
||||
@@ -10,12 +9,14 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
writer.init_effect()?;
|
||||
let rows = layout.get_rows();
|
||||
|
||||
let mut fade = 50;
|
||||
let mut fade = 17;
|
||||
let mut flip = false;
|
||||
loop {
|
||||
for row in rows {
|
||||
for (k, key) in row.iter().enumerate() {
|
||||
*key_colours.key(*key).1 = 255 / fade / (k + 1) as u8;
|
||||
if let Some(c) = key_colours.key(*key) {
|
||||
*c.0 = 255 / fade / (k + 1) as u8;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,10 +28,11 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
} else {
|
||||
flip = !flip;
|
||||
}
|
||||
} else if fade < 50 {
|
||||
} else if fade < 17 {
|
||||
fade += 1;
|
||||
} else {
|
||||
flip = !flip;
|
||||
}
|
||||
std::thread::sleep(std::time::Duration::from_millis(10));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user