Inventory Window

Former-commit-id: 4f8c6fbef1dd4afea587ece7187a17648ff3e301
This commit is contained in:
Pfauenauge90 2019-04-01 22:31:29 +02:00
parent ca454d0c8b
commit 0ce80ec9ad
4 changed files with 236 additions and 135 deletions

2
.gitignore vendored
View File

@ -20,3 +20,5 @@
**/server_conf.toml
**/keybinds.toml
assets/voxygen
UI3.rar

View File

@ -3,7 +3,7 @@ use conrod_core::{
input::Key,
position::Dimension,
text::font::Id as FontId,
widget::{Id, Button, List, Rectangle, Text, TextEdit},
widget::{Button, Id, List, Rectangle, Text, TextEdit},
widget_ids, Color, Colorable, Positionable, Sizeable, UiCell, Widget,
};
use std::collections::VecDeque;
@ -15,6 +15,8 @@ widget_ids! {
input,
input_bg,
chat_arrow,
chat_arrow_up,
chat_arrow_down,
}
}
// Chat Behaviour:
@ -76,7 +78,12 @@ impl Chat {
fn scroll_to_bottom(&self, ui_widgets: &mut UiCell) {
ui_widgets.scroll_widget(self.ids.message_box, [0.0, std::f64::MAX]);
}
pub fn update_layout(&mut self, ui_widgets: &mut UiCell, font: FontId, imgs: &super::Imgs) -> Option<String> {
pub fn update_layout(
&mut self,
ui_widgets: &mut UiCell,
font: FontId,
imgs: &super::Imgs,
) -> Option<String> {
// Maintain scrolling
if self.new_messages {
self.scroll_new_messages(ui_widgets);
@ -131,7 +138,7 @@ impl Chat {
// s.set(ui_widgets)
//}
// Chat Arrow
// Chat Arrows
if !self.scrolled_to_bottom(ui_widgets) {
if Button::image(imgs.chat_arrow)
.w_h(22.0, 22.0)
@ -145,6 +152,25 @@ impl Chat {
}
}
// Up and Down Arrows => Scroll the chat up/down one row per click;
if Button::image(imgs.chat_arrow_up)
.w_h(22.0, 22.0)
.hover_image(imgs.chat_arrow_up_mo)
.press_image(imgs.chat_arrow_up_press)
.up_from(self.ids.chat_arrow_down, 60.0)
.set(self.ids.chat_arrow_up, ui_widgets)
.was_clicked()
{};
if Button::image(imgs.chat_arrow_down)
.w_h(22.0, 22.0)
.hover_image(imgs.chat_arrow_down_mo)
.press_image(imgs.chat_arrow_down_press)
.bottom_right_with_margins_on(self.ids.message_box_bg, 40.0, 2.0)
.set(self.ids.chat_arrow_down, ui_widgets)
.was_clicked()
{};
// If enter is pressed send the current message
if ui_widgets
.widget_input(self.ids.input)

View File

@ -2,16 +2,16 @@ mod chat;
use crate::{
render::Renderer,
ui::{ScaleMode, Ui, ToggleButton},
window::{Event as WinEvent, Window, Key},
ui::{ScaleMode, ToggleButton, Ui},
window::{Event as WinEvent, Key, Window},
};
use conrod_core::{
color,
event::Input,
image::Id as ImgId,
text::font::Id as FontId,
widget::{Button, Image, Text, Rectangle},
widget_ids, Colorable, Labelable, Positionable, Sizeable, Widget,
widget::{Button, Image, Rectangle, Text},
widget_ids, Colorable, Color, Labelable, Positionable, Sizeable, Widget,
};
widget_ids! {
@ -21,6 +21,8 @@ widget_ids! {
bag_contents,
bag_close,
bag_map_open,
inv_alignment,
inv_grid,
//help
help,
help_bg,
@ -53,6 +55,9 @@ widget_ids! {
sb_grid_r,
sb_grid_bg_l,
sb_grid_bg_r,
// Level Display
level_text,
next_level_text,
//Window Frames
window_frame_0,
window_frame_1,
@ -120,6 +125,7 @@ struct Imgs {
bag_open_hover: ImgId,
bag_open_press: ImgId,
bag_contents: ImgId,
inv_grid: ImgId,
// Close button
close_button: ImgId,
@ -198,6 +204,12 @@ struct Imgs {
chat_arrow: ImgId,
chat_arrow_mo: ImgId,
chat_arrow_press: ImgId,
chat_arrow_up: ImgId,
chat_arrow_up_mo: ImgId,
chat_arrow_up_press: ImgId,
chat_arrow_down: ImgId,
chat_arrow_down_mo: ImgId,
chat_arrow_down_press: ImgId,
}
impl Imgs {
fn new(ui: &mut Ui, renderer: &mut Renderer) -> Imgs {
@ -217,6 +229,7 @@ impl Imgs {
bag_open_hover: load("element/buttons/bag/open_hover.png"),
bag_open_press: load("element/buttons/bag/open_press.png"),
bag_contents: load("element/frames/bag.png"),
inv_grid: load("element/frames/inv_grid.png"),
// Close button
close_button: load("element/buttons/x.png"),
@ -300,6 +313,12 @@ impl Imgs {
chat_arrow: load("element/buttons/arrow/chat_arrow.png"),
chat_arrow_mo: load("element/buttons/arrow/chat_arrow_mo.png"),
chat_arrow_press: load("element/buttons/arrow/chat_arrow_press.png"),
chat_arrow_up: load("element/buttons/arrow/chat_arrow_up.png"),
chat_arrow_up_mo: load("element/buttons/arrow/chat_arrow_up_mo.png"),
chat_arrow_up_press: load("element/buttons/arrow/chat_arrow_up_press.png"),
chat_arrow_down: load("element/buttons/arrow/chat_arrow_down.png"),
chat_arrow_down_mo: load("element/buttons/arrow/chat_arrow_down_mo.png"),
chat_arrow_down_press: load("element/buttons/arrow/chat_arrow_down_press.png"),
}
}
}
@ -334,7 +353,6 @@ enum Small {
Questlog,
}
pub struct Hud {
ui: Ui,
ids: Ids,
@ -349,7 +367,7 @@ pub struct Hud {
menu_open: bool,
open_windows: Windows,
map_open: bool,
settings_tab: SettingsTab
settings_tab: SettingsTab,
}
impl Hud {
@ -401,7 +419,10 @@ impl Hud {
let ref mut ui_widgets = self.ui.set_widgets();
// Chat box
if let Some(msg) = self.chat.update_layout(ui_widgets, self.font_opensans, &self.imgs) {
if let Some(msg) = self
.chat
.update_layout(ui_widgets, self.font_opensans, &self.imgs)
{
events.push(Event::SendMessage(msg));
}
// Help Text
@ -425,9 +446,10 @@ impl Hud {
C = Character Window \n\
O = Social \n\
P = Spellbook \n\
N = Settings")
N = Settings",
)
.rgba(220.0, 220.0, 220.0, 0.8)
.top_left_with_margins_on(self.ids.help_bg, 20.0,20.0)
.top_left_with_margins_on(self.ids.help_bg, 20.0, 20.0)
.font_id(self.font_opensans)
.font_size(18)
.set(self.ids.help, ui_widgets);
@ -503,11 +525,11 @@ impl Hud {
// Other Windows can only be accessed, when Settings are closed. Opening Settings will close all other Windows including the Bag.
// Opening the Map won't close the windows displayed before.
if match self.open_windows {
Windows::Settings => false,
_ => true,
} && self.map_open == false {
} && self.map_open == false
{
//1 Social
if Button::image(self.imgs.mmap_button)
.w_h(448.0 / 15.0, 448.0 / 15.0)
@ -523,7 +545,7 @@ impl Hud {
Windows::CharacterAnd(small) => match small {
Some(Small::Social) => Windows::CharacterAnd(None),
_ => Windows::CharacterAnd(Some(Small::Social)),
}
},
Windows::Settings => unreachable!(),
};
}
@ -543,7 +565,7 @@ impl Hud {
Windows::CharacterAnd(small) => match small {
Some(Small::Spellbook) => Windows::CharacterAnd(None),
_ => Windows::CharacterAnd(Some(Small::Spellbook)),
}
},
Windows::Settings => unreachable!(),
};
}
@ -563,7 +585,7 @@ impl Hud {
},
Windows::Small(small) => Windows::CharacterAnd(Some(small)),
Windows::None => Windows::CharacterAnd(None),
Windows::Settings => unreachable!()
Windows::Settings => unreachable!(),
}
}
//5 Quest-Log
@ -581,7 +603,7 @@ impl Hud {
Windows::CharacterAnd(small) => match small {
Some(Small::Questlog) => Windows::CharacterAnd(None),
_ => Windows::CharacterAnd(Some(Small::Questlog)),
}
},
Windows::Settings => unreachable!(),
};
}
@ -651,14 +673,46 @@ impl Hud {
// Debuffs
// Level Display
// Insert actual Level here
Text::new("1")
.left_from(self.ids.xp_bar, -20.0)
.font_size(20)
.rgba(220.0, 220.0, 220.0, 0.8)
.set(self.ids.level_text, ui_widgets);
// Insert next Level here
Text::new("2")
.right_from(self.ids.xp_bar, -20.0)
.font_size(20)
.rgba(220.0, 220.0, 220.0, 0.8)
.set(self.ids.next_level_text, ui_widgets);
// Bag contents
if self.bag_open {
// Contents
Image::new(self.imgs.bag_contents)
.w_h(1504.0 / 4.0, 1760.0 / 4.0)
.bottom_right_with_margins_on(ui_widgets.window, 88.0, 68.0)
.w_h(307.0, 320.0)
.bottom_right_with_margins_on(ui_widgets.window, 100.0, 80.0)
.set(self.ids.bag_contents, ui_widgets);
// 250 250
// Alignment for Grid
Rectangle::fill_with([250.0, 240.0], color::TRANSPARENT)
.top_left_with_margins_on(self.ids.bag_contents, 27.0, 23.0)
.scroll_kids()
.scroll_kids_vertically()
//.scrollbar_thickness(18.0)
//.scrollbar_color(Color::Rgba(0.0, 0.0, 0.0, 1.0))
.set(self.ids.inv_alignment, ui_widgets);
// Grid
Image::new(self.imgs.inv_grid)
.w_h(250.0, 951.0)
.mid_top_with_margin_on(self.ids.inv_alignment, 0.0)
//.scrollbar_color(Color::Rgba(0.0, 0.0, 0.0, 1.0))
.set(self.ids.inv_grid, ui_widgets);
// X-button
if Button::image(self.imgs.close_button)
.w_h(244.0 * 0.22 / 3.0, 244.0 * 0.22 / 3.0)
@ -673,14 +727,12 @@ impl Hud {
}
// Bag
if !self.map_open {
self.bag_open =
ToggleButton::new(self.bag_open, self.imgs.bag, self.imgs.bag_open)
self.bag_open = ToggleButton::new(self.bag_open, self.imgs.bag, self.imgs.bag_open)
.bottom_right_with_margin_on(ui_widgets.window, 20.0)
.hover_images(self.imgs.bag_hover, self.imgs.bag_open_hover)
.press_images(self.imgs.bag_press, self.imgs.bag_open_press)
.w_h(420.0 / 4.0, 480.0 / 4.0)
.set(self.ids.bag, ui_widgets);
} else {
Image::new(self.imgs.bag)
.bottom_right_with_margin_on(ui_widgets.window, 20.0)
@ -727,12 +779,16 @@ impl Hud {
.set(self.ids.settings_icon, ui_widgets);
// TODO: Find out if we can remove this
// Alignment Rectangle
Rectangle::fill_with([1008.0/ 2.5, 1616.0 / 2.5], color::TRANSPARENT)
Rectangle::fill_with([1008.0 / 2.5, 1616.0 / 2.5], color::TRANSPARENT)
.top_left_with_margins_on(self.ids.settings_bg, 77.0, 205.0)
.set(self.ids.rectangle, ui_widgets);
//1 Interface////////////////////////////
if Button::image(if let SettingsTab::Interface = self.settings_tab {self.imgs.button_blue_mo} else {self.imgs.button_blank})
if Button::image(if let SettingsTab::Interface = self.settings_tab {
self.imgs.button_blue_mo
} else {
self.imgs.button_blank
})
.w_h(304.0 / 2.5, 80.0 / 2.5)
.hover_image(self.imgs.button_blue_mo)
.press_image(self.imgs.button_blue_press)
@ -747,7 +803,8 @@ impl Hud {
}
//Toggle Help
if let SettingsTab::Interface = self.settings_tab {
self.show_help = ToggleButton::new(self.show_help, self.imgs.check, self.imgs.check_checked)
self.show_help =
ToggleButton::new(self.show_help, self.imgs.check, self.imgs.check_checked)
.w_h(288.0 / 24.0, 288.0 / 24.0)
.top_left_with_margins_on(self.ids.rectangle, 15.0, 15.0)
.hover_images(self.imgs.check_checked_mo, self.imgs.check_mo)
@ -761,7 +818,11 @@ impl Hud {
.set(self.ids.show_help_label, ui_widgets);
}
//2 Gameplay////////////////
if Button::image(if let SettingsTab::Gameplay = self.settings_tab {self.imgs.button_blue_mo} else {self.imgs.button_blank})
if Button::image(if let SettingsTab::Gameplay = self.settings_tab {
self.imgs.button_blue_mo
} else {
self.imgs.button_blank
})
.w_h(304.0 / 2.5, 80.0 / 2.5)
.hover_image(self.imgs.button_blue_mo)
.press_image(self.imgs.button_blue_press)
@ -776,7 +837,11 @@ impl Hud {
}
//3 Controls/////////////////////
if Button::image(if let SettingsTab::Controls = self.settings_tab {self.imgs.button_blue_mo} else {self.imgs.button_blank})
if Button::image(if let SettingsTab::Controls = self.settings_tab {
self.imgs.button_blue_mo
} else {
self.imgs.button_blank
})
.w_h(304.0 / 2.5, 80.0 / 2.5)
.hover_image(self.imgs.button_blue_mo)
.press_image(self.imgs.button_blue_press)
@ -791,7 +856,11 @@ impl Hud {
}
//4 Video////////////////////////////////
if Button::image(if let SettingsTab::Video = self.settings_tab {self.imgs.button_blue_mo} else {self.imgs.button_blank})
if Button::image(if let SettingsTab::Video = self.settings_tab {
self.imgs.button_blue_mo
} else {
self.imgs.button_blank
})
.w_h(304.0 / 2.5, 80.0 / 2.5)
.hover_image(self.imgs.button_blue_mo)
.press_image(self.imgs.button_blue_press)
@ -806,7 +875,11 @@ impl Hud {
}
//5 Sound///////////////////////////////
if Button::image(if let SettingsTab::Sound = self.settings_tab {self.imgs.button_blue_mo} else {self.imgs.button_blank})
if Button::image(if let SettingsTab::Sound = self.settings_tab {
self.imgs.button_blue_mo
} else {
self.imgs.button_blank
})
.w_h(304.0 / 2.5, 80.0 / 2.5)
.hover_image(self.imgs.button_blue_mo)
.press_image(self.imgs.button_blue_press)
@ -969,8 +1042,6 @@ impl Hud {
.set(self.ids.questlog_title, ui_widgets);
}
}
}
//4 Char-Window
@ -1139,7 +1210,8 @@ impl Hud {
};
}
// update whether keyboard is captured
self.typing = if let Some(widget_id) = ui_widgets.global_input().current.widget_capturing_keyboard {
self.typing =
if let Some(widget_id) = ui_widgets.global_input().current.widget_capturing_keyboard {
widget_id == self.chat.input_box_id()
} else {
false
@ -1163,11 +1235,13 @@ impl Hud {
pub fn handle_event(&mut self, event: WinEvent) -> bool {
match event {
WinEvent::Ui(event) => {
if (self.typing && event.is_keyboard()) || !(self.cursor_grabbed && event.is_keyboard_or_mouse()) {
if (self.typing && event.is_keyboard())
|| !(self.cursor_grabbed && event.is_keyboard_or_mouse())
{
self.ui.handle_event(event);
}
true
},
}
WinEvent::KeyDown(Key::Enter) => {
if self.cursor_grabbed && self.typing {
self.ui.focus_widget(None);

View File

@ -224,12 +224,7 @@ impl Imgs {
fn new(ui: &mut Ui, renderer: &mut Renderer) -> Imgs {
let mut load = |filename| {
let image = image::open(
&[
env!("CARGO_MANIFEST_DIR"),
"/../assets/voxygen/",
filename,
]
.concat(),
&[env!("CARGO_MANIFEST_DIR"), "/../assets/voxygen/", filename].concat(),
)
.unwrap();
ui.new_image(renderer, &image).unwrap()
@ -855,7 +850,11 @@ impl CharSelectionUi {
const HUMAN_DESC: &str =
"The former nomads were only recently able to gain a foothold in the world of Veloren. \n\
\n\
Their greatest strengths are their adaptability and intelligence, which makes them allrounders in many fields.";
Their greatest strengths are their adaptability and intelligence, which makes them allrounders in many fields. \n\
\n\
Some become wicked witches, slimy scoundrels, and members of the underworld, while others become witch-hunters, sages, and noble knights. \n\
\n\
This diversity however creates constant conflict and antagonism between humans themselves.";
const ORC_DESC: &str =
"They are considered brutal, rude and combative. \n\
But once you gained their trust they will be loyal friends \n\