From 010100660915e96f126d755bac4a588c87977380 Mon Sep 17 00:00:00 2001 From: Monty Marz Date: Sun, 3 Jan 2021 05:44:54 +0100 Subject: [PATCH] flashing buttons for available points, WIP lock/unlock indicator Condensed UI code. Removed some hardcoding. icons squash later, WIP colouring for unavailable skills --- assets/voxygen/element/icons/2haxe_m2.png | Bin 708 -> 0 bytes assets/voxygen/element/icons/2hhammer_m2.png | Bin 806 -> 0 bytes .../element/icons/skilltree/health_plus.png | Bin 0 -> 362 bytes .../element/icons/skilltree/stamina_plus.png | Bin 0 -> 324 bytes .../element/icons/skilltree/unlock_axe.png | Bin 0 -> 384 bytes .../element/icons/skilltree/unlock_bow.png | Bin 0 -> 367 bytes .../element/icons/skilltree/unlock_hammer.png | Bin 0 -> 354 bytes .../icons/skilltree/unlock_sceptre.png | Bin 0 -> 424 bytes .../icons/skilltree/unlock_staff-0.png | Bin 0 -> 326 bytes .../element/icons/skilltree/unlock_sword.png | Bin 0 -> 249 bytes server/src/cmd.rs | 9 +- server/src/events/entity_manipulation.rs | 10 +- server/src/persistence/character.rs | 4 +- voxygen/src/hud/diary.rs | 287 +++++------------- voxygen/src/hud/img_ids.rs | 12 +- voxygen/src/hud/mod.rs | 3 +- 16 files changed, 103 insertions(+), 222 deletions(-) delete mode 100644 assets/voxygen/element/icons/2haxe_m2.png delete mode 100644 assets/voxygen/element/icons/2hhammer_m2.png create mode 100644 assets/voxygen/element/icons/skilltree/health_plus.png create mode 100644 assets/voxygen/element/icons/skilltree/stamina_plus.png create mode 100644 assets/voxygen/element/icons/skilltree/unlock_axe.png create mode 100644 assets/voxygen/element/icons/skilltree/unlock_bow.png create mode 100644 assets/voxygen/element/icons/skilltree/unlock_hammer.png create mode 100644 assets/voxygen/element/icons/skilltree/unlock_sceptre.png create mode 100644 assets/voxygen/element/icons/skilltree/unlock_staff-0.png create mode 100644 assets/voxygen/element/icons/skilltree/unlock_sword.png diff --git a/assets/voxygen/element/icons/2haxe_m2.png b/assets/voxygen/element/icons/2haxe_m2.png deleted file mode 100644 index 4f52e8b8d996ab865e23ea300ab549cdf0518b63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 708 zcmV;#0z3VQP)Px%en~_@R9J=Wm@!KuK@`XTIjpP%5y41=C52d|keK4YLUD^j6b>8V>=cgp1vG`V z_zms~JBve*tF8)Gf`wY8N+AQ0%YjiL$P&0TV-aVZ*?pVM%+8_6JqYZ)nR)ZuH}Acf z4e&-K(r_>8%Vf)*ugb}~S?PF@NGzYEBN}n<8e4djX z2R|?6vyvo6Yo*!BjL(>aYc~JlA?V;C=xw7&3jc};IBo)$x{mpbk-@*PG@HV7%HS7r z-|mpX-wL|cHmwV++Mt46B!z8^*#v*&D58R2O$?iLOg$DkisFJ_?Kcg4Q!oitJ3Exh z!u%#VI1FzJHz=3}b@TgHcGS)eNw_e)Dcm4~NT}uY3V!|A2LR+I#{mF4U-xnFy#fFl zd~R}Fg&SyHt2(Aa2?znAJ}<9VY|Pt(sZcJ)QIZ5^bs@ZFO;T@i73vrK+J&$mMBdZ; z!)?I)?2Pl629+NjMt*dd97sW^&~n_fjdC$Nkmo2c3AHvohE~wUd7~Y>AkfP?k(ugq z82Y@?Ml0xIZF(#bF1(c*)W@k2@@>=wMJd=Q6#xKRU-ocu^Cwd807UHh_4sXda=QS4 zql=m=Qvm4T)4Zn2N&QZ%=)g-=4~u$q73McdTQ)b3$X`n)y0AWB9x44u$?FZJi?O49 q6Bx`(1OuXPl!?(L%{QI*cI64#%7j-tLw3Ue00001KIqEP)Px%;7LS5R9J=WmoaGDKoo|5mqJxThr|UJxpWZj(8Uli1rOP5vbU?ZOkSPAb4LyB z>ZO4WTAMvMTee^@cS=a^U~q57Tlv6~ui#-Q z0BCo|9Ll-sN9G(!wg8lKOw1#nF@&M6r*jl@S@dR4ITR_JbE&P$a2|{I@r6%vvPq$kdwe7w=O&nHe(q; z?$y1K$03!uy@=KcL+mqh%NzPF30kcKqu(fIrTOPy|C4un4Wq z7+Qv*b%K?KQgn-o=clUye@;;C?s%=Qm~Xm@wKobXTs*~ag=I6gQet#My3w&XC<;^D z3&WvnlnbyIZ37j!$Q;`i3IJ@zGA+Z13~^%7=U1~@3F>c4{1XhqCmDc1me9-R+Wi1Y z@{3Mgc-~qb$wIPpO=~quMGkc=D~Ou8&I^2TtGVp1mb1v%|_IO-OMpLVDbP0l+XkKy>+Ns literal 0 HcmV?d00001 diff --git a/assets/voxygen/element/icons/skilltree/stamina_plus.png b/assets/voxygen/element/icons/skilltree/stamina_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..98e59b2b1dad538cdf12cc3988a3c4f974da7294 GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc3?z4jzqJQajKx9jP7LeL$-D$|asqrpT!AzY zxN6v>SsM0-S>G>IySX6k-QiikKbg&Z8j!Wmz-oxbC z|Kra-Ieq)j|Ns9FoW9di*PfY`6&V&(=G3*u$mnKx^7ZOn{nNd=@(sM^?eAN;sb=Q| z>-Gix%I1H8mZ_8k`2{lobrJ$!m&BC-)rWbyIEF|}?Y-d0cR+!|CD4Lp-PXPTWmB1& z6nnp}KM_4qQ7TM$Vw(C=LwyCO~0&ng8c94>gTe~DWM4fYK4-% literal 0 HcmV?d00001 diff --git a/assets/voxygen/element/icons/skilltree/unlock_axe.png b/assets/voxygen/element/icons/skilltree/unlock_axe.png new file mode 100644 index 0000000000000000000000000000000000000000..a4266a7c39d3154324b70e8fedf495f7d5c0d1e9 GIT binary patch literal 384 zcmV-`0e}99P)Px$I!Q!9R5*>Tlp$`zKoCXWR6d76%L*1$b-jfI&i< z082T?6jZZX+v{W-5S7@bdi7TVHPuY>&I}zFf>ja$p7$ zk=~xFj-W*j%s_41hCSz8^2{VKh8d{qIsmGw3hwM%fbDU2-eD|*r4(nI1P+s%F*EJ&2i)7N_P*qg{&@>I+djRUX?mbNx9a=SqFmpLn z(xLU0sv;t+W(3&KVOf?q=R(yl7G*Vq?-OwHeC!#)E;>xYAiz@19ZyV=3$yFT6Jl)> zk6)1sTW<~lV6sUW&2kPbK4eO*$>-OPUIUwwsH)xy22o?*0tQf6*ztg03j+`U%Mr%E e_5WzOn9DDb^YRvJb!<@p0000Px$DM>^@R5*>T)va#BFc1gu|4n{_O2N}A1sDuWQ>3Ahs3>Y#%KHcfd5k^8*aj!R zKzUVY)~aYAFX4geQoBCqquRmq<(E6#N(cZxzJA=xlLi31zs_+RyZsRWa5&j$&5!MR zNyHdKL=+V|=SIVdF@~BlF5)$Y`%uLgL+9TtDr(ABge6q%_D4A9yir>iV^CGqwaNmu z&H^}vDo*(05K)J6o`?Vo6wf(Ui&+v?(p$J=V@&s;4;RR>TD*y(i!9G-qQD6!UF8@?8g?=`h z`#}l4J(P#3pcLP>?e6HmfPPFK8HmT`?hYpl0xrLRdtm-JGqznX=?_?7@-08Px$97#k$R5*>L)IV;*Fcin}??X8W*%(pwNEV~T$~`i04Bvybip12Y%%w;ybSZ2- z$LoM>CBgaEyvdTSPoDj=BLMF3ru5W$xgyU}PUkz9$E|Z+vD=D_#Y6;E9Ym9{SXq_< z1v=4Au#Ewu(8U<6s;V&O(L768FIU4I#xP?{K#eiIoxXHg3LXDI(gqoF|aEccuEn%MRSQ{Hdj>ldy^hjT89T5H3le*t3{ z!29=e`)$-Y*LXpTDVR^+qiqaoDUZS0LB-y7G8L<%u^&Y;1@qO$>m{nH^=EcHx?XIk zLMZ-D&A|W?pPYyQ^DqDb`1t(MJWBy)Va0AMfAIk>-fqgjH~;_u07*qoM6N<$f~pap Ai~s-t literal 0 HcmV?d00001 diff --git a/assets/voxygen/element/icons/skilltree/unlock_sceptre.png b/assets/voxygen/element/icons/skilltree/unlock_sceptre.png new file mode 100644 index 0000000000000000000000000000000000000000..430f41d2973e4c3dd53d665aeefa7cfd2b31306c GIT binary patch literal 424 zcmV;Z0ayNsP)Px$Vo5|nR5*>L)Ui*(KorOE?<>Vb5@$CPbyF9OjE2F<#leNY111(H7bgD-7gk&~ zQ3nOue9De z0F;ZTB8y@oVy&yHg}Mu4535#9L{JUS)Ozd82NPH$ukcK#5M~Kz6XNxT@RvJGh<>2 z(8Tug4nr>lK5jp~cSYhuS6fCoc? zMt5-xKvY#DY@FNoWcSi0@#`&v0l4?gS5!56IG4d7{Px^EzUc4Mz6@3_p2`n+_2BHL S?Qie^0000Px$07*naR5*>T)UR&BP!z}U?;-WmG^k<7Pps{@q!~_Dd2SD=*WDbQPp<-&? zZ%2nvED2o-gKFt?F{WS!CuG7UcBjYIvoq=YPXzbDFH7# z8?bqcqHKFU;viug{bPkpJkH>!0z)`%inpEOr44R Y0n0?|!W~eq*8l(j07*qoM6N<$f~a4MdjJ3c literal 0 HcmV?d00001 diff --git a/assets/voxygen/element/icons/skilltree/unlock_sword.png b/assets/voxygen/element/icons/skilltree/unlock_sword.png new file mode 100644 index 0000000000000000000000000000000000000000..e953b9494204a32f67ab3739db160cda1ffbeed6 GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc3?z4jzqJQajKx9jP7LeL$-D$|R04cLT!D1o z%1!_O{|7R*Y}ry&R1_5z6=%Uv=E89EruKo;cM1wbz4BVO0Ht|Kg8YIRfJ$M2^GJXi zP(0hy#W6%;YVL(Vz5@yz%mFfsxWC(fXqd%&;@8h4W+xM`D^7Ryx`T|<@-obpCf-=} z CharacterDataResult { - use schema::{ - body::dsl::*, character::dsl::*, item::dsl::*, skill_group::dsl::*, - }; + use schema::{body::dsl::*, character::dsl::*, item::dsl::*, skill_group::dsl::*}; let character_containers = get_pseudo_containers(connection, char_id)?; diff --git a/voxygen/src/hud/diary.rs b/voxygen/src/hud/diary.rs index b6cecdf06b..ee4491fd47 100644 --- a/voxygen/src/hud/diary.rs +++ b/voxygen/src/hud/diary.rs @@ -1,7 +1,7 @@ use super::{ img_ids::{Imgs, ImgsRot}, item_imgs::{ItemImgs, ItemKey::Tool}, - Show, QUALITY_LEGENDARY, TEXT_COLOR, UI_HIGHLIGHT_0, UI_MAIN, XP_COLOR, + Show, TEXT_COLOR, UI_HIGHLIGHT_0, UI_MAIN, XP_COLOR, HP_COLOR, CRITICAL_HP_COLOR, }; use crate::{ i18n::Localization, @@ -165,6 +165,7 @@ pub struct Diary<'a> { localized_strings: &'a Localization, rot_imgs: &'a ImgsRot, tooltip_manager: &'a mut TooltipManager, + pulse: f32, #[conrod(common_builder)] common: widget::CommonBuilder, @@ -186,6 +187,7 @@ impl<'a> Diary<'a> { localized_strings: &'a Localization, rot_imgs: &'a ImgsRot, tooltip_manager: &'a mut TooltipManager, + pulse: f32, ) -> Self { Self { show, @@ -197,6 +199,7 @@ impl<'a> Diary<'a> { localized_strings, rot_imgs, tooltip_manager, + pulse, common: widget::CommonBuilder::default(), created_btns_top_l: 0, created_btns_top_r: 0, @@ -268,6 +271,7 @@ impl<'a> Widget for Diary<'a> { .font_id(self.fonts.cyri.conrod_id) .desc_text_color(TEXT_COLOR); let sel_tab = &self.show.skilltreetab; + let frame_ani = (self.pulse * 4.0/* speed factor */).cos() * 0.5 + 0.8; //Animation timer // Frame Image::new(self.imgs.diary_bg) .w_h(1202.0, 886.0) @@ -330,183 +334,68 @@ impl<'a> Widget for Diary<'a> { .resize(TREES.len(), &mut ui.widget_id_generator()) }); for i in TREES.iter().copied().enumerate() { - let locked = match i.1 { - "General Combat" => false, - "Sword" => true, - "Hammer" => true, - "Axe" => true, - "Sceptre" => true, - "Bow" => true, - "Fire Staff" => true, - _ => false, - }; + let locked = !skill_tree_from_str(i.1) + .map_or(false, |st| self.stats.skill_set.contains_skill_group(st)); // Background weapon image - let img = Image::new( - match i.1 { - "General Combat" => self.imgs.swords_crossed, - "Sword" => self.imgs.sword, - "Hammer" => self.imgs.hammer, - "Axe" => self.imgs.axe, - "Sceptre" => self.imgs.sceptre, - "Bow" => self.imgs.bow, - "Fire Staff" => self.imgs.staff, - _ => self.imgs.nothing, - } - ); + let img = Image::new(match i.1 { + "General Combat" => self.imgs.swords_crossed, + "Sword" => self.imgs.sword, + "Hammer" => self.imgs.hammer, + "Axe" => self.imgs.axe, + "Sceptre" => self.imgs.sceptre, + "Bow" => self.imgs.bow, + "Fire Staff" => self.imgs.staff, + _ => self.imgs.nothing, + }); let img = if i.0 == 0 { img.top_left_with_margins_on(state.content_align, tweak!(10.0), tweak!(5.0)) } else { img.down_from(state.weapon_btns[i.0 - 1], tweak!(5.0)) }; - let tooltip_txt = if !locked {""} else {"Not yet unlocked"}; + let tooltip_txt = if !locked { "" } else { "Not yet unlocked" }; img.w_h(tweak!(50.0), tweak!(50.0)) .set(state.weapon_imgs[i.0], ui); // Lock Image - if locked {Image::new(self.imgs.lock) - .w_h(50.0, 50.0) - .middle_of(state.weapon_imgs[i.0]) - .graphics_for(state.weapon_imgs[i.0]) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, tweak!(0.8)))) - .set(state.lock_imgs[i.0], ui);} + if locked { + Image::new(self.imgs.lock) + .w_h(50.0, 50.0) + .middle_of(state.weapon_imgs[i.0]) + .graphics_for(state.weapon_imgs[i.0]) + .color(Some(Color::Rgba(1.0, 1.0, 1.0, tweak!(0.8)))) + .set(state.lock_imgs[i.0], ui); + } // Weapon icons + let available_pts = skill_tree_from_str(i.1) + .map_or(false, |st| self.stats.skill_set.get_available_sp(st) > 0); + self.stats.skill_set.get_available_sp(*sel_tab); if Button::image( - match i.1 { - "General Combat" => match sel_tab { - SelectedSkillTree::General => self.imgs.wpn_icon_border_pressed, - _ => self.imgs.wpn_icon_border, - }, - "Sword" => match sel_tab { - SelectedSkillTree::Weapon(ToolKind::Sword) => { - self.imgs.wpn_icon_border_pressed - }, - _ => self.imgs.wpn_icon_border, - }, - "Hammer" => match sel_tab { - SelectedSkillTree::Weapon(ToolKind::Hammer) => { - self.imgs.wpn_icon_border_pressed - }, - _ => self.imgs.wpn_icon_border, - }, - "Axe" => match sel_tab { - SelectedSkillTree::Weapon(ToolKind::Axe) => { - self.imgs.wpn_icon_border_pressed - }, - _ => self.imgs.wpn_icon_border, - }, - "Sceptre" => match sel_tab { - SelectedSkillTree::Weapon(ToolKind::Sceptre) => { - self.imgs.wpn_icon_border_pressed - }, - _ => self.imgs.wpn_icon_border, - }, - "Bow" => match sel_tab { - SelectedSkillTree::Weapon(ToolKind::Bow) => { - self.imgs.wpn_icon_border_pressed - }, - _ => self.imgs.wpn_icon_border, - }, - "Fire Staff" => match sel_tab { - SelectedSkillTree::Weapon(ToolKind::Staff) => { - self.imgs.wpn_icon_border_pressed - }, - _ => self.imgs.wpn_icon_border, - }, - _ => self.imgs.wpn_icon_border, - } + if skill_tree_from_str(i.1).map_or(false, |st| st == *sel_tab || available_pts) { + self.imgs.wpn_icon_border_pressed + } else { + self.imgs.wpn_icon_border + }, ) .w_h(tweak!(50.0), tweak!(50.0)) - .hover_image( - match i.1 { - "General Combat" => match sel_tab { - SelectedSkillTree::General => self.imgs.wpn_icon_border_pressed, - _ => self.imgs.wpn_icon_border_mo, - }, - "Sword" => match sel_tab { - SelectedSkillTree::Weapon(ToolKind::Sword) => { - self.imgs.wpn_icon_border_pressed - }, - _ => self.imgs.wpn_icon_border_mo, - }, - "Hammer" => match sel_tab { - SelectedSkillTree::Weapon(ToolKind::Hammer) => { - self.imgs.wpn_icon_border_pressed - }, - _ => self.imgs.wpn_icon_border_mo, - }, - "Axe" => match sel_tab { - SelectedSkillTree::Weapon(ToolKind::Axe) => { - self.imgs.wpn_icon_border_pressed - }, - _ => self.imgs.wpn_icon_border_mo, - }, - "Sceptre" => match sel_tab { - SelectedSkillTree::Weapon(ToolKind::Sceptre) => { - self.imgs.wpn_icon_border_pressed - }, - _ => self.imgs.wpn_icon_border_mo, - }, - "Bow" => match sel_tab { - SelectedSkillTree::Weapon(ToolKind::Bow) => { - self.imgs.wpn_icon_border_pressed - }, - _ => self.imgs.wpn_icon_border_mo, - }, - "Fire Staff" => match sel_tab { - SelectedSkillTree::Weapon(ToolKind::Staff) => { - self.imgs.wpn_icon_border_pressed - }, - _ => self.imgs.wpn_icon_border_mo, - }, - _ => self.imgs.wpn_icon_border, - } - ) - .press_image( - match i.1 { - "General Combat" => match sel_tab { - SelectedSkillTree::General => self.imgs.wpn_icon_border_pressed, - _ => self.imgs.wpn_icon_border_press, - }, - "Sword" => match sel_tab { - SelectedSkillTree::Weapon(ToolKind::Sword) => { - self.imgs.wpn_icon_border_pressed - }, - _ => self.imgs.wpn_icon_border_press, - }, - "Hammer" => match sel_tab { - SelectedSkillTree::Weapon(ToolKind::Hammer) => { - self.imgs.wpn_icon_border_pressed - }, - _ => self.imgs.wpn_icon_border_press, - }, - "Axe" => match sel_tab { - SelectedSkillTree::Weapon(ToolKind::Axe) => { - self.imgs.wpn_icon_border_pressed - }, - _ => self.imgs.wpn_icon_border_press, - }, - "Sceptre" => match sel_tab { - SelectedSkillTree::Weapon(ToolKind::Sceptre) => { - self.imgs.wpn_icon_border_pressed - }, - _ => self.imgs.wpn_icon_border_press, - }, - "Bow" => match sel_tab { - SelectedSkillTree::Weapon(ToolKind::Bow) => { - self.imgs.wpn_icon_border_pressed - }, - _ => self.imgs.wpn_icon_border_press, - }, - "Fire Staff" => match sel_tab { - SelectedSkillTree::Weapon(ToolKind::Staff) => { - self.imgs.wpn_icon_border_pressed - }, - _ => self.imgs.wpn_icon_border_press, - }, - _ => self.imgs.wpn_icon_border, - } ) + .hover_image(match skill_tree_from_str(i.1).map(|st| st == *sel_tab) { + Some(true) => self.imgs.wpn_icon_border_pressed, + Some(false) => self.imgs.wpn_icon_border_mo, + None => self.imgs.wpn_icon_border, + }) + .press_image(match skill_tree_from_str(i.1).map(|st| st == *sel_tab) { + Some(true) => self.imgs.wpn_icon_border_pressed, + Some(false) => self.imgs.wpn_icon_border_press, + None => self.imgs.wpn_icon_border, + }) .middle_of(state.weapon_imgs[i.0]) + .image_color( + if skill_tree_from_str(i.1).map_or(false, |st| st != *sel_tab && available_pts) { + Color::Rgba(0.92, 0.76, 0.0, frame_ani) + } else { + TEXT_COLOR + }, + ) .with_tooltip( self.tooltip_manager, i.1, @@ -516,32 +405,8 @@ impl<'a> Widget for Diary<'a> { ) .set(state.weapon_btns[i.0], ui) .was_clicked() - { - match i.1 { - "General Combat" => { - events.push(Event::ChangeSkillTree(SelectedSkillTree::General)) - }, - "Sword" => events.push(Event::ChangeSkillTree(SelectedSkillTree::Weapon( - ToolKind::Sword, - ))), - "Hammer" => events.push(Event::ChangeSkillTree(SelectedSkillTree::Weapon( - ToolKind::Hammer, - ))), - "Axe" => events.push(Event::ChangeSkillTree(SelectedSkillTree::Weapon( - ToolKind::Axe, - ))), - "Sceptre" => events.push(Event::ChangeSkillTree( - SelectedSkillTree::Weapon(ToolKind::Sceptre), - )), - "Bow" => events.push(Event::ChangeSkillTree(SelectedSkillTree::Weapon( - ToolKind::Bow, - ))), - "Fire Staff" => events.push(Event::ChangeSkillTree( - SelectedSkillTree::Weapon(ToolKind::Staff), - )), - _ => events.push(Event::Close), - } - + { + events.push(skill_tree_from_str(i.1).map_or(Event::Close, Event::ChangeSkillTree)) } } // Exp Bars and Rank Display @@ -595,7 +460,7 @@ impl<'a> Widget for Diary<'a> { .mid_top_with_margin_on(state.content_align, tweak!(42.0)) .font_id(self.fonts.cyri.conrod_id) .font_size(self.fonts.cyri.scale(tweak!(28))) - .color(QUALITY_LEGENDARY) + .color(Color::Rgba(0.92, 0.76, 0.0, frame_ani)) .set(state.available_pts_txt, ui); } let tree_title = match sel_tab { @@ -794,7 +659,7 @@ impl<'a> Widget for Diary<'a> { // 3 0 4 // 8 2 7 let skill = Skill::General(HealthIncrease); - if Button::image(self.imgs.swords_crossed) + if Button::image(self.imgs.health_plus_skill) .w_h(tweak!(74.0), tweak!(74.0)) .middle_of(state.skills_top_l[0]) .label(&format!( @@ -820,7 +685,7 @@ impl<'a> Widget for Diary<'a> { events.push(Event::UnlockSkill(skill)); }; let skill = Skill::General(EnergyIncrease); - if Button::image(self.imgs.swords_crossed) + if Button::image(self.imgs.stamina_plus_skill) .w_h(tweak!(74.0), tweak!(74.0)) .middle_of(state.skills_top_l[1]) .label(&format!( @@ -847,7 +712,7 @@ impl<'a> Widget for Diary<'a> { }; // Top right skills let skill = Skill::UnlockGroup(Weapon(Sword)); - if Button::image(self.imgs.swords_crossed) + if Button::image(self.imgs.unlock_sword_skill) .w_h(tweak!(74.0), tweak!(74.0)) .middle_of(state.skills_top_r[0]) .label(&format!( @@ -873,7 +738,7 @@ impl<'a> Widget for Diary<'a> { events.push(Event::UnlockSkill(skill)); }; let skill = Skill::UnlockGroup(Weapon(Axe)); - if Button::image(self.imgs.swords_crossed) + if Button::image(self.imgs.unlock_axe_skill) .w_h(tweak!(74.0), tweak!(74.0)) .middle_of(state.skills_top_r[1]) .label(&format!( @@ -899,7 +764,7 @@ impl<'a> Widget for Diary<'a> { events.push(Event::UnlockSkill(skill)); }; let skill = Skill::UnlockGroup(Weapon(Hammer)); - if Button::image(self.imgs.swords_crossed) + if Button::image(self.imgs.unlock_hammer_skill) .w_h(tweak!(74.0), tweak!(74.0)) .middle_of(state.skills_top_r[2]) .label(&format!( @@ -925,7 +790,7 @@ impl<'a> Widget for Diary<'a> { events.push(Event::UnlockSkill(skill)); }; let skill = Skill::UnlockGroup(Weapon(Bow)); - if Button::image(self.imgs.swords_crossed) + if Button::image(self.imgs.unlock_bow_skill) .w_h(tweak!(74.0), tweak!(74.0)) .middle_of(state.skills_top_r[3]) .label(&format!( @@ -951,7 +816,7 @@ impl<'a> Widget for Diary<'a> { events.push(Event::UnlockSkill(skill)); }; let skill = Skill::UnlockGroup(Weapon(Staff)); - if Button::image(self.imgs.swords_crossed) + if Button::image(self.imgs.unlock_staff_skill0) .w_h(tweak!(74.0), tweak!(74.0)) .middle_of(state.skills_top_r[4]) .label(&format!( @@ -977,7 +842,7 @@ impl<'a> Widget for Diary<'a> { events.push(Event::UnlockSkill(skill)); }; let skill = Skill::UnlockGroup(Weapon(Sceptre)); - if Button::image(self.imgs.swords_crossed) + if Button::image(self.imgs.unlock_sceptre_skill) .w_h(tweak!(74.0), tweak!(74.0)) .middle_of(state.skills_top_r[5]) .label(&format!( @@ -1281,19 +1146,22 @@ impl<'a> Widget for Diary<'a> { events.push(Event::UnlockSkill(skill)); }; let skill = Skill::Sword(DCost); + let prereqs_met = tweak!(true); + let suff_pts = tweak!(false); + let label_txt = &format!( "{}/{}", + skills.get(&skill).copied().map_or(0, |l| l.unwrap_or(1)), + skill.get_max_level().unwrap_or(1)); if Button::image(self.imgs.sword_whirlwind) .w_h(tweak!(74.0), tweak!(74.0)) .middle_of(state.skills_top_r[2]) - .label(&format!( - "{}/{}", - skills.get(&skill).copied().map_or(0, |l| l.unwrap_or(1)), - skill.get_max_level().unwrap_or(1) - )) + .label(if prereqs_met {&label_txt} else {""} + ) .label_y(conrod_core::position::Relative::Scalar(tweak!(-28.0))) .label_x(conrod_core::position::Relative::Scalar(tweak!(32.0))) - .label_color(TEXT_COLOR) + .label_color(if suff_pts {HP_COLOR} else {CRITICAL_HP_COLOR}) .label_font_size(self.fonts.cyri.scale(tweak!(16))) .label_font_id(self.fonts.cyri.conrod_id) + .image_color(if prereqs_met {TEXT_COLOR} else {Color::Rgba(0.41, 0.41, 0.41, tweak!(0.7))}) .with_tooltip( self.tooltip_manager, "Dash Cost", @@ -3354,3 +3222,16 @@ impl<'a> Widget for Diary<'a> { events } } + +fn skill_tree_from_str(string: &str) -> Option { + match string { + "General Combat" => Some(SelectedSkillTree::General), + "Sword" => Some(SelectedSkillTree::Weapon(ToolKind::Sword)), + "Hammer" => Some(SelectedSkillTree::Weapon(ToolKind::Hammer)), + "Axe" => Some(SelectedSkillTree::Weapon(ToolKind::Axe)), + "Sceptre" => Some(SelectedSkillTree::Weapon(ToolKind::Sceptre)), + "Bow" => Some(SelectedSkillTree::Weapon(ToolKind::Bow)), + "Fire Staff" => Some(SelectedSkillTree::Weapon(ToolKind::Staff)), + _ => None, + } +} diff --git a/voxygen/src/hud/img_ids.rs b/voxygen/src/hud/img_ids.rs index c0e0d3d18f..fe498767a8 100644 --- a/voxygen/src/hud/img_ids.rs +++ b/voxygen/src/hud/img_ids.rs @@ -154,9 +154,7 @@ image_ids! { onehshield_m1: "voxygen.element.icons.swordshield", onehshield_m2: "voxygen.element.icons.character", twohhammer_m1: "voxygen.element.icons.2hhammer_m1", - twohhammer_m2: "voxygen.element.icons.2hhammer_m2", twohaxe_m1: "voxygen.element.icons.2haxe_m1", - twohaxe_m2: "voxygen.element.icons.2haxe_m2", bow_m1: "voxygen.element.icons.bow_m1", bow_m2: "voxygen.element.icons.bow_m2", staff_melee: "voxygen.element.icons.staff_m1", @@ -169,6 +167,16 @@ image_ids! { fire_aoe: "voxygen.element.icons.skill_fire_aoe", flamethrower: "voxygen.element.icons.skill_flamethrower", + // Skilltree Icons + health_plus_skill: "voxygen.element.icons.skilltree.health_plus", + stamina_plus_skill: "voxygen.element.icons.skilltree.stamina_plus", + unlock_axe_skill: "voxygen.element.icons.skilltree.unlock_axe", + unlock_bow_skill: "voxygen.element.icons.skilltree.unlock_bow", + unlock_hammer_skill: "voxygen.element.icons.skilltree.unlock_hammer", + unlock_sceptre_skill: "voxygen.element.icons.skilltree.unlock_sceptre", + unlock_staff_skill0: "voxygen.element.icons.skilltree.unlock_staff-0", + unlock_sword_skill: "voxygen.element.icons.skilltree.unlock_sword", + // Skillbar level_up: "voxygen.element.misc_bg.level_up", level_down:"voxygen.element.misc_bg.level_down", diff --git a/voxygen/src/hud/mod.rs b/voxygen/src/hud/mod.rs index 14619594d7..ae5ba75a6e 100644 --- a/voxygen/src/hud/mod.rs +++ b/voxygen/src/hud/mod.rs @@ -1091,7 +1091,7 @@ impl Hud { // Increase font size based on fraction of maximum health // "flashes" by having a larger size in the first 100ms let font_size_xp = 30 - + ((*exp as f32 / 300.0 as f32).min(1.0) * 50.0) as u32 + + ((*exp as f32 / 300.0).min(1.0) * 50.0) as u32 + if timer < 0.1 { FLASH_MAX * (((1.0 - timer / 0.1) * 10.0) as u32) } else { @@ -2277,6 +2277,7 @@ impl Hud { i18n, &self.rot_imgs, tooltip_manager, + self.pulse, ) .set(self.ids.diary, ui_widgets) {