From a3cf60c56e5f67d0fdbdefe4118e3352bf251686 Mon Sep 17 00:00:00 2001 From: Imbris Date: Sun, 19 May 2019 14:07:50 -0400 Subject: [PATCH] Link player stats, remove self name tag Former-commit-id: bb20c8f1515859ae7720484faa4b718253e0ccb7 --- assets/voxygen/element/skill_bar/xp_bar2.png | Bin 4505 -> 0 bytes assets/voxygen/element/skill_bar/xp_bar_l.png | Bin 2356 -> 0 bytes .../element/skill_bar/xp_bar_l_filled.png | Bin 2049 -> 0 bytes assets/voxygen/element/skill_bar/xp_bar_r.png | Bin 2285 -> 0 bytes voxygen/src/hud/mod.rs | 59 +++++++++++++----- voxygen/src/hud/skillbar.rs | 39 +++++++----- voxygen/src/session.rs | 6 +- voxygen/src/ui/widgets/ingame.rs | 4 +- 8 files changed, 73 insertions(+), 35 deletions(-) delete mode 100644 assets/voxygen/element/skill_bar/xp_bar2.png delete mode 100644 assets/voxygen/element/skill_bar/xp_bar_l.png delete mode 100644 assets/voxygen/element/skill_bar/xp_bar_l_filled.png delete mode 100644 assets/voxygen/element/skill_bar/xp_bar_r.png diff --git a/assets/voxygen/element/skill_bar/xp_bar2.png b/assets/voxygen/element/skill_bar/xp_bar2.png deleted file mode 100644 index 15ddbb5c8a238dfb25b033dbbd97f08ab6dfe7b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4505 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 EFGsTq)c^nh diff --git a/assets/voxygen/element/skill_bar/xp_bar_l.png b/assets/voxygen/element/skill_bar/xp_bar_l.png deleted file mode 100644 index d2218dd26dfb3d750755d48f237d37499c8ad8aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2356 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 diff --git a/assets/voxygen/element/skill_bar/xp_bar_r.png b/assets/voxygen/element/skill_bar/xp_bar_r.png deleted file mode 100644 index 81e3f11b9f86b4b38f21f41b8b9faa63d95632c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2285 zcmZ`)do+}37=K-pjM!3c$K)W@$!=;~1~cP2QtPtP1%*9o69zRAhHoa?lxk*^r5u{+ ziniEFwPUBIJ-M{mgRvAbNHOcSSeF?yW@hIz!;xnG_`dh~e(&=>?{oWp&-tJLUxcoy zE&u@Gx6?Zq04;Z!9HpZzdw1ov-;*sXlXiv@0a&#Le$+rwv9S!?5WO?lAAocl04Ui2 z%t~eJAOOkR02qn_z~w3c>l5=LYw-Z+5dFM8LQ>z4a33ao#2f#}G4b4@cl+DH^wWgk z0dZVmxX`2ZwZR?^S;7cKy7c!tH2{%H!PUzf+%c@pi3qx1i5GAiT zk7o>90URdr zpn0G^7I&B{w-A4`&R$_G{@z_nRB3(~`zu%}%GRexr)pwy1^hvMBiA-BP@DI|d8@`I z7*9Gd+e3yPxM&Whiw_tjVGA+mBG`~vI6eHXGIFUPN)t^=Mu}+NH?)UM$+U+4M?(g8 z9!b+-BfaEO0z2Z$HKJsO`M}s+O$JeNNUb`tKnvc^O|4lJJ4l)i6m=N&8AWHA%60o@ zOg#_`7<4zP!#6)sq|?DXOA`joi@bhtR`V@)4Y9Cg8jnrSKH+lbB@UG({E73 zx(^bID))|Ar$2}8>pIgLEWAIDNfD*wK`DUSY=+4d*HxqBJJX9Ch{<)(6k(Y*HF4wS!hmSp7Z ztmrSqjSA4FECO$6+!11SC{^q z8#tz>TnTx;uBqIW_SI=YOnBF;^wt~p-3b~@M6$A+mMvb3=kmqFqiF>?pEpDS?D zDQ{BYj~_>Xc1)Q`^r-x>!CFP0jwV~h@H3px%+PVdOn1?KvVNr|COI*ndH@;m-*os~ zpRAj{ECrG+N%=j~;!G=M3~NE^CcAl($IYn~DtaaG1vJ>+fy5xulmL4b&C-f=tH(Fn zME_&u{j8Jz7M~A^!xlqbD$o!)jm$qD*9g$HMvSE!i*C|0GEcVg^1hogJe%`1TGLNy z_AYc0hehqY8OKw7EHxDgX0GXpOIzK1PF0m+oRhkDKv>~A!H3EGgDUF1lGBdnALqZv z^cUOKH|6W8@cGwInb_UPto)W55~W&8Ij3D_c6P-%t6@!XdrqimQ`;`rbZo3a zMKN*;^h-X{LW)%dEjf+nQ|TlGgWEZM$BXFlKkWf&yIx4jJ3-*=OrIJa8 zM$93*Q5OpJP(QkVN+_%zGK;80{t`jP(sL!NZ!7(W#4K@Iq-cLeD0&QYu-p&kQLth; zQ7VQ)SxcT5bwEMjLt8QZnN<0-DBI-(DY)8ekVaPwp>0nsaC;QoYh-MOJES&0(%hcM z%%S9r97u>=6yp*W#bbX8j>)O|dSlDP-*UEg`*1c{Sn1PWZ_}ChwH+(r|ff}yj`mS8*M!ji@W$@KvzD6H`|#w k$>-LBf54&_CsUJ3H9)@A$j!)Z=6U#-pHF~yg=bXO|2ndZivR!s diff --git a/voxygen/src/hud/mod.rs b/voxygen/src/hud/mod.rs index dde053f24c..0278649d0e 100644 --- a/voxygen/src/hud/mod.rs +++ b/voxygen/src/hud/mod.rs @@ -276,16 +276,24 @@ impl Hud { let ecs = client.state().ecs(); let actor = ecs.read_storage::(); let pos = ecs.read_storage::(); - let stats = ecs.read_storage::(); + let stats = ecs.read_storage::(); + let entities = ecs.entities(); + let player = client.entity(); let mut id_walker = self.ids.ingame_elements.walk(); - for (pos, name) in (&pos, &actor) - .join() - .filter_map(|(pos, actor)| match actor { - comp::Actor::Character { name, .. } => Some((pos.0, name)), - _ => None, - }) + for (pos, name) in + (&entities, &pos, &actor) + .join() + .filter_map(|(entity, pos, actor)| match actor { + comp::Actor::Character { name, .. } if entity != player => { + Some((pos.0, name)) + } + _ => None, + }) { - let id = id_walker.next(&mut self.ids.ingame_elements, &mut ui_widgets.widget_id_generator()); + let id = id_walker.next( + &mut self.ids.ingame_elements, + &mut ui_widgets.widget_id_generator(), + ); Text::new(&name) .font_size(20) .color(Color::Rgba(1.0, 1.0, 1.0, 1.0)) @@ -294,15 +302,30 @@ impl Hud { .resolution(100.0) .set(id, ui_widgets); } - for (pos, hp) in (&pos, &stats).join().map(|(pos, stats)| (pos.0, stats.hp)) { - let id = id_walker.next(&mut self.ids.ingame_elements, &mut ui_widgets.widget_id_generator()); + for (pos, hp) in (&entities, &pos, &stats) + .join() + .filter_map(|(entity, pos, stats)| { + if entity != player { + Some((pos.0, stats.hp)) + } else { + None + } + }) + { + let id = id_walker.next( + &mut self.ids.ingame_elements, + &mut ui_widgets.widget_id_generator(), + ); ( // Healh Bar - Rectangle::fill_with([120.0, 12.0], color::BLACK) + Rectangle::fill_with([120.0, 8.0], Color::Rgba(0.3, 0.3, 0.3, 0.5)) .x_y(0.0, -25.0), // Filling - Rectangle::fill_with([114.0 * (hp.current as f64 / hp.maximum as f64), 6.0], HP_COLOR) - .x_y(0.0, -25.0), + Rectangle::fill_with( + [120.0 * (hp.current as f64 / hp.maximum as f64), 8.0], + HP_COLOR, + ) + .x_y(0.0, -25.0), ) .position_ingame(pos + Vec3::new(0.0, 0.0, 3.0)) .resolution(100.0) @@ -418,7 +441,15 @@ impl Hud { } // Skillbar - Skillbar::new(&self.imgs, &self.fonts).set(self.ids.skillbar, ui_widgets); + // Get player stats + let stats = client + .state() + .ecs() + .read_storage::() + .get(client.entity()) + .map(|&s| s) + .unwrap_or_default(); + Skillbar::new(&self.imgs, &self.fonts, stats).set(self.ids.skillbar, ui_widgets); // Chat box match Chat::new(&mut self.new_messages, &self.imgs, &self.fonts) diff --git a/voxygen/src/hud/skillbar.rs b/voxygen/src/hud/skillbar.rs index 2bfc8a307d..7e2fc45207 100644 --- a/voxygen/src/hud/skillbar.rs +++ b/voxygen/src/hud/skillbar.rs @@ -1,4 +1,5 @@ use super::{img_ids::Imgs, Fonts, HP_COLOR, MANA_COLOR, TEXT_COLOR, XP_COLOR}; +use common::comp::Stats; use conrod_core::{ widget::{self, Image, Rectangle, Text}, widget_ids, Colorable, Positionable, Sizeable, Widget, WidgetCommon, @@ -30,15 +31,18 @@ pub struct Skillbar<'a> { imgs: &'a Imgs, fonts: &'a Fonts, + stats: Stats, + #[conrod(common_builder)] common: widget::CommonBuilder, } impl<'a> Skillbar<'a> { - pub fn new(imgs: &'a Imgs, fonts: &'a Fonts) -> Self { + pub fn new(imgs: &'a Imgs, fonts: &'a Fonts, stats: Stats) -> Self { Self { imgs, fonts, + stats, common: widget::CommonBuilder::default(), } } @@ -68,9 +72,13 @@ impl<'a> Widget for Skillbar<'a> { fn update(self, args: widget::UpdateArgs) -> Self::Event { let widget::UpdateArgs { state, ui, .. } = args; - // TODO: Read from parameter/character struct - let xp_percentage = 0.4; - let hp_percentage = 1.0; + // TODO: remove this + let level = (self.stats.xp as f64).log(4.0).trunc() as u32 + 1; + let start_level_xp = ((level - 1) as f64).powi(4); + let next_level_xp = (level as f64).powi(4) - start_level_xp; + // TODO: We need a max xp value + let xp_percentage = (self.stats.xp as f64 - start_level_xp) / next_level_xp; + let hp_percentage = self.stats.hp.current as f64 / self.stats.hp.maximum as f64; let mana_percentage = 1.0; // TODO: Only show while aiming with a bow or when casting a spell. @@ -82,7 +90,7 @@ impl<'a> Widget for Skillbar<'a> { // Experience-Bar Image::new(self.imgs.xp_bar) - .w_h(2688.0 / 6.0, 116.0 / 6.0) + .w_h(672.0 / 1.5, 29.0 / 1.5) .mid_bottom_of(ui.window) .set(state.ids.xp_bar, ui); @@ -92,37 +100,37 @@ impl<'a> Widget for Skillbar<'a> { // Left Grid Image::new(self.imgs.sb_grid) - .w_h(2240.0 / 12.0, 448.0 / 12.0) + .w_h(280.0 / 1.5, 56.0 / 1.5) .up_from(state.ids.xp_bar, 0.0) .align_left_of(state.ids.xp_bar) .set(state.ids.sb_grid_l, ui); Image::new(self.imgs.sb_grid_bg) - .w_h(2240.0 / 12.0, 448.0 / 12.0) + .w_h(280.0 / 1.5, 56.0 / 1.5) .middle_of(state.ids.sb_grid_l) .set(state.ids.sb_grid_bg_l, ui); // Right Grid Image::new(self.imgs.sb_grid) - .w_h(2240.0 / 12.0, 448.0 / 12.0) + .w_h(280.0 / 1.5, 56.0 / 1.5) .up_from(state.ids.xp_bar, 0.0) .align_right_of(state.ids.xp_bar) .set(state.ids.sb_grid_r, ui); Image::new(self.imgs.sb_grid_bg) - .w_h(2240.0 / 12.0, 448.0 / 12.0) + .w_h(280.0 / 1.5, 56.0 / 1.5) .middle_of(state.ids.sb_grid_r) .set(state.ids.sb_grid_bg_r, ui); // Right and Left Click Image::new(self.imgs.l_click) - .w_h(224.0 / 6.0, 320.0 / 6.0) + .w_h(56.0 / 1.5, 80.0 / 1.5) .right_from(state.ids.sb_grid_bg_l, 0.0) .align_bottom_of(state.ids.sb_grid_bg_l) .set(state.ids.l_click, ui); Image::new(self.imgs.r_click) - .w_h(224.0 / 6.0, 320.0 / 6.0) + .w_h(56.0 / 1.5, 80.0 / 1.5) .left_from(state.ids.sb_grid_bg_r, 0.0) .align_bottom_of(state.ids.sb_grid_bg_r) .set(state.ids.r_click, ui); @@ -135,7 +143,7 @@ impl<'a> Widget for Skillbar<'a> { .set(state.ids.health_bar, ui); // Filling - Rectangle::fill_with([182.0 * (hp_percentage), 6.0], HP_COLOR) // "W=182.0 * [Health. %]" + Rectangle::fill_with([182.0 * hp_percentage, 6.0], HP_COLOR) // "W=182.0 * [Health. %]" .top_right_with_margins_on(state.ids.health_bar, 5.0, 0.0) .set(state.ids.health_bar_color, ui); @@ -147,7 +155,7 @@ impl<'a> Widget for Skillbar<'a> { .set(state.ids.mana_bar, ui); // Filling - Rectangle::fill_with([182.0 * (mana_percentage), 6.0], MANA_COLOR) // "W=182.0 * [Mana. %]" + Rectangle::fill_with([182.0 * mana_percentage, 6.0], MANA_COLOR) // "W=182.0 * [Mana. %]" .top_left_with_margins_on(state.ids.mana_bar, 5.0, 0.0) .set(state.ids.mana_bar_color, ui); @@ -159,15 +167,16 @@ impl<'a> Widget for Skillbar<'a> { // Level Display + // TODO: don't construct a new string here // TODO: Insert actual Level here. - Text::new("1") + Text::new(&level.to_string()) .left_from(state.ids.xp_bar, -15.0) .font_size(10) .color(TEXT_COLOR) .set(state.ids.level_text, ui); // TODO: Insert next Level here. - Text::new("2") + Text::new(&(level + 1).to_string()) .right_from(state.ids.xp_bar, -15.0) .font_size(10) .color(TEXT_COLOR) diff --git a/voxygen/src/session.rs b/voxygen/src/session.rs index d095dfffcc..8be80e3703 100644 --- a/voxygen/src/session.rs +++ b/voxygen/src/session.rs @@ -171,10 +171,8 @@ impl PlayState for SessionState { global_state.maintain(); // Maintain the scene. - self.scene.maintain( - global_state.window.renderer_mut(), - &self.client.borrow(), - ); + self.scene + .maintain(global_state.window.renderer_mut(), &self.client.borrow()); // extract HUD events ensuring the client borrow gets dropped let hud_events = self.hud.maintain( diff --git a/voxygen/src/ui/widgets/ingame.rs b/voxygen/src/ui/widgets/ingame.rs index 4f6cd8eee3..c360d73672 100644 --- a/voxygen/src/ui/widgets/ingame.rs +++ b/voxygen/src/ui/widgets/ingame.rs @@ -65,7 +65,7 @@ where } } -trait IngameWidget: Ingameable + Widget {} +pub trait IngameWidget: Ingameable + Widget {} impl IngameWidget for T where T: Ingameable + Widget {} impl Ingameable for (W, E) @@ -148,7 +148,7 @@ where } #[derive(Clone, Copy)] -enum Ids { +pub enum Ids { None, One(Id), Two([Id; 2]),