mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Start work on image_ids! and asset loading
Former-commit-id: 1e86e627f8ec6a146aa59558da50658beaad91c6
This commit is contained in:
@ -1,50 +0,0 @@
|
|||||||
use std::env;
|
|
||||||
use std::fs;
|
|
||||||
use std::fs::File;
|
|
||||||
use std::io;
|
|
||||||
use std::io::prelude::*;
|
|
||||||
|
|
||||||
fn try_load(name: &str) -> Option<File> {
|
|
||||||
let basepaths = [
|
|
||||||
// if it's stupid and it works..,
|
|
||||||
"assets".to_string(),
|
|
||||||
"../../assets".to_string(),
|
|
||||||
"../assets".to_string(), /* optimizations */
|
|
||||||
[env!("CARGO_MANIFEST_DIR"), "/assets"].concat(),
|
|
||||||
[env!("CARGO_MANIFEST_DIR"), "/../../assets"].concat(),
|
|
||||||
[env!("CARGO_MANIFEST_DIR"), "/../assets"].concat(),
|
|
||||||
"../../../assets".to_string(),
|
|
||||||
[env!("CARGO_MANIFEST_DIR"), "/../../../assets"].concat(),
|
|
||||||
];
|
|
||||||
for bp in &basepaths {
|
|
||||||
let filename = [bp, name].concat();
|
|
||||||
match File::open(&filename) {
|
|
||||||
Ok(f) => {
|
|
||||||
debug!("loading {} succedeed", filename);
|
|
||||||
return Some(f);
|
|
||||||
}
|
|
||||||
Err(e) => {
|
|
||||||
debug!("loading {} did not work with error: {}", filename, e);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
return None;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn load(name: &str) -> Result<Vec<u8>, ()> {
|
|
||||||
return match try_load(name) {
|
|
||||||
Some(mut f) => {
|
|
||||||
let mut content: Vec<u8> = vec![];
|
|
||||||
f.read_to_end(&mut content);
|
|
||||||
info!("loaded asset successful: {}", name);
|
|
||||||
Ok(content)
|
|
||||||
}
|
|
||||||
None => {
|
|
||||||
warn!(
|
|
||||||
"Loading asset failed, wanted to load {} but could not load it, check debug log!",
|
|
||||||
name
|
|
||||||
);
|
|
||||||
Err(())
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
@ -10,7 +10,6 @@ extern crate serde_derive;
|
|||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate log;
|
extern crate log;
|
||||||
|
|
||||||
pub mod assets;
|
|
||||||
pub mod clock;
|
pub mod clock;
|
||||||
pub mod comp;
|
pub mod comp;
|
||||||
pub mod figure;
|
pub mod figure;
|
||||||
|
190
voxygen/src/assets/ids.rs
Normal file
190
voxygen/src/assets/ids.rs
Normal file
@ -0,0 +1,190 @@
|
|||||||
|
use super::Asset;
|
||||||
|
|
||||||
|
use crate::ui::{Ui, Graphic};
|
||||||
|
|
||||||
|
use common::figure::Segment;
|
||||||
|
|
||||||
|
use dot_vox::DotVoxData;
|
||||||
|
use image::DynamicImage;
|
||||||
|
use conrod_core::image::Id as ImgId;
|
||||||
|
|
||||||
|
pub trait UiId where Self: std::marker::Sized {
|
||||||
|
fn to_ui_asset(self, ui: &mut Ui) -> ImgId;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl UiId for DynamicImage {
|
||||||
|
fn to_ui_asset(self, ui: &mut Ui) -> ImgId {
|
||||||
|
ui.new_graphic(Graphic::Image(self))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl UiId for DotVoxData {
|
||||||
|
fn to_ui_asset(self, ui: &mut Ui) -> ImgId {
|
||||||
|
ui.new_graphic(Graphic::Voxel(Segment::from(self)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// This macro will automatically load all specified assets, get the corresponding ImgIds and
|
||||||
|
/// create a struct with all of them
|
||||||
|
///
|
||||||
|
/// Example usage:
|
||||||
|
/// ```
|
||||||
|
/// image_ids! {
|
||||||
|
/// struct<DotVoxData> Voxs {
|
||||||
|
/// button1: "filename1.vox",
|
||||||
|
/// button2: "filename2.vox",
|
||||||
|
/// }
|
||||||
|
/// struct<DynamicImage> Voxs {
|
||||||
|
/// background: "background.png",
|
||||||
|
/// }
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
macro_rules! image_ids {
|
||||||
|
($(pub struct<$T:ty> $Ids:ident { $( $name:ident: $file:expr ), *$(,)? } )*) => {
|
||||||
|
$(
|
||||||
|
pub struct $Ids {
|
||||||
|
$( $name: ImgId, )*
|
||||||
|
}
|
||||||
|
|
||||||
|
impl $Ids {
|
||||||
|
pub fn load(ui: &mut Ui) -> Result<Self, std::io::Error> {
|
||||||
|
Ok(Self {
|
||||||
|
$( $name: Id::to_ui_asset(<$T>::load($file)?, ui), )*
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)*
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
image_ids! {
|
||||||
|
pub struct<DotVoxData> Voxs {
|
||||||
|
// Bag
|
||||||
|
bag_contents: "element/frames/bag.vox",
|
||||||
|
inv_grid: "element/frames/inv_grid.vox",
|
||||||
|
inv_slot: "element/buttons/inv_slot.vox",
|
||||||
|
|
||||||
|
// Buttons
|
||||||
|
settings: "element/buttons/settings.vox",
|
||||||
|
settings_hover: "element/buttons/settings_hover.vox",
|
||||||
|
settings_press: "element/buttons/settings_press.vox",
|
||||||
|
|
||||||
|
social_button: "element/buttons/social.vox",
|
||||||
|
social_hover: "element/buttons/social_hover.vox",
|
||||||
|
social_press: "element/buttons/social_press.vox",
|
||||||
|
|
||||||
|
map_button: "element/buttons/map.vox",
|
||||||
|
map_hover: "element/buttons/map_hover.vox",
|
||||||
|
map_press: "element/buttons/map_press.vox",
|
||||||
|
|
||||||
|
spellbook_button: "element/buttons/spellbook.vox",
|
||||||
|
spellbook_hover: "element/buttons/spellbook_hover.vox",
|
||||||
|
spellbook_press: "element/buttons/spellbook_press.vox",
|
||||||
|
|
||||||
|
character_button: "element/buttons/character.vox",
|
||||||
|
character_hover: "element/buttons/character_hover.vox",
|
||||||
|
character_press: "element/buttons/character_press.vox",
|
||||||
|
|
||||||
|
qlog_button: "element/buttons/qlog.vox",
|
||||||
|
qlog_hover: "element/buttons/qlog_hover.vox",
|
||||||
|
qlog_press: "element/buttons/qlog_press.vox",
|
||||||
|
|
||||||
|
close_button: "element/buttons/x.vox",
|
||||||
|
close_button_hover: "element/buttons/x_hover.vox",
|
||||||
|
close_button_press: "element/buttons/x_press.vox",
|
||||||
|
|
||||||
|
// Esc menu
|
||||||
|
fireplace: "element/misc_bg/fireplace.vox",
|
||||||
|
button_dark: "element/buttons/button_dark.vox",
|
||||||
|
|
||||||
|
// Minimap
|
||||||
|
mmap_frame: "element/frames/mmap.vox",
|
||||||
|
window_frame: "element/frames/window2.vox",
|
||||||
|
map_frame_l: "element/frames/map_l.vox",
|
||||||
|
map_frame_r: "element/frames/map_r.vox",
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct<DynamicImage> Imgs {
|
||||||
|
// Bag
|
||||||
|
bag: "element/buttons/bag/closed.png",
|
||||||
|
bag_hover: "element/buttons/bag/closed_hover.png",
|
||||||
|
bag_press: "element/buttons/bag/closed_press.png",
|
||||||
|
bag_open: "element/buttons/bag/open.png",
|
||||||
|
bag_open_hover: "element/buttons/bag/open_hover.png",
|
||||||
|
bag_open_press: "element/buttons/bag/open_press.png",
|
||||||
|
|
||||||
|
// Buttons
|
||||||
|
mmap_button: "element/buttons/border.png",
|
||||||
|
mmap_button_hover: "element/buttons/border_mo.png",
|
||||||
|
mmap_button_press: "element/buttons/border_press.png",
|
||||||
|
mmap_button_open: "element/buttons/border_pressed.png",
|
||||||
|
|
||||||
|
// Esc-Menu
|
||||||
|
esc_bg: "element/frames/menu.png",
|
||||||
|
button_dark_hover: "element/buttons/button_dark_hover.png",
|
||||||
|
button_dark_press: "element/buttons/button_dark_press.png",
|
||||||
|
|
||||||
|
// MiniMap
|
||||||
|
mmap_frame_bg: "element/misc_bg/mmap_bg.png",
|
||||||
|
|
||||||
|
// Skillbar Module
|
||||||
|
sb_grid: "element/skill_bar/sbar_grid.png",
|
||||||
|
sb_grid_bg: "element/skill_bar/sbar_grid_bg.png",
|
||||||
|
l_click: "element/skill_bar/l.png",
|
||||||
|
r_click: "element/skill_bar/r.png",
|
||||||
|
mana_bar: "element/skill_bar/mana_bar.png",
|
||||||
|
health_bar: "element/skill_bar/health_bar.png",
|
||||||
|
xp_bar: "element/skill_bar/xp_bar.png",
|
||||||
|
|
||||||
|
// Missing: Buff Frame Animation (.gif ?!) (we could do animation in ui.maintain(), or in shader?)
|
||||||
|
window_frame_2: "element/frames/window_2.png",
|
||||||
|
|
||||||
|
// Settings Window
|
||||||
|
settings_bg: "element/frames/settings.png",
|
||||||
|
settings_icon: "element/icons/settings.png",
|
||||||
|
settings_button_mo: "element/buttons/blue_mo.png",
|
||||||
|
check: "element/buttons/check/no.png",
|
||||||
|
check_mo: "element/buttons/check/no_mo.png",
|
||||||
|
check_press: "element/buttons/check/press.png",
|
||||||
|
check_checked: "element/buttons/check/yes.png",
|
||||||
|
check_checked_mo: "element/buttons/check/yes_mo.png",
|
||||||
|
slider: "element/slider/track.png",
|
||||||
|
slider_indicator: "element/slider/indicator.png",
|
||||||
|
//button_blank: ui.new_graphic(ui::Graphic::Blank),
|
||||||
|
button_blue_mo: "element/buttons/blue_mo.png",
|
||||||
|
button_blue_press: "element/buttons/blue_press.png",
|
||||||
|
|
||||||
|
// Window BG
|
||||||
|
window_bg: "element/misc_bg/window_bg.png",
|
||||||
|
|
||||||
|
// Social Window
|
||||||
|
social_bg: "element/misc_bg/small_bg.png",
|
||||||
|
social_icon: "element/icons/social.png",
|
||||||
|
|
||||||
|
// Map Window
|
||||||
|
map_bg: "element/misc_bg/small_bg.png",
|
||||||
|
map_icon: "element/icons/map.png",
|
||||||
|
|
||||||
|
// Spell Book Window
|
||||||
|
spellbook_bg: "element/misc_bg/small_bg.png",
|
||||||
|
spellbook_icon: "element/icons/spellbook.png",
|
||||||
|
|
||||||
|
// Char Window
|
||||||
|
charwindow: "element/misc_bg/charwindow.png",
|
||||||
|
charwindow_icon: "element/icons/charwindow.png",
|
||||||
|
charwindow_tab_bg: "element/frames/tab.png",
|
||||||
|
charwindow_tab: "element/buttons/tab.png",
|
||||||
|
charwindow_expbar: "element/misc_bg/small_bg.png",
|
||||||
|
progress_frame: "element/frames/progress_bar.png",
|
||||||
|
progress: "element/misc_bg/progress.png",
|
||||||
|
|
||||||
|
// Quest-Log Window
|
||||||
|
questlog_bg: "element/misc_bg/small_bg.png",
|
||||||
|
questlog_icon: "element/icons/questlog.png",
|
||||||
|
|
||||||
|
// Chat-Arrows
|
||||||
|
chat_arrow: "element/buttons/arrow/chat_arrow.png",
|
||||||
|
chat_arrow_mo: "element/buttons/arrow/chat_arrow_mo.png",
|
||||||
|
chat_arrow_press: "element/buttons/arrow/chat_arrow_press.png",
|
||||||
|
}
|
||||||
|
}
|
50
voxygen/src/assets/mod.rs
Normal file
50
voxygen/src/assets/mod.rs
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
pub mod ids;
|
||||||
|
|
||||||
|
use conrod_core::widget::image::Image;
|
||||||
|
|
||||||
|
use crate::ui::Ui;
|
||||||
|
use crate::ui::Graphic;
|
||||||
|
|
||||||
|
use dot_vox::DotVoxData;
|
||||||
|
use image::DynamicImage;
|
||||||
|
|
||||||
|
use std::env;
|
||||||
|
use std::fs;
|
||||||
|
use std::io;
|
||||||
|
use std::io::prelude::*;
|
||||||
|
use std::fs::File;
|
||||||
|
|
||||||
|
fn read_from_path(path: &str) -> Result<Vec<u8>, std::io::Error> {
|
||||||
|
let path_slash = path.replace(".", "/");
|
||||||
|
let path_slash_toml = [env!("CARGO_MANIFEST_DIR"), &path_slash, ".toml"].concat();
|
||||||
|
println!("{}", path_slash_toml);
|
||||||
|
|
||||||
|
let mut content = Vec::new();
|
||||||
|
File::open(path_slash_toml)?.read_to_end(&mut content);
|
||||||
|
Ok(content)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait Asset where Self: std::marker::Sized {
|
||||||
|
fn load(path: &str) -> Result<Self, std::io::Error>;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Asset for DynamicImage {
|
||||||
|
fn load(path: &str) -> Result<Self, std::io::Error> {
|
||||||
|
let image = image::load_from_memory(
|
||||||
|
&read_from_path(path)?
|
||||||
|
).unwrap();
|
||||||
|
|
||||||
|
Ok(image)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Asset for DotVoxData {
|
||||||
|
fn load(path: &str) -> Result<Self, std::io::Error> {
|
||||||
|
let dot_vox = dot_vox::load_bytes(
|
||||||
|
&read_from_path(path)?
|
||||||
|
).unwrap();
|
||||||
|
|
||||||
|
Ok(dot_vox)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -7,7 +7,8 @@ use crate::{
|
|||||||
window::{Event as WinEvent, Key, Window},
|
window::{Event as WinEvent, Key, Window},
|
||||||
GlobalState,
|
GlobalState,
|
||||||
};
|
};
|
||||||
use common::{assets, figure::Segment};
|
|
||||||
|
use common::figure::Segment;
|
||||||
|
|
||||||
use conrod_core::{
|
use conrod_core::{
|
||||||
color,
|
color,
|
||||||
@ -23,11 +24,13 @@ widget_ids! {
|
|||||||
bag_space_add,
|
bag_space_add,
|
||||||
inventorytest_button,
|
inventorytest_button,
|
||||||
inventorytest_button_label,
|
inventorytest_button_label,
|
||||||
|
|
||||||
// Debug
|
// Debug
|
||||||
debug_bg,
|
debug_bg,
|
||||||
debug_button,
|
debug_button,
|
||||||
debug_button_label,
|
debug_button_label,
|
||||||
fps_counter,
|
fps_counter,
|
||||||
|
|
||||||
// Game Version
|
// Game Version
|
||||||
version,
|
version,
|
||||||
|
|
||||||
@ -56,10 +59,12 @@ widget_ids! {
|
|||||||
qlog_button_bg,
|
qlog_button_bg,
|
||||||
bag_text,
|
bag_text,
|
||||||
mmap_button,
|
mmap_button,
|
||||||
//help
|
|
||||||
|
// Help
|
||||||
help,
|
help,
|
||||||
help_bg,
|
help_bg,
|
||||||
//ESC-Menu
|
|
||||||
|
// ESC-Menu
|
||||||
esc_bg,
|
esc_bg,
|
||||||
fireplace,
|
fireplace,
|
||||||
menu_button_1,
|
menu_button_1,
|
||||||
@ -67,11 +72,13 @@ widget_ids! {
|
|||||||
menu_button_3,
|
menu_button_3,
|
||||||
menu_button_4,
|
menu_button_4,
|
||||||
menu_button_5,
|
menu_button_5,
|
||||||
//Mini-Map
|
|
||||||
|
// Mini-Map
|
||||||
mmap_frame,
|
mmap_frame,
|
||||||
mmap_frame_bg,
|
mmap_frame_bg,
|
||||||
mmap_location,
|
mmap_location,
|
||||||
//Action-Bar
|
|
||||||
|
// Action-Bar
|
||||||
xp_bar,
|
xp_bar,
|
||||||
l_click,
|
l_click,
|
||||||
r_click,
|
r_click,
|
||||||
@ -84,17 +91,20 @@ widget_ids! {
|
|||||||
xp_bar_progress,
|
xp_bar_progress,
|
||||||
health_bar_color,
|
health_bar_color,
|
||||||
mana_bar_color,
|
mana_bar_color,
|
||||||
|
|
||||||
// Level Display
|
// Level Display
|
||||||
level_text,
|
level_text,
|
||||||
next_level_text,
|
next_level_text,
|
||||||
//Window Frames
|
|
||||||
|
// Window Frames
|
||||||
window_frame_0,
|
window_frame_0,
|
||||||
window_frame_1,
|
window_frame_1,
|
||||||
window_frame_2,
|
window_frame_2,
|
||||||
window_frame_3,
|
window_frame_3,
|
||||||
window_frame_4,
|
window_frame_4,
|
||||||
window_frame_5,
|
window_frame_5,
|
||||||
//0 Settings-Window
|
|
||||||
|
// 0 Settings-Window
|
||||||
settings_bg,
|
settings_bg,
|
||||||
settings_content,
|
settings_content,
|
||||||
settings_icon,
|
settings_icon,
|
||||||
@ -106,7 +116,8 @@ widget_ids! {
|
|||||||
settings_scrollbar,
|
settings_scrollbar,
|
||||||
controls_text,
|
controls_text,
|
||||||
controls_controls,
|
controls_controls,
|
||||||
//Contents
|
|
||||||
|
// Contents
|
||||||
button_help,
|
button_help,
|
||||||
button_help2,
|
button_help2,
|
||||||
show_help_label,
|
show_help_label,
|
||||||
@ -116,13 +127,15 @@ widget_ids! {
|
|||||||
gameplay,
|
gameplay,
|
||||||
controls,
|
controls,
|
||||||
rectangle,
|
rectangle,
|
||||||
//1 Social
|
|
||||||
|
// 1 Social
|
||||||
social_frame,
|
social_frame,
|
||||||
social_bg,
|
social_bg,
|
||||||
social_icon,
|
social_icon,
|
||||||
social_close,
|
social_close,
|
||||||
social_title,
|
social_title,
|
||||||
//2 Map
|
|
||||||
|
// 2 Map
|
||||||
map_frame,
|
map_frame,
|
||||||
map_bg,
|
map_bg,
|
||||||
map_icon,
|
map_icon,
|
||||||
@ -132,13 +145,15 @@ widget_ids! {
|
|||||||
map_frame_r,
|
map_frame_r,
|
||||||
map_frame_bl,
|
map_frame_bl,
|
||||||
map_frame_br,
|
map_frame_br,
|
||||||
//3 Spellbook
|
|
||||||
|
// 3 Spellbook
|
||||||
spellbook_frame,
|
spellbook_frame,
|
||||||
spellbook_bg,
|
spellbook_bg,
|
||||||
spellbook_icon,
|
spellbook_icon,
|
||||||
spellbook_close,
|
spellbook_close,
|
||||||
spellbook_title,
|
spellbook_title,
|
||||||
//4 Charwindow
|
|
||||||
|
// 4 Charwindow
|
||||||
charwindow_frame,
|
charwindow_frame,
|
||||||
charwindow,
|
charwindow,
|
||||||
charwindow_bg,
|
charwindow_bg,
|
||||||
@ -157,7 +172,8 @@ widget_ids! {
|
|||||||
charwindow_rectangle,
|
charwindow_rectangle,
|
||||||
charwindow_exp_rectangle,
|
charwindow_exp_rectangle,
|
||||||
charwindow_exp_progress_rectangle,
|
charwindow_exp_progress_rectangle,
|
||||||
//5 Quest-Log
|
|
||||||
|
// 5 Quest-Log
|
||||||
questlog_frame,
|
questlog_frame,
|
||||||
questlog_bg,
|
questlog_bg,
|
||||||
questlog_icon,
|
questlog_icon,
|
||||||
@ -166,304 +182,6 @@ widget_ids! {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: make macro to mimic widget_ids! for images ids or find another solution to simplify addition of new images.
|
|
||||||
pub(self) struct Imgs {
|
|
||||||
// Bag
|
|
||||||
bag: ImgId,
|
|
||||||
bag_hover: ImgId,
|
|
||||||
bag_press: ImgId,
|
|
||||||
bag_open: ImgId,
|
|
||||||
bag_open_hover: ImgId,
|
|
||||||
bag_open_press: ImgId,
|
|
||||||
bag_contents: ImgId,
|
|
||||||
inv_grid: ImgId,
|
|
||||||
inv_slot: ImgId,
|
|
||||||
|
|
||||||
// Buttons
|
|
||||||
mmap_closed: ImgId,
|
|
||||||
mmap_closed_hover: ImgId,
|
|
||||||
mmap_closed_press: ImgId,
|
|
||||||
mmap_open: ImgId,
|
|
||||||
mmap_open_hover: ImgId,
|
|
||||||
mmap_open_press: ImgId,
|
|
||||||
|
|
||||||
settings: ImgId,
|
|
||||||
settings_hover: ImgId,
|
|
||||||
settings_press: ImgId,
|
|
||||||
|
|
||||||
social_button: ImgId,
|
|
||||||
social_hover: ImgId,
|
|
||||||
social_press: ImgId,
|
|
||||||
|
|
||||||
map_button: ImgId,
|
|
||||||
map_hover: ImgId,
|
|
||||||
map_press: ImgId,
|
|
||||||
|
|
||||||
spellbook_button: ImgId,
|
|
||||||
spellbook_hover: ImgId,
|
|
||||||
spellbook_press: ImgId,
|
|
||||||
|
|
||||||
character_button: ImgId,
|
|
||||||
character_hover: ImgId,
|
|
||||||
character_press: ImgId,
|
|
||||||
|
|
||||||
qlog_button: ImgId,
|
|
||||||
qlog_hover: ImgId,
|
|
||||||
qlog_press: ImgId,
|
|
||||||
|
|
||||||
// Close button
|
|
||||||
close_button: ImgId,
|
|
||||||
close_button_hover: ImgId,
|
|
||||||
close_button_press: ImgId,
|
|
||||||
|
|
||||||
// Menu
|
|
||||||
esc_bg: ImgId,
|
|
||||||
fireplace: ImgId,
|
|
||||||
button: ImgId,
|
|
||||||
button_hover: ImgId,
|
|
||||||
button_press: ImgId,
|
|
||||||
|
|
||||||
// MiniMap
|
|
||||||
mmap_frame: ImgId,
|
|
||||||
mmap_frame_closed: ImgId,
|
|
||||||
|
|
||||||
// SkillBar Module
|
|
||||||
sb_grid: ImgId,
|
|
||||||
sb_grid_bg: ImgId,
|
|
||||||
l_click: ImgId,
|
|
||||||
r_click: ImgId,
|
|
||||||
mana_bar: ImgId,
|
|
||||||
health_bar: ImgId,
|
|
||||||
xp_bar: ImgId,
|
|
||||||
|
|
||||||
//Buff Frame(s)
|
|
||||||
//buff_frame: ImgId,
|
|
||||||
//buff_frame_bg: ImgId,
|
|
||||||
//buff_frame_red: ImgId,
|
|
||||||
//buff_frame_green: ImgId,
|
|
||||||
|
|
||||||
//Missing: Buff Frame Animation
|
|
||||||
window_frame: ImgId,
|
|
||||||
window_frame_2: ImgId,
|
|
||||||
//Settings-Window
|
|
||||||
settings_frame_r: ImgId,
|
|
||||||
settings_frame_l: ImgId,
|
|
||||||
settings_button: ImgId,
|
|
||||||
settings_button_pressed: ImgId,
|
|
||||||
settings_button_hover: ImgId,
|
|
||||||
settings_button_press: ImgId,
|
|
||||||
settings_bg: ImgId,
|
|
||||||
settings_icon: ImgId,
|
|
||||||
settings_button_mo: ImgId,
|
|
||||||
check: ImgId,
|
|
||||||
check_mo: ImgId,
|
|
||||||
check_press: ImgId,
|
|
||||||
check_checked: ImgId,
|
|
||||||
check_checked_mo: ImgId,
|
|
||||||
slider: ImgId,
|
|
||||||
slider_indicator: ImgId,
|
|
||||||
button_blank: ImgId,
|
|
||||||
button_blue_mo: ImgId,
|
|
||||||
button_blue_press: ImgId,
|
|
||||||
window_bg: ImgId,
|
|
||||||
// Social-Window
|
|
||||||
social_bg: ImgId,
|
|
||||||
social_icon: ImgId,
|
|
||||||
// Map-Window
|
|
||||||
map_bg: ImgId,
|
|
||||||
map_icon: ImgId,
|
|
||||||
map_frame_l: ImgId,
|
|
||||||
map_frame_r: ImgId,
|
|
||||||
map_frame_bl: ImgId,
|
|
||||||
map_frame_br: ImgId,
|
|
||||||
// Spell Book Window
|
|
||||||
spellbook_bg: ImgId,
|
|
||||||
spellbook_icon: ImgId,
|
|
||||||
// Char Window
|
|
||||||
charwindow: ImgId,
|
|
||||||
charwindow_icon: ImgId,
|
|
||||||
charwindow_tab_bg: ImgId,
|
|
||||||
charwindow_tab: ImgId,
|
|
||||||
charwindow_expbar: ImgId,
|
|
||||||
progress_frame: ImgId,
|
|
||||||
progress: ImgId,
|
|
||||||
|
|
||||||
// Buttons
|
|
||||||
grid_button: ImgId,
|
|
||||||
grid_button_hover: ImgId,
|
|
||||||
grid_button_press: ImgId,
|
|
||||||
grid_button_open: ImgId,
|
|
||||||
|
|
||||||
// Quest-Log Window
|
|
||||||
questlog_bg: ImgId,
|
|
||||||
questlog_icon: ImgId,
|
|
||||||
//help
|
|
||||||
// Chat-Arrow
|
|
||||||
chat_arrow: ImgId,
|
|
||||||
chat_arrow_mo: ImgId,
|
|
||||||
chat_arrow_press: ImgId,
|
|
||||||
}
|
|
||||||
impl Imgs {
|
|
||||||
fn new(ui: &mut Ui, renderer: &mut Renderer) -> Imgs {
|
|
||||||
let mut load_img = |filename, ui: &mut Ui| {
|
|
||||||
let fullpath: String = ["/voxygen/", filename].concat();
|
|
||||||
let image = image::load_from_memory(
|
|
||||||
assets::load(fullpath.as_str())
|
|
||||||
.expect("Error loading Main UI Image")
|
|
||||||
.as_slice(),
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
ui.new_graphic(ui::Graphic::Image(image))
|
|
||||||
};
|
|
||||||
let mut load_vox = |filename, ui: &mut Ui| {
|
|
||||||
let fullpath: String = ["/voxygen/", filename].concat();
|
|
||||||
let dot_vox = dot_vox::load_bytes(
|
|
||||||
assets::load(fullpath.as_str())
|
|
||||||
.expect("Error loading Main UI .vox")
|
|
||||||
.as_slice(),
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
ui.new_graphic(ui::Graphic::Voxel(Segment::from(dot_vox)))
|
|
||||||
};
|
|
||||||
Imgs {
|
|
||||||
// Bag
|
|
||||||
bag: load_img("element/buttons/bag/closed.png", ui),
|
|
||||||
bag_hover: load_img("element/buttons/bag/closed_hover.png", ui),
|
|
||||||
bag_press: load_img("element/buttons/bag/closed_press.png", ui),
|
|
||||||
bag_open: load_img("element/buttons/bag/open.png", ui),
|
|
||||||
bag_open_hover: load_img("element/buttons/bag/open_hover.png", ui),
|
|
||||||
bag_open_press: load_img("element/buttons/bag/open_press.png", ui),
|
|
||||||
bag_contents: load_vox("element/frames/bag.vox", ui),
|
|
||||||
inv_grid: load_vox("element/frames/inv_grid.vox", ui),
|
|
||||||
inv_slot: load_vox("element/buttons/inv_slot.vox", ui),
|
|
||||||
|
|
||||||
// Buttons
|
|
||||||
mmap_closed: load_vox("element/buttons/button_mmap_closed.vox", ui),
|
|
||||||
mmap_closed_hover: load_vox("element/buttons/button_mmap_closed_hover.vox", ui),
|
|
||||||
mmap_closed_press: load_vox("element/buttons/button_mmap_closed_press.vox", ui),
|
|
||||||
mmap_open: load_vox("element/buttons/button_mmap_open.vox", ui),
|
|
||||||
mmap_open_hover: load_vox("element/buttons/button_mmap_open_hover.vox", ui),
|
|
||||||
mmap_open_press: load_vox("element/buttons/button_mmap_open_press.vox", ui),
|
|
||||||
|
|
||||||
settings: load_vox("element/buttons/settings.vox", ui),
|
|
||||||
settings_hover: load_vox("element/buttons/settings_hover.vox", ui),
|
|
||||||
settings_press: load_vox("element/buttons/settings_press.vox", ui),
|
|
||||||
|
|
||||||
social_button: load_vox("element/buttons/social.vox", ui),
|
|
||||||
social_hover: load_vox("element/buttons/social_hover.vox", ui),
|
|
||||||
social_press: load_vox("element/buttons/social_press.vox", ui),
|
|
||||||
|
|
||||||
map_button: load_vox("element/buttons/map.vox", ui),
|
|
||||||
map_hover: load_vox("element/buttons/map_hover.vox", ui),
|
|
||||||
map_press: load_vox("element/buttons/map_press.vox", ui),
|
|
||||||
|
|
||||||
spellbook_button: load_vox("element/buttons/spellbook.vox", ui),
|
|
||||||
spellbook_hover: load_vox("element/buttons/spellbook_hover.vox", ui),
|
|
||||||
spellbook_press: load_vox("element/buttons/spellbook_press.vox", ui),
|
|
||||||
|
|
||||||
character_button: load_vox("element/buttons/character.vox", ui),
|
|
||||||
character_hover: load_vox("element/buttons/character_hover.vox", ui),
|
|
||||||
character_press: load_vox("element/buttons/character_press.vox", ui),
|
|
||||||
|
|
||||||
qlog_button: load_vox("element/buttons/qlog.vox", ui),
|
|
||||||
qlog_hover: load_vox("element/buttons/qlog_hover.vox", ui),
|
|
||||||
qlog_press: load_vox("element/buttons/qlog_press.vox", ui),
|
|
||||||
|
|
||||||
grid_button: load_img("element/buttons/border.png", ui),
|
|
||||||
grid_button_hover: load_img("element/buttons/border_mo.png", ui),
|
|
||||||
grid_button_press: load_img("element/buttons/border_press.png", ui),
|
|
||||||
grid_button_open: load_img("element/buttons/border_pressed.png", ui),
|
|
||||||
|
|
||||||
// Close button
|
|
||||||
close_button: load_vox("element/buttons/x.vox", ui),
|
|
||||||
close_button_hover: load_vox("element/buttons/x_hover.vox", ui),
|
|
||||||
close_button_press: load_vox("element/buttons/x_press.vox", ui),
|
|
||||||
|
|
||||||
// Esc-Menu
|
|
||||||
esc_bg: load_img("element/frames/menu.png", ui),
|
|
||||||
fireplace: load_vox("element/misc_bg/fireplace.vox", ui),
|
|
||||||
button: load_vox("element/buttons/button.vox", ui),
|
|
||||||
button_hover: load_vox("element/buttons/button_hover.vox", ui),
|
|
||||||
button_press: load_vox("element/buttons/button_press.vox", ui),
|
|
||||||
|
|
||||||
// MiniMap
|
|
||||||
mmap_frame: load_vox("element/frames/mmap.vox", ui),
|
|
||||||
mmap_frame_closed: load_vox("element/frames/mmap_closed.vox", ui),
|
|
||||||
|
|
||||||
// Skillbar Module
|
|
||||||
sb_grid: load_img("element/skill_bar/sbar_grid.png", ui),
|
|
||||||
sb_grid_bg: load_img("element/skill_bar/sbar_grid_bg.png", ui),
|
|
||||||
l_click: load_img("element/skill_bar/l.png", ui),
|
|
||||||
r_click: load_img("element/skill_bar/r.png", ui),
|
|
||||||
mana_bar: load_img("element/skill_bar/mana_bar.png", ui),
|
|
||||||
health_bar: load_img("element/skill_bar/health_bar.png", ui),
|
|
||||||
xp_bar: load_img("element/skill_bar/xp_bar.png", ui),
|
|
||||||
|
|
||||||
// Missing: Buff Frame Animation (.gif ?!) (we could do animation in ui.maintain(), or in shader?)
|
|
||||||
window_frame: load_vox("element/frames/window2.vox", ui),
|
|
||||||
window_frame_2: load_img("element/frames/window_2.png", ui),
|
|
||||||
|
|
||||||
// Settings Window
|
|
||||||
settings_frame_r: load_vox("element/frames/settings_r.vox", ui),
|
|
||||||
settings_frame_l: load_vox("element/frames/settings_l.vox", ui),
|
|
||||||
settings_button: load_vox("element/buttons/settings_button.vox", ui),
|
|
||||||
settings_button_pressed: load_vox("element/buttons/settings_button_pressed.vox", ui),
|
|
||||||
settings_button_hover: load_vox("element/buttons/settings_button_hover.vox", ui),
|
|
||||||
settings_button_press: load_vox("element/buttons/settings_button_press.vox", ui),
|
|
||||||
settings_bg: load_img("element/frames/settings.png", ui),
|
|
||||||
settings_icon: load_img("element/icons/settings.png", ui),
|
|
||||||
settings_button_mo: load_img("element/buttons/blue_mo.png", ui),
|
|
||||||
check: load_vox("element/buttons/check/no.vox", ui),
|
|
||||||
check_mo: load_vox("element/buttons/check/no_mo.vox", ui),
|
|
||||||
check_press: load_vox("element/buttons/check/press.vox", ui),
|
|
||||||
check_checked: load_vox("element/buttons/check/yes.vox", ui),
|
|
||||||
check_checked_mo: load_vox("element/buttons/check/yes_mo.vox", ui),
|
|
||||||
slider: load_vox("element/slider/track.vox", ui),
|
|
||||||
slider_indicator: load_vox("element/slider/indicator.vox", ui),
|
|
||||||
button_blank: ui.new_graphic(ui::Graphic::Blank),
|
|
||||||
button_blue_mo: load_img("element/buttons/blue_mo.png", ui),
|
|
||||||
button_blue_press: load_img("element/buttons/blue_press.png", ui),
|
|
||||||
|
|
||||||
// Window BG
|
|
||||||
window_bg: load_img("element/misc_bg/window_bg.png", ui),
|
|
||||||
|
|
||||||
// Social Window
|
|
||||||
social_bg: load_img("element/misc_bg/small_bg.png", ui),
|
|
||||||
social_icon: load_img("element/icons/social.png", ui),
|
|
||||||
|
|
||||||
// Map Window
|
|
||||||
map_bg: load_img("element/misc_bg/small_bg.png", ui),
|
|
||||||
map_icon: load_img("element/icons/map.png", ui),
|
|
||||||
map_frame_l: load_vox("element/frames/map_l.vox", ui),
|
|
||||||
map_frame_r: load_vox("element/frames/map_r.vox", ui),
|
|
||||||
map_frame_bl: load_vox("element/frames/map_bl.vox", ui),
|
|
||||||
map_frame_br: load_vox("element/frames/map_br.vox", ui),
|
|
||||||
|
|
||||||
// Spell Book Window
|
|
||||||
spellbook_bg: load_img("element/misc_bg/small_bg.png", ui),
|
|
||||||
spellbook_icon: load_img("element/icons/spellbook.png", ui),
|
|
||||||
|
|
||||||
// Char Window
|
|
||||||
charwindow: load_img("element/misc_bg/charwindow.png", ui),
|
|
||||||
charwindow_icon: load_img("element/icons/charwindow.png", ui),
|
|
||||||
charwindow_tab_bg: load_img("element/frames/tab.png", ui),
|
|
||||||
charwindow_tab: load_img("element/buttons/tab.png", ui),
|
|
||||||
charwindow_expbar: load_img("element/misc_bg/small_bg.png", ui),
|
|
||||||
progress_frame: load_img("element/frames/progress_bar.png", ui),
|
|
||||||
progress: load_img("element/misc_bg/progress.png", ui),
|
|
||||||
|
|
||||||
// Quest-Log Window
|
|
||||||
questlog_bg: load_img("element/misc_bg/small_bg.png", ui),
|
|
||||||
questlog_icon: load_img("element/icons/questlog.png", ui),
|
|
||||||
|
|
||||||
// Chat-Arrows
|
|
||||||
chat_arrow: load_vox("element/buttons/arrow_down.vox", ui),
|
|
||||||
chat_arrow_mo: load_vox("element/buttons/arrow_down_hover.vox", ui),
|
|
||||||
chat_arrow_press: load_vox("element/buttons/arrow_down_press.vox", ui),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
enum SettingsTab {
|
enum SettingsTab {
|
||||||
Interface,
|
Interface,
|
||||||
Video,
|
Video,
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#![feature(drain_filter)]
|
#![feature(drain_filter)]
|
||||||
#![recursion_limit = "2048"]
|
#![recursion_limit = "2048"]
|
||||||
|
|
||||||
|
pub mod assets;
|
||||||
pub mod anim;
|
pub mod anim;
|
||||||
pub mod error;
|
pub mod error;
|
||||||
pub mod hud;
|
pub mod hud;
|
||||||
|
@ -228,6 +228,7 @@ impl Ui {
|
|||||||
pub fn new(window: &mut Window) -> Result<Self, Error> {
|
pub fn new(window: &mut Window) -> Result<Self, Error> {
|
||||||
let scale = Scale::new(window, ScaleMode::Absolute(1.0));
|
let scale = Scale::new(window, ScaleMode::Absolute(1.0));
|
||||||
let win_dims = scale.scaled_window_size().into_array();
|
let win_dims = scale.scaled_window_size().into_array();
|
||||||
|
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
ui: UiBuilder::new(win_dims).build(),
|
ui: UiBuilder::new(win_dims).build(),
|
||||||
image_map: Map::new(),
|
image_map: Map::new(),
|
||||||
|
Reference in New Issue
Block a user