diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..35a85c1 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,3 @@ +[workspace] +members = ["vash_caster", "caster_editor"] +resolver = "2" diff --git a/caster_editor/Cargo.toml b/caster_editor/Cargo.toml new file mode 100644 index 0000000..04e1b06 --- /dev/null +++ b/caster_editor/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "caster_editor" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/caster_editor/src/main.rs b/caster_editor/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/caster_editor/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/vash_caster/Cargo.toml b/vash_caster/Cargo.toml new file mode 100644 index 0000000..8a9d8a7 --- /dev/null +++ b/vash_caster/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "vash_caster" +version = "0.1.0" +edition = "2021" +default-run = "vash_caster" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +sdl2 = { version = "0.36", features = ["gfx"] } +rand = "0.8" diff --git a/vash_caster/src/lib.rs b/vash_caster/src/lib.rs new file mode 100644 index 0000000..c5fd832 --- /dev/null +++ b/vash_caster/src/lib.rs @@ -0,0 +1,100 @@ +extern crate rand; +extern crate sdl2; + +use sdl2::event::Event; +use sdl2::gfx::primitives::DrawRenderer; +use sdl2::keyboard::Keycode; +use sdl2::pixels::Color; + +use std::error::Error; +use std::time::Duration; + +use rand::prelude::*; + +pub fn run() -> Result<(), Box> { + let sdl_context = sdl2::init()?; + let video_subsystem = sdl_context.video()?; + + let window = video_subsystem + .window("Vash Caster", 800, 600) + .position_centered() + .opengl() + .build() + .map_err(|e| e.to_string())?; + + let mut canvas = window.into_canvas().build().map_err(|e| e.to_string())?; + + let mut event_pump = sdl_context.event_pump()?; + + let mut rng = rand::thread_rng(); + let mut d_x = rng.gen_range(1..=5); + let mut d_y = rng.gen_range(1..=5); + let mut cur_x = rng.gen_range(0..=800); + let mut cur_y = rng.gen_range(0..=600); + let mut ball_color = Color::RGB( + rng.gen_range(0..=255), + rng.gen_range(0..=255), + rng.gen_range(0..=255), + ); + + 'running: loop { + canvas.set_draw_color(Color::RGB(0, 0, 0)); + canvas.clear(); + canvas.filled_circle(cur_x, cur_y, 10, ball_color)?; + canvas.present(); + for event in event_pump.poll_iter() { + match event { + Event::Quit { .. } + | Event::KeyDown { + keycode: Some(Keycode::Escape), + .. + } => break 'running, + _ => {} + } + } + + cur_x += d_x; + + if cur_x < 0 { + cur_x = 0; + ball_color = Color::RGB( + rng.gen_range(0..=255), + rng.gen_range(0..=255), + rng.gen_range(0..=255), + ); + d_x = rng.gen_range(1..=5); + } else if cur_x > 800 { + cur_x = 800; + ball_color = Color::RGB( + rng.gen_range(0..=255), + rng.gen_range(0..=255), + rng.gen_range(0..=255), + ); + d_x = rng.gen_range(-5..=-1); + } + + cur_y += d_y; + + if cur_y < 0 { + cur_y = 0; + ball_color = Color::RGB( + rng.gen_range(0..=255), + rng.gen_range(0..=255), + rng.gen_range(0..=255), + ); + d_y = rng.gen_range(1..=5); + } else if cur_y > 600 { + cur_y = 600; + ball_color = Color::RGB( + rng.gen_range(0..=255), + rng.gen_range(0..=255), + rng.gen_range(0..=255), + ); + d_y = rng.gen_range(-5..=-1); + } + + ::std::thread::sleep(Duration::new(0, 1_000_000_000u32 / 144)); + } + + Ok(()) +} diff --git a/vash_caster/src/main.rs b/vash_caster/src/main.rs new file mode 100644 index 0000000..7d87659 --- /dev/null +++ b/vash_caster/src/main.rs @@ -0,0 +1,9 @@ +use vash_caster::run; + +use std::process; +fn main() { + if let Err(e) = run() { + println!("An error has occured: {e}"); + process::exit(1); + } +}