diff --git a/src/main.rs b/src/main.rs index 3fb814f..347ef7b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -42,7 +42,7 @@ fn main() { let canvas = Rc::new(RefCell::new(canvas)); let main_loop = move || { - + let mut moved = false; for event in ctx.borrow_mut().event_pump().unwrap().poll_iter() { match event { Event::Quit { .. } @@ -59,15 +59,19 @@ fn main() { match key { Keycode::Left => { rect.borrow_mut().x -= 10; + moved = true; } Keycode::Right => { rect.borrow_mut().x += 10; + moved = true; } Keycode::Up => { rect.borrow_mut().y -= 10; + moved = true; } Keycode::Down => { 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(); canvas.set_draw_color(BLACK); canvas.clear(); canvas.set_draw_color(WHITE); - canvas.fill_rect(rect.borrow().clone()); + canvas.fill_rect(rect.borrow().clone()).expect("could not draw rectangle"); canvas.present(); };