use cat_box::{Game, Sprite, SpriteCollection, get_keyboard_state, draw_text,physics::*,vec2::*}; use std::{time}; use sdl2::keyboard::Scancode; /* keep track of accel, vel and pos every tick: 1. pos += vel 2. vel += accel 3. accel = (calculate from arrow keys) + (0, -9.8) */ fn main() { let game = Game::new("Running", 500, 500); //main sprite introductions let mut i = 255u8; //gravity setup //let meter = 13; let now = time::Instant::now(); let mut pos = Vec2::new(0.0,0.0); let mut vel = Vec2::new(0.0,0.0); let mut acc = Vec2::new(0.0,0.0); let mut background = SpriteCollection::new(); let mut run1 = Sprite::new("runner_0.png", 200, 320).unwrap(); let sun = Sprite::new("sun.png", 50, 50).unwrap(); let grass = Sprite::new("grass.png", 250, 450).unwrap(); /* let mut grav = Gravity::new(2.0); grav.set(0.0, 3.0); */ background.push(sun); background.push(grass); /* sprites.push(stand); let _guy = State { running: false, jumping: false };*/ //sleeper agent //let sleep = thread::sleep; //let step = time::Duration::from_millis; //main game loop game.run(|ctx|{ let keys = get_keyboard_state(ctx).keys; if i<200{ i = i + 10; }else if i >= 255{ i=200; } let (x,y) = run1.position(); let check = check_for_collision(&run1, &background.get(1).unwrap()); if x < 0 { run1.translate((x*-1+5,0)); } else if x > 500 { run1.translate((500-x-5,0)); } //- run1.rect.height() as i32 if y < 0{ run1.translate((0,y - run1.rect.height() as i32)) }else if y > 320 { run1.translate((0,5)); } if !check { run1.translate((0,-2)); } draw_text( ctx, format!("x is {} and y is {}, {:?} Seconds have passed", x, y, now.elapsed().as_secs()), "MesloLGS.ttf", 15, (250,100), cat_box::TextMode::Shaded { foreground: (255, 255, 255), background: (0, 0, 0), }, ).unwrap(); draw_text(ctx, format!("tf: {:?}", check), "MesloLGS.ttf", 15, (250 , 200), cat_box::TextMode::Shaded { foreground: (255, 255, 255), background: (0, 0, 0), }, ).unwrap(); for key in keys { /*let jumper = match key { Scancode::Up => (0,150,true), _ => (0,0,false), };*/ let offset = match key { Scancode::Escape | Scancode::Q => { game.terminate(); (0, 0) } Scancode::W | Scancode::Up => (0,-5), Scancode::S | Scancode::Down => (0, 5), Scancode::A | Scancode::Left => (-5, 0), Scancode::D | Scancode::Right => (5, 0), _ => (0, 0), }; let offsetvec = Vec2::new(offset.0 as f32, offset.1 as f32); pos += vel; vel += acc; acc = Vec2::new(0.0, -9.8) + offsetvec; //run1.translate((pos.0)) run1.translate((pos.x as i32,pos.y as i32)); } ctx.set_background_colour(129, 201, i); background.draw(ctx).unwrap(); run1.draw(ctx).unwrap(); }).unwrap(); }