diff options
Diffstat (limited to 'light-client/src/game.rs')
-rw-r--r-- | light-client/src/game.rs | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/light-client/src/game.rs b/light-client/src/game.rs index 13e50a2e..7d8e466a 100644 --- a/light-client/src/game.rs +++ b/light-client/src/game.rs @@ -16,6 +16,7 @@ */ use crate::{ + helper::Vec2InterpolateExt, render::{ misc::MiscTextures, sprite::{Sprite, SpriteDraw}, @@ -43,6 +44,7 @@ pub struct Game { players: HashMap<PlayerID, Player>, my_id: PlayerID, + camera_center: Vec2, misc_textures: MiscTextures, item_sprites: Vec<Sprite>, movement_send_cooldown: f32, @@ -90,6 +92,7 @@ impl Game { item_sprites: Vec::new(), interacting: false, score: Score::default(), + camera_center: Vec2::ZERO, } } @@ -273,17 +276,18 @@ impl Game { self.interacting = interact; } - for (pid, player) in &mut self.players { - if *pid == self.my_id { - let movement_packet = - player - .movement - .update(&self.collision_map, direction, boost, dt); - - if send_movement { - packet_out.push_back(movement_packet); - } + if let Some(player) = self.players.get_mut(&self.my_id) { + let movement_packet = player + .movement + .update(&self.collision_map, direction, boost, dt); + if send_movement { + packet_out.push_back(movement_packet); } + + self.camera_center.exp_to(player.movement.position, dt * 5.); + } + + for (_pid, player) in &mut self.players { if let Some(item) = &mut player.item { item.position = player.movement.position } @@ -296,6 +300,8 @@ impl Game { } pub fn draw(&self, ctx: &mut SpriteRenderer) { + ctx.set_view(-self.camera_center + (ctx.size / ctx.get_scale() / 2.), 1.); + self.tilemap.draw(ctx); for p in self.players.values() { |