Add movement wrapping for cells

This commit is contained in:
2024-04-14 02:10:57 -05:00
parent ea37aa92d7
commit 05ae81b20b

View File

@@ -42,7 +42,7 @@ fn main() {
let canvas = Rc::new(RefCell::new(canvas)); let canvas = Rc::new(RefCell::new(canvas));
let main_loop = move || { let main_loop = move || {
let mut moved = false;
for event in ctx.borrow_mut().event_pump().unwrap().poll_iter() { for event in ctx.borrow_mut().event_pump().unwrap().poll_iter() {
match event { match event {
Event::Quit { .. } Event::Quit { .. }
@@ -59,15 +59,19 @@ fn main() {
match key { match key {
Keycode::Left => { Keycode::Left => {
rect.borrow_mut().x -= 10; rect.borrow_mut().x -= 10;
moved = true;
} }
Keycode::Right => { Keycode::Right => {
rect.borrow_mut().x += 10; rect.borrow_mut().x += 10;
moved = true;
} }
Keycode::Up => { Keycode::Up => {
rect.borrow_mut().y -= 10; rect.borrow_mut().y -= 10;
moved = true;
} }
Keycode::Down => { Keycode::Down => {
rect.borrow_mut().y += 10; rect.borrow_mut().y += 10;
moved = true;
} }
_ => {} _ => {}
} }
@@ -76,11 +80,27 @@ fn main() {
} }
} }
// Handle wrapping at the edges
if moved {
let mut rect = rect.borrow_mut();
let canvas_size = canvas.borrow().window().size();
if rect.x < 0 {
rect.x = canvas_size.0 as i32 - rect.width() as i32;
} else if rect.x >= 640 {
rect.x = 0;
}
if rect.y < 0 {
rect.y = canvas_size.1 as i32 - rect.height() as i32;
} else if rect.y >= canvas_size.1 as i32 {
rect.y = 0;
}
}
let mut canvas = canvas.borrow_mut(); let mut canvas = canvas.borrow_mut();
canvas.set_draw_color(BLACK); canvas.set_draw_color(BLACK);
canvas.clear(); canvas.clear();
canvas.set_draw_color(WHITE); canvas.set_draw_color(WHITE);
canvas.fill_rect(rect.borrow().clone()); canvas.fill_rect(rect.borrow().clone()).expect("could not draw rectangle");
canvas.present(); canvas.present();
}; };