aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--pixel-client/Cargo.toml2
-rw-r--r--pixel-client/assets/textures/itembubble.ta128
-rw-r--r--pixel-client/src/game.rs71
-rw-r--r--pixel-client/src/render/misc.rs4
-rw-r--r--pixel-client/src/render/sprite.rs14
6 files changed, 101 insertions, 119 deletions
diff --git a/.gitignore b/.gitignore
index 4ca6a071..ff418aaf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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 {