diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | pixel-client/Cargo.toml | 2 | ||||
-rw-r--r-- | pixel-client/assets/textures/itembubble.ta | 128 | ||||
-rw-r--r-- | pixel-client/src/game.rs | 71 | ||||
-rw-r--r-- | pixel-client/src/render/misc.rs | 4 | ||||
-rw-r--r-- | pixel-client/src/render/sprite.rs | 14 |
6 files changed, 101 insertions, 119 deletions
@@ -2,3 +2,4 @@ /test-client/*.js /specs/*.html /client/menu/book/book_*.webp* +*~ diff --git a/pixel-client/Cargo.toml b/pixel-client/Cargo.toml index d319457f..8104a384 100644 --- a/pixel-client/Cargo.toml +++ b/pixel-client/Cargo.toml @@ -20,7 +20,7 @@ rustls = { version = "0.23.12", features = ["ring"] } rand = "0.9.0-alpha.2" xdg = "2.5.2" toml = "0.8.19" -serde = { version = "1.0.207", featues = ["derive"] } +serde = { version = "1.0.207", features = ["derive"] } users = "0.11.0" [features] diff --git a/pixel-client/assets/textures/itembubble.ta b/pixel-client/assets/textures/itembubble.ta index 6c13fb31..02b6b1bb 100644 --- a/pixel-client/assets/textures/itembubble.ta +++ b/pixel-client/assets/textures/itembubble.ta @@ -1,96 +1,32 @@ -tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt -tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt -tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt -tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt -tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt -tttttttttttttccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccttttttttttttt -ttttttttttcccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccctttttttttt -ttttttttccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcctttttttt -tttttttcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcttttttt -tttttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttttt -ttttttcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffctttttt -ttttttfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffftttttt -ttttttfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffftttttt -tttttcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -tttttkfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt -ttttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffkttttt -ttttttfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffftttttt -ttttttkffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffftttttt -tttttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffktttttt -tttttttkfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttttt -ttttttttkfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffkttttttt -tttttttttkkfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffkktttttttt -tttttttttttkkkfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffkkktttttttttt -ttttttttttttttkkkkkkkkkkkkkkkkkkkkkkkffffffffffffffffffffffkkkkkkkkkkkkkkkkkkkkkkkkttttttttttttt -tttttttttttttttttttttttttttttttttttttkkkffffffffffffffffkkkttttttttttttttttttttttttttttttttttttt -ttttttttttttttttttttttttttttttttttttttttkkkffffffffffkkktttttttttttttttttttttttttttttttttttttttt -tttttttttttttttttttttttttttttttttttttttttttkkkffffkkkttttttttttttttttttttttttttttttttttttttttttt -ttttttttttttttttttttttttttttttttttttttttttttttkffktttttttttttttttttttttttttttttttttttttttttttttt + + + eeeeeeeeeeeeeeeeeeeeee + ejjjjjjjjjjjjjjjjjjjjjje + ejjjjjjjjjjjjjjjjjjjjjjjje + ejjjjjjjjjjjjjjjjjjjjjjjjjje + jjjjjjjjjjjjjjjjjjjjjjjjjjjj + jjjjjjjjjjjjjjjjjjjjjjjjjjjj + jjjjjjjjjjjjjjjjjjjjjjjjjjjj + jjjjjjjjjjjjjjjjjjjjjjjjjjjj + jjjjjjjjjjjjjjjjjjjjjjjjjjjj + jjjjjjjjjjjjjjjjjjjjjjjjjjjj + jjjjjjjjjjjjjjjjjjjjjjjjjjjj + jjjjjjjjjjjjjjjjjjjjjjjjjjjj + jjjjjjjjjjjjjjjjjjjjjjjjjjjj + jjjjjjjjjjjjjjjjjjjjjjjjjjjj + jjjjjjjjjjjjjjjjjjjjjjjjjjjj + jjjjjjjjjjjjjjjjjjjjjjjjjjjj + jjjjjjjjjjjjjjjjjjjjjjjjjjjj + jjjjjjjjjjjjjjjjjjjjjjjjjjjj + jjjjjjjjjjjjjjjjjjjjjjjjjjjj + jjjjjjjjjjjjjjjjjjjjjjjjjjjj + jjjjjjjjjjjjjjjjjjjjjjjjjjjj + jjjjjjjjjjjjjjjjjjjjjjjjjjjj + mjjjjjjjjjjjjjjjjjjjjjjjjjjm + mjjjjjjjjjjjjjjjjjjjjjjjjm + mjjjjjjjjjjjjjjjjjjjjjjm + mmmmjjjjjjjjjjjjjjmmmm + mmmjjjjjjjjmmm + mmjjjjmm + mjjm + mm 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) + } + } +} diff --git a/pixel-client/src/render/misc.rs b/pixel-client/src/render/misc.rs index 7a631154..77dc52b0 100644 --- a/pixel-client/src/render/misc.rs +++ b/pixel-client/src/render/misc.rs @@ -25,7 +25,7 @@ pub struct MiscTextures { pub interact_target: Sprite, pub solid: Rect, pub clouds: Rect, - pub itembubble: Rect, + pub itembubble: Sprite, } impl MiscTextures { @@ -40,7 +40,7 @@ impl MiscTextures { ), solid: *layout.get("solid+a").unwrap(), clouds: *layout.get("clouds+a").unwrap(), - itembubble: *layout.get("itembubble+a").unwrap(), + itembubble: Sprite::new(*layout.get("itembubble+a").unwrap(), Vec2::Y * -1., 1.), } } } diff --git a/pixel-client/src/render/sprite.rs b/pixel-client/src/render/sprite.rs index 292a99ab..7d0a195a 100644 --- a/pixel-client/src/render/sprite.rs +++ b/pixel-client/src/render/sprite.rs @@ -89,6 +89,20 @@ impl SpriteDraw { self.tint[2] = b; self } + pub fn elevate(mut self, offset: f32) -> SpriteDraw { + self.z_order += (offset * 24.) as i32; + self.dst.set_y(self.dst.y() - offset); + self + } + pub fn scale(mut self, factor: f32) -> SpriteDraw { + self.dst + .set_x(self.dst.x() + self.dst.width() * 0.5 * (1. - factor)); + self.dst + .set_y(self.dst.y() + self.dst.height() * 0.5 * (1. - factor)); + self.dst.set_width(self.dst.width() * factor); + self.dst.set_height(self.dst.height() * factor); + self + } } impl Ord for SpriteDraw { |