diff options
-rw-r--r-- | light-client/assets/misc.ini | 1 | ||||
-rw-r--r-- | light-client/assets/textures/solid.ta | 1 | ||||
-rw-r--r-- | light-client/src/game.rs | 22 | ||||
-rw-r--r-- | light-client/src/render/mod.rs | 2 | ||||
-rw-r--r-- | light-client/src/render/sprite.rs | 2 | ||||
-rw-r--r-- | server/protocol/src/movement.rs | 4 |
6 files changed, 27 insertions, 5 deletions
diff --git a/light-client/assets/misc.ini b/light-client/assets/misc.ini index 94eb3adc..ba408323 100644 --- a/light-client/assets/misc.ini +++ b/light-client/assets/misc.ini @@ -1,3 +1,4 @@ player=player +solid=solid costumer=costumer diff --git a/light-client/assets/textures/solid.ta b/light-client/assets/textures/solid.ta new file mode 100644 index 00000000..78981922 --- /dev/null +++ b/light-client/assets/textures/solid.ta @@ -0,0 +1 @@ +a diff --git a/light-client/src/game.rs b/light-client/src/game.rs index ac5c3571..231f6bd1 100644 --- a/light-client/src/game.rs +++ b/light-client/src/game.rs @@ -42,6 +42,7 @@ pub struct Game { misc_textures: MiscTextures, item_sprites: Vec<Sprite>, movement_send_cooldown: f32, + interacting: bool, } pub struct Tile { @@ -71,6 +72,7 @@ impl Game { movement_send_cooldown: 0., misc_textures: MiscTextures::init(renderer), item_sprites: Vec::new(), + interacting: false, } } @@ -86,10 +88,13 @@ impl Game { Sprite::new( renderer .metadata() - .get(&format!("{name}:a")) + .get(&format!("{name}+a")) .copied() - .unwrap_or(Rect::new(0, 0, 32, 24)), - Vec2::ZERO, + .unwrap_or_else(|| { + warn!("no sprite for item {name:?}"); + Rect::new(0, 0, 32, 24) + }), + Vec2::new(0., 0.0), 0.1, ) }) @@ -214,6 +219,17 @@ impl Game { self.movement_send_cooldown += 0.04 } + if interact != self.interacting { + if interact { + packet_out.push_back(PacketS::Interact { + pos: Some(self.players[&self.my_id].movement.get_interact_target()), + }); + } else { + packet_out.push_back(PacketS::Interact { pos: None }); + } + self.interacting = interact; + } + for (pid, player) in &mut self.players { if *pid == self.my_id { let movement_packet = diff --git a/light-client/src/render/mod.rs b/light-client/src/render/mod.rs index fbf3d7a5..d5fba315 100644 --- a/light-client/src/render/mod.rs +++ b/light-client/src/render/mod.rs @@ -151,7 +151,7 @@ impl MiscTextures { player: Sprite::new( *renderer.metadata().get("player+a").unwrap(), Vec2::Y * 0.3, - 0., + 0.5 + 0.3, ), } } diff --git a/light-client/src/render/sprite.rs b/light-client/src/render/sprite.rs index c19f8392..b45e85b3 100644 --- a/light-client/src/render/sprite.rs +++ b/light-client/src/render/sprite.rs @@ -22,7 +22,7 @@ impl Sprite { } } pub fn new_tile(src: Rect) -> Self { - Self::new(src, Vec2::new(0.5, 1.0), 0.) + Self::new(src, Vec2::new(0.5, 1.0), 0.5) } pub fn at(&self, pos: Vec2) -> SpriteDraw { SpriteDraw { diff --git a/server/protocol/src/movement.rs b/server/protocol/src/movement.rs index 486da816..5a96155f 100644 --- a/server/protocol/src/movement.rs +++ b/server/protocol/src/movement.rs @@ -81,6 +81,10 @@ impl MovementBase { rot: self.rotation, } } + + pub fn get_interact_target(&self) -> IVec2 { + (self.position + Vec2::new(self.rotation.sin(), self.rotation.cos())).as_ivec2() + } } pub fn collide_player(p: &mut MovementBase, map: &HashSet<IVec2>) { |