diff options
Diffstat (limited to 'pixel-client/src/game.rs')
-rw-r--r-- | pixel-client/src/game.rs | 71 |
1 files changed, 51 insertions, 20 deletions
diff --git a/pixel-client/src/game.rs b/pixel-client/src/game.rs index b253ecbe..6bb30e68 100644 --- a/pixel-client/src/game.rs +++ b/pixel-client/src/game.rs @@ -29,7 +29,7 @@ use hurrycurry_client_lib::{network::sync::Network, spatial_index::SpatialIndex} use hurrycurry_protocol::{ glam::{IVec2, Vec2}, movement::MovementBase, - Gamedata, ItemIndex, ItemLocation, PacketC, PacketS, PlayerID, Score, TileIndex, + Gamedata, ItemIndex, ItemLocation, Message, PacketC, PacketS, PlayerID, Score, TileIndex, }; use log::{info, warn}; use sdl2::{ @@ -66,6 +66,7 @@ pub struct Tile { pub struct Player { movement: MovementBase, item: Option<Item>, + message_persist: Option<Message>, _name: String, _character: i32, interact_target_anim: Vec2, @@ -269,6 +270,7 @@ impl Game { interact_target_anim: position, _character: character, _name: name, + message_persist: None, item: None, movement: MovementBase { position, @@ -332,9 +334,6 @@ impl Game { } => { self.get_item(item).as_mut().unwrap().progress = progress.map(|s| (s, warn)); } - PacketC::Communicate { .. } => { - // TODO - } PacketC::ServerMessage { text: _ } => { // TODO } @@ -344,6 +343,17 @@ impl Game { PacketC::SetIngame { state: _, lobby: _ } => { // TODO } + PacketC::Communicate { + player, + message, + persist, + } => { + if persist { + if let Some(player) = self.players.get_mut(&player) { + player.message_persist = message; + } + } + } PacketC::Error { message } => { warn!("server error: {message:?}") } @@ -382,25 +392,15 @@ impl Game { } for p in self.players.values() { - ctx.draw_world( - if p._character >= 0 { - &self.misc_textures.chef - } else { - &self.misc_textures.customer - } - .at(p.movement.position), - ); - if let Some(item) = &p.item { - item.draw(ctx, &self.item_sprites, &self.misc_textures) - } + p.draw(ctx, &self.item_sprites) } for tile in self.tiles.values() { if let Some(item) = &tile.item { - item.draw(ctx, &self.item_sprites, &self.misc_textures) + item.draw(ctx, &self.item_sprites) } } for item in &self.items_removed { - item.draw(ctx, &self.item_sprites, &self.misc_textures) + item.draw(ctx, &self.item_sprites) } } } @@ -410,7 +410,7 @@ impl Item { self.position.exp_to(self.parent_position, dt * 20.); self.alive.exp_to(alive, dt * 20.) } - pub fn draw(&self, ctx: &mut Renderer, item_sprites: &[Sprite], misc: &MiscTextures) { + pub fn draw(&self, ctx: &mut Renderer, item_sprites: &[Sprite]) { ctx.draw_world( item_sprites[self.kind.0] .at(self.position) @@ -423,13 +423,13 @@ impl Item { ([0, 100, 0, 200], [0, 255, 0, 200]) }; ctx.draw_world(SpriteDraw::overlay( - misc.solid, + ctx.misc_textures.solid, self.position + Vec2::new(-0.5, -1.3), Vec2::new(1., 0.2), Some(bg), )); ctx.draw_world(SpriteDraw::overlay( - misc.solid, + ctx.misc_textures.solid, self.position + Vec2::new(-0.5, -1.3), Vec2::new(progress, 0.2), Some(fg), @@ -437,3 +437,34 @@ impl Item { } } } + +impl Player { + pub fn draw(&self, ctx: &mut Renderer, item_sprites: &[Sprite]) { + ctx.draw_world( + if self._character >= 0 { + &ctx.misc_textures.chef + } else { + &ctx.misc_textures.customer + } + .at(self.movement.position), + ); + if let Some(message) = &self.message_persist { + match message { + Message::Text(_) => (), // TODO + Message::Item(item) => { + ctx.draw_world(ctx.misc_textures.itembubble.at(self.movement.position)); + ctx.draw_world( + item_sprites[item.0] + .at(self.movement.position) + .elevate(1.2) + .scale(0.8), + ); + } + _ => (), + } + } + if let Some(item) = &self.item { + item.draw(ctx, &item_sprites) + } + } +} |