M crates/client/src/components.rs => crates/client/src/components.rs +3 -0
@@ 82,6 82,9 @@ pub struct Part(pub bool); // Part(attached)
#[derive(Component, Debug, Clone, Copy)]
pub struct ServerId(pub u32);
+#[derive(Component, Debug, Clone, Copy)]
+pub struct Menu;
+
#[derive(Event, Clone, PartialEq)]
pub struct SendPacket(pub Packet);
#[derive(Event, Clone, PartialEq)]
M crates/client/src/lib.rs => crates/client/src/lib.rs +1 -1
@@ 1,5 1,5 @@
use bevy_ecs::{event::Events, world::World};
-use components::{Camera, Chat, Part, Player, RecvPacket, SendPacket, Texture, Transform};
+use components::{Camera, Chat, Menu, Part, Player, RecvPacket, SendPacket, Texture, Transform};
use nalgebra::{Rotation2, Rotation3, Scale2, Scale3, Translation2, Translation3, Vector3};
use networking::ws::Ws;
use rendering::{assets::Assets, App};
M crates/client/src/networking/mod.rs => crates/client/src/networking/mod.rs +1 -1
@@ 9,7 9,7 @@ use bevy_ecs::{
use nalgebra::{Rotation2, Scale2, Scale3, Translation3};
use starkingdoms_common::{packet::Packet, PartType, PlanetType};
-use crate::components::{Camera, Chat, Part, Planet, Player, PlayerResources, RecvPacket, SendPacket, ServerId, SpriteBundle, Texture, Transform};
+use crate::components::{Camera, Chat, Menu, Part, Planet, Player, PlayerResources, RecvPacket, SendPacket, ServerId, SpriteBundle, Texture, Transform};
#[cfg(target_arch = "wasm32")]
#[path = "ws_wasm.rs"]
M crates/client/src/ui/mod.rs => crates/client/src/ui/mod.rs +17 -1
@@ 3,12 3,13 @@ mod widgets;
use std::f32;
+use bevy_ecs::entity::Entity;
use bevy_ecs::event::Events;
use bevy_ecs::prelude::With;
use bevy_ecs::world::World;
use egui::{Align, Align2, CornerRadius, CursorIcon, Layout, Margin, Order, ProgressBar, RichText, Shadow, Stroke, Visuals};
use starkingdoms_common::packet::Packet;
-use crate::components::{Chat, Player, PlayerResources, SendPacket, Transform};
+use crate::components::{Camera, Chat, Menu, Player, PlayerResources, SendPacket, Transform};
use crate::ui::widgets::{progress_bar, RichTextExt};
pub fn init_ui(ctx: egui::Context) {
@@ 55,6 56,7 @@ pub fn init_ui(ctx: egui::Context) {
pub fn draw_ui(ctx: &egui::Context, world: &mut World, send_packet_events: &mut Events<SendPacket>) {
draw_status_bar(ctx, world);
draw_chat(ctx, world, send_packet_events);
+ draw_crafting(ctx, world);
}
pub fn draw_status_bar(ctx: &egui::Context, world: &mut World) {
@@ 131,3 133,17 @@ pub fn draw_chat(ctx: &egui::Context, world: &mut World, send_packet_events: &mu
});
});
}
+
+pub fn draw_crafting(ctx: &egui::Context, world: &mut World) {
+ let mut menus = world.query_filtered::<(Entity, &Transform), With<Menu>>();
+ let camera = world.resource::<Camera>();
+ for (entity, menu) in menus.iter(&world) {
+ egui::Window::new("Crafting")
+ .id(format!("Crafting{}", entity.index()).into())
+ .pivot(Align2::LEFT_BOTTOM)
+ .fixed_pos(((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| {
+ });
+ }
+}