aboutsummaryrefslogtreecommitdiff
path: root/light-client/src/game.rs
diff options
context:
space:
mode:
Diffstat (limited to 'light-client/src/game.rs')
-rw-r--r--light-client/src/game.rs26
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() {