|
@@ -1,3 +1,124 @@
|
|
|
+extern crate sdl2;
|
|
|
+
|
|
|
+use sdl2::Sdl;
|
|
|
+use sdl2::video::{Window};
|
|
|
+use sdl2::image::LoadTexture;
|
|
|
+
|
|
|
+use sdl2::event::Event;
|
|
|
+use sdl2::keyboard::Keycode;
|
|
|
+
|
|
|
+use sdl2::rect::Rect;
|
|
|
+
|
|
|
+use std::path::Path;
|
|
|
+
|
|
|
+
|
|
|
+const WIDTH:u32 = 1280;
|
|
|
+const HEIGHT:u32 = 960;
|
|
|
+
|
|
|
+
|
|
|
+// it looks like returning the Canvas is still the best route to take
|
|
|
+fn init() -> (Sdl, Window) {
|
|
|
+ let context = match sdl2::init() {
|
|
|
+ Ok(context) => context,
|
|
|
+ Err(err) => panic!("Could not initialize SDL2. Error: {}", err),
|
|
|
+ };
|
|
|
+
|
|
|
+ let video = match context.video() {
|
|
|
+ Ok(video) => video,
|
|
|
+ Err(err) => panic!("Could not gain access to the SDL2 video subsystem. Error: {}", err),
|
|
|
+ };
|
|
|
+
|
|
|
+ let window = match video.window("Drop Game", WIDTH, HEIGHT)
|
|
|
+ .position_centered()
|
|
|
+ .opengl()
|
|
|
+ .build() {
|
|
|
+ Ok(window) => window,
|
|
|
+ Err(err) => panic!("Could not create window. Error: {}", err),
|
|
|
+ };
|
|
|
+
|
|
|
+ return (context, window)
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
fn main() {
|
|
|
- println!("Hello, world!");
|
|
|
+
|
|
|
+ let mut running: bool = true;
|
|
|
+ let mut blitx: i32 = 7;
|
|
|
+ let mut blity: i32 = 5;
|
|
|
+
|
|
|
+ let mut blitrect = Rect::new(blitx * 80, blity * 80, 80, 80);
|
|
|
+
|
|
|
+ let (context, window) = init();
|
|
|
+
|
|
|
+ let mut canvas = match window.into_canvas()
|
|
|
+ .build() {
|
|
|
+ Ok(canvas) => canvas,
|
|
|
+ Err(err) => panic!("Could not create canvas from window. Error: {}", err),
|
|
|
+ };
|
|
|
+
|
|
|
+ let tc = canvas.texture_creator();
|
|
|
+
|
|
|
+ let texture = match tc.load_texture(&Path::new("assets/blip1.png")) {
|
|
|
+ Ok(texture) => texture,
|
|
|
+ Err(err) => panic!("Could not load png: {}", err)
|
|
|
+ };
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ let mut pump = match context.event_pump() {
|
|
|
+ Ok(pump) => pump,
|
|
|
+ Err(err) => panic!("Could not start pumping: {}", err)
|
|
|
+ };
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ while running {
|
|
|
+ // pull all pending events
|
|
|
+ for event in pump.poll_iter() {
|
|
|
+ match event {
|
|
|
+ // apparently '{..}' means "with whatever fields"
|
|
|
+ Event::Quit {..} => {
|
|
|
+ running = false
|
|
|
+ },
|
|
|
+
|
|
|
+ Event::KeyDown { keycode: k, .. } => match k {
|
|
|
+ Some(Keycode::Escape) | Some(Keycode::Q) => {
|
|
|
+ running = false
|
|
|
+ },
|
|
|
+ Some(Keycode::Up) => {
|
|
|
+ if blity >= 1 { blity -= 1; }
|
|
|
+ },
|
|
|
+ Some(Keycode::Down) => {
|
|
|
+ if blity < 11 { blity += 1; }
|
|
|
+ },
|
|
|
+ Some(Keycode::Left) => {
|
|
|
+ if blitx >= 1 { blitx -= 1; }
|
|
|
+ },
|
|
|
+ Some(Keycode::Right) => {
|
|
|
+ if blitx < 15 { blitx += 1; }
|
|
|
+ },
|
|
|
+ Some(_) => { },
|
|
|
+ None => {}
|
|
|
+ },
|
|
|
+
|
|
|
+ _ => {}
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ blitrect.set_x(blitx * 80);
|
|
|
+ blitrect.set_y(blity * 80);
|
|
|
+
|
|
|
+ canvas.clear();
|
|
|
+ match canvas.copy(&texture, None, blitrect) {
|
|
|
+ Ok(()) => (), // no return value == success
|
|
|
+ Err(err) => panic!("Could not render texture: {}", err),
|
|
|
+ };
|
|
|
+
|
|
|
+ canvas.present();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
+
|