From 10d9db6e95805ac0ba631bd951baef2fb782441f Mon Sep 17 00:00:00 2001 From: Xevion Date: Sun, 14 Apr 2024 01:49:53 -0500 Subject: [PATCH] Simplify code --- .github/workflows/deploy.yaml | 2 +- src/lib.rs | 50 --------------------- src/main.rs | 84 ++++++++++++++++++++++++++--------- 3 files changed, 64 insertions(+), 72 deletions(-) delete mode 100644 src/lib.rs diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 7ee83fd..36aee2f 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -9,7 +9,7 @@ jobs: pages: write id-token: write steps: - - uses: actions/checkout@v2 # repo checkout + - uses: actions/checkout@v2 - uses: mymindstorm/setup-emsdk@v11 with: diff --git a/src/lib.rs b/src/lib.rs deleted file mode 100644 index b1d0724..0000000 --- a/src/lib.rs +++ /dev/null @@ -1,50 +0,0 @@ -use std::cell::RefCell; -use std::process; -use std::rc::Rc; - -use sdl2::event::Event; -use sdl2::keyboard::Keycode; -use sdl2::pixels::Color; -use sdl2::rect::Rect; -use sdl2::render::WindowCanvas; -use sdl2::Sdl; - -#[cfg(target_family = "wasm")] -pub mod emscripten; - -static BLACK: Color = Color::RGB(0, 0, 0); -static WHITE: Color = Color::RGB(255, 255, 255); - -pub fn main_loop(ctx: Rc>, rect: Rc>, canvas: Rc>) -> impl FnMut() { - let mut events = ctx.borrow_mut().event_pump().unwrap(); - - move || { - for event in events.poll_iter() { - match event { - Event::Quit {..} | Event::KeyDown {keycode: Some(Keycode::Escape), ..} => { - process::exit(1); - }, - Event::KeyDown { keycode: Some(Keycode::Left), ..} => { - rect.borrow_mut().x -= 10; - }, - Event::KeyDown { keycode: Some(Keycode::Right), ..} => { - rect.borrow_mut().x += 10; - }, - Event::KeyDown { keycode: Some(Keycode::Up), ..} => { - rect.borrow_mut().y -= 10; - }, - Event::KeyDown { keycode: Some(Keycode::Down), ..} => { - rect.borrow_mut().y += 10; - }, - _ => {} - } - } - - let _ = canvas.borrow_mut().set_draw_color(BLACK); - let _ = canvas.borrow_mut().clear(); - let _ = canvas.borrow_mut().set_draw_color(WHITE); - let _ = canvas.borrow_mut().fill_rect(rect.borrow().clone()); - let _ = canvas.borrow_mut().present(); - } - -} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 73f6e43..fa4e10e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,40 +1,35 @@ use std::cell::RefCell; +use std::process; use std::rc::Rc; +use sdl2::event::Event; +use sdl2::keyboard::Keycode; +use sdl2::pixels::Color; use sdl2::rect::Rect; -use pacman::main_loop; +static BLACK: Color = Color::RGB(0, 0, 0); +static WHITE: Color = Color::RGB(255, 255, 255); -// Resources -// https://developer.mozilla.org/en-US/docs/WebAssembly/Rust_to_Wasm -// https://puddleofcode.com/story/definitive-guide-to-rust-sdl2-and-emscriptem/ - -// To build locally: -// cargo run - -// To build for the web: -// rustup target add asmjs-unknown-emscripten // export EMCC_CFLAGS="-s USE_SDL=2" // cargo build --target asmjs-unknown-emscripten && open index.html + fn main() { let ctx = sdl2::init().unwrap(); let video_ctx = ctx.video().unwrap(); - let window = match video_ctx + let window = match video_ctx .window("Hello, Rust / SDL2 / WASM!", 640, 480) .position_centered() .opengl() - .build() { + .build() + { Ok(window) => window, - Err(err) => panic!("failed to create window: {}", err) + Err(err) => panic!("failed to create window: {}", err), }; - let canvas = match window - .into_canvas() - .present_vsync() - .build() { + let canvas = match window.into_canvas().present_vsync().build() { Ok(canvas) => canvas, - Err(err) => panic!("failed to create canvas: {}", err) + Err(err) => panic!("failed to create canvas: {}", err), }; let rect = Rect::new(0, 0, 10, 10); @@ -43,19 +38,66 @@ fn main() { let rect = Rc::new(RefCell::new(rect)); let canvas = Rc::new(RefCell::new(canvas)); + let mut events = ctx.borrow_mut().event_pump().unwrap(); + + let mut main_loop = move || { + for event in events.poll_iter() { + match event { + Event::Quit { .. } + | Event::KeyDown { + keycode: Some(Keycode::Escape), + .. + } => { + process::exit(1); + } + Event::KeyDown { + keycode: Some(Keycode::Left), + .. + } => { + rect.borrow_mut().x -= 10; + } + Event::KeyDown { + keycode: Some(Keycode::Right), + .. + } => { + rect.borrow_mut().x += 10; + } + Event::KeyDown { + keycode: Some(Keycode::Up), + .. + } => { + rect.borrow_mut().y -= 10; + } + Event::KeyDown { + keycode: Some(Keycode::Down), + .. + } => { + rect.borrow_mut().y += 10; + } + _ => {} + } + } + + let _ = canvas.borrow_mut().set_draw_color(BLACK); + let _ = canvas.borrow_mut().clear(); + let _ = canvas.borrow_mut().set_draw_color(WHITE); + let _ = canvas.borrow_mut().fill_rect(rect.borrow().clone()); + let _ = canvas.borrow_mut().present(); + }; + #[cfg(target_family = "wasm")] use pacman::emscripten; #[cfg(target_family = "wasm")] - emscripten::set_main_loop_callback(main_loop(Rc::clone(&ctx), Rc::clone(&rect), Rc::clone(&canvas))); + emscripten::set_main_loop_callback(main_loop); #[cfg(not(target_family = "wasm"))] { use std::thread::sleep; use std::time::Duration; loop { - main_loop(Rc::clone(&ctx), Rc::clone(&rect), Rc::clone(&canvas))(); + main_loop(); sleep(Duration::from_millis(10)) } } -} \ No newline at end of file +}