From b99bd4a20a14c68b01d94a824a8353a4ff41b40c Mon Sep 17 00:00:00 2001 From: Pfauenauge90 <44173739+Pfauenauge90@users.noreply.github.com> Date: Sun, 30 Jun 2019 16:04:10 +0200 Subject: [PATCH] Bag window expands with available space --- assets/voxygen/element/bag/bot.vox | 3 ++ assets/voxygen/element/bag/mid.vox | 3 ++ assets/voxygen/element/bag/slot.vox | 3 ++ assets/voxygen/element/bag/top.vox | 3 ++ assets/voxygen/element/frames/bag.vox | 4 +-- voxygen/src/hud/bag.rs | 52 +++++++++++++++++---------- voxygen/src/hud/img_ids.rs | 3 ++ voxygen/src/hud/mod.rs | 10 +++--- 8 files changed, 56 insertions(+), 25 deletions(-) create mode 100644 assets/voxygen/element/bag/bot.vox create mode 100644 assets/voxygen/element/bag/mid.vox create mode 100644 assets/voxygen/element/bag/slot.vox create mode 100644 assets/voxygen/element/bag/top.vox diff --git a/assets/voxygen/element/bag/bot.vox b/assets/voxygen/element/bag/bot.vox new file mode 100644 index 0000000000..248f64cc5e --- /dev/null +++ b/assets/voxygen/element/bag/bot.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4da5d98046938e91d1815dbf259cb731d8cd4624c640f8b5924f6ce66f3c8628 +size 45431 diff --git a/assets/voxygen/element/bag/mid.vox b/assets/voxygen/element/bag/mid.vox new file mode 100644 index 0000000000..1af84e92dc --- /dev/null +++ b/assets/voxygen/element/bag/mid.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1615848364014e02460eab55c0a8ae722eee7eef8bea50f1b5247560a3d72d6 +size 44440 diff --git a/assets/voxygen/element/bag/slot.vox b/assets/voxygen/element/bag/slot.vox new file mode 100644 index 0000000000..0ba79c16d2 --- /dev/null +++ b/assets/voxygen/element/bag/slot.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69d4eb3b262de7ce2280d6a648ddb0e461e513b6c4e74bbff8bc8ede51e73532 +size 46011 diff --git a/assets/voxygen/element/bag/top.vox b/assets/voxygen/element/bag/top.vox new file mode 100644 index 0000000000..d705fe1edb --- /dev/null +++ b/assets/voxygen/element/bag/top.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cac63f9ad0530286bd4ec3b748cad6106c6e1f3d5748e86cf4f0699f38bb84a4 +size 47687 diff --git a/assets/voxygen/element/frames/bag.vox b/assets/voxygen/element/frames/bag.vox index 6ef0a91209..524db58df9 100644 --- a/assets/voxygen/element/frames/bag.vox +++ b/assets/voxygen/element/frames/bag.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9f19f876fdee1708407c7d39e213cc5e4c8db5817607149a6e4756c1f00f9539 -size 42344 +oid sha256:9976b08c1b352ceae1770b37bf58c9b803420311839b0fa3b8077f9bc4351afb +size 103536 diff --git a/voxygen/src/hud/bag.rs b/voxygen/src/hud/bag.rs index 33053eef95..d5f14adcdb 100644 --- a/voxygen/src/hud/bag.rs +++ b/voxygen/src/hud/bag.rs @@ -3,13 +3,15 @@ use conrod_core::{ color, position::Relative, widget::{self, Button, Image, Rectangle, Scrollbar}, - widget_ids, Colorable, Labelable, Positionable, Sizeable, Widget, WidgetCommon, + widget_ids, Colorable, Color, Labelable, Positionable, Sizeable, Widget, WidgetCommon, }; widget_ids! { struct Ids { bag_close, - bag_contents, + bag_top, + bag_mid, + bag_bot, inv_alignment, inv_grid_1, inv_grid_2, @@ -34,7 +36,7 @@ pub struct Bag<'a> { impl<'a> Bag<'a> { pub fn new(inventory_space: usize, imgs: &'a Imgs, fonts: &'a Fonts) -> Self { Self { - inventory_space, + inventory_space, imgs, _fonts, common: widget::CommonBuilder::default(), @@ -46,6 +48,8 @@ pub struct State { ids: Ids, } +const BAG_SCALE: f64 = 4.0; + pub enum Event { Close, } @@ -68,31 +72,43 @@ impl<'a> Widget for Bag<'a> { fn update(self, args: widget::UpdateArgs) -> Self::Event { let widget::UpdateArgs { state, ui, .. } = args; - // Contents - Image::new(self.imgs.bag_contents) - .w_h(68.0 * 4.0, 123.0 * 4.0) + // Bag parts + Image::new(self.imgs.bag_bot) + .w_h(61.0 * BAG_SCALE, 9.0 * BAG_SCALE) .bottom_right_with_margins_on(ui.window, 60.0, 5.0) - .set(state.ids.bag_contents, ui); + .set(state.ids.bag_bot, ui); + Image::new(self.imgs.bag_mid) + .w_h(61.0 * BAG_SCALE, ((self.inventory_space + 4) / 5) as f64 * 44.0) + .up_from(state.ids.bag_bot, 0.0) + .set(state.ids.bag_mid, ui); + Image::new(self.imgs.bag_top) + .w_h(61.0 * BAG_SCALE, 9.0 * BAG_SCALE) + .up_from(state.ids.bag_mid, 0.0) + .set(state.ids.bag_top, ui); // Alignment for Grid - Rectangle::fill_with([58.0 * 4.0 - 5.0, 100.0 * 4.0], color::TRANSPARENT) - .top_left_with_margins_on(state.ids.bag_contents, 11.0 * 4.0, 5.0 * 4.0) + Rectangle::fill_with([54.0 * BAG_SCALE, ((self.inventory_space + 4) / 5) as f64 * 44.0], color::TRANSPARENT) + .top_left_with_margins_on(state.ids.bag_top, 9.0 * BAG_SCALE, 3.0 * BAG_SCALE) .scroll_kids() .scroll_kids_vertically() .set(state.ids.inv_alignment, ui); + + // Grid - Image::new(self.imgs.inv_grid) - .w_h(58.0 * 4.0, 111.0 * 4.0) + /*Image::new(self.imgs.inv_grid) + .w_h(61.0 * BAG_SCALE, 111.0 * BAG_SCALE) + .color(Some(Color::Rgba(1.0, 1.0, 1.0, 0.5))) .mid_top_with_margin_on(state.ids.inv_alignment, 0.0) .set(state.ids.inv_grid_1, ui); Image::new(self.imgs.inv_grid) - .w_h(58.0 * 4.0, 111.0 * 4.0) - .mid_top_with_margin_on(state.ids.inv_alignment, 110.0 * 4.0) + .w_h(61.0 * BAG_SCALE, 111.0 * BAG_SCALE) + .color(Some(Color::Rgba(1.0, 1.0, 1.0, 0.5))) + .mid_top_with_margin_on(state.ids.inv_alignment, 110.0 * BAG_SCALE) .set(state.ids.inv_grid_2, ui); Scrollbar::y_axis(state.ids.inv_alignment) .thickness(5.0) .rgba(0.33, 0.33, 0.33, 1.0) - .set(state.ids.inv_scrollbar, ui); + .set(state.ids.inv_scrollbar, ui);*/ // Create available inventory slot widgets if state.ids.inv_slot.len() < self.inventory_space { state.update(|s| { @@ -107,18 +123,18 @@ impl<'a> Widget for Bag<'a> { let y = i / 5; Button::image(self.imgs.inv_slot) .top_left_with_margins_on( - state.ids.inv_grid_1, + state.ids.inv_alignment, 4.0 + y as f64 * (40.0 + 4.0), 4.0 + x as f64 * (40.0 + 4.0), ) // conrod uses a (y,x) format for placing... - .parent(state.ids.inv_grid_2) // Avoids the background overlapping available slots + .parent(state.ids.bag_mid) // Avoids the background overlapping available slots .w_h(40.0, 40.0) .set(state.ids.inv_slot[i], ui); } // Test Item if self.inventory_space > 0 { Button::image(self.imgs.potion_red) // TODO: Insert variable image depending on the item displayed in that slot - .w_h(4.0 * 4.5, 7.0 * 4.5) // TODO: Fix height and scale width correctly to that to avoid a stretched item image + .w_h(4.0 * 4.4, 7.0 * 4.4) // TODO: Fix height and scale width correctly to that to avoid a stretched item image .middle_of(state.ids.inv_slot[0]) // TODO: Items need to be assigned to a certain slot and then placed like in this example .label("5x") // TODO: Quantity goes here... .label_font_id(self.fonts.opensans) @@ -133,7 +149,7 @@ impl<'a> Widget for Bag<'a> { .w_h(28.0, 28.0) .hover_image(self.imgs.close_button_hover) .press_image(self.imgs.close_button_press) - .top_right_with_margins_on(state.ids.bag_contents, 0.0, 0.0) + .top_right_with_margins_on(state.ids.bag_top, 0.0, 0.0) .set(state.ids.bag_close, ui) .was_clicked() { diff --git a/voxygen/src/hud/img_ids.rs b/voxygen/src/hud/img_ids.rs index 4d58be0e1c..8e5550a922 100644 --- a/voxygen/src/hud/img_ids.rs +++ b/voxygen/src/hud/img_ids.rs @@ -9,6 +9,9 @@ image_ids! { inv_grid: "voxygen/element/frames/inv_grid.vox", inv_slot: "voxygen/element/buttons/inv_slot.vox", grid_inv: "voxygen/element/buttons/grid_inv.vox", + bag_top: "voxygen/element/bag/top.vox", + bag_mid: "voxygen/element/bag/mid.vox", + bag_bot: "voxygen/element/bag/bot.vox", // Window Parts window_3: "voxygen/element/frames/window_3.vox", diff --git a/voxygen/src/hud/mod.rs b/voxygen/src/hud/mod.rs index d861545173..241c2e666f 100644 --- a/voxygen/src/hud/mod.rs +++ b/voxygen/src/hud/mod.rs @@ -256,7 +256,7 @@ pub struct Hud { imgs: Imgs, fonts: Fonts, new_messages: VecDeque, - inventory_space: usize, + inventory_space: usize, show: Show, to_focus: Option>, force_ungrab: bool, @@ -282,7 +282,7 @@ impl Hud { fonts, ids, new_messages: VecDeque::new(), - inventory_space: 0, + inventory_space: 8, show: Show { help: false, debug: true, @@ -479,7 +479,7 @@ impl Hud { if Button::image(self.imgs.button) .w_h(100.0, 100.0) .middle_of(ui_widgets.window) - .label("Add 10 Spaces") + .label("Add 1 Space") .label_font_size(20) .label_color(TEXT_COLOR) .hover_image(self.imgs.button_hover) @@ -487,8 +487,8 @@ impl Hud { .set(self.ids.bag_space_add, ui_widgets) .was_clicked() { - if self.inventory_space < 91 { - self.inventory_space += 10; + if self.inventory_space < 100 { + self.inventory_space += 1; } else { } };