From 5704afa8852d493b8424b186d3390ab2b9a8aefd Mon Sep 17 00:00:00 2001 From: ghostly_zsh Date: Thu, 27 Mar 2025 18:11:53 -0500 Subject: [PATCH] open crafting ui with mouse --- crates/client/src/networking/mod.rs | 12 ++++++++++++ crates/client/src/rendering/mod.rs | 14 +++++++++++++- crates/common/Cargo.toml | 8 -------- crates/common/src/packet.rs | 3 +++ crates/server/src/player/mod.rs | 1 + crates/server/src/player/player_mouse_input.rs | 15 +++++++++++---- 6 files changed, 40 insertions(+), 13 deletions(-) diff --git a/crates/client/src/networking/mod.rs b/crates/client/src/networking/mod.rs index 931d4e3f939731bdc1cd354277127707b48685fc..c332e6c1028f54baca05a8fce7bbafe066c185e8 100644 --- a/crates/client/src/networking/mod.rs +++ b/crates/client/src/networking/mod.rs @@ -203,6 +203,18 @@ pub fn process_packets( r.fuel_amount = *amount; r.fuel_max = *max; } + OpenCraftingUi { id } => { + let mut query = world.query::<(Entity, &ServerId)>(); + let mut matching_id = None; + for (entity, server_id) in query.iter(world) { + if server_id.0 == *id { + matching_id = Some(entity); + } + } + if let Some(id) = matching_id { + world.entity_mut(id).insert(Menu); + } + } Message { message_type, actor, content } => { let mut chat = world.get_resource_mut::().unwrap(); chat.messages.push(format!("{}: {}", actor.clone(), content.clone())); diff --git a/crates/client/src/rendering/mod.rs b/crates/client/src/rendering/mod.rs index ec1140f256fce6f221390e974084f338055ea990..fd9c8de3ee4748768ea5aeb5c8f4cb3536b8b051 100644 --- a/crates/client/src/rendering/mod.rs +++ b/crates/client/src/rendering/mod.rs @@ -43,7 +43,7 @@ use winit::{ window::{Window, WindowAttributes}, }; -use crate::components::{Camera, Player, RecvPacket, SendPacket, Texture, Transform}; +use crate::components::{Camera, Menu, Player, RecvPacket, SendPacket, Texture, Transform}; use crate::networking::process_packets; use crate::networking::ws::Ws; use crate::ui::{draw_ui, init_ui}; @@ -453,6 +453,18 @@ impl ApplicationHandler for App { MouseButton::Right => ButtonType::Right, _ => return, }; + + if state.is_pressed() { + let mut menu_query = self.world.query_filtered::>(); + let mut menus = Vec::new(); + for menu in menu_query.iter(&self.world) { + menus.push(menu); + } + for menu in menus { + self.world.entity_mut(menu).remove::(); + } + } + let camera = self.world.get_resource::().unwrap(); let view = camera.to_cursor_matrix(); let pos = diff --git a/crates/common/Cargo.toml b/crates/common/Cargo.toml index 7074c67710a7db29022b7cbb96bdfc45b1a09566..6318577b6d88cb38bcb520d0d7e7e426ed0f8e55 100644 --- a/crates/common/Cargo.toml +++ b/crates/common/Cargo.toml @@ -7,16 +7,8 @@ edition = "2021" [dependencies] serde = { version = "1", features = ["derive"] } -<<<<<<< HEAD:protocol/Cargo.toml -log = "0.4.19" - -[build-dependencies] -protobuf-codegen = "3" -protoc-rust = "^2.0" -======= serde_json = "1" rmp-serde = "1" hmac = "0.12" sha2 = "0.10" base64 = "0.21" ->>>>>>> rust-rendering-2:crates/common/Cargo.toml diff --git a/crates/common/src/packet.rs b/crates/common/src/packet.rs index c524d85585dc17fb82680c9c7e11af4a43e86439..53476e031f74b30770f316246f7667c83493f2e2 100644 --- a/crates/common/src/packet.rs +++ b/crates/common/src/packet.rs @@ -147,6 +147,9 @@ pub enum Packet { amount: u32, max: u32, }, + OpenCraftingUi { + id: u32, + }, } impl From for String { diff --git a/crates/server/src/player/mod.rs b/crates/server/src/player/mod.rs index 8b58e139a30cadb41d1463687ac33ee7098438db..1778fedde3736d7f7fa0c07bfa59a65d25c3f0cc 100644 --- a/crates/server/src/player/mod.rs +++ b/crates/server/src/player/mod.rs @@ -193,6 +193,7 @@ pub fn on_message( y, &button, entity, + &mut event_queue, ); } } diff --git a/crates/server/src/player/player_mouse_input.rs b/crates/server/src/player/player_mouse_input.rs index 0f329b8dec6bffc07b87a63c11dc2daf03417395..418a6d6f303f65743937c6e9a26a30faff7c98b8 100644 --- a/crates/server/src/player/player_mouse_input.rs +++ b/crates/server/src/player/player_mouse_input.rs @@ -2,9 +2,9 @@ use bevy::{math::vec3, prelude::*}; use bevy_rapier2d::prelude::*; use crate::{ - crafting::components::IsMining, module::component::{Attach, CanAttach, LooseAttach, PartFlags, PartType}, planet::PlanetType + crafting::components::IsMining, module::component::{Attach, CanAttach, LooseAttach, PartFlags, PartType}, planet::PlanetType, ws::{PacketMessageConvert, WsEvent} }; -use starkingdoms_common::{packet::ButtonType, PartType as c_PartType}; +use starkingdoms_common::{packet::{ButtonType, Packet}, PartType as c_PartType}; use super::component::Player; @@ -126,6 +126,7 @@ pub fn mouse_picking( y: f32, button: &ButtonType, entity: Entity, + send_events: &mut Vec, ) { for (m_entity, part_type, transform, m_attach, _velocity, _, _, _) in attached_query.iter() { if *part_type == c_PartType::LandingThrusterSuspension.into() { @@ -184,10 +185,16 @@ pub fn mouse_picking( if bound[0] < x && x < bound[1] && bound[2] < y && y < bound[3] { if *button == ButtonType::Right { + send_events.push(WsEvent::Send { + to: q_player.addr, + message: Packet::OpenCraftingUi { + id: entity.index(), + }.into_message(), + }); // toggle mining - if let Ok(mut is_mining) = mining_query.get_mut(entity) { + /*if let Ok(mut is_mining) = mining_query.get_mut(entity) { is_mining.0 = !is_mining.0; - } + }*/ } } }