From 8d9ac68c803490fdafc6442c469c2e341e37266e Mon Sep 17 00:00:00 2001 From: Monty Marz Date: Sun, 11 Oct 2020 23:52:16 +0200 Subject: [PATCH] skillbar update part 1 skillbar rework part 2 --- assets/voxygen/element/icons/m1.png | Bin 605 -> 2015 bytes assets/voxygen/element/icons/m2.png | Bin 605 -> 2015 bytes .../voxygen/element/skillbar/bar_content.png | Bin 90 -> 1410 bytes assets/voxygen/element/skillbar/bg.png | Bin 0 -> 2430 bytes .../voxygen/element/skillbar/energybar_bg.png | Bin 193 -> 0 bytes assets/voxygen/element/skillbar/frame.png | Bin 0 -> 3383 bytes .../voxygen/element/skillbar/healthbar_bg.png | Bin 190 -> 0 bytes .../element/skillbar/skillbar_slot.png | Bin 610 -> 0 bytes .../element/skillbar/skillbar_slot_active.png | Bin 3533 -> 0 bytes .../element/skillbar/skillbar_slot_big.png | Bin 243 -> 0 bytes .../element/skillbar/skillbar_slot_l.png | Bin 607 -> 0 bytes .../skillbar/skillbar_slot_l_active.png | Bin 3533 -> 0 bytes .../element/skillbar/skillbar_slot_r.png | Bin 608 -> 0 bytes .../skillbar/skillbar_slot_r_active.png | Bin 3533 -> 0 bytes .../element/skillbar/xp_bar_content.png | Bin 111 -> 0 bytes .../voxygen/element/skillbar/xp_bar_left.png | Bin 170 -> 0 bytes .../voxygen/element/skillbar/xp_bar_mid.png | Bin 133 -> 0 bytes .../voxygen/element/skillbar/xp_bar_right.png | Bin 159 -> 0 bytes voxygen/src/hud/group.rs | 4 +- voxygen/src/hud/img_ids.rs | 20 +- voxygen/src/hud/mod.rs | 7 +- voxygen/src/hud/overhead.rs | 4 +- voxygen/src/hud/settings_window.rs | 46 +- voxygen/src/hud/skillbar.rs | 1038 +++++++---------- 24 files changed, 420 insertions(+), 699 deletions(-) create mode 100644 assets/voxygen/element/skillbar/bg.png delete mode 100644 assets/voxygen/element/skillbar/energybar_bg.png create mode 100644 assets/voxygen/element/skillbar/frame.png delete mode 100644 assets/voxygen/element/skillbar/healthbar_bg.png delete mode 100644 assets/voxygen/element/skillbar/skillbar_slot.png delete mode 100644 assets/voxygen/element/skillbar/skillbar_slot_active.png delete mode 100644 assets/voxygen/element/skillbar/skillbar_slot_big.png delete mode 100644 assets/voxygen/element/skillbar/skillbar_slot_l.png delete mode 100644 assets/voxygen/element/skillbar/skillbar_slot_l_active.png delete mode 100644 assets/voxygen/element/skillbar/skillbar_slot_r.png delete mode 100644 assets/voxygen/element/skillbar/skillbar_slot_r_active.png delete mode 100644 assets/voxygen/element/skillbar/xp_bar_content.png delete mode 100644 assets/voxygen/element/skillbar/xp_bar_left.png delete mode 100644 assets/voxygen/element/skillbar/xp_bar_mid.png delete mode 100644 assets/voxygen/element/skillbar/xp_bar_right.png diff --git a/assets/voxygen/element/icons/m1.png b/assets/voxygen/element/icons/m1.png index 774ae38bc55be16656992abd96f8e9556f1a0eae..1b5f1136516eda947db7fb75fd3cecfe7963996a 100644 GIT binary patch literal 2015 zcmcIlOKjXk7+xxxrYVttB0!uhmqU4YJu~)tZPQKhKH4l|lOv3%- zyNM8}Jy9Wqih2MPj@&8^oRE;9ClCk;(GwspJw#lPf&@1ZV!W>e)P!7EtzYARzW@8b z{~OP>`rO6osmG==nap%`w!9#&_lx7f$q8{@c;@9-#N}i-yAo$Ir%tEGJ(>5nAI)S= zobVgV$#U&^oA6E+Q|_{CuM>*sOy=DAUWmyWOC*;y{h%Q4e)_pA`LrM}FttFqJ&N!ALolO~jwYjvr_ zBPJPHpb!9%l((|b&~*bmEg^t_3UVq$3N&n>+b}N;f3nCHQO{l|Ul`^RPX)P^B%!UU z-EKGA)v`Qls?f456(AKMMMNm^W{}{X62xal2xS(N$PW{r2U3cNUA~?aWWjV$LMI%< z2JuiPA(-03p$fAgEol^3s~sNN>5QY}q_QEh4Ef#_IBsl)OkH3xUylf@Y_K3XGfEb= zc*5frKY-i#^*}nn5Ly#Hpg6%t3+B}KHjffotJ&2c zPH;e2wOo(|sjTl)+b{_-v>aA+%e54SbXT#Ut|=y=76jPJLyPoziTPzt)>9?Y`2*Wh zP6WnSO`Cem({h@nfIOm#W#~w8%^X!s$^bBQW+FE?LYt3#v2t*GKWfT~3Pc86>baCC zF3>$CPj#TU*n^7ZVnz*&ED8jxy}Tvf=24APp{}-nyjm*NBkuWa@giQhSd^-jk^wEl zP*4`i5+%0BqYf5E^E<9@UHDkeRtZJq>G{;lhh52 z%EMv*E;1jjpaE>R#RTXfE*XTy+)KJRVop=EO)yc3kOXm zzObsC7Ne%$qCr#CfA?$87$b8z!uDx5i+#CxsbAXpY-tZvN6@o3Mu)J6luI>>< zhsZ#>$xKG*fJNKi!x}l*#3n+TA^fjdhGMwF!PxTzn5O4*fKsYk+QGAn6(^5CxmeOH zr{X|pmK;#37-bV(C_1nL_RZ|;FepboyzYMFzOVU6M6pGrx8uD@JdAfY76`#3v3H%A z&n=35@3m^#X_#;A+;FCDN%!6R+vMAS&A+~T`u4<6I$Ztz$BBoX?UQd@fA_t|KYVDW z+MK;}E_t^II)t9QhufO@@ zod-T!`rwP5`VaWyusI2?b(%N7TRHyct7o6wd~^HCv!9&$K3l)@<*g*$zBARzT=}Eo HrK^7fg7Sc; delta 595 zcmV-Z0<8Vt58VVIiBL{Q4GJ0x0000DNk~Le0000f0000v2nGNE0IRkFZIK}te*hq3 zNK#Dz0D2_=0Dyx40Qvs_0D$QL0Cg|`0P0`>06Lfe02gnPU&TfM00HAkL_t(|+U(k` zZo@DT2k?JBo**z%-k>;T4(cEgEfZu7`11N;JaFJS#@A}Cp_GDB3UM5_LaWGT;QO1|sQUxfs{m=54$7$3 z8l3Z1sA~lL{F-&;gkjhO&EL`5>V7n^2#wSb+IWH>Bq2w|@r3m%008*DKPl3k8hE~30U-Z8bc>vQy3dy@ z0?$F8AqhDODTIKO5=oLwauPN*(t4`t7D7NN z1+DcW*-X82kq8T#JX4aK@G&BP?^%#qpTnyR;1bSM@*-c>>jyjDnJ+0{L()Kpx zIp=vRZ@b-2icFFO00#HF8=+YXt{L;~DFFljgV73|FzGrGn1)QYN|Y6tn%w4{CI5Qetxc=y!a}=91Z4Qj8drw9#4+3)Rn8# zsnqzmTU(BoE9WiZx6+vUHcNL~0gq0lPMz)sn5?i^uvy*pvf|w@Zi#|Rv*MCgft8@Z z8t(jh$S$le)X4e@F{yZZPB_)II6#ZVSm?HzUSxH%Vh`8i=CdmlMx&>8B&Ip5_$g_piv8u(hgIxSBD>mXd zuq3I|>7+YK+7IiJY?`J7k%SQ75g=OgV%!B@bZm%FWDyD7Aa;FEND#5@x8tnHnf6O) z1tVB58py;2le##N2Zy#=qv$9ut@11bzIy^kwY7jrRTlZ}kg(D!^WtN} zWI@A^{ixyZ!)^5X9}FoOB@EhOvnLNF5^J&+$BuZc+~XHmg^=Oc4{N^P95!lkm{CA- z8VS!WxgPa9(eZ@QU;-=Rm}SMJYe43IxrUIX%9e^wKx9GK53O(?P#ojK1^d)>)(#U| zsaRz%im^vnxtJ9>skG}-i)n-sg~`CysS2>IW&qY489+xdO>9F-h|}Z6=NEm_PLxRI z_iamk!ZAi_S~z1WnyOJ?Yl;ROs>;B~$R<#2%~51SacnI!M0+80`Im#6yHOKXlp_+= zAQ@&N4#8}InTh~bAqG&PDm4(zs0tE=oxBCV>4z1ca&?v6&&!3vV(2?=lfQ_n=kh|i zRM2Hp*8xh)qCkn|_+blkqq!|yXHwwR6Wendyxe&=;yqp)d`K7AYlBhK6?*QpFiAd& ztVj|!Fe(lnyL-rdxPtnyod)Be2e_mk7Wq!x!6D1lc}xD&h0=cHBfNSr^}{*jf22N; zl{BzdXMBZ~#H1K0S&RBjk^bGU9b*j5mE*Qgx)}{*$m9A*kh#6ROkqZMWTFCsO$HdZ z9I#b~098ghQVnJ>Li;S5?he+_!3H)EQgj4t#ngdrs}Nwv;b4lI(IBN%HI@Bm=S#T^ zg2jA6F>|GyEE|O!ER^)3fzIZ0atZF5+0&t4j&yL{y~tgw`A|f@MI^(~-o$T4yBqVk z;340;-kSO8O}_8FQ7-0c#t*;0fAXOX_+TNLc<0NHUcdL`*R#ea+qdUGy}5mD;+LbF zPamJZGqsto(&?{G%wGPc{q3}M<+EpwZ2tVx2iHITYYu<^)RFeAb??2KPh9=8KDKf9 z(zTcW_z-P;w>h(V`Nyr=jq|@S1$bxxCnzZ delta 595 zcmV-Z0<8Vt58VVIiBL{Q4GJ0x0000DNk~Le0000f0000v2nGNE0IRkFZIK}te*hq3 zNK#Dz0D2_=0Dyx40Qvs_0D$QL0Cg|`0P0`>06Lfe02gnPU&TfM00HAkL_t(|+U(k) zZi7G=2k<|XC#bxHH>hsio#GkhXKK5ol5>UNt*X_h9IjZP6z=h zAn~0bpgXL9E1Y^#u$oi0j!or=il7k z^+G+Hz`c5VH#={&?1j3c0Ea%zH&jY_bb`9=K|FN)*@g-s4u+rGOi>5{f6h5BS)B8B znw5L;6i=ktgu1wbA|xSyT8uFOz+&bD&#!+A$ruA;4B4hYwkfPbttFXl3i#6r{OP2I z(wHP9A^$6K@Mq}Z5&m>CXtih!ni)bDGaqGHnj!U{V@UbaNxcATr?Hs%zj{z>Nq+rx zXyOo(kc1>8Aqh!HLK2dYe}p8YuCgo<$1&10ZT54nB1xx4CP@ON6!JVjy7oOsig}(x zDYciPPO|Rdg<*&&ip~zzK;4aNrr3Pl7lZZz0l;Z(Z#dawWR_R{I)FalG2{VMxAE5N zwN+#s#{dAOR44Ehau2H8XRXHMuPaT{dct-AyO4X(Ce~K9XD~W;DYQ5}TW+dzeG9t| hdWIKQm%!=z902Ez>Q8=CK0p8f002ovPDHLkV1g=-1VjJ; diff --git a/assets/voxygen/element/skillbar/bar_content.png b/assets/voxygen/element/skillbar/bar_content.png index 61d1f93094ef1999a7905daaa25625201fb048a1..5f276782385bb3e7a642ebe9d0bef871425685d5 100644 GIT binary patch literal 1410 zcmbVM$!^<57-pKZ$buZ&0zr_|fX*RBOU@#Rf(B*`NAe<|bPZd8-QF2wS^ZA{mcW4iz@43{eFJj$S{xr=2 z?KrDz(_F|SWl>)ZlPq-qeD~f(NgTQdjfg~fTaA+K(?ac^?)2p8k!;28+C#KD%^>zDbk|FP=rGzvZCxl7_{5WhFw|`MG^p1D@*QG?5lkAG zGLHtF)H!XU#pi;wA|CL)&gMcE>_T^BZO$>COeX%M=IdgJX{*)3gki=!KzQaPvtsIH zW@X9HQAQR?ZWEoMl2P>au?=0&bZ$bLSG1W~xCtDFry|GHC#6XtauCC7s0M|xQCF4R}(zFs`?8XZ)W8shs(WZBjE4-(SJ}#u% zcmZmzl-A_DT_|C7(bIao4AkyYWyGk@(1U{{i}l2ObLN5S2&+Q3jG9M@M_N5rA#-S?<79Ah9!hDCQ4Z)@a1IJ76ALRY1;>&Pbdd@$I7!7&;XE6#;6C zFlbjhd){rgcMCm8#&BWwwjQDGMmwObAn=$^XX-`~?`Fn|OsZ}tbip}(lEj=+)~8L; z@EVO;?2%@jdO}j_#rR?`U~kroi%j{6F9SP$W=-V*JTGWnq@N!?zOy zQ9W6d&c1rSSd9}jOBXI=Sq7mi%lNC%k<;-86+q( YXc!6wKL{1C1j;jby85}Sb4q9e0MggD0|0<^`SI)&0I^eaJlVg7UO%*t7U}IaZ~Tz}fWZyXHwIo? z7y)4I^LBAMoG$Fq47V1?rmK^9qvlaG0HZq^9ySh=kkLumc2ey5500~pZKl|Li2^Km z8B(#w=Y6twexhj1A2d{x-Lah+ZD^FBMncRqYE>uD8Y#BLtI=^Z&9h7k5*|#k>Bu27 zU6^Dtu1^>_4mkrt#3*W9kR?fm4=@NK$ioCLAWo1qC~1PibUrNg=9`u_mEG0xMSrE( zN*HG^v|WdZ7_siogejIP zZHG|vdbCc^NfS*N-@qO(#9ybf195MIpvmMi|2lq#cItxe^ha|;DRpSI|LQzO+qNs_|Hi$F`+t32-0~3e%8Zbgy zBB4R$3b1S1*4&Li3k5Cj1R-_|lFz1CDk^T7whit}zp3B3j>WThlctM=zTi!MXt@Q{W^W>Kw5omD4Q+aVjK8Qj-c+M6t{E zpl{QigR7UbMygE8DC+`DB2(gY$x=C0l?aDX(&Ut+fK&@9B%uf_bIEVUt-5}}HEDJ! z|E2kSCNt@~mR+R}f~nnOOg@*91yzs7+h15K6j2m$YGlYlU^}lXRJu zY0qsLGtIOOV5sCAA8efTn3msyN#6TeYuUJ(f!=2xiAJqMFX71tFP9!%R-jCeg03 zw2*_Bt!#0$CGab2Z6Pl^PN>_~6g{J&VefFHKYGV2acISTdU!s2=AC`?%h=%rTFIlMFpJw5wsSJ3@&cYt!X|* zmE7BR*X=J3ilTVp__31%i${)px2|spd>ixwW+}2JSVaxcIcohdvi5^p`|RPEEQ;@5 z+)$#|Kf$s0K+`(&+-Fb5z~5hh^641(Ykdi{jV9sLj#cOO+u*BHh$$TI6y7 literal 0 HcmV?d00001 diff --git a/assets/voxygen/element/skillbar/energybar_bg.png b/assets/voxygen/element/skillbar/energybar_bg.png deleted file mode 100644 index c05ee0e667fc5b91509ad0f04b5ff3acdc898595..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^DL^d3!3HF&56qYfq!^2X+?^QKos)S967zI%42fuc zd-EVCvmp=b#f=_}@Ai9bWW8a@;$!upeQx=sK!X=a{0WO$m>1;bFHAnX{uJAc;<&rd z&hGksCeEYbf3ksxM01NFZld9N<++-9_eqYg}d1gh`R>}7;klO RmIOM3!PC{xWt~$(695hOMr!~7 diff --git a/assets/voxygen/element/skillbar/frame.png b/assets/voxygen/element/skillbar/frame.png new file mode 100644 index 0000000000000000000000000000000000000000..bd380548af95113394d8e1486036a314e22fdb44 GIT binary patch literal 3383 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 O1B0ilpUXO@geCyWfJ3SP diff --git a/assets/voxygen/element/skillbar/skillbar_slot.png b/assets/voxygen/element/skillbar/skillbar_slot.png deleted file mode 100644 index 9a132d9882ae1e5c55e3ac659f050a688b876236..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 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 diff --git a/assets/voxygen/element/skillbar/skillbar_slot_l.png b/assets/voxygen/element/skillbar/skillbar_slot_l.png deleted file mode 100644 index 5e786baebf6c5f06d7e39057cd31dfea421b4c7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 607 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 diff --git a/assets/voxygen/element/skillbar/skillbar_slot_r.png b/assets/voxygen/element/skillbar/skillbar_slot_r.png deleted file mode 100644 index d6d603095812271a478a7d85890489b21fc32937..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 608 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 diff --git a/assets/voxygen/element/skillbar/xp_bar_content.png b/assets/voxygen/element/skillbar/xp_bar_content.png deleted file mode 100644 index f44d2432d7c06d0c52dd75b4ee4cbbdf9ae9aa5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1il!81d4;)ofy`glX(f`XnMLhhH%Ve zlw)}KpW&s;|Nl%+emr7edjI<^1Jj2;9~qcl{d&Q`^!n!u2HqKh4hgrmWdJoXc)I$z JtaD0e0stA7BV+&o diff --git a/assets/voxygen/element/skillbar/xp_bar_left.png b/assets/voxygen/element/skillbar/xp_bar_left.png deleted file mode 100644 index 4693d465bb8990578f44297e543de2e341363e68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^DL~A{!3HFqWPaBHDaPU;cPEB*=VV@jWIbIRLp(a) zUNhu6V8Fq8Vf`0||NoYs;Y?~bo8aW!CRXwzKj@6YpMw&4@8tHDd+0HXxT(4sMP)NE zOj_SxR{XO+U0=bUYl#GFP!E&lvl+7s_k;sQ&oLzY%kf!3HFiS#H_@DaPU;cPEB*=VV?2Irg3|jv*eM zZ?7HXWKa-bJ~$`hz}Ne0zCEzxOI+S0@X15f^5SMw*$3sjcP}@tIm_xK#u2HI(im`5 gx_O7g32Elo_hn3_oykgdK%*EuUHx3vIVCg!0D#OYUH||9 diff --git a/assets/voxygen/element/skillbar/xp_bar_right.png b/assets/voxygen/element/skillbar/xp_bar_right.png deleted file mode 100644 index c45a6ba988d358b82928e1886d6892353e366fc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^DL~A{!3HFqWPaBHDaPU;cPEB*=VV?2Igy?&jv*eM zZ?A3SJ>bCObTNMlU%c0Uw2^Vu?#mOH)7To` z{oAu#F-@prCQFi9;|xus>Rb;m=NONqwV~H<^K@@cTgH&L?W%xe{_)#JKuZ`rUHx3v IIVCg!0F(MS-v9sr diff --git a/voxygen/src/hud/group.rs b/voxygen/src/hud/group.rs index 26060b3084..26b853cd08 100644 --- a/voxygen/src/hud/group.rs +++ b/voxygen/src/hud/group.rs @@ -1,6 +1,6 @@ use super::{ img_ids::Imgs, Show, BLACK, ERROR_COLOR, GROUP_COLOR, HP_COLOR, KILL_COLOR, LOW_HP_COLOR, - MANA_COLOR, TEXT_COLOR, TEXT_COLOR_GREY, UI_HIGHLIGHT_0, UI_MAIN, + STAMINA_COLOR, TEXT_COLOR, TEXT_COLOR_GREY, UI_HIGHLIGHT_0, UI_MAIN, }; use crate::{ @@ -404,7 +404,7 @@ impl<'a> Widget for Group<'a> { // Stamina Image::new(self.imgs.bar_content) .w_h(100.0 * stam_perc, 8.0) - .color(Some(MANA_COLOR)) + .color(Some(STAMINA_COLOR)) .top_left_with_margins_on(state.ids.member_panels_bg[i], 26.0, 2.0) .set(state.ids.member_stam[i], ui); } diff --git a/voxygen/src/hud/img_ids.rs b/voxygen/src/hud/img_ids.rs index eecd9d18da..a955e2685f 100644 --- a/voxygen/src/hud/img_ids.rs +++ b/voxygen/src/hud/img_ids.rs @@ -147,22 +147,12 @@ image_ids! { // Skillbar level_up: "voxygen.element.misc_bg.level_up", - level_down: "voxygen.element.misc_bg.level_down", - xp_bar_mid: "voxygen.element.skillbar.xp_bar_mid", - xp_bar_left: "voxygen.element.skillbar.xp_bar_left", - xp_bar_right: "voxygen.element.skillbar.xp_bar_right", - healthbar_bg: "voxygen.element.skillbar.healthbar_bg", - energybar_bg: "voxygen.element.skillbar.energybar_bg", + level_down:"voxygen.element.misc_bg.level_down", bar_content: "voxygen.element.skillbar.bar_content", - skillbar_slot_big: "voxygen.element.skillbar.skillbar_slot_big", - skillbar_slot_big_bg: "voxygen.element.skillbar.skillbar_slot_big", - skillbar_slot_big_act: "voxygen.element.skillbar.skillbar_slot_big", - skillbar_slot: "voxygen.element.skillbar.skillbar_slot", - skillbar_slot_act: "voxygen.element.skillbar.skillbar_slot_active", - skillbar_slot_l: "voxygen.element.skillbar.skillbar_slot_l", - skillbar_slot_r: "voxygen.element.skillbar.skillbar_slot_r", - skillbar_slot_l_act: "voxygen.element.skillbar.skillbar_slot_l_active", - skillbar_slot_r_act: "voxygen.element.skillbar.skillbar_slot_r_active", + skillbar_bg: "voxygen.element.skillbar.bg", + skillbar_frame: "voxygen.element.skillbar.frame", + m1_ico: "voxygen.element.icons.m1", + m2_ico: "voxygen.element.icons.m2", // Other Icons/Art skull: "voxygen.element.icons.skull", diff --git a/voxygen/src/hud/mod.rs b/voxygen/src/hud/mod.rs index 0350b89dd1..409c13bc2f 100644 --- a/voxygen/src/hud/mod.rs +++ b/voxygen/src/hud/mod.rs @@ -91,7 +91,7 @@ const BLACK: Color = Color::Rgba(0.0, 0.0, 0.0, 1.0); const HP_COLOR: Color = Color::Rgba(0.33, 0.63, 0.0, 1.0); const LOW_HP_COLOR: Color = Color::Rgba(0.93, 0.59, 0.03, 1.0); const CRITICAL_HP_COLOR: Color = Color::Rgba(0.79, 0.19, 0.17, 1.0); -const MANA_COLOR: Color = Color::Rgba(0.29, 0.62, 0.75, 0.9); +const STAMINA_COLOR: Color = Color::Rgba(0.29, 0.62, 0.75, 0.9); //const TRANSPARENT: Color = Color::Rgba(0.0, 0.0, 0.0, 0.0); //const FOCUS_COLOR: Color = Color::Rgba(1.0, 0.56, 0.04, 1.0); //const RAGE_COLOR: Color = Color::Rgba(0.5, 0.04, 0.13, 1.0); @@ -2031,10 +2031,7 @@ impl Hud { }, settings_window::Event::CrosshairType(crosshair_type) => { events.push(Event::CrosshairType(crosshair_type)); - }, - settings_window::Event::ToggleXpBar(xp_bar) => { - events.push(Event::ToggleXpBar(xp_bar)); - }, + }, settings_window::Event::ToggleBarNumbers(bar_numbers) => { events.push(Event::ToggleBarNumbers(bar_numbers)); }, diff --git a/voxygen/src/hud/overhead.rs b/voxygen/src/hud/overhead.rs index a69bccbea6..e24e4eb853 100644 --- a/voxygen/src/hud/overhead.rs +++ b/voxygen/src/hud/overhead.rs @@ -1,6 +1,6 @@ use super::{ img_ids::Imgs, DEFAULT_NPC, FACTION_COLOR, GROUP_COLOR, GROUP_MEMBER, HP_COLOR, LOW_HP_COLOR, - MANA_COLOR, REGION_COLOR, SAY_COLOR, TELL_COLOR, TEXT_BG, TEXT_COLOR, + REGION_COLOR, SAY_COLOR, STAMINA_COLOR, TELL_COLOR, TEXT_BG, TEXT_COLOR, }; use crate::{ i18n::VoxygenLocalization, @@ -254,7 +254,7 @@ impl<'a> Widget for Overhead<'a> { Rectangle::fill_with( [72.0 * energy_factor * BARSIZE, MANA_BAR_HEIGHT], - MANA_COLOR, + STAMINA_COLOR, ) .x_y( ((3.5 + (energy_factor * 36.5)) - 36.45) * BARSIZE, diff --git a/voxygen/src/hud/settings_window.rs b/voxygen/src/hud/settings_window.rs index 6fb2473742..e6c0af70b5 100644 --- a/voxygen/src/hud/settings_window.rs +++ b/voxygen/src/hud/settings_window.rs @@ -1,6 +1,5 @@ use super::{ - img_ids::Imgs, BarNumbers, CrosshairType, PressBehavior, ShortcutNumbers, Show, XpBar, - CRITICAL_HP_COLOR, ERROR_COLOR, HP_COLOR, LOW_HP_COLOR, MANA_COLOR, MENU_BG, + img_ids::Imgs, BarNumbers, CrosshairType, PressBehavior, ShortcutNumbers, Show, CRITICAL_HP_COLOR, ERROR_COLOR, HP_COLOR, LOW_HP_COLOR, MENU_BG, STAMINA_COLOR, TEXT_BIND_CONFLICT_COLOR, TEXT_COLOR, UI_HIGHLIGHT_0, UI_MAIN, }; use crate::{ @@ -258,8 +257,7 @@ pub struct State { pub enum Event { ToggleHelp, ToggleDebug, - ToggleTips(bool), - ToggleXpBar(XpBar), + ToggleTips(bool), ToggleBarNumbers(BarNumbers), ToggleShortcutNumbers(ShortcutNumbers), ChangeTab(SettingsTab), @@ -795,41 +793,7 @@ impl<'a> Widget for SettingsWindow<'a> { .font_size(self.fonts.cyri.scale(18)) .font_id(self.fonts.cyri.conrod_id) .color(TEXT_COLOR) - .set(state.ids.hotbar_title, ui); - // Show xp bar - if Button::image(match self.global_state.settings.gameplay.xp_bar { - XpBar::Always => self.imgs.checkbox_checked, - XpBar::OnGain => self.imgs.checkbox, - }) - .w_h(18.0, 18.0) - .hover_image(match self.global_state.settings.gameplay.xp_bar { - XpBar::Always => self.imgs.checkbox_checked_mo, - XpBar::OnGain => self.imgs.checkbox_mo, - }) - .press_image(match self.global_state.settings.gameplay.xp_bar { - XpBar::Always => self.imgs.checkbox_checked, - XpBar::OnGain => self.imgs.checkbox_press, - }) - .down_from(state.ids.hotbar_title, 8.0) - .set(state.ids.show_xpbar_button, ui) - .was_clicked() - { - match self.global_state.settings.gameplay.xp_bar { - XpBar::Always => events.push(Event::ToggleXpBar(XpBar::OnGain)), - XpBar::OnGain => events.push(Event::ToggleXpBar(XpBar::Always)), - } - } - Text::new( - &self - .localized_strings - .get("hud.settings.toggle_bar_experience"), - ) - .right_from(state.ids.show_xpbar_button, 10.0) - .font_size(self.fonts.cyri.scale(14)) - .font_id(self.fonts.cyri.conrod_id) - .graphics_for(state.ids.show_xpbar_button) - .color(TEXT_COLOR) - .set(state.ids.show_xpbar_text, ui); + .set(state.ids.hotbar_title, ui); // Show Shortcut Numbers if Button::image(match self.global_state.settings.gameplay.shortcut_numbers { ShortcutNumbers::On => self.imgs.checkbox_checked, @@ -844,7 +808,7 @@ impl<'a> Widget for SettingsWindow<'a> { ShortcutNumbers::On => self.imgs.checkbox_checked, ShortcutNumbers::Off => self.imgs.checkbox_press, }) - .down_from(state.ids.show_xpbar_button, 8.0) + .down_from(state.ids.hotbar_title, 8.0) .set(state.ids.show_shortcuts_button, ui) .was_clicked() { @@ -1692,7 +1656,7 @@ impl<'a> Widget for SettingsWindow<'a> { 0..=14 => CRITICAL_HP_COLOR, 15..=29 => LOW_HP_COLOR, 30..=50 => HP_COLOR, - _ => MANA_COLOR, + _ => STAMINA_COLOR, }; Text::new(&format!("FPS: {:.0}", self.fps)) .color(fps_col) diff --git a/voxygen/src/hud/skillbar.rs b/voxygen/src/hud/skillbar.rs index 21e1aa2bd4..f27bb47257 100644 --- a/voxygen/src/hud/skillbar.rs +++ b/voxygen/src/hud/skillbar.rs @@ -2,8 +2,8 @@ use super::{ hotbar, img_ids::{Imgs, ImgsRot}, item_imgs::ItemImgs, - slots, BarNumbers, ShortcutNumbers, Show, XpBar, BLACK, CRITICAL_HP_COLOR, HP_COLOR, - LOW_HP_COLOR, MANA_COLOR, TEXT_COLOR, XP_COLOR, + slots, BarNumbers, ShortcutNumbers, Show, BLACK, CRITICAL_HP_COLOR, HP_COLOR, + LOW_HP_COLOR, STAMINA_COLOR, TEXT_COLOR, UI_HIGHLIGHT_0, UI_MAIN, XP_COLOR, }; use crate::{ i18n::VoxygenLocalization, @@ -27,27 +27,51 @@ use conrod_core::{ widget::{self, Button, Image, Rectangle, Text}, widget_ids, Color, Colorable, Positionable, Sizeable, Widget, WidgetCommon, }; +use inline_tweak::*; use std::time::{Duration, Instant}; use vek::*; widget_ids! { struct Ids { + // Death message death_message_1, death_message_2, death_message_1_bg, death_message_2_bg, - level_text, - next_level_text, - xp_bar_mid, - xp_bar_mid_top, - xp_bar_left, - xp_bar_left_top, - xp_bar_right, - xp_bar_right_top, - xp_bar_filling, - xp_bar_filling_top, - hotbar_align, - xp_bar_subdivision, + death_bg, + // Level up message + level_up, + level_down, + level_align, + level_message, + level_message_bg, + // Hurt BG + hurt_bg, + // Skillbar + alignment, + bg, + frame, + m1_ico, + m2_ico, + // Level + level_bg, + level, + // Exp-Bar + exp_alignment, + exp_filling, + // HP-Bar + hp_alignment, + hp_filling, + hp_txt_alignment, + hp_txt_bg, + hp_txt, + // Stamina-Bar + stamina_alignment, + stamina_filling, + stamina_txt_alignment, + stamina_txt_bg, + stamina_txt, + // Slots m1_slot, m1_slot_bg, m1_text, @@ -91,29 +115,9 @@ widget_ids! { slot10, slot10_text, slot10_text_bg, - healthbar_bg, - healthbar_filling, - health_text, - health_text_bg, - energybar_bg, - energybar_filling, - energy_text, - energy_text_bg, - level_up, - level_down, - level_align, - level_message, - level_message_bg, - death_bg, - hurt_bg, } } -pub enum ResourceType { - Mana, - /*Rage, - *Focus, */ -} #[derive(WidgetCommon)] pub struct Skillbar<'a> { global_state: &'a GlobalState, @@ -133,8 +137,7 @@ pub struct Skillbar<'a> { localized_strings: &'a std::sync::Arc, pulse: f32, #[conrod(common_builder)] - common: widget::CommonBuilder, - current_resource: ResourceType, + common: widget::CommonBuilder, show: &'a Show, } @@ -167,8 +170,7 @@ impl<'a> Skillbar<'a> { rot_imgs, stats, loadout, - energy, - current_resource: ResourceType::Mana, + energy, common: widget::CommonBuilder::default(), character_state, pulse, @@ -184,11 +186,8 @@ impl<'a> Skillbar<'a> { } pub struct State { - ids: Ids, - - last_xp_value: u32, - last_level: u32, - last_update_xp: Instant, + ids: Ids, + last_level: u32, last_update_level: Instant, } @@ -199,11 +198,8 @@ impl<'a> Widget for Skillbar<'a> { fn init_state(&self, id_gen: widget::id::Generator) -> Self::State { State { - ids: Ids::new(id_gen), - - last_xp_value: 0, - last_level: 1, - last_update_xp: Instant::now(), + ids: Ids::new(id_gen), + last_level: 1, last_update_level: Instant::now(), } } @@ -214,8 +210,7 @@ impl<'a> Widget for Skillbar<'a> { fn update(self, args: widget::UpdateArgs) -> Self::Event { let widget::UpdateArgs { state, ui, .. } = args; - let level = (self.stats.level.level()).to_string(); - let next_level = (self.stats.level.level() + 1).to_string(); + let level = if self.stats.level.level() > 999 {"A".to_string()} else {(self.stats.level.level()).to_string()}; let exp_percentage = (self.stats.exp.current() as f64) / (self.stats.exp.maximum() as f64); @@ -226,8 +221,7 @@ impl<'a> Widget for Skillbar<'a> { if self.stats.is_dead { hp_percentage = 0.0; energy_percentage = 0.0; - }; - let scale = 2.0; + }; let bar_values = self.global_state.settings.gameplay.bar_numbers; let shortcuts = self.global_state.settings.gameplay.shortcut_numbers; @@ -339,410 +333,147 @@ impl<'a> Widget for Skillbar<'a> { .set(state.ids.death_message_2, ui); } } - // Experience-Bar - match self.global_state.settings.gameplay.xp_bar { - XpBar::Always => { - // Constant Display of the Exp Bar at the bottom of the screen - Image::new(self.imgs.xp_bar_mid) - .w_h(80.0 * scale, 10.0 * scale) - .mid_bottom_with_margin_on(ui.window, 2.0) - .set(state.ids.xp_bar_mid, ui); - Image::new(self.imgs.xp_bar_right) - .w_h(100.0 * scale, 10.0 * scale) - .right_from(state.ids.xp_bar_mid, 0.0) - .set(state.ids.xp_bar_right, ui); - Image::new(self.imgs.xp_bar_left) - .w_h(100.0 * scale, 10.0 * scale) - .left_from(state.ids.xp_bar_mid, 0.0) - .set(state.ids.xp_bar_left, ui); - Image::new(self.imgs.bar_content) - .w_h(260.0 * scale * exp_percentage, 5.0 * scale) + // Skillbar + // Alignment and BG + Rectangle::fill_with([524.0, 80.0], color::TRANSPARENT) + .mid_bottom_with_margin_on(ui.window, 10.0) + .set(state.ids.alignment, ui); + Image::new(self.imgs.skillbar_bg) + .w_h(480.0, 80.0) + .color(Some(UI_MAIN)) + .middle_of(state.ids.alignment) + .set(state.ids.bg, ui); + // Level + let lvl_size = match self.stats.level.level() { + 11..=99 => tweak!(13), + 100..=999 => tweak!(10), + _ => tweak!(14), + }; + Text::new(&level) + .mid_top_with_margin_on(state.ids.bg, 3.0) + .font_size(self.fonts.cyri.scale(lvl_size)) + .font_id(self.fonts.cyri.conrod_id) + .color(TEXT_COLOR) + .set(state.ids.level, ui); + // Exp-Bar + Rectangle::fill_with([476.0, 8.0], color::TRANSPARENT) + .mid_bottom_with_margin_on(state.ids.bg, 4.0) + .set(state.ids.exp_alignment, ui); + Image::new(self.imgs.bar_content) + .w_h(476.0 * exp_percentage, 8.0) .color(Some(XP_COLOR)) - .top_left_with_margins_on(state.ids.xp_bar_left, 2.0 * scale, 10.0 * scale) - .set(state.ids.xp_bar_filling, ui); - // Level Display - if self.stats.level.level() < 10 { - Text::new(&level) - .bottom_left_with_margins_on( - state.ids.xp_bar_left, - 3.5 * scale, - 4.0 * scale, - ) - .font_size(self.fonts.cyri.scale(10)) - .font_id(self.fonts.cyri.conrod_id) - .color(Color::Rgba(1.0, 1.0, 1.0, 1.0)) - .set(state.ids.level_text, ui); - Text::new(&next_level) - .bottom_right_with_margins_on( - state.ids.xp_bar_right, - 3.5 * scale, - 4.0 * scale, - ) - .font_size(self.fonts.cyri.scale(10)) - .font_id(self.fonts.cyri.conrod_id) - .color(Color::Rgba(1.0, 1.0, 1.0, 1.0)) - .set(state.ids.next_level_text, ui); - } else if self.stats.level.level() < 100 { - // Change offset and fontsize for levels > 9 - Text::new(&level) - .bottom_left_with_margins_on( - state.ids.xp_bar_left, - 3.5 * scale, - 3.0 * scale, - ) - .font_size(self.fonts.cyri.scale(9)) - .font_id(self.fonts.cyri.conrod_id) - .color(Color::Rgba(1.0, 1.0, 1.0, 1.0)) - .set(state.ids.level_text, ui); - Text::new(&next_level) - .bottom_right_with_margins_on( - state.ids.xp_bar_right, - 3.5 * scale, - 3.0 * scale, - ) - .font_size(self.fonts.cyri.scale(9)) - .font_id(self.fonts.cyri.conrod_id) - .color(Color::Rgba(1.0, 1.0, 1.0, 1.0)) - .set(state.ids.next_level_text, ui); - } else { - // Change offset and fontsize for levels > 9 - Text::new(&level) - .bottom_left_with_margins_on( - state.ids.xp_bar_left, - 3.5 * scale, - 2.5 * scale, - ) - .font_size(self.fonts.cyri.scale(8)) - .font_id(self.fonts.cyri.conrod_id) - .color(Color::Rgba(1.0, 1.0, 1.0, 1.0)) - .set(state.ids.level_text, ui); - Text::new(&next_level) - .bottom_right_with_margins_on( - state.ids.xp_bar_right, - 3.5 * scale, - 2.5 * scale, - ) - .font_size(self.fonts.cyri.scale(8)) - .font_id(self.fonts.cyri.conrod_id) - .color(Color::Rgba(1.0, 1.0, 1.0, 1.0)) - .set(state.ids.next_level_text, ui); - } - // M1 Slot - Image::new(self.imgs.skillbar_slot_big) - .w_h(40.0 * scale, 40.0 * scale) - .top_left_with_margins_on(state.ids.xp_bar_mid, -40.0 * scale, 0.0) - .set(state.ids.m1_slot, ui); - }, - XpBar::OnGain => { - // Displays the Exp Bar at the top of the screen when exp is gained and fades it - // out afterwards - const FADE_IN_XP: f32 = 1.0; - const FADE_HOLD_XP: f32 = 3.0; - const FADE_OUT_XP: f32 = 2.0; - let current_xp = self.stats.exp.current(); - // Check if no other popup is displayed and a new one is needed - if state.last_update_xp.elapsed() - > Duration::from_secs_f32(FADE_IN_XP + FADE_HOLD_XP + FADE_OUT_XP) - && state.last_xp_value != current_xp - { - // Update last_value - state.update(|s| s.last_xp_value = current_xp); - state.update(|s| s.last_update_xp = Instant::now()); - } - - let seconds_xp = state.last_update_xp.elapsed().as_secs_f32(); - let fade_xp = if current_xp == 0 { - 0.0 - } else if seconds_xp < FADE_IN_XP { - seconds_xp / FADE_IN_XP - } else if seconds_xp < FADE_IN_XP + FADE_HOLD_XP { - 1.0 - } else { - (1.0 - (seconds_xp - FADE_IN_XP - FADE_HOLD_XP) / FADE_OUT_XP).max(0.0) - }; - // Hotbar parts - Image::new(self.imgs.xp_bar_mid) - .w_h(80.0 * scale * 1.5, 10.0 * scale * 1.5) - .mid_top_with_margin_on(ui.window, 20.0) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, fade_xp))) - .set(state.ids.xp_bar_mid_top, ui); - Image::new(self.imgs.xp_bar_right) - .w_h(100.0 * scale * 1.5, 10.0 * scale * 1.5) - .right_from(state.ids.xp_bar_mid_top, 0.0) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, fade_xp))) - .set(state.ids.xp_bar_right_top, ui); - Image::new(self.imgs.xp_bar_left) - .w_h(100.0 * scale * 1.5, 10.0 * scale * 1.5) - .left_from(state.ids.xp_bar_mid_top, 0.0) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, fade_xp))) - .set(state.ids.xp_bar_left_top, ui); - Image::new(self.imgs.bar_content) - .w_h(260.0 * scale * 1.5 * exp_percentage, 6.0 * scale * 1.5) - .color(Some(Color::Rgba(0.59, 0.41, 0.67, fade_xp))) - .top_left_with_margins_on( - state.ids.xp_bar_left_top, - 2.0 * scale * 1.5, - 10.0 * scale * 1.5, - ) - .set(state.ids.xp_bar_filling_top, ui); - // Level Display - if self.stats.level.level() < 10 { - Text::new(&level) - .bottom_left_with_margins_on( - state.ids.xp_bar_left_top, - 3.0 * scale * 1.5, - 4.0 * scale * 1.5, - ) - .font_size(self.fonts.cyri.scale(17)) - .font_id(self.fonts.cyri.conrod_id) - .color(Color::Rgba(1.0, 1.0, 1.0, fade_xp)) - .set(state.ids.level_text, ui); - Text::new(&next_level) - .bottom_right_with_margins_on( - state.ids.xp_bar_right_top, - 3.0 * scale * 1.5, - 4.0 * scale * 1.5, - ) - .font_size(self.fonts.cyri.scale(15)) - .font_id(self.fonts.cyri.conrod_id) - .color(Color::Rgba(1.0, 1.0, 1.0, fade_xp)) - .set(state.ids.next_level_text, ui); - } else if self.stats.level.level() < 100 { - // Change offset and fontsize for levels > 9 - Text::new(&level) - .bottom_left_with_margins_on( - state.ids.xp_bar_left_top, - 3.0 * scale * 1.5, - 3.0 * scale * 1.5, - ) - .font_size(self.fonts.cyri.scale(15)) - .font_id(self.fonts.cyri.conrod_id) - .color(Color::Rgba(1.0, 1.0, 1.0, fade_xp)) - .set(state.ids.level_text, ui); - Text::new(&next_level) - .bottom_right_with_margins_on( - state.ids.xp_bar_right_top, - 3.0 * scale * 1.5, - 3.0 * scale * 1.5, - ) - .font_size(self.fonts.cyri.scale(15)) - .font_id(self.fonts.cyri.conrod_id) - .color(Color::Rgba(1.0, 1.0, 1.0, fade_xp)) - .set(state.ids.next_level_text, ui); - } else { - // Change offset and fontsize for levels > 9 - Text::new(&level) - .bottom_left_with_margins_on( - state.ids.xp_bar_left_top, - 3.0 * scale * 1.5, - 2.75 * scale * 1.5, - ) - .font_size(self.fonts.cyri.scale(12)) - .font_id(self.fonts.cyri.conrod_id) - .color(Color::Rgba(1.0, 1.0, 1.0, fade_xp)) - .set(state.ids.level_text, ui); - Text::new(&next_level) - .bottom_right_with_margins_on( - state.ids.xp_bar_right_top, - 3.0 * scale * 1.5, - 2.75 * scale * 1.5, - ) - .font_size(self.fonts.cyri.scale(12)) - .font_id(self.fonts.cyri.conrod_id) - .color(Color::Rgba(1.0, 1.0, 1.0, fade_xp)) - .set(state.ids.next_level_text, ui); - } - // Alignment for hotbar - Rectangle::fill_with([80.0 * scale, 1.0], color::TRANSPARENT) - .mid_bottom_with_margin_on(ui.window, 9.0) - .set(state.ids.hotbar_align, ui); - // M1 Slot - - match self.character_state { - CharacterState::BasicMelee { .. } => { - if self.controller.primary.is_pressed() { - let fade_pulse = (self.pulse * 4.0/* speed factor */).cos() * 0.5 + 0.6; //Animation timer; - Image::new(self.imgs.skillbar_slot_big) - .w_h(40.0 * scale, 40.0 * scale) - .top_left_with_margins_on( - state.ids.hotbar_align, - -40.0 * scale, - 0.0, - ) - .set(state.ids.m1_slot, ui); - Image::new(self.imgs.skillbar_slot_big_act) - .w_h(40.0 * scale, 40.0 * scale) - .middle_of(state.ids.m1_slot) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, fade_pulse))) - .floating(true) - .set(state.ids.m1_slot_act, ui); - } else { - Image::new(self.imgs.skillbar_slot_big) - .w_h(40.0 * scale, 40.0 * scale) - .top_left_with_margins_on( - state.ids.hotbar_align, - -40.0 * scale, - 0.0, - ) - .set(state.ids.m1_slot, ui); - } - }, - _ => { - Image::new(self.imgs.skillbar_slot_big) - .w_h(40.0 * scale, 40.0 * scale) - .top_left_with_margins_on(state.ids.hotbar_align, -40.0 * scale, 0.0) - .set(state.ids.m1_slot, ui); - }, - } - }, + .bottom_left_with_margins_on(state.ids.exp_alignment, 0.0, 0.0) + .set(state.ids.exp_filling, ui); + // Health and Stamina bar + // Alignment + Rectangle::fill_with([240.0, 17.0], color::TRANSPARENT) + .top_left_with_margins_on(state.ids.alignment, 0.0, 0.0) + .set(state.ids.hp_alignment, ui); + Rectangle::fill_with([240.0, 17.0], color::TRANSPARENT) + .top_right_with_margins_on(state.ids.alignment, 0.0, 0.0) + .set(state.ids.stamina_alignment, ui); + let health_col = match hp_percentage as u8 { + 0..=20 => crit_hp_color, + 21..=40 => LOW_HP_COLOR, + _ => HP_COLOR, + }; + // Content + Image::new(self.imgs.bar_content) + .w_h(216.0 * hp_percentage / 100.0, 14.0) + .color(Some(health_col)) + .top_right_with_margins_on(state.ids.hp_alignment, 4.0, 0.0) + .set(state.ids.hp_filling, ui); + Image::new(self.imgs.bar_content) + .w_h(216.0 * energy_percentage / 100.0, 14.0) + .color(Some(STAMINA_COLOR)) + .top_left_with_margins_on(state.ids.stamina_alignment, 4.0, 0.0) + .set(state.ids.stamina_filling, ui); + Rectangle::fill_with([216.0, 14.0], color::TRANSPARENT) + .top_left_with_margins_on(state.ids.hp_alignment, 4.0, 13.0) + .set(state.ids.hp_txt_alignment, ui); + Rectangle::fill_with([216.0, 14.0], color::TRANSPARENT) + .top_right_with_margins_on(state.ids.stamina_alignment, 4.0, 13.0) + .set(state.ids.stamina_txt_alignment, ui); + // Bar Text + // Values + if let BarNumbers::Values = bar_values { + let mut hp_txt = format!( + "{}/{}", + (self.stats.health.current() / 10).max(1) as u32, /* Don't show 0 health for + * living players */ + (self.stats.health.maximum() / 10) as u32 + ); + let mut energy_txt = format!("{}", energy_percentage as u32); + if self.stats.is_dead { + hp_txt = self.localized_strings.get("hud.group.dead").to_string(); + energy_txt = self.localized_strings.get("hud.group.dead").to_string(); + }; + Text::new(&hp_txt) + .middle_of(state.ids.hp_txt_alignment) + .font_size(self.fonts.cyri.scale(14)) + .font_id(self.fonts.cyri.conrod_id) + .color(Color::Rgba(0.0, 0.0, 0.0, 1.0)) + .set(state.ids.hp_txt_bg, ui); + Text::new(&hp_txt) + .bottom_left_with_margins_on(state.ids.hp_txt_bg, 2.0, 2.0) + .font_size(self.fonts.cyri.scale(14)) + .font_id(self.fonts.cyri.conrod_id) + .color(TEXT_COLOR) + .set(state.ids.hp_txt, ui); + Text::new(&energy_txt) + .middle_of(state.ids.stamina_txt_alignment) + .font_size(self.fonts.cyri.scale(14)) + .font_id(self.fonts.cyri.conrod_id) + .color(Color::Rgba(0.0, 0.0, 0.0, 1.0)) + .set(state.ids.stamina_txt_bg, ui); + Text::new(&energy_txt) + .bottom_left_with_margins_on(state.ids.stamina_txt_bg, 2.0, 2.0) + .font_size(self.fonts.cyri.scale(14)) + .font_id(self.fonts.cyri.conrod_id) + .color(TEXT_COLOR) + .set(state.ids.stamina_txt, ui); } - // M1 Slot - Image::new(self.imgs.skillbar_slot_big_bg) - .w_h(38.0 * scale, 38.0 * scale) - .color( - match self.loadout.active_item.as_ref().map(|i| i.item.kind()) { - Some(ItemKind::Tool(Tool { kind, .. })) => match kind { - ToolKind::Bow(_) => Some(BG_COLOR_2), - ToolKind::Staff(_) => Some(BG_COLOR_2), - _ => Some(BG_COLOR_2), - }, - _ => Some(BG_COLOR_2), - }, - ) - .middle_of(state.ids.m1_slot) - .set(state.ids.m1_slot_bg, ui); - Button::image( - match self.loadout.active_item.as_ref().map(|i| i.item.kind()) { - Some(ItemKind::Tool(Tool { kind, .. })) => match kind { - ToolKind::Sword(_) => self.imgs.twohsword_m1, - ToolKind::Dagger(_) => self.imgs.onehdagger_m1, - ToolKind::Shield(_) => self.imgs.onehshield_m1, - ToolKind::Hammer(_) => self.imgs.twohhammer_m1, - ToolKind::Axe(_) => self.imgs.twohaxe_m1, - ToolKind::Bow(_) => self.imgs.bow_m1, - ToolKind::Sceptre(_) => self.imgs.heal_0, - ToolKind::Staff(_) => self.imgs.fireball, - ToolKind::Debug(kind) => match kind.as_ref() { - "Boost" => self.imgs.flyingrod_m1, - _ => self.imgs.nothing, - }, - _ => self.imgs.nothing, - }, - _ => self.imgs.nothing, - }, - ) // Insert Icon here - .w_h(32.0 * scale, 32.0 * scale) - .middle_of(state.ids.m1_slot_bg) - .set(state.ids.m1_content, ui); - // M2 Slot - match self.character_state { - CharacterState::BasicMelee { .. } => { - let fade_pulse = (self.pulse * 4.0/* speed factor */).cos() * 0.5 + 0.6; //Animation timer; - if self.controller.secondary.is_pressed() { - Image::new(self.imgs.skillbar_slot_big) - .w_h(40.0 * scale, 40.0 * scale) - .right_from(state.ids.m1_slot, 0.0) - .set(state.ids.m2_slot, ui); - Image::new(self.imgs.skillbar_slot_big_act) - .w_h(40.0 * scale, 40.0 * scale) - .middle_of(state.ids.m2_slot) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, fade_pulse))) - .floating(true) - .set(state.ids.m2_slot_act, ui); - } else { - Image::new(self.imgs.skillbar_slot_big) - .w_h(40.0 * scale, 40.0 * scale) - .right_from(state.ids.m1_slot, 0.0) - .set(state.ids.m2_slot, ui); - } - }, - _ => { - Image::new(self.imgs.skillbar_slot_big) - .w_h(40.0 * scale, 40.0 * scale) - .right_from(state.ids.m1_slot, 0.0) - .set(state.ids.m2_slot, ui); - }, + //Percentages + if let BarNumbers::Percent = bar_values { + let mut hp_txt = format!("{}%", hp_percentage as u32); + let mut energy_txt = format!("{}", energy_percentage as u32); + if self.stats.is_dead { + hp_txt = self.localized_strings.get("hud.group.dead").to_string(); + energy_txt = self.localized_strings.get("hud.group.dead").to_string(); + }; + Text::new(&hp_txt) + .middle_of(state.ids.hp_txt_alignment) + .font_size(self.fonts.cyri.scale(14)) + .font_id(self.fonts.cyri.conrod_id) + .color(Color::Rgba(0.0, 0.0, 0.0, 1.0)) + .set(state.ids.hp_txt_bg, ui); + Text::new(&hp_txt) + .bottom_left_with_margins_on(state.ids.hp_txt_bg, 2.0, 2.0) + .font_size(self.fonts.cyri.scale(14)) + .font_id(self.fonts.cyri.conrod_id) + .color(TEXT_COLOR) + .set(state.ids.hp_txt, ui); + Text::new(&energy_txt) + .middle_of(state.ids.stamina_txt_alignment) + .font_size(self.fonts.cyri.scale(14)) + .font_id(self.fonts.cyri.conrod_id) + .color(Color::Rgba(0.0, 0.0, 0.0, 1.0)) + .set(state.ids.stamina_txt_bg, ui); + Text::new(&energy_txt) + .bottom_left_with_margins_on(state.ids.stamina_txt_bg, 2.0, 2.0) + .font_size(self.fonts.cyri.scale(14)) + .font_id(self.fonts.cyri.conrod_id) + .color(TEXT_COLOR) + .set(state.ids.stamina_txt, ui); } - - let active_tool_kind = match self.loadout.active_item.as_ref().map(|i| i.item.kind()) { - Some(ItemKind::Tool(Tool { kind, .. })) => Some(kind), - _ => None, - }; - - let second_tool_kind = match self.loadout.second_item.as_ref().map(|i| i.item.kind()) { - Some(ItemKind::Tool(Tool { kind, .. })) => Some(kind), - _ => None, - }; - - let tool_kind = match ( - active_tool_kind.map(|tk| tk.hands()), - second_tool_kind.map(|tk| tk.hands()), - ) { - (Some(Hands::TwoHand), _) => active_tool_kind, - (_, Some(Hands::OneHand)) => second_tool_kind, - (_, _) => None, - }; - - Image::new(self.imgs.skillbar_slot_big_bg) - .w_h(38.0 * scale, 38.0 * scale) - .color(match tool_kind { - Some(ToolKind::Bow(_)) => Some(BG_COLOR_2), - Some(ToolKind::Staff(_)) => Some(BG_COLOR_2), - _ => Some(BG_COLOR_2), - }) - .middle_of(state.ids.m2_slot) - .set(state.ids.m2_slot_bg, ui); - Button::image(match tool_kind { - Some(ToolKind::Sword(_)) => self.imgs.twohsword_m2, - Some(ToolKind::Dagger(_)) => self.imgs.onehdagger_m2, - Some(ToolKind::Shield(_)) => self.imgs.onehshield_m2, - Some(ToolKind::Hammer(_)) => self.imgs.hammergolf, - Some(ToolKind::Axe(_)) => self.imgs.axespin, - Some(ToolKind::Bow(_)) => self.imgs.bow_m2, - Some(ToolKind::Sceptre(_)) => self.imgs.heal_bomb, - Some(ToolKind::Staff(_)) => self.imgs.flamethrower, - Some(ToolKind::Debug(kind)) => match kind.as_ref() { - "Boost" => self.imgs.flyingrod_m2, - _ => self.imgs.nothing, - }, - _ => self.imgs.nothing, - }) - .w_h(32.0 * scale, 32.0 * scale) - .middle_of(state.ids.m2_slot_bg) - .image_color(match tool_kind { - Some(ToolKind::Sword(_)) => { - if self.energy.current() as f64 >= 200.0 { - Color::Rgba(1.0, 1.0, 1.0, 1.0) - } else { - Color::Rgba(0.3, 0.3, 0.3, 0.8) - } - }, - Some(ToolKind::Sceptre(_)) => { - if self.energy.current() as f64 >= 400.0 { - Color::Rgba(1.0, 1.0, 1.0, 1.0) - } else { - Color::Rgba(0.3, 0.3, 0.3, 0.8) - } - }, - Some(ToolKind::Axe(_)) => { - if self.energy.current() as f64 >= 100.0 { - Color::Rgba(1.0, 1.0, 1.0, 1.0) - } else { - Color::Rgba(0.3, 0.3, 0.3, 0.8) - } - }, - _ => Color::Rgba(1.0, 1.0, 1.0, 1.0), - }) - .set(state.ids.m2_content, ui); // Slots let content_source = (self.hotbar, self.inventory, self.loadout, self.energy); // TODO: avoid this let image_source = (self.item_imgs, self.imgs); - let mut slot_maker = SlotMaker { // TODO: is a separate image needed for the frame? - empty_slot: self.imgs.skillbar_slot, - filled_slot: self.imgs.skillbar_slot, - selected_slot: self.imgs.skillbar_slot_act, + empty_slot: self.imgs.inv_slot, + filled_slot: self.imgs.inv_slot, + selected_slot: self.imgs.inv_slot_sel, background_color: None, content_size: ContentSize { width_height_ratio: 1.0, @@ -792,14 +523,6 @@ impl<'a> Widget for Skillbar<'a> { .map(|i| i.item.kind()) .and_then(|kind| match kind { ItemKind::Tool(Tool { kind, .. }) => match kind { - ToolKind::Hammer(_) => Some(( - "Smash of Doom", - "\nAn AOE attack with knockback. \nLeaps to position of \ - cursor.", - )), - ToolKind::Axe(_) => { - Some(("Spin Leap", "\nA slashing running spin leap.")) - }, ToolKind::Staff(_) => Some(( "Firebomb", "\nWhirls a big fireball into the air. \nExplodes the ground \ @@ -809,10 +532,6 @@ impl<'a> Widget for Skillbar<'a> { "Whirlwind", "\nMove forward while spinning with \n your sword.", )), - ToolKind::Bow(_) => Some(( - "Burst", - "\nLaunches a burst of arrows at the top \nof a running leap.", - )), ToolKind::Debug(kind) => match kind.as_ref() { "Boost" => Some(( "Possessing Arrow", @@ -827,71 +546,209 @@ impl<'a> Widget for Skillbar<'a> { }), }) }; - - //Slot 5 - let slot = slot_maker - .fabricate(hotbar::Slot::Five, [20.0 * scale as f32; 2]) - .filled_slot(self.imgs.skillbar_slot) - .bottom_left_with_margins_on(state.ids.m1_slot, 0.0, -20.0 * scale); - if let Some((title, desc)) = tooltip_text(hotbar::Slot::Five) { - slot.with_tooltip(self.tooltip_manager, title, desc, &item_tooltip, TEXT_COLOR) - .set(state.ids.slot5, ui); - } else { - slot.set(state.ids.slot5, ui); - } - // Slot 4 - let slot = slot_maker - .fabricate(hotbar::Slot::Four, [20.0 * scale as f32; 2]) - .filled_slot(self.imgs.skillbar_slot) - .left_from(state.ids.slot5, 0.0); - if let Some((title, desc)) = tooltip_text(hotbar::Slot::Four) { - slot.with_tooltip(self.tooltip_manager, title, desc, &item_tooltip, TEXT_COLOR) - .set(state.ids.slot4, ui); - } else { - slot.set(state.ids.slot4, ui); - } - // Slot 3 - let slot = slot_maker - .fabricate(hotbar::Slot::Three, [20.0 * scale as f32; 2]) - .filled_slot(self.imgs.skillbar_slot) - .left_from(state.ids.slot4, 0.0); - if let Some((title, desc)) = tooltip_text(hotbar::Slot::Three) { - slot.with_tooltip(self.tooltip_manager, title, desc, &item_tooltip, TEXT_COLOR) - .set(state.ids.slot3, ui); - } else { - slot.set(state.ids.slot3, ui); - } - // Slot 2 - let slot = slot_maker - .fabricate(hotbar::Slot::Two, [20.0 * scale as f32; 2]) - .filled_slot(self.imgs.skillbar_slot) - .left_from(state.ids.slot3, 0.0); - if let Some((title, desc)) = tooltip_text(hotbar::Slot::Two) { - slot.with_tooltip(self.tooltip_manager, title, desc, &item_tooltip, TEXT_COLOR) - .set(state.ids.slot2, ui); - } else { - slot.set(state.ids.slot2, ui); - } + // Slot 1-5 // Slot 1 - slot_maker.empty_slot = self.imgs.skillbar_slot_l; - slot_maker.selected_slot = self.imgs.skillbar_slot_l_act; + slot_maker.empty_slot = self.imgs.inv_slot; + slot_maker.selected_slot = self.imgs.inv_slot; let slot = slot_maker - .fabricate(hotbar::Slot::One, [20.0 * scale as f32; 2]) - .filled_slot(self.imgs.skillbar_slot_l) - .left_from(state.ids.slot2, 0.0); + .fabricate(hotbar::Slot::One, [40.0; 2]) + .filled_slot(self.imgs.inv_slot) + .bottom_left_with_margins_on(state.ids.frame, 15.0, 22.0); if let Some((title, desc)) = tooltip_text(hotbar::Slot::One) { slot.with_tooltip(self.tooltip_manager, title, desc, &item_tooltip, TEXT_COLOR) .set(state.ids.slot1, ui); } else { slot.set(state.ids.slot1, ui); } - // Slot 6 - slot_maker.empty_slot = self.imgs.skillbar_slot; - slot_maker.selected_slot = self.imgs.skillbar_slot_act; + // Slot 2 let slot = slot_maker - .fabricate(hotbar::Slot::Six, [20.0 * scale as f32; 2]) - .filled_slot(self.imgs.skillbar_slot) - .bottom_right_with_margins_on(state.ids.m2_slot, 0.0, -20.0 * scale); + .fabricate(hotbar::Slot::Two, [40.0; 2]) + .filled_slot(self.imgs.inv_slot) + .right_from(state.ids.slot1, 0.0); + if let Some((title, desc)) = tooltip_text(hotbar::Slot::Two) { + slot.with_tooltip(self.tooltip_manager, title, desc, &item_tooltip, TEXT_COLOR) + .set(state.ids.slot2, ui); + } else { + slot.set(state.ids.slot2, ui); + } + // Slot 3 + let slot = slot_maker + .fabricate(hotbar::Slot::Three, [40.0; 2]) + .filled_slot(self.imgs.inv_slot) + .right_from(state.ids.slot2, 0.0); + if let Some((title, desc)) = tooltip_text(hotbar::Slot::Three) { + slot.with_tooltip(self.tooltip_manager, title, desc, &item_tooltip, TEXT_COLOR) + .set(state.ids.slot3, ui); + } else { + slot.set(state.ids.slot3, ui); + } + // Slot 4 + let slot = slot_maker + .fabricate(hotbar::Slot::Four, [40.0; 2]) + .filled_slot(self.imgs.inv_slot) + .right_from(state.ids.slot3, 0.0); + if let Some((title, desc)) = tooltip_text(hotbar::Slot::Three) { + slot.with_tooltip(self.tooltip_manager, title, desc, &item_tooltip, TEXT_COLOR) + .set(state.ids.slot4, ui); + } else { + slot.set(state.ids.slot4, ui); + } + // Slot 5 + let slot = slot_maker + .fabricate(hotbar::Slot::Five, [40.0; 2]) + .filled_slot(self.imgs.inv_slot) + .right_from(state.ids.slot4, 0.0); + if let Some((title, desc)) = tooltip_text(hotbar::Slot::Three) { + slot.with_tooltip(self.tooltip_manager, title, desc, &item_tooltip, TEXT_COLOR) + .set(state.ids.slot5, ui); + } else { + slot.set(state.ids.slot5, ui); + } + // Slot M1 + Image::new(self.imgs.inv_slot) + .w_h(40.0, 40.0) + .color( + match self.loadout.active_item.as_ref().map(|i| i.item.kind()) { + Some(ItemKind::Tool(Tool { kind, .. })) => match kind { + ToolKind::Bow(_) => Some(BG_COLOR_2), + ToolKind::Staff(_) => Some(BG_COLOR_2), + _ => Some(BG_COLOR_2), + }, + _ => Some(BG_COLOR_2), + }, + ) + .right_from(state.ids.slot5, 0.0) + .set(state.ids.m1_slot_bg, ui); + Button::image( + match self.loadout.active_item.as_ref().map(|i| i.item.kind()) { + Some(ItemKind::Tool(Tool { kind, .. })) => match kind { + ToolKind::Sword(_) => self.imgs.twohsword_m1, + ToolKind::Dagger(_) => self.imgs.onehdagger_m1, + ToolKind::Shield(_) => self.imgs.onehshield_m1, + ToolKind::Hammer(_) => self.imgs.twohhammer_m1, + ToolKind::Axe(_) => self.imgs.twohaxe_m1, + ToolKind::Bow(_) => self.imgs.bow_m1, + ToolKind::Sceptre(_) => self.imgs.heal_0, + ToolKind::Staff(_) => self.imgs.fireball, + ToolKind::Debug(kind) => match kind.as_ref() { + "Boost" => self.imgs.flyingrod_m1, + _ => self.imgs.nothing, + }, + _ => self.imgs.nothing, + }, + _ => self.imgs.nothing, + }, + ) // Insert Icon here + .w_h(36.0, 36.0) + .middle_of(state.ids.m1_slot_bg) + .set(state.ids.m1_content, ui); + // Slot M2 + match self.character_state { + CharacterState::BasicMelee { .. } => { + let fade_pulse = (self.pulse * 4.0/* speed factor */).cos() * 0.5 + 0.6; //Animation timer; + if self.controller.secondary.is_pressed() { + Image::new(self.imgs.inv_slot) + .w_h(40.0, 40.0) + .right_from(state.ids.m1_slot_bg, 0.0) + .set(state.ids.m2_slot, ui); + Image::new(self.imgs.inv_slot) + .w_h(40.0, 40.0) + .middle_of(state.ids.m2_slot) + .color(Some(Color::Rgba(1.0, 1.0, 1.0, fade_pulse))) + .set(state.ids.m2_slot_act, ui); + } else { + Image::new(self.imgs.inv_slot) + .w_h(40.0, 40.0) + .right_from(state.ids.m1_slot_bg, 0.0) + .set(state.ids.m2_slot, ui); + } + }, + _ => { + Image::new(self.imgs.inv_slot) + .w_h(40.0, 40.0) + .right_from(state.ids.m1_slot_bg, 0.0) + .set(state.ids.m2_slot, ui); + }, + } + + let active_tool_kind = match self.loadout.active_item.as_ref().map(|i| i.item.kind()) { + Some(ItemKind::Tool(Tool { kind, .. })) => Some(kind), + _ => None, + }; + + let second_tool_kind = match self.loadout.second_item.as_ref().map(|i| i.item.kind()) { + Some(ItemKind::Tool(Tool { kind, .. })) => Some(kind), + _ => None, + }; + + let tool_kind = match ( + active_tool_kind.map(|tk| tk.hands()), + second_tool_kind.map(|tk| tk.hands()), + ) { + (Some(Hands::TwoHand), _) => active_tool_kind, + (_, Some(Hands::OneHand)) => second_tool_kind, + (_, _) => None, + }; + + Image::new(self.imgs.inv_slot) + .w_h(40.0, 40.0) + .color(match tool_kind { + Some(ToolKind::Bow(_)) => Some(BG_COLOR_2), + Some(ToolKind::Staff(_)) => Some(BG_COLOR_2), + _ => Some(BG_COLOR_2), + }) + .middle_of(state.ids.m2_slot) + .set(state.ids.m2_slot_bg, ui); + Button::image(match tool_kind { + Some(ToolKind::Sword(_)) => self.imgs.twohsword_m2, + Some(ToolKind::Dagger(_)) => self.imgs.onehdagger_m2, + Some(ToolKind::Shield(_)) => self.imgs.onehshield_m2, + Some(ToolKind::Hammer(_)) => self.imgs.hammergolf, + Some(ToolKind::Axe(_)) => self.imgs.axespin, + Some(ToolKind::Bow(_)) => self.imgs.bow_m2, + Some(ToolKind::Sceptre(_)) => self.imgs.heal_bomb, + Some(ToolKind::Staff(_)) => self.imgs.flamethrower, + Some(ToolKind::Debug(kind)) => match kind.as_ref() { + "Boost" => self.imgs.flyingrod_m2, + _ => self.imgs.nothing, + }, + _ => self.imgs.nothing, + }) + .w_h(36.0, 36.0) + .middle_of(state.ids.m2_slot_bg) + .image_color(match tool_kind { + Some(ToolKind::Sword(_)) => { + if self.energy.current() as f64 >= 200.0 { + Color::Rgba(1.0, 1.0, 1.0, 1.0) + } else { + Color::Rgba(0.3, 0.3, 0.3, 0.8) + } + }, + Some(ToolKind::Sceptre(_)) => { + if self.energy.current() as f64 >= 400.0 { + Color::Rgba(1.0, 1.0, 1.0, 1.0) + } else { + Color::Rgba(0.3, 0.3, 0.3, 0.8) + } + }, + Some(ToolKind::Axe(_)) => { + if self.energy.current() as f64 >= 100.0 { + Color::Rgba(1.0, 1.0, 1.0, 1.0) + } else { + Color::Rgba(0.3, 0.3, 0.3, 0.8) + } + }, + _ => Color::Rgba(1.0, 1.0, 1.0, 1.0), + }) + .set(state.ids.m2_content, ui); + // Slot 6-10 + // Slot 6 + slot_maker.empty_slot = self.imgs.inv_slot; + slot_maker.selected_slot = self.imgs.inv_slot; + let slot = slot_maker + .fabricate(hotbar::Slot::Six, [40.0; 2]) + .filled_slot(self.imgs.inv_slot) + .right_from(state.ids.m2_slot_bg, 0.0); if let Some((title, desc)) = tooltip_text(hotbar::Slot::Six) { slot.with_tooltip(self.tooltip_manager, title, desc, &item_tooltip, TEXT_COLOR) .set(state.ids.slot6, ui); @@ -900,8 +757,8 @@ impl<'a> Widget for Skillbar<'a> { } // Slot 7 let slot = slot_maker - .fabricate(hotbar::Slot::Seven, [20.0 * scale as f32; 2]) - .filled_slot(self.imgs.skillbar_slot) + .fabricate(hotbar::Slot::Seven, [40.0; 2]) + .filled_slot(self.imgs.inv_slot) .right_from(state.ids.slot6, 0.0); if let Some((title, desc)) = tooltip_text(hotbar::Slot::Seven) { slot.with_tooltip(self.tooltip_manager, title, desc, &item_tooltip, TEXT_COLOR) @@ -911,8 +768,8 @@ impl<'a> Widget for Skillbar<'a> { } // Slot 8 let slot = slot_maker - .fabricate(hotbar::Slot::Eight, [20.0 * scale as f32; 2]) - .filled_slot(self.imgs.skillbar_slot) + .fabricate(hotbar::Slot::Eight, [40.0; 2]) + .filled_slot(self.imgs.inv_slot) .right_from(state.ids.slot7, 0.0); if let Some((title, desc)) = tooltip_text(hotbar::Slot::Eight) { slot.with_tooltip(self.tooltip_manager, title, desc, &item_tooltip, TEXT_COLOR) @@ -922,8 +779,8 @@ impl<'a> Widget for Skillbar<'a> { } // Slot 9 let slot = slot_maker - .fabricate(hotbar::Slot::Nine, [20.0 * scale as f32; 2]) - .filled_slot(self.imgs.skillbar_slot) + .fabricate(hotbar::Slot::Nine, [40.0; 2]) + .filled_slot(self.imgs.inv_slot) .right_from(state.ids.slot8, 0.0); if let Some((title, desc)) = tooltip_text(hotbar::Slot::Nine) { slot.with_tooltip(self.tooltip_manager, title, desc, &item_tooltip, TEXT_COLOR) @@ -932,11 +789,11 @@ impl<'a> Widget for Skillbar<'a> { slot.set(state.ids.slot9, ui); } // Quickslot - slot_maker.empty_slot = self.imgs.skillbar_slot_r; - slot_maker.selected_slot = self.imgs.skillbar_slot_r_act; + slot_maker.empty_slot = self.imgs.inv_slot; + slot_maker.selected_slot = self.imgs.inv_slot; let slot = slot_maker - .fabricate(hotbar::Slot::Ten, [20.0 * scale as f32; 2]) - .filled_slot(self.imgs.skillbar_slot_r) + .fabricate(hotbar::Slot::Ten, [40.0; 2]) + .filled_slot(self.imgs.inv_slot) .right_from(state.ids.slot9, 0.0); if let Some((title, desc)) = tooltip_text(hotbar::Slot::Ten) { slot.with_tooltip(self.tooltip_manager, title, desc, &item_tooltip, TEXT_COLOR) @@ -1176,114 +1033,27 @@ impl<'a> Widget for Skillbar<'a> { .set(state.ids.slot10_text, ui); } }; + // Frame + Image::new(self.imgs.skillbar_frame) + .w_h(524.0, 80.0) + .color(Some(UI_MAIN)) + .middle_of(state.ids.bg) + .floating(true) + .set(state.ids.frame, ui); + // M1 and M2 icons + Image::new(self.imgs.m1_ico) + .w_h(16.0, 18.0) + .mid_bottom_with_margin_on(state.ids.m1_content, tweak!(-9.0)) + .set(state.ids.m1_ico, ui); + Image::new(self.imgs.m2_ico) + .w_h(16.0, 18.0) + .mid_bottom_with_margin_on(state.ids.m2_content, tweak!(-9.0)) + .set(state.ids.m2_ico, ui); - // Lifebar - Image::new(self.imgs.healthbar_bg) - .w_h(100.0 * scale, 20.0 * scale) - .top_left_with_margins_on(state.ids.m1_slot, 0.0, -100.0 * scale) - .set(state.ids.healthbar_bg, ui); - let health_col = match hp_percentage as u8 { - 0..=20 => crit_hp_color, - 21..=40 => LOW_HP_COLOR, - _ => HP_COLOR, - }; - Image::new(self.imgs.bar_content) - .w_h(97.0 * scale * hp_percentage / 100.0, 16.0 * scale) - .color(Some(health_col)) - .top_right_with_margins_on(state.ids.healthbar_bg, 2.0 * scale, 1.0 * scale) - .set(state.ids.healthbar_filling, ui); - // Energybar - Image::new(self.imgs.energybar_bg) - .w_h(100.0 * scale, 20.0 * scale) - .top_right_with_margins_on(state.ids.m2_slot, 0.0, -100.0 * scale) - .set(state.ids.energybar_bg, ui); - Image::new(self.imgs.bar_content) - .w_h(97.0 * scale * energy_percentage / 100.0, 16.0 * scale) - .top_left_with_margins_on(state.ids.energybar_bg, 2.0 * scale, 1.0 * scale) - .color(Some(match self.current_resource { - ResourceType::Mana => MANA_COLOR, - /*ResourceType::Focus => FOCUS_COLOR, - *ResourceType::Rage => RAGE_COLOR, */ - })) - .set(state.ids.energybar_filling, ui); - // Bar Text - // Values - if let BarNumbers::Values = bar_values { - let mut hp_text = format!( - "{}/{}", - (self.stats.health.current() / 10).max(1) as u32, /* Don't show 0 health for - * living players */ - (self.stats.health.maximum() / 10) as u32 - ); - let mut energy_text = format!( - "{}/{}", - self.energy.current() as u32 / 10, /* TODO Fix regeneration with smaller energy - * numbers instead of dividing by 10 here */ - self.energy.maximum() as u32 / 10 - ); - if self.stats.is_dead { - hp_text = self.localized_strings.get("hud.group.dead").to_string(); - energy_text = self.localized_strings.get("hud.group.dead").to_string(); - }; - Text::new(&hp_text) - .mid_top_with_margin_on(state.ids.healthbar_bg, 6.0 * scale) - .font_size(self.fonts.cyri.scale(14)) - .font_id(self.fonts.cyri.conrod_id) - .color(Color::Rgba(0.0, 0.0, 0.0, 1.0)) - .set(state.ids.health_text_bg, ui); - Text::new(&hp_text) - .bottom_left_with_margins_on(state.ids.health_text_bg, 2.0, 2.0) - .font_size(self.fonts.cyri.scale(14)) - .font_id(self.fonts.cyri.conrod_id) - .color(TEXT_COLOR) - .set(state.ids.health_text, ui); - Text::new(&energy_text) - .mid_top_with_margin_on(state.ids.energybar_bg, 6.0 * scale) - .font_size(self.fonts.cyri.scale(14)) - .font_id(self.fonts.cyri.conrod_id) - .color(Color::Rgba(0.0, 0.0, 0.0, 1.0)) - .set(state.ids.energy_text_bg, ui); - Text::new(&energy_text) - .bottom_left_with_margins_on(state.ids.energy_text_bg, 2.0, 2.0) - .font_size(self.fonts.cyri.scale(14)) - .font_id(self.fonts.cyri.conrod_id) - .color(TEXT_COLOR) - .set(state.ids.energy_text, ui); - } - //Percentages - if let BarNumbers::Percent = bar_values { - let hp_text = format!("{}%", hp_percentage as u32); - Text::new(&hp_text) - .mid_top_with_margin_on(state.ids.healthbar_bg, 6.0 * scale) - .font_size(self.fonts.cyri.scale(14)) - .font_id(self.fonts.cyri.conrod_id) - .color(Color::Rgba(0.0, 0.0, 0.0, 1.0)) - .set(state.ids.health_text_bg, ui); - Text::new(&hp_text) - .bottom_left_with_margins_on(state.ids.health_text_bg, 2.0, 2.0) - .font_size(self.fonts.cyri.scale(14)) - .font_id(self.fonts.cyri.conrod_id) - .color(TEXT_COLOR) - .set(state.ids.health_text, ui); - let energy_text = format!("{}%", energy_percentage as u32); - Text::new(&energy_text) - .mid_top_with_margin_on(state.ids.energybar_bg, 6.0 * scale) - .font_size(self.fonts.cyri.scale(14)) - .font_id(self.fonts.cyri.conrod_id) - .color(Color::Rgba(0.0, 0.0, 0.0, 1.0)) - .set(state.ids.energy_text_bg, ui); - Text::new(&energy_text) - .bottom_left_with_margins_on(state.ids.energy_text_bg, 2.0, 2.0) - .font_size(self.fonts.cyri.scale(14)) - .font_id(self.fonts.cyri.conrod_id) - .color(TEXT_COLOR) - .set(state.ids.energy_text, ui); - } + // Buffs + // Add debuff slots above the health bar + // Add buff slots above the mana bar + + // Debuffs } - - // Buffs - // Add debuff slots above the health bar - // Add buff slots above the mana bar - - // Debuffs }