From 21fd393336a65e8082f330a5f85d0801b374bd83 Mon Sep 17 00:00:00 2001 From: ghostly_zsh Date: Sat, 29 Mar 2025 01:04:27 -0500 Subject: [PATCH] mining button --- crates/client/src/networking/mod.rs | 1 + crates/client/src/ui/mod.rs | 21 ++++++++++++++------- crates/common/src/packet.rs | 13 +++++++++++++ crates/server/src/player/mod.rs | 11 +++++++++-- 4 files changed, 37 insertions(+), 9 deletions(-) diff --git a/crates/client/src/networking/mod.rs b/crates/client/src/networking/mod.rs index aa0d18023bcd1bc2e175812270c3cd59b2578586..88b63565aef80391038fc9a5e08103d719b346e4 100644 --- a/crates/client/src/networking/mod.rs +++ b/crates/client/src/networking/mod.rs @@ -75,6 +75,7 @@ pub fn send_packet_event(packet: Packet, world: &mut World) { Packet::PlayerInput(e) => send_event(e, world), Packet::PlayerMouseInput(e) => send_event(e, world), Packet::RequestSave(e) => send_event(e, world), + Packet::RequestMining(e) => send_event(e, world), Packet::_SpecialDisconnect(e) => send_event(e, world), LoginResponse(e) => send_event(e, world), SpawnPlayer(e) => send_event(e, world), diff --git a/crates/client/src/ui/mod.rs b/crates/client/src/ui/mod.rs index ff544eb686ce1b7472748908a7a00d21ded678a1..bc4eeca12d4cbb0d02af53e2b57f5764921172fa 100644 --- a/crates/client/src/ui/mod.rs +++ b/crates/client/src/ui/mod.rs @@ -3,14 +3,14 @@ mod widgets; use std::f32; -use crate::components::{Camera, Chat, Menu, Player, PlayerResources, SendPacket, Transform}; +use crate::components::{Camera, Chat, Menu, Player, PlayerResources, SendPacket, ServerId, Transform}; use crate::ui::widgets::{progress_bar, RichTextExt}; use bevy_ecs::entity::Entity; use bevy_ecs::event::Events; use bevy_ecs::prelude::With; use bevy_ecs::world::World; use egui::{Align, Align2, CursorIcon, Layout, Margin, Order, RichText, Shadow, Visuals}; -use starkingdoms_common::packet::{Packet, SendMessagePacket}; +use starkingdoms_common::packet::{Packet, RequestMiningPacket, SendMessagePacket}; pub fn init_ui(ctx: egui::Context) { // set colors @@ -56,7 +56,7 @@ pub fn draw_ui( ) { draw_status_bar(ctx, world); draw_chat(ctx, world, send_packet_events); - draw_crafting(ctx, world); + draw_crafting(ctx, world, send_packet_events); } pub fn draw_status_bar(ctx: &egui::Context, world: &mut World) { @@ -149,10 +149,10 @@ pub fn draw_chat( }); } -pub fn draw_crafting(ctx: &egui::Context, world: &mut World) { - let mut menus = world.query_filtered::<(Entity, &Transform), With>(); +pub fn draw_crafting(ctx: &egui::Context, world: &mut World, send_packet_events: &mut Events) { + let mut menus = world.query_filtered::<(Entity, &ServerId, &Transform), With>(); let camera = world.resource::(); - for (entity, menu) in menus.iter(world) { + for (entity, server_id, menu) in menus.iter(world) { egui::Window::new("Crafting") .id(format!("Crafting{}", entity.index()).into()) .pivot(Align2::LEFT_BOTTOM) @@ -160,6 +160,13 @@ pub fn draw_crafting(ctx: &egui::Context, world: &mut World) { (menu.translation.x + camera.x) * camera.zoom + camera.width as f32 / 2.0, (menu.translation.y + camera.y) * camera.zoom + camera.height as f32 / 2.0, )) - .show(ctx, |ui| {}); + .show(ctx, |ui| { + if ui.button("Mining").clicked() { + send_packet_events.send(SendPacket(Packet::RequestMining(RequestMiningPacket { + id: server_id.0, + is_mining: true, + }))); + } + }); } } diff --git a/crates/common/src/packet.rs b/crates/common/src/packet.rs index 28f954b385ec3c57fe07a4c75ea93d7609fb308c..cb3eb8f92b294ca02e34a381c1ad5f9bbf9e130b 100644 --- a/crates/common/src/packet.rs +++ b/crates/common/src/packet.rs @@ -75,6 +75,7 @@ pub enum ButtonType { Right, } +// serverbound #[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] #[cfg_attr(feature = "bevy", derive(::bevy_ecs::event::Event))] pub struct ClientLoginPacket { @@ -112,10 +113,18 @@ pub struct RequestSavePacket { pub old_save: Option, } +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] +#[cfg_attr(feature = "bevy", derive(::bevy_ecs::event::Event))] +pub struct RequestMiningPacket { + pub id: u32, + pub is_mining: bool, +} + #[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] #[cfg_attr(feature = "bevy", derive(::bevy_ecs::event::Event))] pub struct SpecialDisconnectPacket {} +// clientbound #[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] #[cfg_attr(feature = "bevy", derive(::bevy_ecs::event::Event))] pub struct LoginResponsePacket { @@ -216,6 +225,7 @@ pub enum Packet { PlayerInput(PlayerInputPacket), PlayerMouseInput(PlayerMouseInputPacket), RequestSave(RequestSavePacket), + RequestMining(RequestMiningPacket), _SpecialDisconnect(SpecialDisconnectPacket), // clientbound @@ -237,12 +247,15 @@ pub enum Packet { #[cfg(feature = "bevy")] pub fn register_packet_events(world: &mut bevy_ecs::prelude::World) { + // serverbound bevy_ecs::event::EventRegistry::register_event::(world); bevy_ecs::event::EventRegistry::register_event::(world); bevy_ecs::event::EventRegistry::register_event::(world); bevy_ecs::event::EventRegistry::register_event::(world); bevy_ecs::event::EventRegistry::register_event::(world); + bevy_ecs::event::EventRegistry::register_event::(world); bevy_ecs::event::EventRegistry::register_event::(world); + // clientbound bevy_ecs::event::EventRegistry::register_event::(world); bevy_ecs::event::EventRegistry::register_event::(world); bevy_ecs::event::EventRegistry::register_event::(world); diff --git a/crates/server/src/player/mod.rs b/crates/server/src/player/mod.rs index 397dc1d466f0b96e3b9cc6582eb3c84b0941d120..ef9df6fcbde0f151f2f933207713d472aa77c8e2 100644 --- a/crates/server/src/player/mod.rs +++ b/crates/server/src/player/mod.rs @@ -20,8 +20,7 @@ use player_mouse_input::{attach_or_detach, mouse_picking}; use request_save::request_save; use send_message::send_message; use starkingdoms_common::packet::{ - ClientLoginPacket, PlayerInputPacket, PlayerMouseInputPacket, RequestSavePacket, - SendMessagePacket, + ClientLoginPacket, PlayerInputPacket, PlayerMouseInputPacket, RequestMiningPacket, RequestSavePacket, SendMessagePacket }; use starkingdoms_common::{packet::Packet, PartType as c_PartType}; @@ -228,6 +227,14 @@ pub fn on_message( } } } + Packet::RequestMining(RequestMiningPacket { id, is_mining }) => { + match mining_query.get_mut(Entity::from_raw(id)) { + Ok(mut mining) => { + mining.0 = is_mining; + } + Err(e) => {} + } + } _ => continue, } }