diff --git a/src/app.rs b/src/app.rs index c1bd66d..fb31c78 100644 --- a/src/app.rs +++ b/src/app.rs @@ -83,8 +83,9 @@ impl App { if self.input.down(Key::D) { self.game.player.hspeed = spd; } - if self.input.pressed(Key::W) { + if self.input.down(Key::W) && self.game.player.can_jump() { self.game.player.vspeed = -10.0; + self.game.player.jumps_left = 0; } let terminal_velocity = 60.0; self.game.player.vspeed = self @@ -108,6 +109,9 @@ impl App { let en = s2dc::Entity::from_rect_corners(x, y, x + tsize, y + tsize); if player_en.would_collide(&en, off) { col = true; + if self.game.player.vspeed > 0. { + self.game.player.jumps_left = 1; + } self.game.player.vspeed = 0.; } }); diff --git a/src/game/player.rs b/src/game/player.rs index a89291e..52f93e4 100644 --- a/src/game/player.rs +++ b/src/game/player.rs @@ -9,6 +9,7 @@ pub struct Player { pub col_en: MobileEntity, pub vspeed: f32, pub hspeed: f32, + pub jumps_left: u8, } impl Player { @@ -17,6 +18,7 @@ impl Player { col_en: MobileEntity::from_pos_and_bb(vec2(pos.x as i32, pos.y as i32), vec2(15, 24)), vspeed: 0.0, hspeed: 0.0, + jumps_left: 0, } } pub fn center_tp(&self) -> TilePos { @@ -25,4 +27,7 @@ impl Player { y: (self.col_en.en.pos.y / TILE_SIZE as i32) as TilePosScalar, } } + pub fn can_jump(&self) -> bool { + self.jumps_left > 0 + } }