From dc008fefd3d59f22a70d4102ec0e702129a0c4aa Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Sun, 17 Mar 2024 19:50:26 +0300 Subject: [PATCH 01/55] Add ascendancy assets. --- src/Assets/ascendants/ascendancy.jpeg | Bin 0 -> 9047 bytes src/Assets/ascendants/ascendant.jpeg | Bin 0 -> 21064 bytes src/Assets/ascendants/assassin.jpeg | Bin 0 -> 6792 bytes src/Assets/ascendants/berserker.jpeg | Bin 0 -> 9116 bytes src/Assets/ascendants/champion.jpeg | Bin 0 -> 11744 bytes src/Assets/ascendants/chieftain.jpeg | Bin 0 -> 10387 bytes src/Assets/ascendants/deadeye.jpeg | Bin 0 -> 8948 bytes src/Assets/ascendants/dex.jpeg | Bin 0 -> 11848 bytes src/Assets/ascendants/dexint.jpeg | Bin 0 -> 11733 bytes src/Assets/ascendants/elementalist.jpeg | Bin 0 -> 14751 bytes src/Assets/ascendants/gladiator.jpeg | Bin 0 -> 11325 bytes src/Assets/ascendants/guardian.jpeg | Bin 0 -> 10425 bytes src/Assets/ascendants/hierophant.jpeg | Bin 0 -> 9701 bytes src/Assets/ascendants/inquisitor.jpeg | Bin 0 -> 10667 bytes src/Assets/ascendants/int.jpeg | Bin 0 -> 11401 bytes src/Assets/ascendants/juggernaut.jpeg | Bin 0 -> 10452 bytes src/Assets/ascendants/necromancer.jpeg | Bin 0 -> 11288 bytes src/Assets/ascendants/occultist.jpeg | Bin 0 -> 10794 bytes src/Assets/ascendants/pathfinder.jpeg | Bin 0 -> 8604 bytes src/Assets/ascendants/raider.jpeg | Bin 0 -> 9121 bytes src/Assets/ascendants/saboteur.jpeg | Bin 0 -> 8069 bytes src/Assets/ascendants/skillpoint.jpeg | Bin 0 -> 2525 bytes src/Assets/ascendants/slayer.jpeg | Bin 0 -> 11770 bytes src/Assets/ascendants/str.jpeg | Bin 0 -> 11083 bytes src/Assets/ascendants/strdex.jpeg | Bin 0 -> 11726 bytes src/Assets/ascendants/strdexint.jpeg | Bin 0 -> 11213 bytes src/Assets/ascendants/strint.jpeg | Bin 0 -> 11631 bytes src/Assets/ascendants/trickster.jpeg | Bin 0 -> 7526 bytes 28 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/Assets/ascendants/ascendancy.jpeg create mode 100644 src/Assets/ascendants/ascendant.jpeg create mode 100644 src/Assets/ascendants/assassin.jpeg create mode 100644 src/Assets/ascendants/berserker.jpeg create mode 100644 src/Assets/ascendants/champion.jpeg create mode 100644 src/Assets/ascendants/chieftain.jpeg create mode 100644 src/Assets/ascendants/deadeye.jpeg create mode 100644 src/Assets/ascendants/dex.jpeg create mode 100644 src/Assets/ascendants/dexint.jpeg create mode 100644 src/Assets/ascendants/elementalist.jpeg create mode 100644 src/Assets/ascendants/gladiator.jpeg create mode 100644 src/Assets/ascendants/guardian.jpeg create mode 100644 src/Assets/ascendants/hierophant.jpeg create mode 100644 src/Assets/ascendants/inquisitor.jpeg create mode 100644 src/Assets/ascendants/int.jpeg create mode 100644 src/Assets/ascendants/juggernaut.jpeg create mode 100644 src/Assets/ascendants/necromancer.jpeg create mode 100644 src/Assets/ascendants/occultist.jpeg create mode 100644 src/Assets/ascendants/pathfinder.jpeg create mode 100644 src/Assets/ascendants/raider.jpeg create mode 100644 src/Assets/ascendants/saboteur.jpeg create mode 100644 src/Assets/ascendants/skillpoint.jpeg create mode 100644 src/Assets/ascendants/slayer.jpeg create mode 100644 src/Assets/ascendants/str.jpeg create mode 100644 src/Assets/ascendants/strdex.jpeg create mode 100644 src/Assets/ascendants/strdexint.jpeg create mode 100644 src/Assets/ascendants/strint.jpeg create mode 100644 src/Assets/ascendants/trickster.jpeg diff --git a/src/Assets/ascendants/ascendancy.jpeg b/src/Assets/ascendants/ascendancy.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..19db81c785ad031e75de8e205a81e303f52d7ca3 GIT binary patch literal 9047 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 RD%_w+uZYemrk*@5{SO714txLr literal 0 HcmV?d00001 diff --git a/src/Assets/ascendants/ascendant.jpeg b/src/Assets/ascendants/ascendant.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..2a598879f129542b7b7567640ce0096dccb252c6 GIT binary patch literal 21064 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∈cPd2p%9_-p(`O1M%oY-TmL0Mdxr(J3}WtD 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≪I)rp`zJ{2W)+0p8nhFt9jDVSKi zftIT1OUB*Uw9%$sicq6q4Tmat32Lq;+%qc=CA`bZXC86%yP85yQQty!UI*^EF=6Z4 z^%vsWMg4DUE}FYP#kvH=xycfnpQz9EO%4snmO}o#oFOR?YgJlVH}XN~Z=Z1`o5FeXk_SVV^wQndZ?GO zlHOsBNI2dKk6$9ED8I{jFB7URFPEo?qxOattL1v{fZdAtybKon{{&(Xo$nJ-QaJwg z1oWvGPrk6X>hi?P4EAbYk6NYQ2Pj1FstBeeXF9(eTW;pT!;uSkOc z(!83_*YANk$$+8{_|V^}zw?UCdp35Q)>9pp$=JtB2(l@sw-eE85J)*m6o}_0RaaQg zy~4Yz5Wse`$Vymc3rbM1xGE!XT1k_(WQe#XFHYjB&E}pNg0z#l3NaRtOrN#AgqguR zqn&EpxeC0s~^nnFQICA-5OGt~6_(i570&B~IL28ux2Tkh@mo19yBPPd6N(McRq zt(fG3TL-lAu$ZS>BmoqYG17ZuMb&JRrDSA-li1|;w;%$38-G`!6y%w}FAvm7@eTIx9CJh8+|bNqC_jD*x|Qe2 z15ouY(*XNum@1D@3O+B3)o;EGKB;K<|a)Dt11=zjNv&hGmDEvKtR zE#HAJRG3$i8LIoS`>L%xZrl;W5KsA)N#Fy^mY1h_8P*g==Juz|5qLEe`px@B7>2i| zCrWq~26I9}2KuU$JR9&n`0rb$`_I#dOFAu~UTgYRBU{00cy||7ag}G9aY8BW%D-tG zB1`tHyv(DJ?<}BqDxOD5>A9^FO~|#GW%RJ(TLnlf6d-e6NW25zjB@6@{{V?KZC^2$ zKz&(P94SioIRz$wizXtY=m3l>x!>%+#4L#uy5jv$BE7zGDUS+gGJ1Apd4#Wf zyF9W)C=oLRh#=BQAH5L|;!X99iOgyHew~B01zw)??-cg4mrco9=FPCOhviJEWb@(QCYO<*Vn$!CDU6g)SM4WbevnkAcRuKg$5AAImN{SXSi7t0*+n`^ z!+E7Iq}~dsMIgoJ;zz{CwRk`9 zT;@WQ3IPy%=G0Btr-U(F6UGsIfB*`<00Y%^t$1_8nwk{Odm`J3CJ0O*)SGQggVT|R zJdcRHLy<}ol+LLMLSTA#dTDtwK!I+ZsVc4YbGBn_1kY2(W}n(z^GgML!-dIF7a+$m>;%nl&8PUk#E!T>H=OelNCXrC z>5vGyigf1SVHOI5GgjwCjjM6w#|5${v|Hj{zK z1XKElg|j*eLvL<-%X4U6(wHO|6q|y6p4hUo+WQYMl&wR|fK6^i&Hn&ucEhW*KabC)f{9v8+{aEj{C1D73}thK8mJ0hdJm})@ku8L zH&!y%ukDg7(wS0)3Rv~!ixDJB^T=2ddwDhh91aLk{lIn6ncBwrGbXS_r;;YZm7(c4 z9jfO7^?)IXFYiGr2`|B$<$SB=w%sdrgGmdx?75)!lP# z#K#m_9e>-)M)N1V9jPFdS*h5LQ6jZz!lC%cq~?xKFxphua6IB0P*58{ zQH{rl6#!fVOlT?_r9+=k6a&5DAax=}EOS=hwT*7(M;6&bB@K?i-8Jjcz>3jh zw(tCXaTA!(M+}(5l#ZNrc`~eZIhjPEfKdEd@S_@jw(FTe<~HIGu%wCt;t;Yv2_mt@ z@oIh?c%6BT8HMLg*TR&N6hTk{Y6+!Cph*+ZbjCjMv(ugyWU_55qZA>TyHk!lgTMsv zdHuNkz9~g8>u&7wjV@!4fp6UXF>JG_GU5pi1G)hui9G~TO=@mFXtG|)B-6-Z<$U~* zf49Lr_~+w~9DIE9=%X2Rr72KuX0rhO1dAVHJ@KhaK?WTHZ3?me@r+uxCQA{&-N^$h z21yY9rC{9tl0Ygz=k*Q<=fNJQrB0wx1RuB{P>7p$=DTqau*#RcZRo=PrfX8y$DEY8+2@8SC#_=BpS10E zmRDgYCDKKVCq4?ho;(jy@>+3i;Nx->E}=6d-1BLrgxcpDvpRwvZ`QE1beRxtZe;ul zdtoX1!}^BH=k+|^zf&(FCQ_s|8ZUlCosG*NUa>a>877tqT_r|hgO1f4dT!GgaTw)KjRjmH?=9(p$=s5_AxdYo>JBMbtPDp0H4x- zZ}i}w9zSnOt~9*EPPhz_RQ+Ta>l1#pgJX`q&RC+=J*hlbps+LCNWkMiZlxhK@C1@} zPGXU`c1G&b3h^Zt4KtYirdl5J$(u0j5O~m## zxvfWUf35?!CZ59?XO-So{{YnPB1JrodmM1d$o(X#1gT{|q>x1CGO2lC#}rnha=%{S zcp*fB0RV}ZAQ4i8p?*kt;Df{xG2^?ESSdZc zap!~h@y>%Tvb3myaY#2Ed-nLnsN01GWPud-pZFwKuVISX>Mh$8cP)mva!h$^Uo3nE zWpU?&z#+ICd~g8pJwIv9f3T2{4%1s2-?{e0JmZ0LAV$+O*iEba;ANe(Y%Eeg>h0i; ze4gMq9(nv9_~YcCMKTShKrkRliq8?(q;-Kx;4980DN;bKz9);wzqU8AWxn@Zv00mm zs#ajcpAM1+;S_#23;85|p~s>tVyIeY(BM$LVzJ2S1jT;17^jSsPz4iV?k3`A>%{ew zZF$+h!~H+ELd1zBZC?jcPFR9vsf(*#MLaigMUpNQmJE0th4MWT*Hq53*i(XB2tXxJ ze@arBlQ#mS+V{aclHAAyhA4n$0jQpWcqEhb$F2*g*?(=S*|5b(;09vDk38|*Pvrb} z6XcWXx6b%^l&p{hlV9L*{Cr{GP1jvS1rk9N1pUQCeEZW971#pgURkE;C{#d z0K9Yg^f2j(Z0&#mfFuxpiJzb23}aa*{JKp*@6+u)jy(p(#Ew}YhRsZyLFs^EnJ{L#d%WV)gI2Nme2}u+pX1~8%YpZ9hAq2N+9C-z~9(-}h00I7|{@$K* zS>5JMcZn6e)SFEKry>mB05Ulh*}2T85D4rc354Dugv z$rEx@!SXpI4?i9_{{T*We!)*u$T-vMP)SfAss*cl-@Q7<4ruzS3n)W`ZWMrMCALnj_$lJ?M%l{l^6IKm(Ec@yDuFSw_hckwXwBq>1O_7Gj-HBwwwC{xGTa zLS~bG*<3Ly_alEl{?A?#=Y#RfdTGeEl;r7QA|`*g>xfUgB!r&C5yVt>zXzNNvo<79 zpf>}-Kkdox_6VOk(X> z4`hK=fbq!Z^Wb-QKc7V&Kte1gooUBko9 zY7ZV1T97CnJ_3LM{Bij86o@1X2?OHTVM>E-q{NFyN>4vuoM;-%u}G|}K>0iq=Y#&f zK0bf%>Ly_bP>rHY%A&L+MStfK67Wb&18JIbJ#iz4D<`ytWPd6?c|ZH{=t}aaDl`VM zB=q?C#J2N`Px%;*XZubm^v1$Gla>IUf7tQQBl~mxzxef!8G^&O5@D^@@AR{juk3Cd&%|U-bjdq% z@O@;4Q3e1J@6WVaCOJ6u?8=-?W~0(3p7sN$7>K-uxpGM?N&Q|)B>sI7%eDiFBY>3| zti+$(MLOUksRhEQs3s3%d`R#X-6>~BaX-+eym|Qhp5i~-v~lO3JOk;+PFyJ@B_g~C zrK!-+;d4HcOu+RE(~+oIA3%L zRRDoQS`s>1@y;U==O$UmE_;FPCyss#1NiaD1LNcI>nygW>rQP7P!k5`qyCTd&KETt zq85|s1e+d}kuq!iag5s;Q#5=@!}2)fsN@28KLh=KKj-&0=A>OmtssytQVBGepKoj6 zBRL(80+SV>1jYV4-yT@JT3fQjBYRP+Gxj(Py~Bh9ynsh1kAuMe{(V>4?tBFlph4Zh fr48;4ef}{0rDV4tZy} literal 0 HcmV?d00001 diff --git a/src/Assets/ascendants/assassin.jpeg b/src/Assets/ascendants/assassin.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..718e4f3cada32b5fe78f4c9f9c2127af1d803bbb GIT binary patch literal 6792 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 literal 0 HcmV?d00001 diff --git a/src/Assets/ascendants/berserker.jpeg b/src/Assets/ascendants/berserker.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..014df319de958ffda4905931019d7d4c8c8b4391 GIT binary patch literal 9116 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 literal 0 HcmV?d00001 diff --git a/src/Assets/ascendants/champion.jpeg b/src/Assets/ascendants/champion.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..d4ccf6468cf8172aba5ffb96863c404eeafe1473 GIT binary patch literal 11744 zcmb7p1ydY6*zMx(Qrsy{ixhW??Ba_%#ce6>?(Wj!?(SNo=+fc~g~b<2afbq>+`jkT z?+1J*Gnr?SJSRHIN%HdJWg9>UQUodjkdOcXq<;bM0td(gP>}z_e=*8GprWJx2TXKy zG;}OXY-}t{EG%qX0$gkyd>kw+JR&@N0zyI}LTp@O5@JGUNNBuM{xqM%~_b0oyU z!ugl_zr@QBfCv-t3GfL8i3os9goHwb^fC&d1ptsykp2VU{{tNZ6%7*w3mNcVwiF@Y zzlxDjQBlw^P*MKt6*3Ac8afexm=S}Igh^Hlla&91TUZGhxg0o+nMJ^|Wq1e6YW_k{ zyY=#)KQ+?-qyHar000FQ84Vo?fblPr=U+RJP?7$nApKwJe}(>ICt~D7BPK=vN6xIp zPev~Afkn}3sr`>%RrA`~KkG(dy3iw3p5VCqKftr@`J!21XhymE^BE}TuhxjteiMNrn^5i)hRBk^p0x@j8KdZCiNd$+eCP!reb|VW=uX|Gn#Kp> zsT;SUBeu)RZNzj!}+z@$p zJJ%Pz&}4zbBTY7axCZic5ZUZ;J+6SydS8-XOFz z?LB&=kTFS>Pv2b&Y$?+ZrSb>A08Xnrt1p1B1JxT9Dnla~Q2rEOmv8uYC{=6DGIS`` z2o=k??Pd~eYoJ{I@of5=?HJ==R&IA*tzwNJSbgA553mR0k%g=9q{^O_G|#{9OiLAA z!66%7f2$*q?=*VBx4Wom^5dwjaH8|w1S0|I>ntT(Yc^vI6q?5)?=FKhQy7nc>@O7^ zhvdadal98mLkDR_lFKPoce2K(sdukq!wNP!*w~xeYWe+@n=9cSY$7>02B3f<=cCr$ zyCSrK6j0qX<;{56pt3zXTJ%-&=4Nk619yL}u`jCz#VayL`LtS>_O!@*`sjK{$R62> z!)ryi!INpf^W!>y@-_Cl6*vFae>iXXmVSL{VQRjombhNt<10^*?OVL^_HS(-8bC*Nwuh3m$a_kNB1>K8P&~4 z6w-0_b@U;o$SPI?RdY!hNn4dM>^pP;Vz1w7h!3hED_JC0+tFsg&;O0HlJDu2y0}xs z*8Anv8IfnN?LLY``laBd&tN^0#K_BA@7bqdYscM%4db(t z+#??;`7uU)<0DC)+w9%Pg|&f`NIMG<4bDY(z4#&Wj`VC|LQBOMIuU!&nB z;?f-ReGKrRDLDeVf4g1Yicu+Ct`c`!<)f>f2ccvbf<`u@y%X^tjDQ>Asp`IxH~Ryd zclHoocK!K61+u7QQl0w`}*mHYgI-mni+6%yNNNnd%y3qTn{NZ(~QCgY}-F7;LG zs&rT?&nS#S2|+!m<_(5UR=&NMZOWGZ{%BA9I_)mo?T>V0@kn)nfgS43KWn_2Bz2DB z>NuiSl=7D13*)5^g6|vo0-{l_){%^UErk zt3ThfNHU&cIwaDu%CLjUaOqO8a=8=8^8NU7+-`#>eHQAQ)E~1^OUPCK>~i*;zT!XZzF>rE zV}kuVDyInRM(7ZYW8rb-igD?5fLVpht-*m#TdB?`6R7bo(Bcf=meix!O7%*@ofFDY zkXY2neKk^}yjxD@*GYCGd`xEjxC2`og$bowtqHg444`0$q2glU8UjzDVoLPK3xIp` z9-5kVRQ>{(DW2#^R`RkRBzo!PQ&94E`t za^q6h?~um^(nGl6vBq_}?5VwZE}R8!RFSrFR=U)x*>_i|AjNH|)fa%N*_z1%Y4Zm* zdAv}sIM>rhllTo;YQ$G%ukqnw15`gH1YA1AYb-uPWxNz#|cJy*NHGcuHa+jewC_|G& zA`3+iG`Kvo$0QFD(VFWrp@G(8Rg0yg-07Jj@oudp5&pt+q8O558E`JN6QW zDEfVC(kf97id%qX6CyubXEVvkMJqQ&Lk=G33k3mm8`P24G-+RL7%m&r{EWHTVL6AhnZM)l>XU}(pYLI&u-c~f7@o#_ z&#&0~LP=(nDmAutu4n7WK?3Ks(o6$&U$@(W$3{?cJCUu4m_YGbe>f;M9*^biVQYUB z)$exJioj=LtQ|D$&8u9KG7?!tFMxa1K6Cm%rKBz!mt#xXExmM4O z7AiU^?l~G_>-|xT&?oRQsZY~u0!l{FNhv1tCYAKay1XnT3rJ^4GDSNyqXfa}XLAt|*E_oPXN5dM7DkK;;r80!TqWw%!9XB$ z+Tpr?sP9sRmPMw;q9pbUpz3%~;9?b`MS=Cb&s(p?(QB0SccY7OjVDq*i=W5Tfppxo zx%-4gb5aV>VS8;qr(gF>JCC@i&P^Pu(ew$?)mXcGN5oCcd7NyGNuo!_*dDVg*;!44 zxLM(nT5$NVcRkU#e1C#pzn+>tV&t%Ds|{3tOZW@l6-k6r3vol+5n^{$mf_>%aXuH? z>sIgYki1^tgA-9N#?^+tJ4kRfQ{J#12Kvcoh;^8Gjn@kQAaO6cm=lDi-!;u%c4SV6 z=m?Ao+6q#wT-GK3G(u|3iC+Vn?G%|n)K{s4+aOxJXX*W>urD*-v?TWSAH&pRYYt(rOFDim6P# z(m4iJa6I;ck6z1EG-O~51^KCd|3l#Z=@l*Dhb6M z4p(A6evHuoOFNzA?#tAz1dU`Jk|V{Pj5Alj9{}tHpteDx;lxr6xH$FB{(0Lp2LEef zbt^UpH(c)C$29c<2~A}$lBkwX@H={}*)SjSx)p`EdqGa%H~SBUpRRcQ^X{tmv^Rqc z2qIKErc@L}yg?a1rT1k{qz>|r;?EoXD9hf@-wdkxZsne*=T!}erv>YndTTc_F{8dJ z#K2(t@pL4~J2Aaae6(R|SpVKz=J2*hRW7e`%-BIs_)KrNR5Ae1cw(_V#8$nky2%i^ zPJuM3R+bZD9hOnhJMLdrrBdd-TzO6Mt1#sVr@lt3_KQp_4c5(a1e%1_%GkOu)wXhh zX2VyCxhDe?CT$?dRf9fA?aQWeIoDsteTsH$Nkx*P%@XxX1G-}Xp}=9j)x}IqCL>Hc zJy~Y@)!tza+T0CU$)s}0pGC&5u9D6o6_<*%32eoybjjga(OH2E$x!?xE4@Zv%wTxz z+QtVYCoWHB>L;Yay;Ery@gx`YE4VS-~C;JPL3%mCZL>sfL9Dpj{1>Jo`Os#qG)_qZ2<(gaBk{({vCz!fad zx+%+bu)bIx6%#gx>bcg*?z1$H;ilIgUbrV{cJZ`-J>Dt0ORIkJA@0h=4K%w{fBZ&N zy$mjtoq1ZXzpJpHv|v;*FB+$-L*Y5%Zt8~mk=_}R@};p?Ny$fpyZo5eadVA_?Mjf0 zb2CaYazhHB0ug%qwooTXN25mS5pJ}`r5hRe^XwYxXT6nyDQywiGsZ>FfDE)63j=O?ULqo)lp0{2e6cw7w<&S+V+sQ@9Hq z$j{dOR#^&LD%35kFQaht&`)xmPM_lyO0lPCEX1?03Yywgi2F9C+L7@#9e{;b=O!I0 zogLaZ5c9wUG$}RuOL5fh7hknus@h(&kX{-_nc2s&o}$2t5^;B4q%Oh;shI!aH=?=n?rm#hs!A>3dekKVZ37}JV_0^9UzWbu|OHWRwv>nuPUniqb_)kt| zN(4p$qnj36V)Dr6#{xT@G(PB<;#ReC8Y4_>fducgPVeLt2b1Cc{Lv}iZGt6B$nh-Z z2d!qEc);M|X1>WQ6fY1&i1~c7sxcqVDYtO6rtAmQ1A`Vw#dlb6Nji*2D^}P1Cb}}z zJo|Q18a=0Xvpkk;WxJ|LKcA}WP$k~z)T%dQtxv~)U~Cw*_6@VcK($6g(Rck~^g60( z;*}APS%Ps6ZQMfNjLnq4vfr}pWEQs+td7nwh@g@I8_O09O|UM1MMz!>QlC>p?eiAE z$C5PZJkqDlvg~k{H%xFgY%kSpmHUH%D6UXqIfXZ)qz6P4(5)HRjOC{XkWL*&1>GZ? zf~gcmwGQaBJ&%F8)*a<^MjO1X_Ue^ta>gDNW!;+V|D^crFU9`c1hT%UfTnnSeX+yJWPzar5$fptyi=tlVd}=#UID5I zwG6`~;{nH|?hXfVZM;b|hiW&tnukBUo)W(}r@+l`Ej?9q97$9txhl->@@e_2d5J** zMJHEnje=W;i9XFwlb>Z;Mt@kc@JBn5XWb{ForWX*rxjE$9-(& z(j>Uh=7X}=z=X(%ZsuiTvU)rD4Ycu(3PTq8M{O~qXZ7VWQ{O zpp4J!`fq6wp-%^^=QJ;wc*V_x$7d$xG);D>GTMG*MHVhQJ+2G%OG&ap2!~t7LaWXf zD1OYJcX~AiwEd6gFn^uepx5i=Ges^f99))amJLi|tE%@XLn0J(3>R^06l2WJp@HCS@wJokxH8xy z84(dt(wD3I0vI7GEZunwrZeg+7HRL~%STEIP*vRd*{HQxWh!85@b^b8 zkD8)74#zl7%tPPZ-GY~y(xX>h&nwAyUuyN$t__Y@x731F<8{o56ENvd49&&8*=SJ1 zpnd6OTcICab^}uw-WZ-?X9eHa3iE0o+r-FG+PILhwzY^aVF1XuIN5p-EC{pqu(REj zl2q#QgzzIHM6HQIA)b^(Y@Hu5c|C^(>Yd)wwp|L}%z%5Y@B4t^iN`8;Q{5hzA+hD+ zo(UNX)Rm8hJQqZq4R^qjOpk026+Mxbd3ma%^<%>;KmI+9X?7JX}{buQdAwUL{u=b<20yx zgmMBqS7!W(@Wtr7ZhR}o$~hQ87`-}4q2*8b9y2-FG@WX;TuQKM*VV;?FZzl(AHT`R z^VX)GEz?bSWy8{j*`P|7KCqw-GS>2U4#F7u;de*-IxgMh-^Ff>1#5GmMfu&bl?WS_ zD(_ulkBIe0TJ1i?P9v_hX^pTk2>ixTz&-e5V_Ry_a zrXyMYp>-T1WTZ&*3oX;uLc_F2siuq5636OI?Y_c2i_!;bWKiLoGfme*pAvvgfUM$4 z8i>P{_eglST8iBX8n8oto*CK0;X^PjxH*STTifjm1mwTWgYJ8XX}OZbl{fF+A4Emf}){ysk~QA{adbHl!m z%YB|4uMYyO1J%Qhj-XjIAV1bmEhB#tQhxy$Ifnout$gEok;HNT-Xa$3vOnu(z5q1* zc@(sDIB|Bou!yg>71L!od8PP!G^#_@)wMHm6RmXbJ>0f;)e-~zPh0BLd)J&se%8qG z#GOwD_E5&eA^~L-skY1QEN*G;Rv3d4dA~Lipx~=9@V<#qeLzPHrWZ#8utg<8r6%Ze zw)DtOVP09>I8W&*xYHZnznz=U#{bEZaoaTg^(rZwCMH@@I^BrOWElV=@yV^&Zo**d z!@?uXPD15(?E3|6mzWqOQ}fYh#D$U&W{QV(Ov9USaLEZ@{K0tP6ty#Q!$ z;qO{WvK435?CTdGDrZb|GQ403p-r=&3ps(TnRrt(1evLlZpq@my8o=A|Kwm7s=zva zO?{OsV=@lT@66}nVwPe!m_xh()Z=&4q_*#%N0CMqSZDd0C&H}dtQ@Jkf2MIjt)C%< zzZtH>g|g`0sz(>u&WUoT)e1h6HJ(b95%1|B)crcR#@N}0Tu<5USsps?Cur>3&&<6s ztFuV*3SM7CNqMM$x<$==dz2O_wL$?V%jaN-!cCdQNP0*4vt)(%ol&fL!*@*lkVHRY z8~VRJ&w~2+hjiw|tcq(cv_cN*u!_k>R%Mh7c+rsmUoqOT##TS!g7CB&Exli$)PFBJ zoN;z2uG?OouS9&I_b)(&+T~{SYJ>gtf33P3Ykf{(8M0(dqI}Vt zx%@SaB8iFxSgbi^-2fyL8g@6RFDku!IFVn%c6ZycFnN((?jXU9Z#IJhjK^*?`kH_r z9qgLr_Zx##9Y!egw|7I_q~X)I>=3FT>8!;swUzf>KfHuCe$NFRVlleSYhoc;A8=^I z7SvMA><3FA$BY#i1N;MT>8gkaKsmZWQ8TvusZnpM<~mr%q8N?+l=u9a1MbGv6If$1 zy2=0D?1T?b<}%1Uw1C0ytyw#Xt3HEhnG*rJiT*|AYJNh$S#B_Hu_bL2|C5ro-Rp97`)@%2To}gp z*|Eop{^l?iGmgchV{*3Kf+pYBWjp_(!s@dh#2#TNwnF&;3jB1v%-r7z)yzsn zE9w#p)(6f>QY5@S#>XID7kOI#f~+GkW)_NP3!kP89}$#RkRt0XS<0@2IbuFknM0*+xgY*Gf~<39xVG_CtTc+oi+RGp55Zs$bELjCt##qqvn;8YlB<;Iq`> zxHb%RJY@A@iy#02Z_?ei0Freuqo@oz1+ffUBiE`0YhKQyc1#EC>d5NI-YBa`)NMdM zL5;~7MUe0Zylw86R$9c&&(uT)R6!$|Yx?U{fHKTLhx-e})&n_ysaUmTt zw4C&V**aT+{tH0gyWV|w;yqVqf@b#{D!kLz8wWV(hS8iqw;&$+@AR-Zt@$n;r#R!eYmX8d??Ty_$H0~2kKswyX zLCGnIv*h-dpo?O;ti!a)dss#JX``QILDuyUv)FXwfNSu#yrs3&=xf#=hwfZXUW_0t zOfEL;ae;y!sfmmV-ZIi#hR=Z_g>rL_us+tV6Yt=s1|!aFK~<)M?b_Z;k;(ka1jenaAIQdk*DKJ^d_Djwc^Cm&%qiV7e}a!eaJ8( zyz@M4Kknt>4^ZP+F7H9Q>2%FPvthKjmx^Ku+d54GwL)KKV?X8oOmW0Oi3VX%+&uA3c7Uyo0%6#SlYESOZZdDCz&ZS=siV& zvD#LB9G#AL>tYF~(v0+CMsk^`m5aBX#p0(@9}4;UF6S8=Xi{fdH}cdv!N)MPKm7|e ze5r+GbaDW>e2n$-%v428nh3ZeSmsIL_Ex1F>Z)6f8He;vqK}DFM}QUW4i$%P!5&Ih;b0iS(YVTP8c%9vWF1E$ZQLrS@=FlY7X9t z!yPG6f`Cpw^ZJFNbdsD&JVJ;#bBWzxJ%iAhb;%yV}KFg+vx8i4vgDWkhpT`&OUA;>6WBU?tIV*o z%QL&71DTkV|F#MWW}O^|HAyD?sixAR8r`SIrJBm^Fk-UdkCU2kvL#=Q#lm&`z5aBv z=E8LgTsG#gGP&|bkq;1V-I=0M%bS>5%{SCyO;75`Tc3#*7F{_xR-db#d9ZjbB2(U8 z(6v3JkAh=Hm9$mVatqi1gO zL2`}geO1M;cvn*95uhG%@(Z9bj;0hhzPlqKxP`b6+tCsf-L7m=?d~_rESX{{Iw^KW zxw#;BCVE}u<~-pSEu3S+-@zV9#uCNRiVn^g$M}Kowa;7-K{s=_5AMHl5I8)_qCG&- zV(wOUjaXG@m4Hwn3T5~F9f_-n-p_d^;2j%9=TrkLN)>M!D{mqp$tM=1qzjovC2T$y zi3e;w3)(&AvX%+iB;eX%ze!HFTtg`ZGUC0o^g!s09C~0`xa`z<`GJ4uJD^3AyFeld zf;JA2uF(vWf8Za_63kWz^8RJpqr3LidffR1VC^w1wHIvUF602oA&+BXqLsk4fBq!T z^F`@7Ve#NN+fzku+g{e)Py1U6sQCsQXY>|_{-9@^1{979$dG!`z}3q_ep37P;qWixHCLN7?M?eGOKI@aVj zpQX@W(*7L?$!5(GjW)l^=yr93r`^No<5*h)lCu$4?~QEc^$vr^<2$mv+E4Vg_X)WC zS>7GNPcMWc(z-1k5AyTSC{0|c^z@#=l3fHCMJp*W7VzvT&$ViqEZzlMq}h%aqj`WJd(utVc#ER zBtCa~B5$g|!u~Gl_^RkWrTlO3Gu3$k8o8rq}c30=)IU@TkY*PMrPR20{)wkBh34V>OVfSi+ zfe;h;X9B_{7%_qugiH6SCNDew)MLo4(#*4zpOh~ftc-&)N7DD`n5*2Tm&BcL9(#CV zRFP+y!|i*k*zdC>!re+L!hGhIGOK2+35L^lL{r37F}?3eY$0kQS}{>kR(I=h6jA=$ z+q&&iHv%D0d9#y#+FhHh-B>eUok*^Oz>%*>HTCpXUrGx_2eMp95CIFxqNN<#P6~f6Bn~K8wEVs39ylyxT`NNc~aDUrtvE=EfxnHB1Ssc%G*_6 ziVpcA1FkFvlwegjvECtV6Gy#KJ8q!5-uVwT)Zh{9_{``zp>jfvW~zlUvalitgXaBa zCURxSQYLaCwyU5ClKU#%VhMVKe=p$=kG)E<9PAhlBe%pNb5m?1N%A+2?rSN0_KzKV zr0L(5wM19)47_4;2Jnk7l)Ac^;fg>(B{r&j!!}jZ)8ZcPoowKBon*2kdW>KOE6LoO zXmOxW&U@zhokeXr(g$f#UZXXv;QA|mLemM>?Af_+Wwt`T?_P^%^;GP=&AmZt{k(qq z>z#&zzh*5z>Fj`6yRooCFn)u}9|9t_;PURzxa`iVx3%PIj#{yT~xu+DR_bC~P6;^a4W?EeUKOmaC#6yRJlgnlL4D8>B&cF{wP7Vpel3SMK zQF=K+!+zp%PY3guzwOWlQ&;Z3Wq)v-bN9MfEj05WJ{42tv&b-7unS+&mngQ)e47d^NX)~$StvpUyl`1Yd!JxyNqo^WNRk3gG zEbTd~D%C-0>6#ul+sHoN_f+z0s}70%n1Uv{wd?n_u(kZp3-NaiZ$!I=lw6Bko*1}X;KGQ*Jv1W+V3IQ|xo_zs( zjs0ITa!<(@4xQ(YN!Txzu8cz;%Q_InC9_zZV66dE8#a3yhs@Tbip0LsRJ(=E5?HUX zLGGRiR|Y79>t_Vew_;gt_)?C*5<6B?gJNnTNPpe-&HFcE5+8+Tc^McKf(9v0IrO&q z)=^#nVq3f#sck@`x5cHzY@(u_%wslP`EFK}8i7Hx@D)9C1&IC?*{gRm-;DNueD7XV zo#zyoXWS-gXCaDm71{UGlf14y`ucX8w#xGonxys{0@8*)*wG;oO)*={xDtrn$n(?} zIBW>Va58(L*B!cu_kYx;*z=*O_LlHSqGPeXp!IwlYA;*A89#R^UMOvkOL`lr;`wf8 zR6LD)z&;wL=P3#n`8x0tyda*vlz-L$YEU+C8TXDFqGF5%3|v&(VQrz>P<0)=_#uto_z;945Lm86m;y!>!=7)>BdLoSI^(hqp7Mt_gEI6XA^6l|T z_$0{GJt=T~z{2`>E?!7_>3)lB&Xf43EsS49@!;zo3w`^YC^j%{+>nZ-h4Mvm61MKb zj!+ntO5+Waaj6dJUoMsbnn&YCr2@x260HeTi_8S6&Trh?hV2YGK6Np7@Fi5n>Dt_~ zvc9cA>)rI2QVI<2IYaj(C~IlTYN?rz@3?ecgYCmjMNJ(gp$KkaNfbtWK}N;Dnk{^a?SNX%+X@n1S@jClIIuB4B9cW{0#p+HNIji+b8oe)NE1YJ`4O7% z!b5j2sgeOqcg|E{LE0Jp0Zz#BIWf< z-jDb9ok=E>xpPnM+?ix@&%CU>Yyk*CN~%f#BqRU;>0bl9AOH#g6y*Q#Uyt$+sOYHw z0TUe^4IK*;8ygD~3kw^U02dnv9|sEyj|dN+fRK=g5F3}6gqV=z-~Y25dn~ikWh$_UWNd)001%y(tiN_FVHbi(J)bvkpNi# z%o2nEBot&cKtV!AMMDQ*VE(fT{EGtlzg_*~NBxiaKWTJ@6ZP9KMC7xZA%5GFk<95y zaW*z_=L#8;;e45^qT2qhSOOPuLftoZ6GYwWRh#k0Sh78TfREunn)`y`^q#4TmonS~ zNy}4|3Dp$Mc%%N>hPR0Dc^U)blfZ4{B8J0H_yX2pC|p{Ot+s*<8adx#EV5~6ox9il=)@&U52aXCQJ?ax(Eb zanKo?Pwm{2?P7MOep({O@JulFX`N(VKjnHgOA^LrAJju4s#}xE<>)y9S)@FKd}bL< zw`_u@NG_B2+-;0niD=|ycKCt!QSyR^>X+g_saTiz4x0Emn%j2AIB7(M@q{VeA&4JE zcOw{=8kAA!;__mx65*it@g(_Fi!>hXsW__VGFuPUwcpHt>@7e}oMz~-oOW^5n{5p` zMddIPx3;xvQVyp)ZWz0*?m3^FJZcU>nNWM$E(I&V7uj>gr!PC$^>U#)^hcT1_snXA zYU)$P#`nv-^0RG@n{#`Ji_ywUMN{IFR2d)aob8)?k}z}=B%Ip?Oc^yA<$jqjDWbfz z5gAX?m7H+X#JtAjImCuljpyFh^;z6d9o(JoJ)M8DFV)nrLJn%Jn6?aVDif&~Mf*4) zV&QO={Y~uQgPvisl-p-UaZ~7Nk$ie@T6oo+@ZC?I*fniyMQ6s( zIZj1v2Pbb;$*RdTsw!>XF0?~V>wn{|U#v~6d-ykhVecn*?whDOSTD@93FjQAbnGP3 zeNPX)5^t&c6j^O1QTsd!lk@-{4-zoju|-(yP(;4~)>w_diSf47+B7&7OxY4=M{PMR zt}Ojh_|T-dV8I3x z46-A(K3Z7&EF`5_(j_3S;;6LT;@$b8Iiy3g;!+r*3GtRHAvo2{##Na zMF*mnwg6v*HDrdPu7ljyYPf-4m%Pug$-~wAMj|Yics##P)F%sW z8Cg!bucUvPpQ!VRJS$?I(g zsxwTfarfP2U}3l=#PTtvHQhKsY+^+2(L`X~OgN^DdB`l<7Gl7L&%!oV1OoP4(o}OK zMN1~i8(VX!baUN0DV^9^qzsVTMbP(fJo`BTn*{n)A-F5WxWTqFSPUAKL$wFGta3mx zDt_=sd1a~$Zc_h?QP=hXHJt!Ek|o!4HGA(#-D*~l%o|4$NNDnxnis%{=*=sYQ4~YP zv=Fkwg1JS9*RVBTG2jh?&R_%M8Xz|(yz+Y!o&r=vhQ@boWTw|7^0TRZn8fVOBKtLb z2cL11*d!)q?qapGAUB%CNdU=@(8Hx{OidQ#akncUqiR)w|3^ zuAmRlRC&MQOkBZVc^+YEe@jy7cg+=U8G5lv6qGpLT)ZsZ7UcWNOnXVGBRRweI5e?$scO3@$6y88cV+F%niwd4iq?Msp2E&jv<)|pO@&u3FXWOty=tPGOZhx zD11hb$X)=XCHq*dHuJ|mS7the0(H@m^70r3oh~i_*2Cn>yY@d=nCF*LUsNVnr|kqJ z-j$ZK@86d+4Yoo}LIjdbV-uEAbG^hEyo0%|d0%%C`MQ&YFpu&2I%zakb8_m|{A8Rp zhTLs4{r>5H*7en9fQJZ96~gGd^XXUePP?0<;2Jl@QF2CO;+nHstr8-t@Aum8ImP&) z2GPUygMwH77B^zR+r1_)1)iuY;G8B|vNGh%Ac?)n5q*Z{WEW=>gkC{Bg2;s z1aSU^lnz9o5+RUhmxC(y>DzF}{nj8PzSJv0J60G*Wuzr=$ECS+&l;z50?)IQJrYgy z-nt&+k+`AAw27)RoKzQ_A5k5`lT2W5%3!nB&XlW>0?bPWc<_ zQc*~CNqtrK3QqjwshM$%H*V5Wi?;GhHz?(;X-rLT>qx0b`Y878F6PQjs!<-t`y3F= z^>yVZE!PD^S(d-y)}=5I2T>p>5`kr2aqy6(p>VE|L)0d;5M+`p8at7lCjSaeMEh`x zmz!?{Cjz*HG)8H!yXx9jRGvZe!!1X0;%`YY*u?Y>@UWHs)_z)#Q^}#>pxsMJH!%m; zyNWi%b-CT*>ML63?zT}8Z25iL_NUucM{PjId@;C{=0Pz@^S>A|MH;E)qp9U}`NTX1N^;o!TGe7C<#8bF-%4@90;%-S4 z!+PnMOmx8sc%UYDqTp;Yx!9mlJL<)a*@dtS50UCssijV*gJ%I-<~4*D+xV9Q*$&(- z@;I3DS00N^g~qqcS5*mZ_kU%b=mzE0G_!Qs`kE+B+8D5VxZ4>riniMf=X(A+Bcte>R*Zk8P-636W^mEiOKxZC*`Un34R+9YOG2b3O6H3qbqZt+C*Z zdiGvLd)!xv7|EX?*E0`-Ub@{eTOzJERC~e)61ic>Z@Rlbz#<~C4qHhp!v-gIHwGj?(@xhGo|-Zu=GKAKrtEjU zm?c8wI^MqFjQ4&Yx^lE#_6zgw*Ro`jc=HJiw%Ssj6_aXGvpBQ>v~68h(yCO(8tze& z_TnTOdWA`3Ipjlp=RfqQPkm)}sGt4%cVVvrY#Ou*vLU=)4{rotq1CtvKN1MGBk6>5 z>N%%>mB72?n33~Z<;}vu@`$3z+$plWtdr)F1Xa`q*H+1B;FVs@^%)aG8#n>yknP1;;;r+GD|xSnTEgJmd2<35))H`+Iu z<}J?v>uQ;_Zg^LyW_kqq)NlS#5@cND-&iRy3xWo(KR;UATK7i*qI;r4?#T8U!nR4L_u1P@fCE>((Xq z>!j!$xC7BcCMex)y{?8JO<#g$#yshe7pG$8YJt<`YD>*e#K2S|v{|0^iRke0xuqnm`B) z@|`$3VXkQ-7PnkGUbHSzZ6fdXPx#upmDn8`RM*)o^Rs!cqy+K;C_Wg|awGt~C55^1 z>~O27prT%!R;1qyM=gM43^Fpbpg#vYER-4b1Gx2=zcaNpR&*7L%*r%y0CAC=wuNKa z*?_sX6J2hF*;hXe)sHU66!J3Q7+7B?2Q2| z=%#p`E3O@o6VgcX{9`Go)X2SUWyYG2z9hLI=-Gf@kg)T^0O-qfNtZiYZF1+`MN$XJ za6TVfu8+f_rdpDBNu+MwI!pmt5ghcmWr&JEuQU4em}ZLFRkIF5HC!=1cuETIrAdQD zWBW%LK+wlL(Ru{qhK!x3VB5!UnOrvMM9|o zWUJTfGKpY727fw>Y!oHnHZaZWMn34g7zKN(8Gk!(48KN&3^HvHNQ`dML*o@(73m_uRa3~s#CkFgm*T@mBHxQ zm!KzJKPDQ%vAe-L?httJ-Fb-eDEg>ol}`hg)`>53^Oy6()cd;^03gPDSS4^I#K~70 zR|TyVHazBm2f|{5D8}U;i%8=9icY4SAK-nwuek9}epJZ%XRR)NxLN$GM?Oc5VCFw zFQ|Y8FPc$Kj-dj8b*(iDllmJQ^$>pNw5&Fv`UyGW9zNB>Tf)FgD}?TfI8s*qgCJ+% z+P{KQyH7txCEFKu%q3Dkh~IKscdvcjBcG)7J#^qT$;dV@@B#FUcd@+| z&ml8i)h$r;XuZ+g()o8Rfb{OMp5HgLy`9rW8R|Ei^S7H-OWl&wC1Xh1HbS=eQcdiu zDlNsz3lBZ)CC09dN8>o2j*!R4tzRv9at_reM}b%RWz6^|-L91^<{fvpU!R5htA)P+ zW`Ll7QuC+=I2!xGTa8djrr%6s1d+>Zm zy$unqp5`ahtDbjmj>Ikml}lApL1^TfftOPL2lw0_&%-V)mkAy3(&}zg6LDwQ1-C%% zCHYyRBI~HXZu_;Fx+ek7HDMiQPNe9d#hUuYzglT7c+WpQR_htt1MOqRHUPGP(3RST zg*^=D`<>Z=8xAh1TlNS9Q8lcyeO`t17tX*(VNi5!r3`=Do?DlL+6j{E`crjJ1PW0x z@JJ1laGVf$STHqW=2Z66*h_}$Z47CpqwESP+7FQ~6c0b`K`ONZ;>A^?VDB3O8N3kw z3Cf^W{&8Psy(@~6$g~O;``@15&Pf5Cs?Y zfg^9_xKGXoc89eIh4`6sMMe6^xCBkZWY&F_`r!|v2iJ|yO3Mz5HeW&EA2RO$4D9~> zLugb!DC(olV_BK!OV%iFz`_9m&+h1!XbgI}C_XJ=e6Y|yB_2>;64z^V_R2OpR$;y~nfYuz<=6kMTe zoa${&wFYbGx?H=y${~2VzeBT+Pi<1`@SM>SdjWhPChBuGPtM5FLU>k_cCkCEfDta0 zZ@b+jVNDFwrWaQ5W+vRKRvKQU)s)6#c5(OMopGkfkzKp)J)rXJCv)O;c7RC{zb;9FwgFbuDnT_vCEYpo2B%~J#9`j`X_-Ruy@)!-w*^p zX`&A7KBf{xbqCJibqn^Rhw$gaJ>N-EEOPlv9!8cmq_uS1MeAKN#|el|EX9^pf)t3} zcVwxGENLvW6-rvabvggl&$JBI3Y;qf$q}p9h zbhQ{-z?I}w+Gp3Mu2(a+bWuH`~>j5^_nhAN3wwf$sPV>ayn(7@|SBbXu zhG?jq`_%ZNUBc~sww1HDCttR1IBA_)U1xMc=yyj`k6!@c4?6ZVKMZT^j`V~kOdLHc z#E*>O?B1?D_;*sj#4B;7mDjs44Q@|=b(U4xzdKX%gv&YEd;&QRcenbJScB7eHoG3I zzb~$6H?|a0;viBGg<`I~rin<2+~)k_U`E_h9PZT2 zg9m>Z7a}jc_SU`k*GyXx)0nYsxe|u1Je`EqJPrD+>-dLgD$}>PSf-;;+OnlpFE0NC zv5MZoD9dJNq7zJ}A!_R9gtf~6h^?P9vEw4y+dpk#CI}6ZcQ@Zdi(09@YZe~fm?>%V zyQ&0+P@`7DO;(c5Zq7W+KH!bXC|AFYD$tW{6kl5nh}B^nEM?aQ&sBQ2?^ztDo>IRc)^icI1 zVe<;zH`GZX%6@qKcnx=j3;=jc1B0N-5BYtmdCRiQn@Ox+yg2wB5B?T(U+8f)?Taa& z)MFETuD1n`JTnyB%d6JQBA(f*YgWvM-n+=5T37{SpExN)0$bSifdw1|554}mY|iLnomk3Ht>0U)rF)V-8Ki)K(25)@x{oJje_@x^@js> z7QS>m@a-{26|*lG60W|t4!^EmDNS?cDF+qYG^M10j8!zJGD8*aG#KwdeEod)hz^U{nH`FNK(!j~I?#l% zqbr9R`~|=v{NVm*DZE5P2hGn(A6HMb;=r`?msJslcaDS&4oZ<1^g;u3c(7!(6&w1# ziXKVE!QC+_GxU21c!ug~3XK)d3(suepE_JrKd5i?6lqS%;72nSc5$+0(d)zk)xWon zBG5U-E5&Jz8`=lw(X`orel`0N)y%o-Eizv%JJqx%K5Ep0W{no&*cxfD zl7=9T0G0dqAwKU_3>`?M|`-&b>ie<8cP*;AP$AJcf@We)V4w_$Rtju~? zK>oUqL)~)!)pO`uE@g1bAw|z;>vlwc#j#Luibce??42iH?IX${;`OC@&S0Hoc?xUt zrq32~5*NciC2;M}eyHvmE{v9Q36oThjxm2col*YSsSE948J3tca^7E%dR)7A)y=>4 zRZD^SF2&hspZ`Ij`c?ZmhxJv46OZPRDdV@OL~x?Z&imdHRcez|oe(ERJz!pR;rYDS zL&U_eaq-7$F~fYKSo0A4vT`8fKya}_=%?T!|C{tzu3NF^bww-ew)ipP&c%db?YVJll zr_yOK=mjtl6uPY6;3}f`*9f;PAaJ|gs0<=7R0{@~+c)YE-l}#imI#xB5w7glIOl04 z-~mep zSai}zw=<-fAY|959ua@Fz!&Qg$8n2BkM;C=olP~%F95#1?$Y@}-m*84w%3KwWO{K; zVUbR{UBE)7N-}x*mXjT5S4_WIGYuJHWW=*#JWh_d0fzoE5LsuP6c=6$WY)+PT$E4J zsTNq)P*C;Y;AkJEY~L_yZ;s7;>zm}6GQh-z7o3%)dm^XT)z8p$C2V{asiSjWVS;h> zelL~QIhB!^nkPoM?)|~BK{M@$sFeSezP;FS?aZ5bWI^d_o>2{`#nNU7y>f4)Q z?6?cV_4vs5%BYDB;<;*0FRh`xP=HRUCak6BvpM2nD_~G;Qd;HvyDQw~?WPm6c|Yim zdqvdkE&1T{P#ha}rjlejm3$)UoDW_X$_KIl6f4Wv8V%8%K{jIyZ1|_UegPEC%z74; zDseNWwXVnTb2Qj3FP3M@hLX9(O#SNxkqSYxdp%kP-evG;POAGRnK6`MzQ6AH*|VdX z`~^T%O+7RQH{F}+x;AsHrm+FXF<%anE~w zn8e?DXJ_@ti{>qx1%!x_lcD34X(jNS&)GdpZ^eUCh}HnA(BZzkd|)n9lG1P>`b#Z~ zAqY1|_tDk-@vj!hxJ1qN!QnQg??qqR^a+=IvO4}q5u%SoZUt$2ZA7fh}?E%Oi)e%o=L|2Idp z!I>z47sfrdI%PXfX~7ODuOa}ExG+}D=oq-p0IyGicR80AzO`n0s+8sCN8<+$R7Of% zK_oNssl5}#`j*FaIO-fXo_5QcJT+f4!cj|uZZ;lG2;^CHB>!EaWmHondsfrsNQI6U z07*w>bC*Ll%=R3X1R{mvI9-GgxZ!)@v?QC|d+G_@3ZFV7adv~US2m|yBb+@b6m8=Q zc5e^Gc)8*YgQqhG=EG0ukDGRJN}rWhQUWCQ3JPXM$UlviMe7jOmQDg@aHa+#qM}|iB&U6AJjPXuKox9 zBZo<(^x#E2Z&AzgV|eO#@RN>$`PUy$F@;Li!nHf5+2;)um@3r3AY4;mnY~$#U7O(? zC$Z)0Y#XtXaYh`igCC=_+f)i=AGh&v^JsPdKx<>94ODJ##pq=rLFMURZC(KGiI47R zLl|an_`cO1=q+EJJUAPGT}?uHMLgu5l{hMGVw1kH#P%>=Km9FbjGfoG-=PYx&sp3zkdsJwq=W#c1i|op28vV@4ozAXAO>x?rnb zRdE6gsyd$bzwNh-N_(WmJfBTy(lYE0;{szISX?6~cxjBaKC`EC9HxZN6E!Fb6`
y0SW4=%tu+;#YoTHH1(mT%D@`af)hZ_( zTgVX`eQx|r0=7IcUYYcAcIPEueez9CPvaZ_o2UT|MmJ$OqYg~N!DTyH8lI!NYoy$+ zHpkN#VxsjKg1gyH7dVp4>A8$TTA^{oSJ?X53-Z_l;QsZEA>$O+iDklLz}rh zAB6@Hy-6OxXKq0g_MaJmt+3oW?X^jR35EmgQ|>uJ1Xm|K2eJPGSSJ$Z-)3}U5#wK+ z2ym2FS}7!tZ;1^n34*vCAhyzNS@s_0gQ(ZI`b+w+40zN19zKL=D0U6m&at?Gv(zlW11sR? zi`Zz1k=BoJS7)oYGN31*6Gt!Y;3b!lB3SMWFH)Fw%QBuiUPud+RXMro{ZAr{$Ytev z=U+qTT?PH&hGRZReLeNsFQ2;fzH$MkSdztn;zJ*{;*zo!XzGwdxe6}VadE^il;28+ z#{n&zBW~NN_awfnI&2+~?`p8@(GSrSjh;xoet)TM8(US$an0P);~^%EQ9(6Nrz=;1 zr^*m1+RFsC$r#{iiF&Ok&5?=QshPX}LA^d5dooaB zz<`O0st(u@lG<<)KUe>8t5AQYl{OD&IIoG?iEHtQyTq$Q3w!zekQ36=KP>ez&#tWP z3l#xRKxvlK>`F4T@I2id;rr|b!sK8#(Om=dk-s^^W{Js6ClzfL*M%pwjvA3`bERL= z?~_>C;A+yC9KqFp0)G$iD!xq=c6LkKJ;_o^mf{mM!3sz(c>!p3gorU(Ff7C&c*$5= zqD@ywyfCanq-k)SQK^!SOdRF?S$9!o_nIup7~iQF&z9ESb*o?;X^L(#PrX(t*CDci zHG@qLtU4dsSbl%Y$Ch-GtnlkeWky+A2vTEoUb?;Y+`2X>*L|laaxA2>4I}y%kAn^B znJaC^Xny6UW2EqNIm_YLnFfXBt%>vRQJS)J9!ECSttbzVHyM3u*|rU<;ssP0Z7Wsx z_#LP{blQW$b{$sJ1f$rV0$9CJk59{~>O7$y#t$^KES93o6L^q-=fKtWj95pEoNp* z-xm{a$|H*kD?XLzm4;^htNsu0C%)KzNgUM5*3E_k>&&6~q+E+qy`xC^d)&lW%jTsD zuB~(u-_VjZ14%5)k9ayl2+ZI zB;jaTsIN+ulIXl>%*3Wf$U+`I9ES4|!6Hl41dMX)vw34>Ik(t6LV3KsPraSKPaN+i zRR6RDzq~I`vB1n~U;*tsHyt!}O0XORRqf3_QFuAGKnA~`Ke}g>#qrsU(f>}uRi3?l N^BaHJl>TM)e*mgHn*sm; literal 0 HcmV?d00001 diff --git a/src/Assets/ascendants/deadeye.jpeg b/src/Assets/ascendants/deadeye.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..f040d49558a9311287b91dc06a8218734bda3216 GIT binary patch literal 8948 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 Ub!xVAj4TT0`}h8>H#ZCa4@z63+5i9m literal 0 HcmV?d00001 diff --git a/src/Assets/ascendants/dex.jpeg b/src/Assets/ascendants/dex.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..a41e2e2615fa5b62fc03286c2e64673d42472f10 GIT binary patch literal 11848 zcmb7qXHXMP(0Ax06zS3h2_+z?NDI9~=!Arhf^?AH1O(~5SEaWQ5;_t>5fwzLqVy7a z5vd|oK;-fN&b%L*PDc}_2_PZ@0Eqq#zzqSQ1|T8+ z5C6?1|3FGk`X4CC$;rrplpqk05(orQ-=YRl(NY0{H1ssIx9I5T=|I#Bj0|*)|JHQ> zDIxk#l7y7=k25d8z-|AU-@ zl#G&u81NrenGW#Zxx}Po#H7R&z<(@6#3ZC-&=AKnHfkzVdQDcX{{%K$*0{n0FfPeDDL;&)CG${Rl+KI?WDalAl{+|Iv{|qA` z<$cJ&$aGhQj8EJcZs!x3S>7}DNVR$OkepfVDOlo{@69}b`XB#4R(gOEK)JC`vrN5D z*R)gvrSo$7&>KiC%6FdP0a>ZBSG)nFz4K|SbN!C|jpn*7;HmG5JAn8>f)tpm79!;L z{FQZoIouC6GFELN?m52!ByKf&3Y}UnBeYmb6H@KVCGcEL&*m4t)dla9_GHX!p|mZD zwKr1xHaUqOcvF~5HS}l9w=`$WqfJZ!pfeE< znN@!Cg;-~mE;Z+^^S|Lsq(!yv^Q+eRCfL9|EkP5fa?q=GYMFI6?a=|4s)5WPl>6gx zZ1FP+AEA%xd@tsi75Fi(f9uCZ5QgKo9ooQU!XajNbLNv?^e@ADAV3S5Em8omH-x|P zd0qiU#fK?LVbfweWI;63u>4%&EsTB#xA^p(#S@GSYY&OSSJrKlVLS2h$nCt{+mTaY zviZ7E`y=G&TboQlJA*M-+kp>sV~B%SV)tcExlqc7+UA-EO^1IsX|-h3m_a3#^ClPx zY>Hd5q#Jd+w@t#H>e2VMxl?qgD-WG`MOoM&1)-Yjqk0)}<7=D8#dWtoo44IdN|oKt z8~D(t?oh?w*GfESs;tw(KpQ?#&h2hTav{S1F(KE^n=n-vSa*u;^iR?-NCf81(46qz zdbhhFbVr3Jf^ti6`SSEj4XgP*@wfnkvTKr!OMcaQF^w@_uu6^MC7%5SnX|WQJjW!F z>7yd1^OKb}QMPsk7VSr%xRqq$dsP!IG^N?&g?f}Fwt#nQ-b`-}>T0+RUk=zVl3=-P z-?o}*rEcn?{(52b_9`GmgHAHx~E!^TPqa&p$M~CcCAdTJh&32rQpu~!c6GaoT5KL z``+$5`N8phS&cD}FK56H2FG9#-nXJU9-&eACL&^9*@9t41E2vVCx-2;Hv}*WCM$Y(F7VN3kHdv+cX&0wzc-v z!$lC^Uts*dL^#6dNQ<`k#sMT00B$L6ph_6mYnbHMT(b`Br1(VRAbMC|hv}0Pi=(RF z51$sz4QV_HU>!8j!KFAxg#IEXsTs(;*$@(1l`XN>gHe8i@xzLv-U~=P{c~R4F-I%2 zliS?Hq$~u4#|5()Tb_GW_UVA1GDPvCpAmK?s_90)yv_cOH5Oi20tjmh0)CzS=sz+D zP^AWcH1;UAnknegB+ql>TGqs4GDn8P)j#pa@U;+!l16#c&8rB4W6rnTPDS_Mv+6)` zb(&0|wrCm0fkffg7H=Ctl?j1*r}|c|AY+a^JWH^p=4MFq2hOby!hF4e{5@r<%)g_0 zq7vV(;ibkJat5ac^`7O^(@FJi7=EW$y$sS!tw$}0x~<6+>J`SH<3agnTfbiaIT!dX zMCtT%e4Ytt&@lV1A-N!go9HSLUy}B57zWqP{J_)bIeFQnMS8qkeeY+%FFJPl_x@e= zoYXO%2XEZN-soCMhsn-Net+89R)!SpUsMEGn9fioa6Eyl=1A3qu3W3r7P_0UalV&~ z8vZgx`$J+^OfMPhghmMTb$MnUp1_U@KHDO^&%p<(O{(4%j49OVK8vpaR`t(HupWyl zo|!(6oV5Qw>#<|t3a+R^c?w0v4To~3g&e!zVYh7W!_K4o1~S;)ir}-#0Uz;E;j+qvKK2z+C#XC$LK|+H6a^JIJ9Kq&e zpU&T;x&Yn;x++YzMu5^Gv@_DL+@XK+pNrk$e_|1MED39^zVD{fdNvY~h?I4_YhOR` zn(OVpjVTtj0u?=7h1e-oF# zcm`q57kpXqwG3b5$O4i>lmY#_ZR7V*LwZg<+yvyd*+jGj~iQvpBYy8vO!k|n6IER81 zWak7gN?S-q87?FB@WQvIpM_#;C3l`~2#c7h{rdV*1DhT9c9SHI;KvW8@Kok9B34h2 zLVn3H*2XS)xjxEa?~75eZrg2I9T$dk!gJU%cC0KBWiS(%WzyKmIgF%zmxB&2c>}mL zjarn#;hrKld$864Fxm%Y_~lo@SvWu#t00hj?&@@P>6KLirNY*(bjr+k3qS>pBuZ-2 z7dD%h9huY093B1PE8%jh8W2f!iyqsMlH}lgn>~x*H=UCk&usw=d)XeL8J7MMZ%HjA zP^JfDmpSP$x#MN}RP3H4sq7Bq6CPe!G9-xSI-dOXoK}kYjU!)w_o9UEx@v0@d7EYD z45T*ONZ@Ybv%aS#d5Z{#cj4f6n|05#Zz>zUDZX{7;|n$mp3(BMTPtXJSpq{=F36Gi zQR<6Pm26&=?2*k;+ih;Yd@eHpGc#xDo*dB>g)AvqgrG=^=Zt5Pi>R(|q5F7F-Xd=++t40;QnBJDOiDa-= zkFi3O!oQ)B3$j*lL|hhV(kwdW!07kiIoHn4Ij`tb)4C#$nB4hNf0I*?gH_u`D|(>K zW$W|At~vTkzA>hTuAu6>At;nY2zJu4bO8MkZ~rE4wX>`5XW8Gd(fvgK{Lt*R*@+=3 z53Z58P|f z1J!ogNH%hpfXY#@s2@`F--(GbP8dr7k%IRPUp4BOhVey@?R|cppO_+azIa{L`J|e` z^^M|P1**?IOhM#GqtemXtzR#^ zQ4bfKGJU$4L~}2p8S=~O(!vD0A_#(h5H=pVqWAq&F>M(RaUQODyM2zk0qFm}I(T9J zYn$?uSfu{KC#jN|Imic-G)~U;3S`Lw(L~G03nSgmkZRMoMG3hI5aygo;GJGvssM(o zZxbC|BPxNr^^}lA_4U0cxu4XQOFPqIty+}j;`~GSg~#-t#E}q5(Q{0_XyRiF#9**D zxb>Fs(PS>axgeB+jiP#c$q$g***blDnrpnaqTb!o@+#ag{2NA-!NtTOFTwY*cMReV zgbGdx>i22C)*44n+)m|3O|KWZF;Ek=V;j9LB@N<5cO-j1>IpEkz0r;ddO$%c6GL)R zV|xHDvM-xo`1yw_pM+KA25=u;UmfnnF={!Tl^4Xcs&*uo7HVHD6Vu+tFSk97yS6F4 z3@IglZ4$0#_ZsA8m{(oEw!#?m?=?)U8F(tDdPy&+F1hAmQrGSLCf7RL->nMEPzi+v zf2gTz%VNrB)gkYnUNPiL@qM_5zV~wXJ@;RX?sTG^E*5K3uTlHZCLocrR?l^#bLD7) zMhL(QJn-p(4uVTU6emgFsLFSUwme&t$*sK*wt3pQW@lpU+KOVrhDc>{N>I$4Lfp89 zSb=*El8xOzQtZk_W~Vxzq|`e&QSWrMei3?uCHj$5&BAm&0FCwZ7~&V>ZCvR;8kb*T4a!ZkDNxU_+a3VT-Js{<9rU$iS52UgHP`? znaDTER(wXqpYPbdk(X)jkYmg_wrEC+bD)1e5BVxQ$)%SyH5Z^n*9UX<^I4N>U?K=X zX{wxeIJ02jBJQHKr#bMCFWv_vq+4>;!q?;@$^D)+xkqX1E)Wv5Ww{jF_nmCG5=EZgMcs8D z9v!uU!YJN}6AiqR?J%W;@59Jkx}xwV9sY5-`c9nKl=RYWeny1Fd!6JtTU>b;R1In2m(xV}l`)}i zSJ|6WMLWQ^Tv47|DG`T4=i}a(NO76cjNE1C!c-IyN^dDBgPB?yf}$u5m?LK+vzI(} zxm;_e9=G}l2w{t#V+f2MfgU0UsU~&qqF3x3Y2ThI#!q;vgS-^oM?f?gOQ#!5HT5u# zz{^gzPiV#Hkc+FV^Ncm(uR$@%aYMey_W|z+c_(EtCYu}aEaSv5wWRCX%i#W7+<$JT z$j}tSMJboQ>OXnV$dL>Ay_@^Y=tr7tnGfJzZhO@YAl((fpcw@AS*~)Erel;SZ7DLH zZYQ(_kZ%Ms(%j$7zT+f6z+}SB$m4ssP;?vlfdbD-edv71X;LmRl7~l#mX~m5uC-ve zucxr7aIRDX;|m(dRQm#U9(L!md|lL}U$5rG+XG`VJ~He5v{`4niPim>Nu~SmkFhJQ z0fhGS!PcUeWFbm=?VL3#{DY=v`kA6Y-0+-=ve2yJsv>7W=tZr;e8+ow zU(5p|+XGTQSqZuAWvk9GgpA0L)E7t0r}@y z8N%rucSv0yl!!+%RO4W79$?7ruu};RC zH;0+m%k}}yL>1#*JbAI1(`fs`n+93xOLg&UsrQ;uyA14EL_oQ3ncYpaOdxM^6&}Aa z_MIgLb?!LEeWnUal-VkbgASSO0T&Q z7z%HItu0Z8xZliYWJ~#T8o}pNZI4Y;x70Uo0Iepf^>!fsQ}uR;*pMnB{%Om?j~&=` zkBgD9_Ig%?VUyyqs2pfrF3shPwENQ>xz3oFz}K#Q!_pp%8pg=2IVR6RqRD9O;kG67 zUa|o`Jf-Mpk{cr z)kEw#nE}Z=V_!Ls3X$YH?V`Fv+H!G$TYQmId1s=16mmpDUY69PE$AJap2l1ZGt=1i zw1Oxpe?_ds>Z>(PrQ{5$6FY7PMk{BIDFSVW`Ar4+2ua&5ld)wT5PmII$`>s#Y-m`SuQy6awHD*0G#(U;W9g- z+uv^hn-V?u$RO^BPI>I731L-KZ_M>$&2u&tu?r$+xxk}v6m8!TxdF6-oV3bq1B*S~ z%PYWn>Y5l=J!VSwt(&a*<^HfIlamZZWt+Y0Q(v@dA;ZJ3ymg<$jw0U~7!nbg<6JLw zP0LbeZM=;Tur=oNi7y*SYg{2Oauw-iPMZ@XT=)5-nvz6IEqncqfBs;1u0qUDS1pJc z*L@cljAxglu2%1yFHzA;s4pYJkwPpi+ezuaw!DCJwil4u%z2Y0k*4_SCKJ%92^f{gJ?+?$G^5 ztoS>gBu3jpHM6x|@cz_kF4eUHQF%><%%~37>>JyOF2(HX;|K}<^^u&Y& z_?#aTxjF!oEV#gl5!Urw{3$j}tR9{r85~}0qjd)FflEaolx8S{y(G!- zZzg#LvLZJC`fzSZ5Sj3tG?3Cb zr4fs(7(lqm{tutSYf~>G1-hB&Yt>1r$2<0_rTM%@wd2b!Cg7Zy52YM03nFvvL2#y` z=+q&d<`S*L(!CmpfD@6a(qTBRRyAAj;CsiCZkYp8YGOg9~; zk<7&-1j(2c&g9iGKNWF-!M562?t57g-x91v%8pKMWYwSAYrfSauvF<5!j*JK+^nz( z8#2vfwEj|=S?k-PbmPs@C%MdkhZ&k-UIA{u7PT)bXPD=6B;BQcBfS(qcIv z7BMa;Bc5kYGFeThO{Px!e8Zl}`pcE=I_nv@C{TxIW<*?r{IzO)fXRA!H#9b|!XcK6=ySBb=A;BAE!OcZu`~ zN5h4j;Jo4IfUu*m6l!bxo-tD49o%;4PS|v1=mcg=#MC!ex%`_Ep(dGJ$MBf8MufmX+Qz*6rO95bHN2OX8Qc2b=zHG=U)Q7`zmk_+?9sI#xzR{rKz%IeFTTOzm#dK&6esL32=S1> zo^o48*P)t-Tqj9dQ7|y)q2E{VNihf3{@!`ahqfc59jVv#WA+Ho!nn0AvCi8yn2ibDZ>2y*0O#Wdjw4GP$27o9E+=*R$W92QT z{faB3l<*@$FfJk?Ks9Nx+!?W*L(pJKIK?!f$JY6P$7{h>@NM}b#w?g%mZ5z~PK&(7 zl+$h(k?^kcuAX7U$E+%Zu*6HzS(W=jc(&g1R{kfeB7hanP+R&bMi;gUjjy!&g;AWl zmQl3^-4-^1I04jUT(dEJ$fRXS$2*q6U=z&C1|6_Vi`X~2ozBQF5f)rrle=Sr04em4 zwNDPmAcC7WJ7ZQ2w5?zZTyO)pcNoA|n}^}E$NYgLuf_eN#|&7Wd@%0tNvz3V1~^|KB!35SEDJ@s>N(v zVC=>lOk#L-m!QMX<%HgO=4-NEVdG#a=VtBzmdG*if;2`LB&X-o^2jOB+k;Hyf8y?u1v!Kt{*|Ziwn8 zT}940fRp69`||g}%-;1Ei>h}?{p&Bpi~Rm*{o%M}ebCIVpvWiI8AF<77PAgmX9K4n zgk5IqS>H|vPo%Q6MmgFyQcb?Pj9wEctdlOD045#h2HCh#VIih0^Vf0_Jw^tTRld*< zL;Z?xa1E)b8a$p8i+mG1Cy7?~TECp@teM}NuCki2hdp#{a#WxftEwl;<%}&Witb-A zAYTqQ7(df@3u2;?jTANC%j-zQc<cNsMR>!6l8F5kPox8PAVL4^a%#?q5 zu_?Aq$@HuOFsr`4{x!47``U9!Jl1r|EpC3^>fuv^rFD<;<`XnGj&r5dH%i<)#Bvte zYCxbbV62yotzv&k{+h)TH#>R8_bxrHqUBgpDw*e&wjG%Uj`<#AO8QcE%>K^v){ge? z_agV7=1n7MzqUu@<7km=$Y$=St`uw07hNlikr~Glq>S{2H(K58_Um^SXey_2(SB z*N{)we}<^=aQe!n{|?Zp;bI`&e6;6YyU8@bmJ!+PYlLTr#%XYFq6ltij@pdh`^5$Yd(J4^dtZRM~3+ZbJ7cJLbYVN1EH)LCCL8hw)(=G=xqY>&Z5> zn^d`VZvJAOERXurf}=bFH4!e{)rbOo00ezSm#l&%uBI(hKQ-w-a@*<_(R#x$<2jRP zkf@hNIQcR1)IFJBn7&`C9x6xy{kxGpwDZu_Cs$n#2nj*3`~ecHN1z7etZo2~io-Vm zG;;4l49fS-;)UpC3e-@lmBJjP9dySCOwx5ssAb~#B8&_(>l6i=F|$x}sK)J0z2Tzg zzeuoZ)Co}jDM~a41cHlf0gv`)+#;Tc07e3hJ@}PSC!51nuNj;hI`|)~dcOQjAZDAL zH~Gtyf4&X~gKj~$g9|2pT$>s&s@9_Nu1lT5OFVY&U4CqQxy)X7o(0A#Q(Cg6g77UecU$XeHpW#^;eZ5mg52KH1wQ!2{-x>f!3Hm|q{ zdwqFEYyAmV!fyT+pHa3y_k44SnX=FM6pqXn zyF}`Rb~L_sm87Eew3=R}>$P}%UpI*D)wgkvr?;? zN!5B5V{&7@jlYkqml9C-=(})i&CIQe@&y`W|;MRuzEw zCGYMcB4H+4sAUMrn}kqT%OxgpgMd0ohj<;v?_9$cql-(G3+vTN&5IBAWrkV1%Jw9K zQUeLOtS#F{o=88n)SXt0Iu1qqN>>s}G#{o}r-M~DZ8C>i;n&ja$rBOz#)E%)t1 z3#tZeYrzYlvweOXj%6~ImN7v$yi|hD+SKnV&(v=;#CKLoTj{lLb3~G}l84)-6FN+z z?7?+Nb#?WZ%HgD%V?LoWK->7+*EBx8S-wP^v>{sW@PR*`o3*7H#b8r)?LGm;NfNzc zh>KBtds=w?-m_PhB}2HneaW&Uo786yb?qjr-d2YhDk}F|d#4U7T$OB`vf#eB{jM?l zHfCG-+s;ZsBmM4j!?Mug=!bu3lt}F|xB7Q{TXu$;okGI;a{7QS1xq41$R|a%*N31e zS~@WtnpeEPdQGjxOBqR*b<AU|TkA&0R|CQ;Pl~ zs@|9>?)24;^VfmOYE8R(ts9O~atEp^6rB+Y@$#H$g)7_(KN;2kGA@BY5rx7;EAGOI-TcoD(mt-McEp7K+#5ByDC+?NVC4pfKrisx0;F8}A!t9jxF2VihATLd~2ooodq5;hYGcoJvxXudMqA zx)mOx8=>QA--Y@UgJH2oZLRaD!2D-dpl1bt@H=(i5td25y7%vKw$rs_W!&;9Dnjvk zvKDt0Cxlk6{+apWtlaT04kUXl(2KWmcw^s>)q2)BeQELo$VY7YIxY*j7wYliP$K9a zd5B{aTZ{aY&%9l-6@^E7mf0$V`I4!Sl;gi)vYVBibTzers5l34X$g}qZj)#)QrZPE z-N=LB@R!&FfNE|*$ux(?;0<8(ZY!!=Q$f2_<%l+sv55mslkt)O=9UCgE3f0h3@cT4#n9@ z3ZHLo1kul)?anurti+nH7f2v>wUvF`bU@JEnHp)U`=b>$3=Gl;7KYrngbzad zR*o-3zz}{M?Ir}%{7L%d<^=*h$q-+2jLl8dm-C<6PK?M&3Q7JzR?gRgOf&2l{nzpo z-b@dy)r!~7G1P6emI%du9;>uMKFk^PmE?RdZW{k~oS4h91LOfN0aCF2O!1fDQGA~@ z7f(KMR&(2?7!#rpv;f~2sD6Yfd;e!&j4{bd($pGg`6ML^0k4SlJo+lX9zEmXDP)t^ z8ld~mBb!83vet0dj9G9i%_|YINnvFbt3&Lu_ znz7cii}JR@SZ{_t`puTL!DGS@o7@dRhI?uGTY3rE2lUc+H-@;s&G&?LlWGW4B=n2r zlkJ2K>V1H{mwoAl|AZ&Ew^^{J>gV&bs=Fnhlaf49uhsm#UZ}Z1jMkR{v_wip0pa6= z?Rt>gLG&@%;@sU9NT+UcVb?m8;W$Q_r4$R{$ym#7zaz+F&j$hr?%+jB@&EEX$t|g# zT4tWfmTUM^hOm#m$aTy#qWA6liCF{0?7a47#G#{7VzE!jpU5ekT zql8i=MtlE`n%+Lz7(Y2TaFwbAXPr|2>vcw32G2EbU)acS$;fx_OCnwjLqS0pQ8L?0k z-Qr8f1G=K94tMV2oxlv!?M`4VCEnd=R|qjLIYE<)hi+(DzzKZba3-K((;(pBiOlv~ zrx(2%S!WCkoTQ;wZV>Ob&~$K%KIb)(Lky=ww>{PAA6@V)h3o-10>&fgOKTvm`7&^> z-epTlQR#k5h4;VEOtL~NH-z>g;`c009ApT|2=vEymIObjXnRSRI-M2;=aIrZSFK(I zAp(6^cpU5Fia20RM3e5^FTB0F7}BMPX8f!n>asqhz0%%NreGcQFok5=(tPa*a-mi4 z(HIH@G)N}rTVhR-o|{h(%evH^bnNtt=O%e^h$CJH{rDYNi=IXfDR{W}-)cM46 z$qY(HZ87g-)LqNqXr0gTU`8eO*KV?@OKYO8W?;E6Y4lf_b?_~`p45I@r=zeIJ(i~m z>7MK6-d4|@uMw!BjvKGq!GIN55r(;m3bpfWg>Zw5cjPVy@TfdI%A+LONmI6$nt?2wmJ!1@m-Q(~= zx7{}`1s$OMc*ECz%pFD%YeD_Lt0&<&>N_wV>gcZuqamCJZk@}{>dMlKYsYsl(86V| zET@WSpGl@HWAY0VF6G3UK+%YZe%pu4Q*( zOjI{Uv>>Z(IiW$bI-y$%ErQmBx!(q3zxi6maij9Q;x+8XtLFwg_g-+xhL=rG@47gt zZwo!;43dt@CsyHzkU2mS*tW`&=VzYmF!S20esg|JzhHJuBhG~)3-j|I>W+1zi z2&`;Fq7y#U_q>o|do)eR!S=PbkqN50jc@}_@EzOaLsJ{K(Yvin9;?m1F; zVRCo(nJQPU<@Cq$-z|^Zx2I~fbqL{+Y(qlcf^wEwkvUPC#4yf%s0^1QUNYt=O2Oxx zir^Q~{iXF_$3tMP0cz@i({se=eIgn58T7pG%D`BJdbxLf1EAo`%WvBvd4jc?Fm^q= z=n!t*bvo#nYlDof-K|uE*@=Csfk1TfVmDIL1l?%KwfIPyOyGcJT%k#$wuP7=sMAf@ zOhbQ2dNDYg*Y3V@PEAkTR!h;oi8}?Q5h-!zGGCp{;YH;QAUQf;!(o1c9;fO?Ow#?_DSP)f){gQmLCVTTyNXYjsh80dQ$sD9J?NZ`!5j zW{h}a|EFKk-Q)^mA(O&ph*+k-Z=Y2?)X7T8tIR>E2-`Y+%XofBucfIOtJJy3USfn2^fJh!!c8)&p)PjX1B93lvD7R%ytGZCx*BWyx-RAPVj zukG*Z6r&nwMrGa4vGp&=%Gqgnn)*9kzN8MG{J-_QdH`X zPC!Bt1w^V+MViyM1pq+tZvg%- z0CWLVl>fv3W~zUnzDE5&&|SMmbB&%32&AW@rw1~!FajBv8R+Sm*qE4ESXtRvfs7z_ z5G(t?HS7PBQ2dWcMNRjQ$jU&^@Nf735r2CCY;=IcYye6&3Mw{=zaIho001Qw z#XkW4e_W%brlF&v1pH5`$_n_O-T#4->Kg68BNUWW)HK)FXhFgNb~(D6+8mY-I7Q@j z&|J|N@NLAy$$f6fowBB{zy6VVDFFYsX23rxCB-$sKbaES{}fYFQ_|8>Q~iIoDFBqz zRBXZ^Id+bl+BBB`bUuj2^m5)tpvxwIfpz_x?mYau|CbD4{CAv^jfxGR2{637C1UyT zJ7D2x3=o)jbR6l>xyv`&H`>1%kS^C!}o(d&|u0^~d*Y$NRZLFeV6?S}8_W z+s<}yttNV-j2rW^gWADlld93on1geln=0v%YODko*2)ZRAaxAg=3T}9PXY~eq5@2{ zL!%DU?X1x8#YqVayK#A!jVX_OY{paqM}|dbdMK=E?;bFkzs2D}($hmN>YxkOE*%^$ z*c*o7vf{Lnn9;W?!{44b->#7*4~olx#r+DuqSmki?l0GbV_rV!vaQ-WK6oKzf6N;+ zE}doZ;-m1n4SRoCfD8Xtse{KNcsE1DV*#8#5Xj zv(UKx7x43gakzb?@02j|bCGkcm9+#PC{99ESperty>8wSBVT$u4ZU*2Lml;FMqP7K zgRp8S72Z_+I&2ubgxpF(9%dA0Em*xY23n;mw@VBoGmMr}#BQhw%{TH4H{874WKA*? zn9kd?JK|MU=zOT=+9|<+7C6Hi+Ns72XB)$n;eUFR4vf_|qzDfe+*naXVKJ9Cck7+F z>U%v$zdMJ$(z2En12j0=FCyth$l2BDg94s~v@|qFcPcYQRju0b!IwH}>lRp~>Gx%X zwqxBb0pgpwa8^Gh9;$&D|3gEgkk=0L%`WzHxivq2S8ri?rPoF=-m@MS?S>xt0CoG? z1V09WjieR=CWWK5EvF=knM8eU5YzI^V*0l|7&}%{t4p|QS6t{ix-v6R2=Sd7{Cpo{ zK~7Q2ApiDR3>FyTd!fYd%4?75+I8!v1Zt*=Sjv>PhY9$9;YB~5%ox6L)|vfoVNdDZ zoezvR0(?7K<>L-J(Uv?y9CoLpw6C_HO=e>~icYnHsh?{`L(ivn+&o!YNMUVm%8H1M z?6v;%to&P<2phlb>Mw;Z$FrxiUZ1`+zZ_;yH?LpdG@kJmm@!F&Jvc~wnu#??(^k^; z&>V`OxrORCR34xqg`=O-i53@Se9}qqoBDp$WtVq9(rqSxDAp=Ser9$NI{PMAY3o_0 zc8?|Z1s8NvU8!{~#uvZ&6HcmkEBy?7=Y)6U?K1EXJX43&T1b-~5^NgRwhY$QVhBIA zm1&?tY1*$J8pwCE^#28nljN`6+7{}zAUP}NOZ+InDI`iQwHmRZIPJY5gF_I*j-vDC zc-GPqG+B#&@Q*)=k=I@52Wj5!p3NarHMLe$C*=eEi#3&VEi40Ck3-Qih1F2`;)oE+ zEHx8i_cav%8t*D6F8?xWMo8r_UWxkhO(<=ZxPX}CHhXg;?i<)r`G*xbI(pUq_mPN$EOM4$eS`j`bUImPSprV)I(OWbh2ffnQNY z@SdO2fXTr{SOe~R3tgGX3*3v$+snuiM@tF0C)M1jc^M(4^er+XgnBhL<~HU)`D-p< z&`~C!DJWd`FW{q1$*_LdQ1zT=qclpozxvizK}H-X@`uD8q;5qVvu-?~K}n5zQZs)8 z`Eq_qW#{tYWGAUsq4q6YI`yu{l!wkwzQ>IMo){IYREV*zkhe+dUw~}c-Z<3*rJgw8 z?%Xb|!+>|!;Nomk(bVH#GoCDVw^Y7kC%^HkzZGOx#DbD3*tq&TeU!Ea z>A_eC6r4>p-Jn+MFz`&~xpuIYjiN%z=z+dOJQovXs#lz7nO_^BUHT8c{}Ca^ZwgdM zSsqZxqS|5Z)vx1I))B@b0@d8z6{tdOY#wzO6vOu%DpIPD_?%}FK|?a2wiO6am0sXe zdtnBpwn$oe_s5jlbmJue`V$xHf7iR zDrKgJ+U0H!O2%ZkWj4;JPn&k&Y>*p@r|=q!%SUYEw$ z$h{1u+sq>-!Q5hGsr}V#k6TSJS-R~zyc}SblxS1B#OoNWSv7}!zd-1S$q~HMKVf^L zyETk!>J$N-dbb+Sc$ivU-t^6GHRk>6Wqaqz+UduePTTr(>D$4(!C(jE#zAX^VeT() zZ>Sx_*n0|DSo5oD|H6ESk@SWe7URSjzv{lADDB}b|JI=%mfJV6HU#P}B;u4$0xsBp z_gp#qJ%f8)H!RckzmHpHcg}JB$p%G9H*`U@t5z${GG?`gdJcyMehbJ0*#u_9Q5ABF zsW24hb->b6#NG*&WOk-rK4aSvS3 zJ3=v~R(Pj(?fk+PRAQRodXxUm_nX!hrBn0x=GQg;rZ3K?Y-Q!6^DMdsY~)ghZ8bEW zQB@WC#!;kH-6Z;Z1YQLMGby)O48;f)6gTIzi&NK2e$?Be_YGb~mK7eB@X$)!s-OS; zY)ib+%U&b$E>4lTaMB}Bplu4rWN1pxA{_8%evIn~7XIGT%bZzM`9xUkN_t@Y>2vwo zh2|q!BX26VQZFFKR)j~S(NdXqF8`Id&RrKt_l34on1M#vA*es=FTm#u z(w1+p%hP$ni@{%AdShbg8T?69I<+i^H5Ukh?J$_^F|n5r;jej?gAZJsb)vq8vHT0j zJO7soXloR`LLFTAv~Q-n${DG;s1`e~n}(#FR&>S57uS4IZDD-+8qs)z;_wjw9ik65t6q z%ECP9d$ab@b4k^E+nB1mpSqvf12`u|FP)k}<#`p)=owRr5tWU_hC=*)az1`2WcvQM&b`v90Zl984`MTE1DOJRuUrMSb2HiJH&Xzai9vBP5aIu#utt+d1 zbbc&g73(uAN!e)LV4T}p0clr%!>gXXD=l?HwTBy=4&7QaVb9^~xZUJ496ygB);)ut z#VhI;z#nlKt_fp(igRLKYz#sf5aul4)B&D*lsOaMnY21&xA^M*P&NbsQ$@dIUxK>n z+DUh$xH9Pn(NJ@F&g_HG{hrmviaCV@*m~ei)EmSLGgL{fByB4vxU%{R5v47_ zmu~Cv?2h2Qzkuf8>0OhvCTW{XnH+Qc`)xOQ#wUFy(v_S(;9nKb>%^2Tf63B=jPJ#_ z&ohLT2UoanD!`goFLQDhsj&THCM~lrT8leez~Rn7m#xCWYnbS z_YQK`_DS;NZv9&BW{0+_+Y0`RPk_&P=;?JMN>IH+hvUV>j_;Tt{itQs>rXeom|pvj z{5m5a#Eiql#Y>4Bla>oa>E%7hF7A#R@k-M6GZa`*M+Cm-8h?l-wF(xN6XYXkkEtfup z!ssXQb01yu^7*hp9?(ctc?o&tVgc4@U~%qKCmNJ^iBfQD08bB{$fZM zMor^p@(bpNJ}gnU`tG1(J=t8-$jb>OsG2!_l9Hc29$_2o5ek3yFJxK`lD7Hc-sRRE zGIVQWL}$~sCe1>tOR8O%CQ4}ir?P&Y+*f72y8EYi&wy0*j#dqF>5>cZS(I2U?V z+cdq7D7`WJ_Z<~&@0vO)lDj!B_?N0iw~>1GN|LwwJL!&!S%?lze~nuZwbj?r zGmkP~A4K1DM%O%$r=OWwqu=z*7vO}l`Pz1)-J16=0NH})+NxLGN`x2Ho<;NWj=p8q z4WMaal?LNBWxyxH4vTebps(6w5bVr{imts|YcKo)G}Te$v#okxL9)R7+enMg^+(D^ zuX&SUg?!^^LJUjLJrH4aEOhgPph8BhI0lVatVH_7!#nMAbE}}HTCd{Wpf3E+zfbrz z6<-VGN2kRLtulDiCs2I0lnLeZ-B-&;f3sRDUhpn6THN|Y*3vqal$Lh3Y>H&(jLK3BWZ&S#(sj@ja~bRnfY;N{H3w5!X(Qm(bLAdY3;x(aW!iyzL8HP04E0Y(a^5{1^fI@0 zVDQpU3#t`*iC4vzmhddy^ZU-?r@GhLQXU#k?k(xKy2caj30Z+bx!!>jh9TmGS)s(8RBQ87^L0B ztk&5+&U|YqF^l|Txt-mPEdOsvN~2oDK;oo>2#$k@2r=$$2%={V=A46nyiN$5+Pzdx zcw}1MWYLB@5X=eqh|^=p45`DhD3)jP55shjSr>+4u^DV1Yd_Lf?le0wN#9VgM^>1< z2)CT~arDr+&u5bz*HSi+HLlK?VC54V#D%>-?Jzwh)3URjyIec5lDA1byJO5`>|wl8 z-xmkDY0hZ4&*QXTs{%$6%K5HheR`Nt*P4 zww0UPy>*|pxb)Ms2u}VXUYkd2Zh@V(w#U;3KFRXYzT>SpoQJixC2NJK@1Bp5&;}nu z9*x1I9QPNOgbDN9`}|Pr#VceI{xj-Z)k1pf(zQfFcMX~hI>8N;_6qE0u0J2HpiyJBTR!PF z<*FS)Kpop=kzXFlaa$p5O+**0@yfY%TEGBxit2|7lk0Tlo@ION4L9)Wk+UxuH`hPe zc$8Swu);5%e&ajL%<&ONO!-G2W&lL~P!(5_VtH8=hD@jOMhghSqgJ!ya4zq)rQD;u za+3-jR7G}~PfIU_qe*J*a#k_D^1zB~?)A7+uPwDfr@VW5rb6^#pK2Tu;2hYQElzxF zf_Rm_14f`(d65_cnliZiBs!asxu%8DF6OekAoMRlCI+JZL4q?>yoFzOai&&50iJa% z`;|t8C-Bk9;xkpGztIXMow9&j`Eo6&RV+mOPSE0Y$y+yRq*WdM0-`FF6f19RQw>o+ zy6WQUk@{B>nQvN2pC@(X>&qy%4F|nKfjgn$M$C#OTV$<87Ll?c#p~jj{vZ9;oxTGv zFHEZNN&faG57E91e(Yb(qO&sT|NLt?VCs>P%QiO*K3UuP8lyLZNzCrd zQ5Q%;G3)cY4?<5?o~S)wW1Cv@pmp06s1j-(&*?1Ab0r@dWRZUZh$L%kor1Gux5N_t z%=<|{#BS{%@)k6-0LA{+W}~Z}#(gEVZE)$pY1ACidRPJBX52wkwziYh#me+9rw*W% zV9zzFz>Eh8sZPu=PIGAuPZe3nw(+*tRyA%m-n~^i|*w z@kRkClfBBK$r*B9c4px!U|*Yyg+pb>+^HW} z*I4LMmBpK{Gh$_}Sb0m6obxHz9^psL*CY~n%xtfKA|<&&vU|^1rs1tqwq5)&`#|nx zgV3I>rI16#CSy2&J%~3oxWB0pZ#}yso;7I-;;7;moV!b?Wc)KAG5#m$*mJfDRrWB^ zQsQ+aeFuktUWHly&3xe-H5w3BSFP}<;2Or?eBg8IjTFJKo(75T*e{ojweW7N6>*qk zO_`&c9z2b@?XzUymPoMAJ=c?k)=+3Oz^vnyuxtFGs{og^eUYx%TX}*- za39s^d?}}+fkmREtn0IGlYOn-w#q-S+<3;6M^Ld1vAgSFr?8j0ZkC95z54<3WPdtXW0eq}Sz z>(ZibD&F$wWKhUVo?Y(Nk=1rpnlvpcU*XfhbVRb*5QkSK> zk86LAvO2f)nvpWCGCxZSKyrPg!TzkmqULR=I?a!j_rDy&Gb~X0Vmvy=!Xn(O7gySM zcpW{TV}fOgt<^7;1rgzh&sGH?^;$72mTRsX{3||67k{2zf9@G(+0pv- zfOd(q&eGMfX>-?%xYyY+bBVdV zp>O5*WryPDuH?v5o24OsSC$wJl}Ye*|2Pcc#H!lXw+o7xy@_pF!-i(;a|_dp z`D-hks{I9+M&8Z;BTCi9g=p>yz0K^%`rmw3Ez*!DOagh3`*Q8ZL#qs+);-R+LUbBS z(!MZx4QIXN&u*}qY)hzb*-cJ*-?9Ed249=mu1u<_A4;pBpw97uK&cjG=|s}SN|m-W zk9J;;<~1U|aySQLa0=(>*~^O!GL=9cK_MW!-8<}UI6oF3uW3WVTVdM zefxp6XyDK$uo@vV5=KP9>&Z;_qzGC-N0T_Nsg#7m6=6vWCDnA148uiNLk2uD?Co3V zu_OAmnb}B8wnO=V$8Dyvq~>BnGy(VNV7Sf3X%GOuaACH4@NuO<>HAQK-^^o)&6=Ku z+h;-k%TjNlSSjg@Zx?ZF7YW6F@^m7x(_E0U53WtL))*$yngv9n8`R{%g9pHM-HWS% zQq>x}a@kEu^RS3nkBbFN!NUrB6OLb)cq8E{EHjmnZI80D(#HPb`i0?#wmYNN9%^aw zGRLWYZ6`U+#Jry&3A#!%omKuA1CEJKqvJA$bpu;Bd0INsldu`Fs^ z(cQLog!0487MS6;Ih$EB=*4=Y^stGf)ricFWh4qnGXU(R^)Y77lzXmnboh?z-RDb) zj%#l%Ltag!(?l1X1nj6wj(Wc{&GrhubW3T0J|h#pftIv|i1|zzD2u4AT+)76>vc=s zUwaGf!zMRdEljI7+T&5%wgTN;0*deY{sUG%UfL;FK|Djb{kLm}Fgl4H_@WkcGosXW z-X>;2aoupnOxuH_?athSoa7dI-CEa2a5$5hwQ@t~$!>8cuVVS?PTe5Jtwce7$8oCi zKX2`+6sV9S6db*$S#p-vXprtEs2^$U=41EZX zZIRPYOlKI9zLjlRciUC`a|yjvE}hs^LT=B$_rP+w_7%jQ-gq$}T18wm&2k}b)4bxx zdaP+xU!A90x>?$XA7>pRAO{?A-sq%Kb{<0Hyp=&QDB)m!Z8^(}-rsBId6!&1ui{-v zMe-ceUF#hC_J&Z5ILYI`Rr{A~!HF*kE#aoxX<2(HVR2aE7%V3yRLC*F`>~@JwDrAh z2gjN9EjuYQ!(hoElx39$?$;XB-Mu5bPW}g66>%6r(I%T+x?gT;VqDUFLwvpBCp<#MDoD~H z+EFhzUx@V#vnK>zrKP2YkEsq_AW_;BF&K zKd96ppw`B!S^TltJx9Fb+XWMS?>DU!^m>oS+ufjot7CFk?efnZTcjG@$J;$ojycL8 zSL3Kwuz`!l&#sO@Wh)#`vkzXFYm*UMb^Y%52~TP{Nquna{H49rO-1o^M;*l z{6Woskpvivm$&;v3FI>r9k55p&1vOPT)mEGE$LghdcwKhN|@xuguac3tIG5n?nE{U zIxQHFIagd^y2#ogi9x8!%+n@N1cqf`*9+{A4f%pVa=#cAeKq~>Dp*;O(JSQ7z_LaT zi_iv7rle+64sT_9QMS4Drv(mN?_jSB3n!7K@Shwwh7HO{zpu(d7HrO@1+lu0?FhsN z$MHyd3kqqb^D#j0vb|T^sc-FC4jVXZKwPmEPVjsk_F5e%pkGoK^ke^Vyq>suZr%Ec&d4_T2)E8G$B%CbQaBo zmQ1chu5=0{km*rwz2_zpeJ>)OsHI#f3EZ;(+HNozB)WXGeebPa$bFK!x=#V30MfRN zH+Ddhha`dMkMZ7zF-AN}zv#fs`?+nXJ15Rwjz!a;tkQcOffIalruk)as*^UQq-(2S z%6M-WzmK+wuNWB{JiWm^_O-RN+4hBr`qNWUnMVwarCnOhUA{KpuJG+e$J}T`9Ej|E zdp;<4?C^!@)4k`z=EgKAo&oB$Kp%d^g}l3`Q9t+%RiWWJt-ko|VDH(bm|Dvqa5+x7 z^;uA!ZOU39JArLH&FDaGI@Y{!uRXKN<4!QALp7o>?YdxrfcLwvU}Z6n=Q??-!OHuG z(fes{br}>!`}iBBU#sJf=F_}xK`5kayu~Cg4kB&>AWQICO2_xYw*Kdy!l1i zVi@p(5gkrL8%pCRcWe^wT}?T>Kh-BG2QN3wdbIw_nDKL4&g}|7{=q7B7~fLUd5zAC z`(FN_rt$u3EG8%%eatI$k%yfD)^y17QE!s;+V;#U*HSadzeI_o}vnb@`*SKf#mji`}@B3zeCCj^AI6 zDoDB1!I@uSt(AguZIp^8Moet#w^6;q&(V#esOggRi*iy)|Vh!!HRW9PwAX{j3EJst3PMvT5Vw-MOqhe z&dmL(;RuLC@r8T9Q!SFp*{AQ>O zr2EA9(58MjrqoG?Gj3g3V=bf6x0u%S;8z7BN4H>C)L^-p08-Wa^KcGifY;EwYT|o; zXI$YL%bFiL>-RR3pLhe8PQW&0#4~)YN?a9tIFk5F$8hl|IOh3pTH#!b9f_|cpPA`K zkUEjms$5#X8bVPh{YDAl4>%lz|Jb8c;BP>g^1(Xg3+&76kHh|RbDUk>bFy;EzkZ2r zPu-))XHIiMa3K(BvXQ0yjHYPn#l5EHpRfjm4{S~H^=UcsMe*divh+*zRL-E@T1=(& z6H1-g<-PA#sht6ZVq#TfhuPeLo9nouA2ng9(M}v)*1kw??pk77TT3Gr+kxn zjqZcq;$lSJLe#dMamLmIrNy9YSxv^?|4}U{Y3$rkT1|U5p*(yX+~M?jVl>MtJ=CyO zB8V=$=w|8J za!FoH%3AZw3NcON?!4Ye#V%S6oPde>&gy*i)TTurU@Tdb_!f{fxRx(7Gq>`s? z53P}xC&+L%NIZe$p~vf#dUhG zxNR0|s4^(l{C=@jg?aE*@=tSAf2lg3n!g^eqW{UcMvhma&pATuWWg^6RLx$v^9TG? zNi(YabmGAJYbU(jF?Y3elk~?|nw)cwZ^uw#*H~W1g!$GW^_L((1 z*4Fa!@l0lRm9+U?FHq&3H&i~1p%xmegX0EI%q8kTwX8|DPLA}cy zgowixfn~bY@?;-YXTMiD<8TL(W8Tf2>N9VBVuh>F%r<-6hO>|#p{yCi(sm&p`4<3M z0P@LiY@gbPv8!0DOz(G4-YfKQp1~S*6Vp0XM8+P>3TqxU_1Y}P6ViS9SOcD`?WYCk znWaoVp0?`1^0hT&NC*}XiW88rL3Ts|TKjKPiI$>0)mV^j-*GC6>&@M{l@&K$w4 z3?1ACJ@GpRGSZqgyk@(#6f&#IfV>mcWi}D{P`~T`LjrljQs&3Y-O-@7kD#d-BS#Oz zR?Pz}H{uOCfdX3iUj%BYyQB+Mc{#WBjtiwzZHf!at1zi?$O-d!1g{Mo;3D?Df>B9p z5^`1_&M2$GG7C3~@VzZh#TtM81rR2w&NpS2y6`RQ&O(Rd9CDn+jEQ+2-5NW^rgd+Nx;}r<%R^ehUWIHDR*n{C09E+ zwHL8WV#pc%QPVIUF&!$SBmsrm5ApClYrXH!v6~Q;eBWI?;ykC`C~E;DJOM>>oY@uR zI)Ev4VCmG15r4+*-Mt>A)MdKvy(9l5`e}2KMDtBCh)B=e_5M{)@svRciPY@cer5VG zwHxic8KLNpVuB`jn7VlWl)E3<4>wr-$bBSbT4yaFZql5y;QfYtSK5_&O^7<3YDmzW z;uVWri1lZY8xp8)7X&W1t2*j)SfX@Q1E0KI1A@f#U!tXGg~XX(IScV)?LlUS(crjV zxbKIjC+}a{YtopV9a?+D*k{-5biMrxu&F#DV}8RDo;Mw?R%r{%e2c3c{ggSC0qz32 z(m;QJ7T`;QFm1J(*mfWfp9Qzr`SF|P4M&Nk;7(iX9BtC)yMZbZBZX}{XW@x^a>r&h zSPuYyj1~{I>yxZ;o$u{rRtzPdn3~I1JO0=b9=rci zX?@-vn9(VG_nu-`Osu>rCbT%x#hMk=5T^)t7IDp1yo^tPQ;0Y66!b!Z0Vhl2CW)l= z-6{5Oj8DUlIV_#uzkVn+%!F={w0?|-`irnG&?OpCKMJ!+@v&RTpzl={J7A2>$#ZNT zCgUt3wjM534d?D^e8#dFdU%z?LfZ2db%&M2zz4FjwBw?0R32^$Of|TZaLzYZP;DgD zr;q`c*$O$i6R= z$xH#3V5%Lx2IdJRs@S!x!bgqyGR9r61pZ`bx-HG+=bAmvGi#G@>#*`dh!9oO9`P$4 zzFE9Cc}zbf9*|CbW9*vIhU%#MPRv-RRq=bK)oAQhl5%u*?rW{WZ9E z@hx>Fo-fr_Tnk;FaBr33P0*wb@*uDN!JQg*;r5Vj@hu2Cvy}(7QoETYkd#bEowod+ zcMp|+znS%4;4Dr8Z^qU=ylS*I~Y-E?(hN<} z%=@@Gm;A{?|A;*G>If%3prAUaiPr)^Q$rJ67(=(hd;@tu_+Q?^8#yjH#^X1|uCE z0v&W7lSwGa$NV@LZelqwyH(&=Qu4v43rcwe3wWbf?Ley)dxP`H-#zmB-}(Ood!q2} literal 0 HcmV?d00001 diff --git a/src/Assets/ascendants/elementalist.jpeg b/src/Assets/ascendants/elementalist.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..0c755397686b20996126de2bf36e28c4dc556dbb GIT binary patch literal 14751 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 vRT%Va~LR^S|B@{9XJ%vbe!# literal 0 HcmV?d00001 diff --git a/src/Assets/ascendants/gladiator.jpeg b/src/Assets/ascendants/gladiator.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..b3f0d5d05458ed2d24c1a1e0bd87ab26da8750ec GIT binary patch literal 11325 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 literal 0 HcmV?d00001 diff --git a/src/Assets/ascendants/int.jpeg b/src/Assets/ascendants/int.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..76f893a5e4343880b44306808967cbea9d1d7064 GIT binary patch literal 11401 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 X1F}BN`0GiCK^#(A$hr8#-?je%+hja{ literal 0 HcmV?d00001 diff --git a/src/Assets/ascendants/occultist.jpeg b/src/Assets/ascendants/occultist.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..726333acae7808d08270e911d6ac46d8904855f1 GIT binary patch literal 10794 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 DGP+<^ literal 0 HcmV?d00001 diff --git a/src/Assets/ascendants/pathfinder.jpeg b/src/Assets/ascendants/pathfinder.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..c8b4ab1123be47b7517c47f1f18d5452006782d7 GIT binary patch literal 8604 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�HxoQ-rVe{eh8 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 literal 0 HcmV?d00001 diff --git a/src/Assets/ascendants/saboteur.jpeg b/src/Assets/ascendants/saboteur.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..ebb460467f7a3809781e760e6e5e6eb783941358 GIT binary patch literal 8069 zcmb7ocQhPM)b@&A!$$97ktGPCt}anl35!*uixO@17FLU>v5SZbEHle~c%r%K;q`FgI`l};T9J=pS! zcqVn)hLc{fq3O3rzC(v;8iE#rXD6o^dqW=g-%B#?y+Rzm6*3rSSBKTw4^6>vC7AmD ziuFqfrI{*-eX_4Es1ucxGD+ojnfpBk)J(o?lM+0cEGpuVo}ZOc z$%XLSQZ;G-lDeuAmzA;S?ml@l^#emi5i`3pfj{9^_RN%nnrhfp-2go5zs31BnpH(pX~b6+5B44$%Zu+&8s z^Vw5qO0sd|H5vF`!+xR_&CzZSiJa7Ya^CmiLpWnbvT|iL9_^f#eDJ%&h{n*xqwgEP z;-Q>?^GgUB&Mv7JHxDVhwctv`1ZmOYk6d8vuXREj)xocc6$N!NKk=c^wV#oGH{APG^)J&J8plM-h(nHfvWp~l!q z;C$!UXNCyJRxUa8X%gTB!nHCPxZ{j}6s*g^OMfK5!ICV_Op=bwbTjwW>-XuVOLAHG zfa|4aGJtI<`l~l*!Wu!^wz|cuDiEWPHn#FaV=fs^BPy3?7}HE9U{D=vn1o~dF;*k& z{S6>X&EUmEcosaeAJ%!xhUZhoW08^OILTPtBQjFA zijpNn>g;zTGqsZyR!0YRm1AW>SBKd&3IRXgl3MG#=lt%U@gp#`Gld|q9pvL=N9y&H z@ZgvC*D}S8e5RY2gPH8)E#RLy%KNwDxY}g4ad?}E$#2(b-P<7!^_uOAY_CT`dqFX+ zs1vXpI+r^nouUYB%&5ff0eu^4-6%~mYMy*;VKFKNpFgUMYOR@50Fvr}{(xrak}tL9 zwgn}Le3)3Dg57C$N86ty`u0EAqCrLF@qd0^)7`*OL1{ghs8WR{-UbktQ|DYXlNBm*7$fR)ml{G=_R& zAbL9-Iu-}=%9A_~tqcF@_iJh+S9={Ia)fRG4fYqsOKjK1-y?@FveAO;`=wYqFlke8 z{A}w)Fk$GY8gAR?%7mS+Pj$JJ=nAJY;?qL&!AcvNu0rs=M`semrhJ0^a#N{Hh6ltB zp4y*sNH|%7&QY5+bS$Z&=pNVa$)+>uLZ{4^cxwO*3~Cw$(h5B> zLu-~zH^`-zKUu??gI~ZnL?Ok#Y=(1;mA#1%8iOfbGB9!%x8Mse0^q4hBYFDP!2_=tz14AY4qfEUnmt#Ov&~3jo`sTz@gfv!?=od@^JnQe`Z_ zE~o^74gSo+A9^y<4Ti%crIVOKdXoiOMo{1i9d*Y}iWv@3M)cGRlMgbQ7qzLa$?ND> zWf?@5#K(oLJOMF*!FxVY_I3O!G*HTHezjk&&}>;%siES)+J0FkhL7(pEmz7@jKH))R!npZ0eP&pls$|DzJOA2S^} zQv2px{RpI550hxmvU9cL&!Jpqw+3yx0kkgv!OZ$G`dde!_=LI_s!Hk$*}=Pl2FDNN zSioZ)c*63bf*|cP#^eNsu)Mfz8-Iq6UtJ;WGOVjYv4J0jhbIJCQpumL3!3s2MOW}B zv#&&|_tMSRISilIKPNMMuv{(CoOf{l3gIg&Xg9p1udK<5B$%acTHb?qxem1!vUp7$ zpkd?slx|okg+7~$;)RlH2X*8zu$>Ynz(eB@wFxm$b|vf9Oqn%hJ1ucU&FYP~>9?t; zoCK*6KO@>=0kg3EUZfZkB|dyT8eQA#zp(n2%8UmDzU(#@QQ0<<1WNBsnk}AZ%ZJ)loI->BvEo#>|}ZjV>rrg~bl#9i3!sfrXMSa+}B*vERpWzi`LNr2d zI5wzy`g)pR*uH>|f{fSkUSu$(69i6!f4$GNHg&ORCh}wprW05lD)CWkOl;!;HTapG zSm%_{5$~B>wfM*A4z88yK&#;!0MMG1M*BT#&`C+uYN^dY{`EpJNe=AT6*2|tl=J|b z4hb-0QLO|GpZqZIN-Y&>X2)a%0`di@8{cjUoK-+z98X*|?wPW*Xsm8yi=2R&K+ZXj z%9O`x)X{V&|ul$p7G4Chif<%`hkf_Am z+Ti4Wm&2DwHvp%nadE$;g2ekorqP>?Kin-E>vQ8c_Mn6N0&!Mk@EoG`v-0w}+@m6y zZBn-vrJU|*W08X*Kaa7s=rFtCF3wD5tp2Nre>vo0;p&)s$!W&zfGBy9o>ab%5SQV` zFIUc?$7Q^6aUKI8b4;I~2tBb4M@PZiUq;VFRl?CPXG2!Cn6gjFfrLDWN&}0xZMpPy zQ43Y6lRsK?_KPvsYKkf42Y@QZ)8SRju)sf6rcx`#_KqnNpgR$a1}*>bW8?z!mR zj7Zx0TqUZa3p7oa!XU`^8^daPl(#+n)t7&Ka;t#>@iP3BnyVGs9`|RD$C02hgkwXi z_~(>IM*c);rNrDu;ulJ_H2wJf{d3j{7KEr7tKegOm>|P6Kaifp-`_5yBtMtS}%H1+o{XQ2aS)h763;L{P|;h zxTeJBv529Sj!ilf7nEWea}dqPqZXPX_vbhEWmeZ)t}=5YMHXZPbuxWRJ(Ap=sujKo zRi+F@wPg+gYy?0A?Pe@<CumV zwqo)V%JDVz3@M`k(*#aRupn%Dhes}b*1ff6z8szC{|$8jhN+)4hp`;wusN;1sk*_lF#NVRYEEIEcbK^gJm5{Fb@RY(_nF*5RG4=qVkYu1sCNN z1*2^7&inkKk3Ln6dP4ou8kx6%Gz0U<&vDjK9}^4b;~5XEc+QP`LRoJBlnuVN<>Hoi zHDMV^uKhH|Gt7ilFKMiJhvRCQEm2vy#k?A8$y}-S%^DKp^h{%#O5!-5M4D4EM00Dw zS9p@{fREisQ{zmp%n!ey6t54HABxTq?rt2Jpm#}_)his)U9w68{HSNXhmc76h4;^* z1;iv_*bwvV`rEGuCsM{S^v!IN`CLckt(ulXA;r-_mcBXV=8@3Ok|{$9rQhP45cSTq zpl|Q~I<<2~{v%j2l%&2E=(2N(dpa=`c63Rv=U#16ltc|YRi`){4$AkZVdwgHkThsX#lSP z=AVM`fXxWRo|6i=fsej3;95UcQZJKOgqKyFuKl-ozI3A2*q>LnT2Pj94@z%P@h z?`7{lZblv$;Xh+!ED1xYPLIDn*+1}CFBvCdKRkB(KVzQ$5m|6Jtr!dpOi z7M_d%yP*+*{{a^qr%M zRO@qp@8RAIye^^4Y2%HziZ168MDo`BvY65lMsC*r^V@!fB|806!P}2nuc%KQ@9VJ= zJ}>GR^gT0~RyBDpb`M}T?-838 z^tGzBjZ6Qlr*?r9-KevnhClC@dMw>9^%V-er|0K~jr@5JOlu$6hY>b+v2I{zc2MD4a1SY(_*{h&kFyP6$5^EdfwM9Pn{w8p zSGE|P>Oedxx9$eDd1`BVgYO!(WdqGECU56m`NptJP zHt!_nIfD)d8hQNlgs0nkfyU^y?TA$q{=*s@LaUzwEd_@-$t+JNb!iNJb*y>eLJ`L; z|KXn`T~pKF??d}6V0OdodHOI8@#Nrj1Nw+F5N8y{dgC2Yx_NWNga!h}ni*edKwoR& zr^%5z!vLCN(NI^5H8s(qxB=j=8(d@UAsN=78avDV>JqjX=J9c+?s#b9^bBHy;=?OQVe<`0_!xaQ;(p$ae`mLcPpe z;3u%`g$iuK>-T*11{CAxhEHUq)h z0~=~uQ$>4CR+$QaVYO`({a1!+8&1q2;U=b^*WOzN$;O*+8^#coG*(%wU2h&HjX z4_OoIOApZ*Qn29o<=!qcn!deM1Uo`RDls+Z5?~fd zLtD1uep&fR@vF-hvdjFH(D-FZbWKn)TH2tz7taA9+^%VLB2Q!s_yP zpb>e39qs+vW|EdP{dSWfRa!8*8ak_B!VNR^X*EERY zSp~Iuy5L$1QW0-HF7fUL;BU~O8t~WYz!V~|0y*|DsNJaT5}Z?L8IMopp_rQ0>Jr#9 zNF@!4Wv)SNF&(*Q#4x*fj&%;}$ml)@3W|rpB!vn9Wk3vF1X}OA<%L{Tf3l3(at__< z^ZYNP?AEdGlDTt3i~?Zm3(=(vmveEd`W+SyDGM%>7;a7^AzD0e*y zFR7hJk`m@M42b@fX^>*86>8TQCE!I0@W z(m_i*0bv7a#{H-aH*e8QI5d8h4lvhWbYK-20Nqx}HliUqQ*#v06|to152ZZPsawx^kOv06@k*i-|1^o8@DncnIS0?qwpZU zn!Qx@G(DT75#4fb9}o9ZE~zCYtZ7O)XPxKjnNupKPG4}b4XbZuwMIq5{8E1vdsa@^ zi=nYSy_CxG`}31L{E$g|8K1WaEUN8wx;63E4IYde7;y_8g|yVPEI4;V$KhgKOv}t) zn5wAx=Gf}qe#lvtdEsdEF-Sd#8yE}pmV(gDM%9p#)U5Zk7QEx&Z!!CO_dE=>vW#!+ z32Iml)SKy16tb}WXW1gvudVakf`ZILFFGYHr4aX=L(2-LEN9rgHNuN?T(~AR>D#To zw}WU_@*KGQBiR|x6(h>_Stw^UrrSsK6C6XYyGq|D6t2kx_o4;CVE6aT4lc<-_KC)2F}Z&^2H3k93v&2 z81kpDUNYEEOUzk40pFHSNgCqf>#@)?%h0+YduhzZ!RVCF80*lej9j|EQ1E9EN*-zn~S7ntfY9Dm>O`oG+m{t%!Gnzk9*3 zVTM`A+3L~{V!2T7eO3NGp=K)dkZXeIUupL*}|H-PsBz;z|Zu5qGymDee%Q;53IdImijY+}-i zIW+F>lildoXKXymi&Ai%T{s5fujc8h#eM{qK&bbuE?>mk50AeDnlt>AYS(+mr{*WZ z>&TE-mpzuBq24)HE+h(8^A(det2+)NF3Ng#Hu+w*6xtkQcXu+?*d0M20}$x|IL+cDtG5VQ6m=br#^4Vj7k+6BoCxoFc!B; z@{xnpzv$qzKO6e=R6G#u*m`=Qt5A9+>})u#&i* zBpNmJ=)n~hmus4fCE|IpX2hB!vak|_IlC=}{*lD4^U>(NCJ-+L#16%%A+kB756igy zdb8Q83jM~j=$_*V9V*sr!@uc%Z%bfbn7-MkK=#JcD)7$6#My)3ynI)q`y&z*BOY;t zS-8lQb{X#Ev@$rp-lT0H9T613#CHP1Le1Z$5qSjXP`4S%B-YA$D{hJY6b^LhdwU+T zCQWnHThO7k=4 zQDXW;H;%M@BSWg%E;7BxSg7JfA8;-GBcXTD92?Wq+VnToHlnNpcG9yG#N29s3iyT( zj^w}8l_hoLLt6+hFm>^vs4r&i>#Lp&@^YRVsw&Gw6XD=4!7WzH5HgS}#9c z^-7#SI8SjZe_f zQxEDEKo=2d8v-nUut)x+>(=BD;^tjo0~mUdkRashuvo+It{OV;oiSD5#=Ly(>n6+lbS-@S8 zwOAutxIvm)=GuN|N38@szQ7bX%IiKmLRCsJdgdY6Xqs7GGJsA3HRM{IO+Mv+12qy^ zG!1h2%#d$j5y<N4bG@cpzjr;S}D+I=er$K@-18>21o7PsA0S!*OlXhVJF zZIyb@kMjOlI4@i`uW16K!FKTcF6mU_BCbH_K-iT}&+j_TFb+oQ^GN#uxT-l{uPW6Q iI$2DGBBl{mQB6Sfrz5@P)0P^Gj@gaVOw5&T=Kc@zxDlKH literal 0 HcmV?d00001 diff --git a/src/Assets/ascendants/skillpoint.jpeg b/src/Assets/ascendants/skillpoint.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..d57723e7ab24c1117818feba1f0424ece322fbbc GIT binary patch literal 2525 zcmb7=c{JNu8^?cH5KAhdVlWs>tz)kkv|3|l6rr}Ly~PL`iczJO+FNVTT51caAT1Jm zYZVz50)a$uaPjc+Ab8LA zh;s?(yb}V2oi!pj**VW{|4*1501^gV2d+avNC1okL69J3Hy{WA5YQRGzp${fK_M{k zS*DHvKoBqsWmW)OPKjD?tGG z%=xbnI6p#J0M@fi`s`^C6a+o{iT@RxJCR~4EIhmy#dRfB)vTgRm~?>aEC(YYNZ=a4 zR#4xQ_AmqSV)o9Jbvog+fhXjxgQ8#fycamx6lPgx+$=SvI4I0zvi~O$coY=kme4b>fX$E$)f^|@?(s<- zt!D|#?thviDo56->0_6}=v1X*G}&MYeI99cra0$|Bs&ueMUs?jT%p^>t`XYsH^R*7S;CY=}*gI-yal zuSCDb^s!YaR@>CfHQVoX$5pZu4R<>Kr&FY+me+5zrw7_-%;iqUpbJ;E#0dkE;_XM3 zx69#Ox}I6%0fZ;fp3&b+GXbN2rid>?!$S{)OyM)(9d@;0lk*L`cGfa@`=FLPrp@ z5#@2vlekT`B8@)kmyfTOd{jPS-!7-}KP!aX@55 zgU&A~0H5^g4^&y=Qp}nb=HmD?CdFT-hEwWv?@1!)3iEY!C--QDFdmH!H zI2`+ZGj=489}KtjTIFWf&8y=0MP|lnUU?2lh$x$jjl2ik*5It4q*_ZS=`0tDobQxdJzpW9{u&fBrN8pKYo1suwPeqW6Fi;oZj_%n9v1Zy zHX2>DQl=SMijCgWX~dHHhtvgj$ubYba?7q9zYicaAq;X%fZft!{CHYfwi8FN$1lna;$Rs?wG9Y4Yc`}ZPRGE9r{w(0XjEwVL-!np{`$U;HCq-lT5tC zF|TR35?JIOE(%%sKJyoTX{2vHKTA--NC`C^ELeJzx@(>pej4O<`oXF6gWjOlNZ!3J zYTH~kW3qYY@1yUA z_2-p#Yk&#q@%iSNgiU%Cwq+6@z8p9<>bNV;Sevz%m`Eb3SzDU7WbxfqisaF`{+$Wn zTzriOg@ZgvL`uw2aJT$E#G_>;oZBO+w7rfVhVFV=-e-z=R3gog-8)&1)#Ft+EHebH zZflflv=1?X1}@26m)8PaWV^#&rS4)X3DZq9`VOoUL%vm=t`+&=04(y?K0ql%@r zzWZG&=rG!`67KqPRMg1i-f?woYw#Cz-H%2hSF6}YBtLILN?-O4im#f{MDR6JmsA8i zLbm!a+MnAqzVtARD^`vWReT~we`8635sOyn=B-|w3VRk5L+aIc%ujnsn#k>_)nV)C ze1mwdm)%d!{p#ahXnigI*`)ocP!x0~B|0Eex#?%m&_Fj1KZ9ptUEmCw>94WHCAuc) zpJMwox}i^Rkz)#cjIm^pZHw;G_oD*k`sfYA!s;s>TVMR=`~2uNvVobndWOs_2UdW_3rVVxM9|Yw z9F06mzHp+5(lUn-s(-?Xd}tWqh}o!HZu2r$j0a$t*yI)GZ+ll~;8I>^qO*%tqSqv%*F;-Fh>$GN zMUSXoe((9-Kj3}loS8Xu=RVWU+;h*|xm&zj15iOVA({X@JOBXiUjp1M1JnQn`2XR* zoZue_i3$G$2{ADdF)0Zd87T=VDcOC>`(*bh?vav`Q`ErJ}c>e+L|3O4d z2qYoEC&dH&6Dv{y{u>ydkbszwh=Az7RpAp55)o4aXt;o4v=3DbN$Bk8xxuR5k?_p2 zK2iprCruB0W_TskejM8W(`Ux}ANv30{#W7?0Py}1{F4d%o5sH#`7ir7h5zY-hfht& zML;7)t3qe^kedk1^8~JTw*6TW;z7rZHJoPaE%O6}>UNsCW$scx;i zarEF%HBgUB^AW3QHsm5P=#y>JP@=Tq{`sm^EbX$jx8j}XH>fI|GQomYz|(LZ&1L1| zlUh&=lPxOZmC}pK*Ri7S)Yn*DGYN%sHYOF{__5Jlvy`i-tzm|2IdokUlV4TTp7PD5 zR$s4N%n?4tAYPkWAFS%%o`T69p6-CD|6nwqY?o#X64wnt%j2Tj3t4N~PK&kdrjtc- zuPE?x4s4|PnFzWrw?!ls6Q<$hFnjZaQr7b_0i4&jY0F3 zCQqR(+yNT_jJQ?3WJ1?;M%jpV?-ZBp=Cu7G3zJyy$|_}X1{4CBG|STksT_O#TJOO+ zgM}cuq!PGk*-)D}aptMPVx2RAtl!f|&nm~Ds?hB8RlSs0CDos50-DG5;4Nm`zbsBj zLRJ?R{a(zF2YwZH=@1&Qsf1M#4i@7ZUzwsm3w?)yYSJP3UEy6g&~U~|`i{DI!jE}@ z-#I(Ew1u{jX<=7)01p%DQPVoCrPG;o6-^zLvc4^_3j4Hc?-dnAsA)&l#Gj<8?Bzdy zW{q1F6ZTu%9QiYpDjS*va+X#2KZd~u%N?lSyO$_&^cUU%!ffoj<9~d`)@Zc5Zj7+| z#d#*zDLoiKxffBbhT`KOw7$`u9dp>N}syF3Rr$Eg0`*@{uI(uJ`8AlJevhiQH2~C95dsD z?YOuhjf=~brVkUeoloaAk@U#xUEQY`+OlczB9QbFXYt?-{ke!nP;z;NN$WXm;By297exN^lg_JG6-H#GU z-05PG)jvLWWN2t6c;k;GSGWj)#{@2kl|OQBtdm)gEv_CX*FX<|z&v9w!K1)N5q4lz znf%f3vho>px3{fdC6aBa{SuqwA@ zRZ|i;DN9t)bt#pmzaxTku+crFq%xogzV9X>veuw`|H;GG{mh2O@p(T$!*_tcDoex% z7xJ`e%2w`^53~l(u+M5rzirKZ%~@;%+BfW-=c3!92Vx?OiN9<5cu{Dk66VHy{jy<^ zvz7i(u*1DWf8*one2W0t|XCnzYhD!0BeDph=(a)ih+vI-P9Uogo_LpnIyvJ z5+gnf2UnyI*4;k`Uhd}pT#y=d(bt4#U=4o)9RQZrp&IA>%tMP?(vi==S2YljS%YKt z^=-G2U1ZLeS;OM5GOTQdBx!AFN^fgsg@t5$6BY*(!!2)#ujuf6G_eB@o()nHSAZbbq9X+R* zhRg-p6j^ThMT%>i5VbaeMbOnSO#NWmIvr(J8vQuyOM1$8-?Fk}3IpZo-NxqT=GluU zYi4HW=jMWZZ9Cfpja|r_k!VK2Z<)isoBDah-eXu7ctxs4>Lavp6DVRCsxM&f z-}_ywT1Fbglask0S&K6^6Il`rc~a?rncOGp`ofrQflR+4d-<+=SS7Jg>Af1W-Mv)F12HeoKDGjmW6khK%1Dxq#d za<$&~&>n^Z#*UFR(6-Sap^b`AZ`}~CuOPvc?A$5o^Yz`=1(HhmhOTY&?bBvXsRPSB zGVFhGe_b;d+wWuGSgzTL#xL>lSDxOR>?0hVK*I|QI#ij8y7*Gg+dfX;5{G^C4*&Z`@C~4)D{g|JAKg=Jrm=`6djS zM5J2_^Pi#~Gl##!Jnxf@HQbPRvpn;OEQaeL%^l!gO5F=rwUhfegVw#r%1E0aeM8Q9 z%fCTmOO+f?g(Kvsw53hGAZNYv?Ixo2#IrSg_G^tN&Bg<<0@Qs=4b}XeikFs^&}Uz^ zUtNTJm=h!nZksUk$>$x6trjQ|r2JtB3+?LrvtM11Eoj1_4y*NhQ2mPB#KP*G*43%$ zu3>R39QYjm#+L5F@qSF9G+JoEg)nW&A0Jf`*V3XWSU(nKT(;yFTnF*{*z`kiV(N!vw|O9Y_l_hQ^b#czvP4go>=rMQdkL@HppUumS-iH5 z2m}cL1W?X)hI6n)-f;FyB&0*oioe0?4>|0>Zva7#9VGQM%Go)jQO!WRd&GjY2ERqX zmq-afOpZ@;3uZ(bjyPsuDPPZIL-R54H6treT8hTfA(da|X7NmD+ryqQK>!tmCkxW8 zJkBgs@Z{|(IU7TwcFVftUgcXiA&Eai#CWY}3J+9rhVHDH#odjlR{@^T|mY z@1CU2ABD_Ww^%;>S$@+1DVucI8*veSuj8F>AVc;|vVIo1-e4;qQy7!-YxHA9OI(x5 zS6e@OqF3maooPOW6XT>zyE*N{^Oro5(Dxb+ggLfHX%GU%!k$;^oy#*eNzBVv>y(^7 zTyDkoi*dT(GzKI?v>5DS$76AKDGDLu^JLK0lYJbjaz>bTy+dWWL#cD1^Gt0+ zJceQ<3l?@k7~;E&hFM6~>6NHlK6m&^W0U$6Wl-uVHrrABf`Ec&JqS$s(XQ@oh?JB4 z+xFzRqg{`xnO&&-ILa+%pQz5GD`)%rHr>u)nI-@!=3>I)Am zp`;l#_==sY*squrz|W<_6*=wk+)^KWWga7A${mkB_(xe^@ExE{5DCJvI(fV8)l_!w zjYrj$Ity}<_4dE%?UUjDL~6g-o-&7_`kl;m;$83=A{*hayV76=5K*rriv#%Bho^kYSKlg>Lmbwm=0dA5^- zM!z$2U&QP!fuUo^absulSufYgy_ej7Yi2#xZ)6pn{we=awCG}_s_YK%r&1jI#>>7y z5zpvoI^H{?wO*e3?3{hGUCBy^Gu!KXm{)1pVtZJBm+?MIO0SwO-dv&2UVChbgb_Lh zlfEJ2eIo1+tP9iWbf|w5>(g|6kKe}{0fA?TwGjMRQSGHES~6!o3P4X zL)=5%d>uif=p20c0qN06&6f6nkHc+nCYKf`)p`k=xEX|Dkr1IRy%VP`Kr!MLw_B6r zr{G!;g8E=oX1v#0&hqc78gl8Pw*~J}Esqra1TrnbXkPwvM#g9zY1Xk$$@U9HJ)W_m zc@-k@^d-zj%>YeKx*irZ>hCb!ER8)&w zSM~M7dXrMqU-K?G8gG&_HXz}7iV#LOSvFIAttKMrQI7bIPzW_O_p*NtuH0%&RPK0; z6k6C%wWOd80LW1;oKL$uo2YIa?{_fJxY8vi58XpFz=2{Gqzz^x=!fguDyuaiuacpmfmPsXa zES|$FN%P94VZm(9vH6X9t?6-P-)od{P5Nk6XHheg z#}u9$Ar-}e51xEV@Qp;V_v2`>20e{wmf^O!H#|CmmNW56dOKouwgQ^zeX7p(FloZ=o=)i{^Be(qtpYDkU@k$;r!=7`}5_a&sT9HFU-?b>oprbSvqNDk~O$lnrJ%7aS3Q27P+8X6L!BD2T+xw zKmc2zhx1|g3j9J(cX;_~-Ao8U8fTJM4cbY&YX@Pmolv&R=qbf2ehbdMU&oDfmpCy! zNq>cm<)+&mC|Cz7{lhkxHqARSv&2e5kj_6npoIczoe(?XKl1|vF@VFuI#F>-;(y3EIAHmOs=v&jAq%U4Q0wB%uj65(yJh@<~Xz*?4colapEWnm}CS zFv}PotX@O7jP z0)t1{{X=MA%KGhT_=V<{Q1^DEV%rO)^UOPd?81XGay(~NxhT;F!~H7!@R1jfxnzc6 zQMwPBc1B&)Yh+Bhpn3{Og(hxftt+Yi0Za`28KuNzS^Xj)>>V+WG*Xf|_XZ3uIOK8Y zRgW#~#zovpgmZ$uUB7lQI<_81TtXK0zupgf@w2Q$t9Ov0oU{`%+y9nF18T9eEeQT9_-5q9uzW>l|`!@>h^q!L_gA`61MN?Y0 zKhhVfymBs(G}g zlX9b@`n8JQuM%Q0#PN`(A&R^hgYB`hsf^J94Q(b@$5%8F)nC;oK&fFX?3o+E@(DzYEvM8;TlBI-q7EAMde3a z{h_S5B0vSL5*!ULzbQRlJbb8a^iEy^pJe3@kah>COcZ;c8b)HGc|YW#rLlbbf(XLx zB@b>qCM$=-s>`A&N`_lECR@}|V~8P7UEs6~G-r|lU*_##GOELmx8$D8%sv}w#BuA@ zJYk8-o4FFno@4r;9dVs$TsWqN5t>l0b%pmH&;_Jh-uJ@Wv=q{^dc51haMo|~jM7L* zpiUQ&rPeEc8F?bn>cPbyIV{cU%#Ae^zm|0)<>8%olu~>oMe|Lf{tiH1?x=m(h-SSX z?9j!N0bmx;aoQM?po@SZJjJUlG0@6U>KxSv)NAcWf74!0akGEL$u7{Qd>I^1pZFjQ zN&5N}o&zs=u?njs9ipDl=jF~yIgm}P6`C2T^2`pNH8=Pc+atwuE)8U2@8scFhW=to zTA0wN@|%A8xZKF}ItWbIkng|ww;#AMDSiFn0$1d0q~(jFeJqz-jvg)_Q2qH=Qo5Jl zjgpmL=JImu9k+aGNIY=~1g&J2)v?a|sZ7rSNp}*Z0QLc5ODZb@c%>M?%PYzi7Wg#V z)H^Rmvj}|G8v%Azz-ME7?;ST&eEVig;@*mQR+enXn_hl>HRoW?_T;UxK%D{eY8O~d zSb98%*sGD?ow6Z8hUWgWfZ|mD0f{B;`LkjaWLraTM*{K}Y&-7imi)Mx;PtomguN8@ zRkd`O%Fqp-h(yMI#l28vtJTc{`{T6T9-cta%Qw9&mMRm@KFa(+`G7yn*kspiFxyLk zkym>Tiru?>L5buN?^HGLg%v~SNobZZO()dr>KRCM8>^@5U=~Ac^p@5ieEMa3?z2Gl zm+c);V;G&u#Yf*-Z~wAM*I+i!?!8|unqxMpXbzsMg>BK@~h_a?R2hKZllj;y&Z z1BJL8SswrRgKizJ7XC)Bg>S@3D!S^iUjsXYcZiZgvr2(LnKg$V^U2Gt(TY=P|2OgT z{BEba#bcQ6?oi_Q=3er;FZ#ZzXmN$asVL?HvD}}!EEE{PI;#FRZrJXRjs>~Klr6QQ z{o~(30zz;o4GnSV*kbnBKI-QkK&>qQ!KvYjQmTg(8*GJohELq5G%i;ZSr-6Y0B%R0 zEvQm_b`3~0w+2O%o9yTTB8l= z+^i05JeCAf8KoH3DBop0%cvVATQ#2&iID)w?Icq&WL8uu$)1do?l#O=#w*kzPsimX z?-*Xrx4 z9)0W(c8j;li3{DinAIyBb73L<+R7D9R&WAINp7--?}1onSMwGr8yb zw5l@snz{z@;mpu>%zQ9j&92MjQsN7ZT_Aih+P(ANlO1e0QQc9q(zNiQg2u(B9FS|l z(j66?4Yv*kvr-F^^ZQtYq4u>s z+RC&h`gqpU00c+3pDlyD-7@k(f|9Yy!i?Ygv|fct3RTOzy?CV4wzvI2ugR$12ox?J zeE-?ToVMZjTq{4xcpxJH1R*T$-L!Z)B|0Bx?`Qq-p9ipdo^vs8AuMU+VGJ?UX|(Vw zYPMul@*^>T$AcEjHHp>eBHh~AOuBU21awV3mmG9WkkV=hA`*X!i|3s0$yA8QSTlD> z4EDemmqdz&J_{8pQrv&!X}%w?>kWm#?~1A zqD6(XxfB=dz;)dBl6Nnrckckdpl57L)yZrN<-9b&P$e)r{&c zO`ydEDPIkgEHir~yeV(&`lapp)0KJ!A(Xa?gKTDR?=Ro_eJ9AvT8$Bmea`_YG03<& z=;}3^1PwVX`y|TpwR5le+ffu62||j%GIj&7+@%b&)NP2$aWzJsA8AVzQsP0x?5$8~ zK~Gpoo-U&kQJy86?-7dkG489GMpF=GLVYmLD4R-P79|^(t%x`I%cmUw zT`Y%fRM2n$IVo)hNo|jE>Pbe)lsS^4RF*H3 z-ZU0zJc!r0Wd=!|DPmq&pYpls_97+Yb{w-hR^8FO$k-GfI!C+dK>Q39ChWpP@b!%q zkL}g*Cyf^0xxM^!#cJc4c}>}zDxZ$IiJ?l<_kltlc`^o1XVmoNV z5$1?+>(@G1ON-`F(re*^VX_>kmyE(`Pp+8ZxlbrGOty#*gD9Sp&d5S{pP&f2NSOqA zih&+Mk5V8~T55^2;Eo}nbubHfq}u$;kd>K-j~hJKI$@Lw$M&tWt&X*tm)~-)T5f*V>RHCr;WnU9PIlt^4_u9KXM;qre2B6(uyaNdPbr+On9$q{Ze=WfU)1@~e zwrlvsk@aynLy6=v?b>Cggr9F(s5%E)BvLb4eAUdJJMNgrra3Pp&2$h3_uDE={*VB} zqCOQbi%xH*p(Bvooo7nZ&gXL(P#AZXY*`3Ny}?eiMF}g^1D1!l>W9PdWHuLe&!z4(E2 zl`1U{26^ZQZxPwf-RgcQO)nyHC<0acY-Ml{PrXV`rEj>QR-0o4?U8Dz$Q^9NzFTHd zq*^u{VW^d8Y$v|xB7iuivvN(zp{HVc#N#{OGG;1D3YM0xH2k1>k=OldXGr9@i6dVv zmUMVRtmHNBK1|J#{smj15VWye)0h&Qi<%fj_Z|>?>{tafgj2-_iH8 zqkB1t1rs0K%Zm(eyM~f~-)4X@D>Wey?p3=7k17ZxLnNvitGN>Rq}$^0tUcHDbQ=SOh8Hj--ZC%y=UQQ#Oz-#9-pS_8(zDQ`;#JJ3U7+b47Q2YKcMMj&0U!W+9(L&QW11T(|nnQdlogu?4?&zKKv>@0Y_T_yY z#`IF~6)vHJ$jr=Ph0z(P_|Un}VbSx?&$O?Wd zetgJK=)}raLgR_N%mfSQq7CWNIi8@?yLN{T$nT?zhbm`7q%k&i7vHH zm4XN=eklU;TZk9&mxN$Jx5>w*dA;@0Lw5JAR=Hut+YX5@$t56amh&|lsgs!0UdLkK zg7mZ^6f7O^_-)LoxfQf@&Q;2n*2C2=|GAs{zlE$E6$ok@Ao6=Ty<^tWd{mg#kB$8X z((he5=^us6ehJpGE}MJwx|unZ2-Qiq2{M)ZJKn51zbt*}qNpKUWNBfIEQ+45S=tpn zc%J5hJkFX(#kh`}7Ga>%aNi7gPI~2&T0~e&7ykR)_(WMDR9tX-VXs(LGt3ymU zHEnFE1eDnZ0xQtq@!YTFi~{V~!$aiT-7T$?6pt=4cR$a7XrGzc4?L1Dr=~AQu{uno z1ZkZq{vBH|anf*0voXC*I%t}^t?pCR=}-YYDm#LO>V42#)Z%GAWNcd=IdVj<6=kEid2u*YAes(Gl!1+C?XV-D!tmwY;8^aVyqm49y+ znJMKm$nKYV!1E=epJF6nI%rylOkNrTI;1pUpqcnXC%l-CpV(LQ?tMS&Q@a)v#zuzu-%r*W|&DeL1I6pV| zIMfGha2*BK9t93)GfmR(*5t;9>rXYG)i0X8(09ps6R7NJ+D4sl40rC$d_ekU!JZ)E z;JcKtIX{2e%MG~TGy)T5Ug~#A&|v&ErMoQV86WL)?&o$0=y*TO=pBGHaHLY3KI%At zrihWF!78lU|F*D31D-T5s^O(X|K*#IeiR888IaxmfWL{UkBM>qmgOf_;_!sW>DN9c z!|hpt%yU=d-<;N?9Lmq>tL^m~+!oot7`MF*Maoy0EC0kD8E}A?ymN{NYtOMiP!g!j zic6)#*g2MNi@b-r{M$GeAw+e*Zy|pDx9ps?KpDlQg^}x4uP1-!&q}qdyUB^if~ub+ z1;p6#>TrSlUXcPnr-y%E3NiLEYI$UdvCpY;(T1wkddXf=y}xihSfX421|EpFSKBB4 zhzZ?|q@I7LFx8&*VmP`H=|e+jH^Z4_q|3XYANKnZ0CIz`%wa_dcXE&86#E#mE##e( zN2dRSlO;Z?^-`urU|$WA}EAi zThU*WMLKSmC;5GP&-vxIsYmADnA&J5LpAC>hCHD)513B?KUDPgPkb|fZOY$2D$9{A zBH5^HqjmSwJZ~2+&TpeI{&#i*Q=fuH=GtUY!a^!gVgRQH)MSe$a>~1cL27$=GAZ<@ z+0(ZdZ1(RkNap5GvVNRvfv!u&li(~C)^$7O$U@pF)?M{CGS}WKj4pAHb<*DX&#rYY z`)+pPNNn(OJJ_Ok0&x5aH_{v6X9-%Se(5xom^~~a$@prQyuA?TElZL%GK!)uT|N^$ zvu@%wUWhT)Gd82s%5guYqrHrHf>}^4=un?X%2bTkuYIc~Lu5hIqe9nBOZn!;$8v|maJ}Wj4YRKOao^Fj<6NCd4$?tZ zjLdZndnfMiHpGJ1=IAt5r>DESO>@3;78fBVwC987X6FVO2tYQc9Vu;rVa$3=s4I5| zF^=Faqw?9+xI6X1sR>^BJ+Jd`kVzl`bNdRjSVfh?we+!rTD=t+8HZ%#F+AS7lj+G_Pt!NU@U!(_(vuun@E7q z$G61#-pdO*HrOrK5~0i3;1AfVFL_}W{*_2c48CrnTm`C(=0PXdU^_HQEm7I@_Yd<0 z4V{Zv(-;=~15Z}xrF?om6V0-p?^~&|QfghTLs+ZVaP2CxjC*vK^$hNinWev)Z&E4^ zj*BRm?vYuVsW82G;Ukts;k~?S!F@@62kFD=$?fNhORR8#>J8ZHO0Tmf=uNaL!O??OJ}{+i=CBM;@%pC1upjc%EXsX!__lWM z(Omws)np&5Y7Gq!>~=Pi&DCJgU${JVBoHTm)R`S!Vie2wEyXAONT|5Py!KU9hLe6y zwF_cLN8~Y!w)W)DC%b)pBdjS~zpo&DG$W0BL|xKWq8#3I)&7KF9Z6R<}K}? z6dey0ZQtll{02U}v(4#*E>-<%3UXU(x?vGX8{Ob~%7IS|6*qt4rWdzBtmy;4_>~%D zKN7@CDA4Rbzbrv`I*yM|pWmd`lOH%`(7}4CFEq(Q)~aup*mGrm&k6^BWV?WKBsev% hf4KuJwBwxm<7U1p<5F-%ADXr&6TKP3jq~rm{y&!f_KE-i literal 0 HcmV?d00001 diff --git a/src/Assets/ascendants/str.jpeg b/src/Assets/ascendants/str.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..e4b019d3ea485dcef26d883d3b59a029e1e6d54f GIT binary patch literal 11083 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 bIX@FFNIaSWrtRxa*)0B0<(_-?ckX`xF4W77 literal 0 HcmV?d00001 diff --git a/src/Assets/ascendants/strdex.jpeg b/src/Assets/ascendants/strdex.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..370becaac1e0eb2c1d1c2fa208bdbbf7c3c2662c GIT binary patch literal 11726 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

_@5Dq~$Q z#~D&|h)JhjuzX=fTR_%0Jkw{q(yBF#+~+OMm-Qt(9VtaHxCiQ4DJnzqaoK7_d8w&J z-Y-DS9B_rD}kN4PwFZG`?fS`bb$DR75W zH8Y`+J66Fm_tGUfdP#~fV8oiA6$mK+vjPY+`C_8*bPvK2VTBS^-w^5C?PvA4=Y905 z160!T>(_&3_Wrw^4+V!#51ErgyTqZ`A5*^{<7X#$`=iO9dCS20mth3Ug~Of=WzT_) zumX0F+1_gAoZ@|9r;D4$uNK?n2TynLa#;u!W0g?kR-IBDTaDMJ4RemNmf|twead}h zQ`UAKtvFDT1;Y*Yr=E--9`e0%$i}AqFzwepJ2UF_&o@eg>s#W9{?<;5CZg!qVrKneFV6qI5 z8pvsnx~}ig-Z82Ph49}Y7mCljNL~!OXT5I{W2LuzVz@P9{aUA96P53e#J}ZjxEExo zpS&?Zue{2T{73p?PzV1mIYx-zqdkvy(V|k--!6eN0-CjZJY8su+m?vpea*qj8rG}E zH{B|~?mTK^A?w|=KvN?jW$f{(FPqWoooIwG7oOdPFW5KWs{n^XUd-@F(5}hiGN`ZC zj{LL!!zA={xV7$P&2tC>S?C)37l02|>vS39)$I1!9h1A4Q4P-O?&KupPPb9)*hDB}N{~$} zV=0QTt#75J&rym>W9`(;qET6&n}N*F zo`K877dRw$*rwO`T0#Uj8L;$R1qldrjD+{Sz!8@8VJ#inYk~|+7*$xK7_|XW;M@Bq zm*?htNQbG5zW^OqlTfOvZ^hjhO3YyDp81{uq>TtDkUU(Sz8*k7Zy94>yjr zahIfb6%x4h^F&QJAG_+7=V%v5wOJugqY-FqwEX*w=#WyK{^6{APKpURwr$^v2#SD} zDWMlPDd8(v=9ycdm&H+UWE^LU@{sl=Po7|vH%6c8V;kmj}VyF-dgtslJp z@8eHw4<5MBqCllJ83xlS^xZR`&5_Sh5c*~reUmQ`@WwPRD{4r0a-1(OYOP`=(4B&x z*+voW>>sngL2I5Pg?iHQ($H=K@2biMTD!|Vw(1=N&5#!)YFT>BM+%pQGJTiI?m|Wi zI!pH&jZ1LNHt5wZTnbQSpbW}Pw!2aM?}t@QX(M-$o8U5`af+xWqID3A^`iN6M^&BD z>Dh{Y@t{!PtG11$tMfX1bu%A*A-m;>7K~IitDGk|(E>(tZ@lO@xk-%Aak$-fa(&6< za`!3fZlu7~v!+>B&o{MFT=D~%ZH;j?`KjDKLt6ygGJ7aW3)0K(M3q8b8-Zlw3OlpJ z(NP%asR@3VeUz;=JZL{M4jH?@o5WjQG#bD#rkazt(5}H9i zzx4cj(=KySe{iDv{!1RbYoo=e3nsa|FP&;5oo+Dv)Aba}%`Ab#oEBq@b4bfDiHv#4HXQe%WOXZ2Mgh=fYL_p*-l|8w`FegDBxmNwnISKSP zGH{+Fxx7#Xo_2wW^D!UA7@VN|%StJaR7*HHi@i_qFIC$~@j!J!$el2*Gy^wnCE)T_(7m?=zB(o54OY3MwkmJn{dho(j4vJvsNBn6r#Y~$2l2? zUVe4DvhVz$au@78~TWEPknYe z$r)93o^gNM9zU-e3`acwQq6}}2u$`oo*JtVvYl`k5Ah|B3y6^z@x!X4<-BQXvzc6_ z5#yIsDcyVJYUwov#v%E#^Wkd#yJOYz&P*@^qQ{Orw9#Y)8IhuSm#%R}yWQf^^G{!h z9_^1gjBa23R<|+GMR)()_hI~0h!oeCx6cUsmD9;n!E^4|l^wf&rIA(uosrnO?wd!hl vzR5s%sTzK=g}_v&(9Qu*7Sd}o-)yEqNHB6cFV~n7PsHSBoFkRu{x19vJQ~RX literal 0 HcmV?d00001 diff --git a/src/Assets/ascendants/strint.jpeg b/src/Assets/ascendants/strint.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..09d764dd4437c0cfe180af6fc35451cfbd6724a4 GIT binary patch literal 11631 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 literal 0 HcmV?d00001 diff --git a/src/Assets/ascendants/trickster.jpeg b/src/Assets/ascendants/trickster.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..12af9876e4f443d5a081a0975052cd5df3c84362 GIT binary patch literal 7526 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 Date: Sun, 17 Mar 2024 19:51:00 +0300 Subject: [PATCH 02/55] Add archives list control. --- src/Classes/ArchivesListControl.lua | 484 ++++++++++++++++++++++++++++ 1 file changed, 484 insertions(+) create mode 100644 src/Classes/ArchivesListControl.lua diff --git a/src/Classes/ArchivesListControl.lua b/src/Classes/ArchivesListControl.lua new file mode 100644 index 0000000000..f9847e58fd --- /dev/null +++ b/src/Classes/ArchivesListControl.lua @@ -0,0 +1,484 @@ +-- Path of Building +-- +-- Class: ArchivesListControl +-- Archives list control. +-- +local ipairs = ipairs +local s_format = string.format +local t_insert = table.insert +local dkjson = require "dkjson" + +local ArchivesListClass = newClass("ArchivesListControl", "ControlHost", "Control", + function(self, anchor, x, y, width, height, mode) + self.Control(anchor, x, y, width, height) + self.ControlHost() + self:SelectControl() + self.list = {} + self.rowHeight = 200 + self.scroll = "VERTICAL" + self.forceTooltip = false + self.font = "VAR" + self.errMsg = nil + self.listMode = "VERTICAL" + self.importButtons = {} + self.previewButtons = {} + self.mode = mode + self.inTransition = false + self:GetBuilds() + + self.controls.scrollBarV = new("ScrollBarControl", { "RIGHT", self, "RIGHT" }, -1, 0, self.scroll and 16 or 0, 0, + 40, "VERTICAL") { + y = function() + return (self.scrollH and -8 or 0) + end, + height = function() + local width, height = self:GetSize() + return height - 2 - (self.scrollH and 16 or 0) + end + } + if not self.scroll then + self.controls.scrollBarV.shown = false + end + + if self.mode ~= "similar" then + self.controls.latest = new("ButtonControl", { "TOP", self, "TOP" }, 0, -20, 60, 20, "Latest", function() + if self.mode ~= "latest" then + self.mode = "latest" + self:GetBuilds() + self.controls.latest.enabled = false + self.controls.trending.enabled = true + end + end) + self.controls.latest.enabled = self.mode ~= "latest" + self.controls.latest.x = function() + return -self.width() / 2 + 30 + end + self.controls.trending = new("ButtonControl", { "LEFT", self.controls.latest, "RIGHT" }, 0, 0, 80, 20, "Trending", function() + if not self.mode ~= "trending" then + self.mode = "trending" + self:GetBuilds() + self.controls.latest.enabled = true + self.controls.trending.enabled = false + end + end) + self.controls.trending.enabled = self.mode ~= "trending" + end + self.controls.all = new("ButtonControl", { "BOTTOM", self, "BOTTOM" }, 0, 1, self.width, 20, "See All", function() + local url = self:GetPageUrl() + if url then + OpenURL(url) + end + end) + end) + +function ArchivesListClass:IsMouseOver() + if not self:IsShown() then + return + end + return self:IsMouseInBounds() or self:GetMouseOverControl() +end + +function ArchivesListClass:OnKeyDown(key, doubleClick) + if not self:IsShown() or not self:IsEnabled() then + return + end + local mOverControl = self:GetMouseOverControl() + if mOverControl and mOverControl.OnKeyDown then + return mOverControl:OnKeyDown(key) + end + if not self:IsMouseOver() and key:match("BUTTON") then + return + end +end + +function ArchivesListClass:OnKeyUp(key) + if not self:IsShown() or not self:IsEnabled() then + return + end + + if self.controls.scrollBarV:IsScrollDownKey(key) then + self.controls.scrollBarV:Scroll(1) + elseif self.controls.scrollBarV:IsScrollUpKey(key) then + self.controls.scrollBarV:Scroll(-1) + end + + if key == "LEFTBUTTON" then + self:CheckButtons() + end +end + +function ArchivesListClass:GetHoveredButton() + if self.inTransition then + return + end + local cursorX, cursorY = GetCursorPos(); + cursorY = cursorY + self.controls.scrollBarV.offset + for i, importButton in ipairs(self.importButtons) do + if (cursorX > importButton.x0) and + (cursorX < importButton.x1) and + (cursorY > importButton.y0) and + (cursorY < importButton.y1) then + return { + button = importButton, + type = 'import' + } + end + end + + for i, previewButton in ipairs(self.previewButtons) do + if (cursorX > previewButton.x0) and + (cursorX < previewButton.x1) and + (cursorY > previewButton.y0) and + (cursorY < previewButton.y1) then + return { + button = previewButton, + type = 'preview' + } + end + end +end + +function ArchivesListClass:GetApiUrl() + local archivesUrl = 'https://pobarchives.com' + local apiPath = '/api/builds' + return archivesUrl .. apiPath .. '?q=' .. self.mode +end + +function ArchivesListClass:GetPageUrl() + local archivesUrl = 'https://pobarchives.com' + local buildsPath = '/builds' + if self.mode == "latest" then + return archivesUrl .. buildsPath .. '/yenTGNDb' + end + if self.mode == "trending" then + return archivesUrl .. buildsPath .. '/7U8QXU8m?sort=popularity' + end + if self.mode == "similar" then + return archivesUrl .. buildsPath .. '/?similar=' .. self.similarTo + end + + return nil +end + +function ArchivesListClass:GetAscendancyImageHandle(ascendancy) + local image = nil + if ascendancy then + image = NewImageHandle() + image:Load(s_format('Assets/ascendants/%s.jpeg', (ascendancy:gsub("^%l", string.lower)))) + end + + return image +end + +function ArchivesListClass:HandleButtonClick(button, buttonType) + if button then + self.inTransition = true + if buttonType == "import" then + local urlText = button.build_link:gsub("^[%s?]+", ""):gsub("[%s?]+$", "") -- Quick Trim + local websiteInfo = nil + for j = 1, #buildSites.websiteList do + if urlText:match(buildSites.websiteList[j].matchURL) then + websiteInfo = buildSites.websiteList[j] + end + end + + if websiteInfo then + buildSites.DownloadBuild(button.build_link, websiteInfo, function(isSuccess, data) + if isSuccess then + local xmlText = Inflate(common.base64.decode(data:gsub("-", "+"):gsub("_", "/"))) + if xmlText then + main:SetMode("BUILD", false, button.buildName, xmlText, nil, "skdglsdg") + end + end + end) + end + elseif buttonType == "preview" then + OpenURL(s_format('https://pobarchives.com/build/%s', button.short_uuid)) + end + self.inTransition = false + end +end + +function ArchivesListClass:CheckButtons() + if self.inTransition then + return + end + local cursorX, cursorY = GetCursorPos(); + cursorY = cursorY + self.controls.scrollBarV.offset + for i, importButton in ipairs(self.importButtons) do + if (cursorX > importButton.x0) and + (cursorX < importButton.x1) and + (cursorY > importButton.y0) and + (cursorY < importButton.y1) then + self:HandleButtonClick(importButton, 'import') + break + end + end + + for i, previewButton in ipairs(self.previewButtons) do + if (cursorX > previewButton.x0) and + (cursorX < previewButton.x1) and + (cursorY > previewButton.y0) and + (cursorY < previewButton.y1) then + self:HandleButtonClick(previewButton, 'preview') + break + end + end +end + +-- splits strings by word and maxWidth +function ArchivesListClass:splitStringByWidth(str, maxWidth) + local words = {} + for word in str:gmatch("%S+") do + table.insert(words, word) + end + + local lines = {} + local currentLine = "" + for i, word in ipairs(words) do + local wordWidth = DrawStringWidth(16, self.font, word) + if DrawStringWidth(16, self.font, currentLine .. " " .. word) <= maxWidth then + currentLine = currentLine .. (currentLine == "" and "" or " ") .. word + else + table.insert(lines, currentLine) + currentLine = word + end + end + table.insert(lines, currentLine) + + return lines +end + +-- wrappers for Drawing tools to apply scrolling +function ArchivesListClass:DrawImage(imgHandle, left, top, width, height) + local _, y = self:GetPos() + if top - self.controls.scrollBarV.offset >= y then + DrawImage(imgHandle, left, top - self.controls.scrollBarV.offset, width, height) + end +end + +function ArchivesListClass:DrawString(left, top, align, height, font, text) + local _, y = self:GetPos() + if top - self.controls.scrollBarV.offset >= y then + DrawString(left, top - self.controls.scrollBarV.offset, align, height, font, text) + end +end + +function ArchivesListClass:Draw(viewPort, noTooltip) + -- clear button states + wipeTable(self.previewButtons) + wipeTable(self.importButtons) + + -- get variables + local x, y = self:GetPos() + local width, height = self:GetSize() + + -- drawing area + SetDrawColor(0.5, 0.5, 0.5) + DrawImage(nil, x, y, width, height) + -- borders + SetDrawColor(0, 0, 0) + DrawImage(nil, x + 1, y + 1, width - 2, height - 2) + SetDrawColor(1, 1, 1) + + -- apply padding + x = x + 10; + y = y + 10; + + local currentHeight = y + + -- write status message + if self.errMsg then + self:DrawString(x, currentHeight, "LEFT", 16, self.font, self.errMsg) + end + + local scrollBarV = self.controls.scrollBarV + self.scrollOffsetV = scrollBarV.offset + + currentHeight = y - self.scrollOffsetV + + -- loop through builds + for _, build in pairs(self.list) do + if build.buildName and build.short_uuid then + if build.ascendancy then + self:DrawImage(nil, x + self.width() - 115, currentHeight - 1, 82, 82) + local image = self:GetAscendancyImageHandle(build.ascendancy) + self:DrawImage(image, x + self.width() - 114, currentHeight, 80, 80) + end + + if build.buildName then + for _, line in pairs(self:splitStringByWidth(build.buildName, self.width() - 125)) do + self:DrawString(x, currentHeight, "LEFT", 16, self.font, line) + currentHeight = currentHeight + 16 + end + end + + -- decorator line + currentHeight = currentHeight + 8 + SetDrawColor(0.5, 0.5, 0.5) + self:DrawImage(nil, x - 10, currentHeight, self.width() - 115, 1) + currentHeight = currentHeight + 8 + + -- main skill, ascendancy + SetDrawColor(1, 1, 1) + if build.mainSkill then + self:DrawString(x, currentHeight, "LEFT", 14, self.font, s_format('%s', build.mainSkill)) + else + self:DrawString(x, currentHeight, "LEFT", 14, self.font, s_format('%s', '-')) + end + + currentHeight = currentHeight + 20 + + -- decorator line + SetDrawColor(0.5, 0.5, 0.5) + self:DrawImage(nil, x - 10, currentHeight, self.width() - 115, 1) + currentHeight = currentHeight + 8 + SetDrawColor(1, 1, 1) + + -- stats + if build.dps then + -- SetDrawColor(1, 0, 0) + self:DrawString(x, currentHeight, "LEFT", 14, self.font, s_format('DPS: %0.f', build.dps)) + end + if build.life then + -- SetDrawColor(0, 1, 0) + self:DrawString(x + (self.width() - 100) / 3, currentHeight, "LEFT", 14, self.font, + s_format('Life: %0.f', build.life)) + else + if build.es then + -- SetDrawColor(0, 1, 0) + self:DrawString(x + (self.width() - 100) / 3, currentHeight, "LEFT", 14, self.font, + s_format('ES: %0.f', build.es)) + end + end + if build.ehp then + -- SetDrawColor(0, 0, 1) + self:DrawString(x + 2 * (self.width() - 100) / 3, currentHeight, "LEFT", 14, self.font, + s_format('EHP: %0.f', build.ehp)) + end + + currentHeight = currentHeight + 20 + + -- decorator line + SetDrawColor(0.5, 0.5, 0.5) + self:DrawImage(nil, x - 10, currentHeight, self.width() - 115, 1) + currentHeight = currentHeight + 8 + SetDrawColor(1, 1, 1) + + -- author + if build.author then + self:DrawString(x, currentHeight, "LEFT", 14, self.font, s_format('%s', build.author)) + end + + currentHeight = currentHeight + 20 + -- decorator line + SetDrawColor(0.5, 0.5, 0.5) + self:DrawImage(nil, x - 10, currentHeight, self.width(), 1) + + -- import button + local importButton = { + build_link = build.build_link, + buildName = build.buildName, + x0 = x, + y0 = currentHeight + 6, + x1 = x + 47, + y1 = currentHeight + 26 + } + table.insert(self.importButtons, importButton) + -- preview button + local previewButton = { + short_uuid = build.short_uuid, + x0 = x + 50, + y0 = currentHeight + 6, + x1 = x + 115, + y1 = currentHeight + 26 + } + table.insert(self.previewButtons, previewButton) + local hButton = self:GetHoveredButton() + + -- highlight if hovered + if hButton and hButton.type == "import" and hButton.button.build_link == importButton.build_link then + SetDrawColor(1, 1, 1) + self:DrawImage(nil, x, currentHeight + 6, 47, 20) + SetDrawColor(0.5, 0.5, 0.5) + else + self:DrawImage(nil, x, currentHeight + 6, 47, 20) + SetDrawColor(0, 0, 0) + end + + -- draw the button + self:DrawImage(nil, x + 1, currentHeight + 7, 45, 18) + if self.inTransition then + SetDrawColor(0.5, 0.5, 0.5) + else + SetDrawColor(1, 1, 1) + end + self:DrawString(x + 5, currentHeight + 8, "LEFT", 14, self.font, 'Import') + + + -- highlight if hovered + if hButton and hButton.type == "preview" and hButton.button.short_uuid == previewButton.short_uuid then + SetDrawColor(1, 1, 1) + self:DrawImage(nil, x + 50, currentHeight + 6, 55, 20) + SetDrawColor(0.5, 0.5, 0.5) + else + SetDrawColor(0.5, 0.5, 0.5) + self:DrawImage(nil, x + 50, currentHeight + 6, 55, 20) + SetDrawColor(0, 0, 0) + end + + self:DrawImage(nil, x + 51, currentHeight + 7, 53, 18) + if self.inTransition then + SetDrawColor(0.5, 0.5, 0.5) + else + SetDrawColor(1, 1, 1) + end + self:DrawString(x + 55, currentHeight + 8, "LEFT", 14, self.font, 'Preview') + + -- bottom border + SetDrawColor(1, 1, 1) + currentHeight = currentHeight + 36 + self:DrawImage(nil, x - 10, currentHeight, self.width() - 1, 1) + currentHeight = currentHeight + 16 + end + end + + if scrollBarV.conDim ~= currentHeight then + scrollBarV:SetContentDimension(currentHeight, self.height()) + end + self:DrawControls(viewPort, (noTooltip and not self.forceTooltip) and self) +end + +function ArchivesListClass:GetBuilds() + self.errMsg = "Loading.." + wipeTable(self.list) + launch:DownloadPage(self:GetApiUrl(), function(response, errMsg) + if errMsg then + self.errMsg = errMsg + return + end + + local obj = dkjson.decode(response.body) + if not obj or not obj.builds or next(obj.builds) == nil then + self.errMsg = "No builds found." + return + end + + for _, value in pairs(obj.builds) do + local build = {} + build.buildName = value.build_info.title + build.author = value.build_info.author + build.mainSkill = value.build_info.mainSkill + build.ascendancy = value.build_info.ascendancy + build.short_uuid = value.build_info.short_uuid + build.build_link = value.build_info.build_link + build.ehp = value.stats.TotalEHP + build.life = value.stats.LifeUnreserved + build.es = value.stats.EnergyShield + build.dps = value.fullDPS + t_insert(self.list, build) + end + + self.errMsg = nil + end, {}) +end From 1d77fe6d1a5fb86f7b6c2cd539e819b15a417ba5 Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Sun, 17 Mar 2024 19:53:12 +0300 Subject: [PATCH 03/55] Add archive list control to buildlist module. * Make build list module responsive. --- src/Classes/BuildListControl.lua | 3 +++ src/Modules/BuildList.lua | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/Classes/BuildListControl.lua b/src/Classes/BuildListControl.lua index 59d61614df..699abc5d51 100644 --- a/src/Classes/BuildListControl.lua +++ b/src/Classes/BuildListControl.lua @@ -41,6 +41,9 @@ local BuildListClass = newClass("BuildListControl", "ListControl", function(self end end self.dragTargetList = { self.controls.path, self } + self.controls.path.width = function () + return self.width() + end end) function BuildListClass:SelByFileName(selFileName) diff --git a/src/Modules/BuildList.lua b/src/Modules/BuildList.lua index 0cf88da34f..e6f2e26936 100644 --- a/src/Modules/BuildList.lua +++ b/src/Modules/BuildList.lua @@ -60,14 +60,27 @@ function listMode:Init(selBuildName, subPath) self:SortList() end) self.controls.sort:SelByValue(main.buildSortMode, "sortMode") - self.controls.buildList = new("BuildListControl", {"TOP",self.anchor,"TOP"}, 0, 75, 900, 0, self) + self.controls.buildList = new("BuildListControl", {"TOP",self.anchor,"TOP"}, 0, 75, main.screenW / 2, 0, self) self.controls.buildList.height = function() return main.screenH - 80 end + self.controls.buildList.width = function () + return (main.screenW / 2) + end + self.controls.archiveList = new("ArchivesListControl", {"LEFT",self.controls.buildList,"RIGHT"}, 25, 0, main.screenW * 1 / 4 - 50, 0, "latest") + self.controls.archiveList.height = function() + return main.screenH - 80 + end + self.controls.archiveList.width = function () + return (main.screenW / 4 - 50) + end self.controls.searchText = new("EditControl", {"TOP",self.anchor,"TOP"}, 0, 25, 640, 20, self.filterBuildList, "Search", "%c%(%)", 100, function(buf) main.filterBuildList = buf self:BuildList() end, nil, nil, true) + self.controls.searchText.width = function () + return (main.screenW / 2 - 100) + end self:BuildList() self.controls.buildList:SelByFileName(selBuildName and selBuildName..".xml") From 157c4690e8d61da11c0791f33b201823e4843f9f Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Wed, 20 Mar 2024 16:18:08 +0300 Subject: [PATCH 04/55] ArchivesList: prevent missing image artwork for builds with no ascendancies. --- src/Classes/ArchivesListControl.lua | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Classes/ArchivesListControl.lua b/src/Classes/ArchivesListControl.lua index f9847e58fd..f45e3dfc8b 100644 --- a/src/Classes/ArchivesListControl.lua +++ b/src/Classes/ArchivesListControl.lua @@ -464,12 +464,15 @@ function ArchivesListClass:GetBuilds() return end + for _, value in pairs(obj.builds) do local build = {} build.buildName = value.build_info.title build.author = value.build_info.author build.mainSkill = value.build_info.mainSkill - build.ascendancy = value.build_info.ascendancy + if value.build_info.ascendancy ~= "None" then + build.ascendancy = value.build_info.ascendancy + end build.short_uuid = value.build_info.short_uuid build.build_link = value.build_info.build_link build.ehp = value.stats.TotalEHP From a761f671506c496a3a24415d6da38b9a1040671e Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Wed, 20 Mar 2024 16:35:13 +0300 Subject: [PATCH 05/55] ArchivesList: prevent line and stats collapsing on some builds. --- src/Classes/ArchivesListControl.lua | 70 ++++++++++++++++------------- 1 file changed, 40 insertions(+), 30 deletions(-) diff --git a/src/Classes/ArchivesListControl.lua b/src/Classes/ArchivesListControl.lua index f45e3dfc8b..dc1c756e3f 100644 --- a/src/Classes/ArchivesListControl.lua +++ b/src/Classes/ArchivesListControl.lua @@ -53,22 +53,24 @@ local ArchivesListClass = newClass("ArchivesListControl", "ControlHost", "Contro self.controls.latest.x = function() return -self.width() / 2 + 30 end - self.controls.trending = new("ButtonControl", { "LEFT", self.controls.latest, "RIGHT" }, 0, 0, 80, 20, "Trending", function() - if not self.mode ~= "trending" then - self.mode = "trending" - self:GetBuilds() - self.controls.latest.enabled = true - self.controls.trending.enabled = false - end - end) + self.controls.trending = new("ButtonControl", { "LEFT", self.controls.latest, "RIGHT" }, 0, 0, 80, 20, + "Trending", function() + if not self.mode ~= "trending" then + self.mode = "trending" + self:GetBuilds() + self.controls.latest.enabled = true + self.controls.trending.enabled = false + end + end) self.controls.trending.enabled = self.mode ~= "trending" end - self.controls.all = new("ButtonControl", { "BOTTOM", self, "BOTTOM" }, 0, 1, self.width, 20, "See All", function() - local url = self:GetPageUrl() - if url then - OpenURL(url) - end - end) + self.controls.all = new("ButtonControl", { "BOTTOM", self, "BOTTOM" }, 0, 1, self.width, 20, "See All", + function() + local url = self:GetPageUrl() + if url then + OpenURL(url) + end + end) end) function ArchivesListClass:IsMouseOver() @@ -306,12 +308,19 @@ function ArchivesListClass:Draw(viewPort, noTooltip) self:DrawImage(image, x + self.width() - 114, currentHeight, 80, 80) end + local lineCount = 0 if build.buildName then for _, line in pairs(self:splitStringByWidth(build.buildName, self.width() - 125)) do + lineCount = lineCount + 1 self:DrawString(x, currentHeight, "LEFT", 16, self.font, line) currentHeight = currentHeight + 16 end end + -- add at least 32 height to title row so that the ascendancy picture + -- does not overlap with other lines + if lineCount < 2 then + currentHeight = currentHeight + (16 * (2 - lineCount)) + end -- decorator line currentHeight = currentHeight + 8 @@ -335,6 +344,20 @@ function ArchivesListClass:Draw(viewPort, noTooltip) currentHeight = currentHeight + 8 SetDrawColor(1, 1, 1) + -- author + if build.author then + self:DrawString(x, currentHeight, "LEFT", 14, self.font, s_format('%s', build.author)) + end + + + currentHeight = currentHeight + 20 + + -- decorator line + SetDrawColor(0.5, 0.5, 0.5) + self:DrawImage(nil, x - 10, currentHeight, self.width(), 1) + currentHeight = currentHeight + 8 + SetDrawColor(1, 1, 1) + -- stats if build.dps then -- SetDrawColor(1, 0, 0) @@ -342,34 +365,21 @@ function ArchivesListClass:Draw(viewPort, noTooltip) end if build.life then -- SetDrawColor(0, 1, 0) - self:DrawString(x + (self.width() - 100) / 3, currentHeight, "LEFT", 14, self.font, + self:DrawString(x + (self.width()) / 3, currentHeight, "LEFT", 14, self.font, s_format('Life: %0.f', build.life)) else if build.es then -- SetDrawColor(0, 1, 0) - self:DrawString(x + (self.width() - 100) / 3, currentHeight, "LEFT", 14, self.font, + self:DrawString(x + (self.width()) / 3, currentHeight, "LEFT", 14, self.font, s_format('ES: %0.f', build.es)) end end if build.ehp then -- SetDrawColor(0, 0, 1) - self:DrawString(x + 2 * (self.width() - 100) / 3, currentHeight, "LEFT", 14, self.font, + self:DrawString(x + 2 * (self.width()) / 3, currentHeight, "LEFT", 14, self.font, s_format('EHP: %0.f', build.ehp)) end - currentHeight = currentHeight + 20 - - -- decorator line - SetDrawColor(0.5, 0.5, 0.5) - self:DrawImage(nil, x - 10, currentHeight, self.width() - 115, 1) - currentHeight = currentHeight + 8 - SetDrawColor(1, 1, 1) - - -- author - if build.author then - self:DrawString(x, currentHeight, "LEFT", 14, self.font, s_format('%s', build.author)) - end - currentHeight = currentHeight + 20 -- decorator line SetDrawColor(0.5, 0.5, 0.5) From 1cf2f592cd94ce3f5074abe9e9600caf8eab5eb3 Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Wed, 20 Mar 2024 17:23:21 +0300 Subject: [PATCH 06/55] ArchivesList: fix scrollbar content dimensions. --- src/Classes/ArchivesListControl.lua | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Classes/ArchivesListControl.lua b/src/Classes/ArchivesListControl.lua index dc1c756e3f..3ac39c7d15 100644 --- a/src/Classes/ArchivesListControl.lua +++ b/src/Classes/ArchivesListControl.lua @@ -24,6 +24,7 @@ local ArchivesListClass = newClass("ArchivesListControl", "ControlHost", "Contro self.previewButtons = {} self.mode = mode self.inTransition = false + self.contentHeight = nil self:GetBuilds() self.controls.scrollBarV = new("ScrollBarControl", { "RIGHT", self, "RIGHT" }, -1, 0, self.scroll and 16 or 0, 0, @@ -453,8 +454,11 @@ function ArchivesListClass:Draw(viewPort, noTooltip) end end - if scrollBarV.conDim ~= currentHeight then - scrollBarV:SetContentDimension(currentHeight, self.height()) + -- set scroll bar height + if not self.contentHeight and next(self.list) ~= nil then + print('setting new content dimension', currentHeight, self.height(), x) + scrollBarV:SetContentDimension(currentHeight - y - 10, self.height()) + self.contentHeight = currentHeight end self:DrawControls(viewPort, (noTooltip and not self.forceTooltip) and self) end @@ -462,6 +466,7 @@ end function ArchivesListClass:GetBuilds() self.errMsg = "Loading.." wipeTable(self.list) + self.contentHeight = nil launch:DownloadPage(self:GetApiUrl(), function(response, errMsg) if errMsg then self.errMsg = errMsg From 7035ed0f87ed1fa8dd3e06382dd08044bb9139b6 Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Wed, 27 Mar 2024 06:15:19 +0300 Subject: [PATCH 07/55] ArchivesListControl: Display life or es depending on which is greater. --- src/Classes/ArchivesListControl.lua | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/Classes/ArchivesListControl.lua b/src/Classes/ArchivesListControl.lua index 3ac39c7d15..ebf9fe0185 100644 --- a/src/Classes/ArchivesListControl.lua +++ b/src/Classes/ArchivesListControl.lua @@ -364,16 +364,10 @@ function ArchivesListClass:Draw(viewPort, noTooltip) -- SetDrawColor(1, 0, 0) self:DrawString(x, currentHeight, "LEFT", 14, self.font, s_format('DPS: %0.f', build.dps)) end - if build.life then + if build.life or build.es then -- SetDrawColor(0, 1, 0) self:DrawString(x + (self.width()) / 3, currentHeight, "LEFT", 14, self.font, - s_format('Life: %0.f', build.life)) - else - if build.es then - -- SetDrawColor(0, 1, 0) - self:DrawString(x + (self.width()) / 3, currentHeight, "LEFT", 14, self.font, - s_format('ES: %0.f', build.es)) - end + s_format('%s: %0.f', build.life > build.es and "Life" or "ES" , math.max(build.life, build.es))) end if build.ehp then -- SetDrawColor(0, 0, 1) From a5e14ae040e395418f53a1629ef9421663d3ee92 Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Wed, 27 Mar 2024 06:37:30 +0300 Subject: [PATCH 08/55] ArchivesListControl: prevent stats overlapping on smaller screens. --- src/Classes/ArchivesListControl.lua | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/Classes/ArchivesListControl.lua b/src/Classes/ArchivesListControl.lua index ebf9fe0185..250bbad1ee 100644 --- a/src/Classes/ArchivesListControl.lua +++ b/src/Classes/ArchivesListControl.lua @@ -360,25 +360,36 @@ function ArchivesListClass:Draw(viewPort, noTooltip) SetDrawColor(1, 1, 1) -- stats + local dpsText = "DPS:" + local lifeText = "Life: " + local ehpText = "EHP: " if build.dps then -- SetDrawColor(1, 0, 0) - self:DrawString(x, currentHeight, "LEFT", 14, self.font, s_format('DPS: %0.f', build.dps)) + dpsText = s_format('DPS: %0.f', build.dps) end if build.life or build.es then -- SetDrawColor(0, 1, 0) - self:DrawString(x + (self.width()) / 3, currentHeight, "LEFT", 14, self.font, - s_format('%s: %0.f', build.life > build.es and "Life" or "ES" , math.max(build.life, build.es))) + lifeText = s_format('%s: %0.f', build.life > build.es and "Life" or "ES" , math.max(build.life, build.es)) end if build.ehp then -- SetDrawColor(0, 0, 1) - self:DrawString(x + 2 * (self.width()) / 3, currentHeight, "LEFT", 14, self.font, - s_format('EHP: %0.f', build.ehp)) + ehpText = s_format('EHP: %0.f', build.ehp) + end + + -- prevent overlapping on smaller screens. + local dpsWidth = DrawStringWidth(16, self.font, dpsText) + local lifeWidth = DrawStringWidth(16, self.font, lifeText) + local ehpWidth = DrawStringWidth(16, self.font, ehpText) + if (dpsWidth + lifeWidth + ehpWidth < self.width() - 30) then + self:DrawString(x, currentHeight, "LEFT", 14, self.font, dpsText) + self:DrawString(x + dpsWidth, currentHeight, "LEFT", 14, self.font, lifeText) + self:DrawString(x + dpsWidth + lifeWidth, currentHeight, "LEFT", 14, self.font, ehpText) + currentHeight = currentHeight + 20 + -- decorator line + SetDrawColor(0.5, 0.5, 0.5) + self:DrawImage(nil, x - 10, currentHeight, self.width(), 1) end - currentHeight = currentHeight + 20 - -- decorator line - SetDrawColor(0.5, 0.5, 0.5) - self:DrawImage(nil, x - 10, currentHeight, self.width(), 1) -- import button local importButton = { From 4c8c995b506a6126e216711fdbd5a531bcb90604 Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Wed, 27 Mar 2024 06:41:23 +0300 Subject: [PATCH 09/55] ArchivesListControl: resize button on screen size change. --- src/Classes/ArchivesListControl.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Classes/ArchivesListControl.lua b/src/Classes/ArchivesListControl.lua index 250bbad1ee..9336895a73 100644 --- a/src/Classes/ArchivesListControl.lua +++ b/src/Classes/ArchivesListControl.lua @@ -72,6 +72,9 @@ local ArchivesListClass = newClass("ArchivesListControl", "ControlHost", "Contro OpenURL(url) end end) + self.controls.all.width = function() + return self.width() + end end) function ArchivesListClass:IsMouseOver() From 2e4c79fc82c0aeb0a4033198ec9c678c928932b2 Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Wed, 27 Mar 2024 06:50:01 +0300 Subject: [PATCH 10/55] ArchivesListControl: implement word-break on main skill field. --- src/Classes/ArchivesListControl.lua | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Classes/ArchivesListControl.lua b/src/Classes/ArchivesListControl.lua index 9336895a73..c486a560b3 100644 --- a/src/Classes/ArchivesListControl.lua +++ b/src/Classes/ArchivesListControl.lua @@ -335,12 +335,17 @@ function ArchivesListClass:Draw(viewPort, noTooltip) -- main skill, ascendancy SetDrawColor(1, 1, 1) if build.mainSkill then - self:DrawString(x, currentHeight, "LEFT", 14, self.font, s_format('%s', build.mainSkill)) + for _, line in pairs(self:splitStringByWidth(build.mainSkill, self.width() - 125)) do + lineCount = lineCount + 1 + self:DrawString(x, currentHeight, "LEFT", 16, self.font, line) + currentHeight = currentHeight + 16 + end + currentHeight = currentHeight + 4 else self:DrawString(x, currentHeight, "LEFT", 14, self.font, s_format('%s', '-')) + currentHeight = currentHeight + 20 end - currentHeight = currentHeight + 20 -- decorator line SetDrawColor(0.5, 0.5, 0.5) From b231a238c8f74d42a32ec962b401dbecc949035f Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Wed, 27 Mar 2024 06:53:33 +0300 Subject: [PATCH 11/55] ArchivesListControl: hide author name from the build cards. --- src/Classes/ArchivesListControl.lua | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/Classes/ArchivesListControl.lua b/src/Classes/ArchivesListControl.lua index c486a560b3..d303e97a6e 100644 --- a/src/Classes/ArchivesListControl.lua +++ b/src/Classes/ArchivesListControl.lua @@ -353,19 +353,19 @@ function ArchivesListClass:Draw(viewPort, noTooltip) currentHeight = currentHeight + 8 SetDrawColor(1, 1, 1) - -- author - if build.author then - self:DrawString(x, currentHeight, "LEFT", 14, self.font, s_format('%s', build.author)) - end + -- -- author + -- if build.author then + -- self:DrawString(x, currentHeight, "LEFT", 14, self.font, s_format('%s', build.author)) + -- end - currentHeight = currentHeight + 20 + -- currentHeight = currentHeight + 20 - -- decorator line - SetDrawColor(0.5, 0.5, 0.5) - self:DrawImage(nil, x - 10, currentHeight, self.width(), 1) - currentHeight = currentHeight + 8 - SetDrawColor(1, 1, 1) + -- -- decorator line + -- SetDrawColor(0.5, 0.5, 0.5) + -- self:DrawImage(nil, x - 10, currentHeight, self.width(), 1) + -- currentHeight = currentHeight + 8 + -- SetDrawColor(1, 1, 1) -- stats local dpsText = "DPS:" From 8b10fd04ecffe6769f33b0346b2650499bec878c Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Wed, 27 Mar 2024 08:16:36 +0300 Subject: [PATCH 12/55] rename ExtBuildListControl. --- ...ArchivesListControl.lua => ExtBuildListControl.lua} | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) rename src/Classes/{ArchivesListControl.lua => ExtBuildListControl.lua} (98%) diff --git a/src/Classes/ArchivesListControl.lua b/src/Classes/ExtBuildListControl.lua similarity index 98% rename from src/Classes/ArchivesListControl.lua rename to src/Classes/ExtBuildListControl.lua index d303e97a6e..913cfd928f 100644 --- a/src/Classes/ArchivesListControl.lua +++ b/src/Classes/ExtBuildListControl.lua @@ -24,7 +24,7 @@ local ArchivesListClass = newClass("ArchivesListControl", "ControlHost", "Contro self.previewButtons = {} self.mode = mode self.inTransition = false - self.contentHeight = nil + self.contentHeight = 0 self:GetBuilds() self.controls.scrollBarV = new("ScrollBarControl", { "RIGHT", self, "RIGHT" }, -1, 0, self.scroll and 16 or 0, 0, @@ -468,11 +468,11 @@ function ArchivesListClass:Draw(viewPort, noTooltip) end -- set scroll bar height - if not self.contentHeight and next(self.list) ~= nil then - print('setting new content dimension', currentHeight, self.height(), x) - scrollBarV:SetContentDimension(currentHeight - y - 10, self.height()) + -- if not self.contentHeight and next(self.list) ~= nil then + print(currentHeight, self.scrollOffsetV, self.height()) + self.controls.scrollBarV:SetContentDimension(currentHeight + self.scrollOffsetV - y, self.height()) self.contentHeight = currentHeight - end + -- end self:DrawControls(viewPort, (noTooltip and not self.forceTooltip) and self) end From 987b3a3ece282d4e9aeb2733a39092a98cf23ea1 Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Wed, 27 Mar 2024 08:20:07 +0300 Subject: [PATCH 13/55] Refactor class names. --- src/Classes/ExtBuildListControl.lua | 30 ++++++++++++++--------------- src/Modules/BuildList.lua | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/Classes/ExtBuildListControl.lua b/src/Classes/ExtBuildListControl.lua index 913cfd928f..5f71b14fcd 100644 --- a/src/Classes/ExtBuildListControl.lua +++ b/src/Classes/ExtBuildListControl.lua @@ -8,7 +8,7 @@ local s_format = string.format local t_insert = table.insert local dkjson = require "dkjson" -local ArchivesListClass = newClass("ArchivesListControl", "ControlHost", "Control", +local ExtBuildListControlClass = newClass("ExtBuildListControl", "ControlHost", "Control", function(self, anchor, x, y, width, height, mode) self.Control(anchor, x, y, width, height) self.ControlHost() @@ -77,14 +77,14 @@ local ArchivesListClass = newClass("ArchivesListControl", "ControlHost", "Contro end end) -function ArchivesListClass:IsMouseOver() +function ExtBuildListControlClass:IsMouseOver() if not self:IsShown() then return end return self:IsMouseInBounds() or self:GetMouseOverControl() end -function ArchivesListClass:OnKeyDown(key, doubleClick) +function ExtBuildListControlClass:OnKeyDown(key, doubleClick) if not self:IsShown() or not self:IsEnabled() then return end @@ -97,7 +97,7 @@ function ArchivesListClass:OnKeyDown(key, doubleClick) end end -function ArchivesListClass:OnKeyUp(key) +function ExtBuildListControlClass:OnKeyUp(key) if not self:IsShown() or not self:IsEnabled() then return end @@ -113,7 +113,7 @@ function ArchivesListClass:OnKeyUp(key) end end -function ArchivesListClass:GetHoveredButton() +function ExtBuildListControlClass:GetHoveredButton() if self.inTransition then return end @@ -144,13 +144,13 @@ function ArchivesListClass:GetHoveredButton() end end -function ArchivesListClass:GetApiUrl() +function ExtBuildListControlClass:GetApiUrl() local archivesUrl = 'https://pobarchives.com' local apiPath = '/api/builds' return archivesUrl .. apiPath .. '?q=' .. self.mode end -function ArchivesListClass:GetPageUrl() +function ExtBuildListControlClass:GetPageUrl() local archivesUrl = 'https://pobarchives.com' local buildsPath = '/builds' if self.mode == "latest" then @@ -166,7 +166,7 @@ function ArchivesListClass:GetPageUrl() return nil end -function ArchivesListClass:GetAscendancyImageHandle(ascendancy) +function ExtBuildListControlClass:GetAscendancyImageHandle(ascendancy) local image = nil if ascendancy then image = NewImageHandle() @@ -176,7 +176,7 @@ function ArchivesListClass:GetAscendancyImageHandle(ascendancy) return image end -function ArchivesListClass:HandleButtonClick(button, buttonType) +function ExtBuildListControlClass:HandleButtonClick(button, buttonType) if button then self.inTransition = true if buttonType == "import" then @@ -205,7 +205,7 @@ function ArchivesListClass:HandleButtonClick(button, buttonType) end end -function ArchivesListClass:CheckButtons() +function ExtBuildListControlClass:CheckButtons() if self.inTransition then return end @@ -233,7 +233,7 @@ function ArchivesListClass:CheckButtons() end -- splits strings by word and maxWidth -function ArchivesListClass:splitStringByWidth(str, maxWidth) +function ExtBuildListControlClass:splitStringByWidth(str, maxWidth) local words = {} for word in str:gmatch("%S+") do table.insert(words, word) @@ -256,21 +256,21 @@ function ArchivesListClass:splitStringByWidth(str, maxWidth) end -- wrappers for Drawing tools to apply scrolling -function ArchivesListClass:DrawImage(imgHandle, left, top, width, height) +function ExtBuildListControlClass:DrawImage(imgHandle, left, top, width, height) local _, y = self:GetPos() if top - self.controls.scrollBarV.offset >= y then DrawImage(imgHandle, left, top - self.controls.scrollBarV.offset, width, height) end end -function ArchivesListClass:DrawString(left, top, align, height, font, text) +function ExtBuildListControlClass:DrawString(left, top, align, height, font, text) local _, y = self:GetPos() if top - self.controls.scrollBarV.offset >= y then DrawString(left, top - self.controls.scrollBarV.offset, align, height, font, text) end end -function ArchivesListClass:Draw(viewPort, noTooltip) +function ExtBuildListControlClass:Draw(viewPort, noTooltip) -- clear button states wipeTable(self.previewButtons) wipeTable(self.importButtons) @@ -476,7 +476,7 @@ function ArchivesListClass:Draw(viewPort, noTooltip) self:DrawControls(viewPort, (noTooltip and not self.forceTooltip) and self) end -function ArchivesListClass:GetBuilds() +function ExtBuildListControlClass:GetBuilds() self.errMsg = "Loading.." wipeTable(self.list) self.contentHeight = nil diff --git a/src/Modules/BuildList.lua b/src/Modules/BuildList.lua index e6f2e26936..ed06306214 100644 --- a/src/Modules/BuildList.lua +++ b/src/Modules/BuildList.lua @@ -67,7 +67,7 @@ function listMode:Init(selBuildName, subPath) self.controls.buildList.width = function () return (main.screenW / 2) end - self.controls.archiveList = new("ArchivesListControl", {"LEFT",self.controls.buildList,"RIGHT"}, 25, 0, main.screenW * 1 / 4 - 50, 0, "latest") + self.controls.archiveList = new("ExtBuildListControl", {"LEFT",self.controls.buildList,"RIGHT"}, 25, 0, main.screenW * 1 / 4 - 50, 0, "latest") self.controls.archiveList.height = function() return main.screenH - 80 end From a15b2efd7a72d63abf0509a8dae645a8657bb102 Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Thu, 9 May 2024 16:11:26 +0300 Subject: [PATCH 14/55] Add ExtBuildListProvider abstract class. --- src/Classes/ExtBuildListProvider.lua | 53 ++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/Classes/ExtBuildListProvider.lua diff --git a/src/Classes/ExtBuildListProvider.lua b/src/Classes/ExtBuildListProvider.lua new file mode 100644 index 0000000000..eea55787f2 --- /dev/null +++ b/src/Classes/ExtBuildListProvider.lua @@ -0,0 +1,53 @@ +-- Path of Building +-- +-- Class: ExtBuildListProvider +-- External Build List Provider +-- +-- This is an abstract base class; derived classes can supply these properties and methods to implement their build list class: +-- .listTitles [Titles of different API endpoints that provide builds, i.e Latest, Popular] +-- :GetBuilds [Override this method to fill buildList with your API. Use .activeList to determine which tab is selected.] +-- :GetPageUrl [Return a page url that contains all builds in the current list. Use .activeList to determine which tab is selected.] +-- .buildList [Needs to be filled in :GetBuilds with current list. buildName and buildLink fields are required.] +-- .statusMsg [This can be used to print status message on the screen. Builds will not be listed if it has a value other than nil.] + +local ExtBuildListProviderClass = newClass("ExtBuildListProvider", + function(self, listTitles) + self.listTitles = listTitles + self.buildList = {} + self.activeList = nil + self.statusMsg = nil + end +) + +function ExtBuildListProviderClass:GetPageUrl() + return nil +end + +function ExtBuildListProviderClass:Activate() + if self.listTitles and next(self.listTitles) then + self:SetActiveList(self.listTitles[1]) + end +end + +function ExtBuildListProviderClass:SetActiveList(activeList) + if self.listTitles then + for _, value in ipairs(self.listTitles) do + if value == activeList then + self.activeList = activeList + self:GetBuilds() + end + end + end +end + +function ExtBuildListProviderClass:GetListTitles() + return self.listTitles +end + +function ExtBuildListProviderClass:GetActivePageUrl() + return nil +end + +function ExtBuildListProviderClass:GetBuilds() + return {} +end From d666b4bc1a93a086f9ae38ef9cc3d6e1f5194100 Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Thu, 9 May 2024 16:11:44 +0300 Subject: [PATCH 15/55] Add PoBArchivesProvider class. --- src/Classes/PoBArchivesProvider.lua | 75 +++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 src/Classes/PoBArchivesProvider.lua diff --git a/src/Classes/PoBArchivesProvider.lua b/src/Classes/PoBArchivesProvider.lua new file mode 100644 index 0000000000..665cac13fa --- /dev/null +++ b/src/Classes/PoBArchivesProvider.lua @@ -0,0 +1,75 @@ +-- Path of Building +-- +-- Class: ArchivesListControl +-- Archives list control. +-- + +local t_insert = table.insert +local dkjson = require "dkjson" + +local archivesUrl = 'https://pobarchives.com' + +local PoBArchivesProviderClass = newClass("PoBArchivesProvider", "ExtBuildListProvider", + function(self) + self.ExtBuildListProvider({"Latest", "Trending"}) + self.buildList = {} + end +) + +function PoBArchivesProviderClass:GetApiUrl() + local apiPath = '/api/builds' + return archivesUrl .. apiPath .. '?q=' .. string.lower(self.activeList) +end + +function PoBArchivesProviderClass:GetPageUrl() + local buildsPath = '/builds' + if self.activeList == "Latest" then + return archivesUrl .. buildsPath .. '/yenTGNDb' + end + if self.activeList == "Trending" then + return archivesUrl .. buildsPath .. '/7U8QXU8m?sort=popularity' + end + if self.activeList == "similar" then + return archivesUrl .. buildsPath .. '/?similar=' .. self.similarTo + end + + return nil +end + +function PoBArchivesProviderClass:GetBuilds() + self.statusMsg = "Loading.." + wipeTable(self.buildList) + self.contentHeight = nil + launch:DownloadPage(self:GetApiUrl(), function(response, errMsg) + if errMsg then + self.statusMsg = errMsg + return + end + + local obj = dkjson.decode(response.body) + if not obj or not obj.builds or next(obj.builds) == nil then + self.statusMsg = "No builds found." + return + end + + + for _, value in pairs(obj.builds) do + local build = {} + build.buildName = value.build_info.title + build.author = value.build_info.author + build.mainSkill = value.build_info.mainSkill + if value.build_info.ascendancy ~= "None" then + build.ascendancy = value.build_info.ascendancy + end + build.previewLink = "https://pobarchives.com/build/" .. value.build_info.short_uuid + build.buildLink = value.build_info.build_link + build.ehp = value.stats.TotalEHP + build.life = value.stats.LifeUnreserved + build.es = value.stats.EnergyShield + build.dps = value.fullDPS + t_insert(self.buildList, build) + end + + self.statusMsg = nil + end, {}) +end From 27cee02019c0e119c12155ef4e20506f139726be Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Thu, 9 May 2024 16:12:29 +0300 Subject: [PATCH 16/55] Modify ExtBuildListControl to have a generic implementation. --- src/Classes/ExtBuildListControl.lua | 266 +++++++++++++--------------- 1 file changed, 128 insertions(+), 138 deletions(-) diff --git a/src/Classes/ExtBuildListControl.lua b/src/Classes/ExtBuildListControl.lua index 5f71b14fcd..0ae9b06ecc 100644 --- a/src/Classes/ExtBuildListControl.lua +++ b/src/Classes/ExtBuildListControl.lua @@ -1,11 +1,12 @@ -- Path of Building -- --- Class: ArchivesListControl --- Archives list control. +-- Class: ExtBuildListControl +-- List control class for external build providers. -- local ipairs = ipairs local s_format = string.format local t_insert = table.insert +local m_max = math.max local dkjson = require "dkjson" local ExtBuildListControlClass = newClass("ExtBuildListControl", "ControlHost", "Control", @@ -13,69 +14,114 @@ local ExtBuildListControlClass = newClass("ExtBuildListControl", "ControlHost", self.Control(anchor, x, y, width, height) self.ControlHost() self:SelectControl() - self.list = {} + self.rowHeight = 200 self.scroll = "VERTICAL" self.forceTooltip = false self.font = "VAR" - self.errMsg = nil - self.listMode = "VERTICAL" self.importButtons = {} self.previewButtons = {} self.mode = mode self.inTransition = false self.contentHeight = 0 - self:GetBuilds() - - self.controls.scrollBarV = new("ScrollBarControl", { "RIGHT", self, "RIGHT" }, -1, 0, self.scroll and 16 or 0, 0, - 40, "VERTICAL") { - y = function() - return (self.scrollH and -8 or 0) - end, - height = function() - local width, height = self:GetSize() - return height - 2 - (self.scrollH and 16 or 0) - end + self.buildProviders = {} + self.activeListProvider = nil + + self.buildProviders = { + { + name = "PoB Archives", + impl = new("PoBArchivesProvider") + } } - if not self.scroll then - self.controls.scrollBarV.shown = false + self.buildProvidersList = {} + self.providerMaxLength = 150 + for _, provider in ipairs(self.buildProviders) do + self.providerMaxLength = m_max(self.providerMaxLength, DrawStringWidth(16, self.font, provider.name) + 30) + t_insert(self.buildProvidersList, provider.name) end - if self.mode ~= "similar" then - self.controls.latest = new("ButtonControl", { "TOP", self, "TOP" }, 0, -20, 60, 20, "Latest", function() - if self.mode ~= "latest" then - self.mode = "latest" - self:GetBuilds() - self.controls.latest.enabled = false - self.controls.trending.enabled = true - end - end) - self.controls.latest.enabled = self.mode ~= "latest" - self.controls.latest.x = function() - return -self.width() / 2 + 30 + ConPrintTable(self.buildProvidersList) + + -- set default + self:SetProvider("PoB Archives") + end) + +function ExtBuildListControlClass:SetProvider(providerName) + wipeTable(self.controls) + + self.controls.sort = new("DropDownControl", { "TOP", self, "TOP" }, 0, -20, self.providerMaxLength, 20, + self.buildProvidersList, function(index, value) + self:SetProvider(value) + end) { + x = function() + return self.width() / 2 - self.providerMaxLength / 2 + end + } + + self.controls.sort:SelByValue(providerName) + + self.activeListProvider = nil + + for _, provider in ipairs(self.buildProviders) do + ConPrintf("provider:", provider) + if provider.name == providerName then + self.activeListProvider = provider.impl + end + end + + if self.activeListProvider == nil then + printf("Build provider not found: %s", providerName) + return + end + + self.activeListProvider:Activate() + self.activeListProvider.buildListTitles = self.activeListProvider:GetListTitles() + + local lastControl = nil + for _, title in ipairs(self.activeListProvider:GetListTitles()) do + local stringWidth = DrawStringWidth(16, self.font, title) + local anchor = { "TOP", self, "TOP" } + if lastControl then + anchor = { "LEFT", lastControl, "RIGHT" } + end + local button = new("ButtonControl", anchor, 0, lastControl and 0 or -20, stringWidth + 10, 20, title, function() + self.activeListProvider:SetActiveList(title) + end) + -- button.enabled = self.mode ~= "latest" + if not lastControl then + button.x = function() + return (stringWidth + 10 - self.width()) / 2 end - self.controls.trending = new("ButtonControl", { "LEFT", self.controls.latest, "RIGHT" }, 0, 0, 80, 20, - "Trending", function() - if not self.mode ~= "trending" then - self.mode = "trending" - self:GetBuilds() - self.controls.latest.enabled = true - self.controls.trending.enabled = false - end - end) - self.controls.trending.enabled = self.mode ~= "trending" end - self.controls.all = new("ButtonControl", { "BOTTOM", self, "BOTTOM" }, 0, 1, self.width, 20, "See All", - function() - local url = self:GetPageUrl() - if url then - OpenURL(url) - end - end) - self.controls.all.width = function() - return self.width() + t_insert(self.controls, button) + lastControl = button + end + + self.controls.scrollBarV = new("ScrollBarControl", { "RIGHT", self, "RIGHT" }, -1, 0, self.scroll and 16 or 0, 0, + 40, "VERTICAL") { + -- y = function() + -- return (self.scrollH and -8 or 0) + -- end, + height = function() + local _, height = self:GetSize() + return height - 2 - (self.scrollH and 16 or 0) end - end) + } + if not self.scroll then + self.controls.scrollBarV.shown = false + end + + self.controls.all = new("ButtonControl", { "BOTTOM", self, "BOTTOM" }, 0, 1, self.width, 20, "See All", + function() + local url = self.activeListProvider:GetPageUrl() + if url then + OpenURL(url) + end + end) + self.controls.all.width = function() + return self.width() + end +end function ExtBuildListControlClass:IsMouseOver() if not self:IsShown() then @@ -144,28 +190,6 @@ function ExtBuildListControlClass:GetHoveredButton() end end -function ExtBuildListControlClass:GetApiUrl() - local archivesUrl = 'https://pobarchives.com' - local apiPath = '/api/builds' - return archivesUrl .. apiPath .. '?q=' .. self.mode -end - -function ExtBuildListControlClass:GetPageUrl() - local archivesUrl = 'https://pobarchives.com' - local buildsPath = '/builds' - if self.mode == "latest" then - return archivesUrl .. buildsPath .. '/yenTGNDb' - end - if self.mode == "trending" then - return archivesUrl .. buildsPath .. '/7U8QXU8m?sort=popularity' - end - if self.mode == "similar" then - return archivesUrl .. buildsPath .. '/?similar=' .. self.similarTo - end - - return nil -end - function ExtBuildListControlClass:GetAscendancyImageHandle(ascendancy) local image = nil if ascendancy then @@ -180,7 +204,7 @@ function ExtBuildListControlClass:HandleButtonClick(button, buttonType) if button then self.inTransition = true if buttonType == "import" then - local urlText = button.build_link:gsub("^[%s?]+", ""):gsub("[%s?]+$", "") -- Quick Trim + local urlText = button.buildLink:gsub("^[%s?]+", ""):gsub("[%s?]+$", "") -- Quick Trim local websiteInfo = nil for j = 1, #buildSites.websiteList do if urlText:match(buildSites.websiteList[j].matchURL) then @@ -189,7 +213,7 @@ function ExtBuildListControlClass:HandleButtonClick(button, buttonType) end if websiteInfo then - buildSites.DownloadBuild(button.build_link, websiteInfo, function(isSuccess, data) + buildSites.DownloadBuild(button.buildLink, websiteInfo, function(isSuccess, data) if isSuccess then local xmlText = Inflate(common.base64.decode(data:gsub("-", "+"):gsub("_", "/"))) if xmlText then @@ -199,7 +223,7 @@ function ExtBuildListControlClass:HandleButtonClick(button, buttonType) end) end elseif buttonType == "preview" then - OpenURL(s_format('https://pobarchives.com/build/%s', button.short_uuid)) + OpenURL(button.previewLink) end self.inTransition = false end @@ -236,21 +260,21 @@ end function ExtBuildListControlClass:splitStringByWidth(str, maxWidth) local words = {} for word in str:gmatch("%S+") do - table.insert(words, word) + t_insert(words, word) end local lines = {} local currentLine = "" - for i, word in ipairs(words) do - local wordWidth = DrawStringWidth(16, self.font, word) - if DrawStringWidth(16, self.font, currentLine .. " " .. word) <= maxWidth then + for _, word in ipairs(words) do + local wordWidth = DrawStringWidth(16, self.font, currentLine .. " " .. word) + if wordWidth <= maxWidth then currentLine = currentLine .. (currentLine == "" and "" or " ") .. word else - table.insert(lines, currentLine) + t_insert(lines, currentLine) currentLine = word end end - table.insert(lines, currentLine) + t_insert(lines, currentLine) return lines end @@ -271,6 +295,10 @@ function ExtBuildListControlClass:DrawString(left, top, align, height, font, tex end function ExtBuildListControlClass:Draw(viewPort, noTooltip) + if self.activeListProvider == nil then + return + end + -- clear button states wipeTable(self.previewButtons) wipeTable(self.importButtons) @@ -294,8 +322,8 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) local currentHeight = y -- write status message - if self.errMsg then - self:DrawString(x, currentHeight, "LEFT", 16, self.font, self.errMsg) + if self.activeListProvider.statusMsg then + self:DrawString(x, currentHeight, "LEFT", 16, self.font, self.activeListProvider.statusMsg) end local scrollBarV = self.controls.scrollBarV @@ -304,8 +332,8 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) currentHeight = y - self.scrollOffsetV -- loop through builds - for _, build in pairs(self.list) do - if build.buildName and build.short_uuid then + for _, build in pairs(self.activeListProvider.buildList) do + if build.buildName then if build.ascendancy then self:DrawImage(nil, x + self.width() - 115, currentHeight - 1, 82, 82) local image = self:GetAscendancyImageHandle(build.ascendancy) @@ -322,15 +350,15 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) end -- add at least 32 height to title row so that the ascendancy picture -- does not overlap with other lines - if lineCount < 2 then - currentHeight = currentHeight + (16 * (2 - lineCount)) + if lineCount < 3 then + currentHeight = currentHeight + (16 * (3 - lineCount)) end -- decorator line - currentHeight = currentHeight + 8 + currentHeight = currentHeight + 4 SetDrawColor(0.5, 0.5, 0.5) self:DrawImage(nil, x - 10, currentHeight, self.width() - 115, 1) - currentHeight = currentHeight + 8 + currentHeight = currentHeight + 4 -- main skill, ascendancy SetDrawColor(1, 1, 1) @@ -377,7 +405,7 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) end if build.life or build.es then -- SetDrawColor(0, 1, 0) - lifeText = s_format('%s: %0.f', build.life > build.es and "Life" or "ES" , math.max(build.life, build.es)) + lifeText = s_format('%s: %0.f', build.life > build.es and "Life" or "ES", math.max(build.life, build.es)) end if build.ehp then -- SetDrawColor(0, 0, 1) @@ -401,27 +429,27 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) -- import button local importButton = { - build_link = build.build_link, + buildLink = build.buildLink, buildName = build.buildName, x0 = x, y0 = currentHeight + 6, x1 = x + 47, y1 = currentHeight + 26 } - table.insert(self.importButtons, importButton) + t_insert(self.importButtons, importButton) -- preview button local previewButton = { - short_uuid = build.short_uuid, + previewLink = build.previewLink, x0 = x + 50, y0 = currentHeight + 6, x1 = x + 115, y1 = currentHeight + 26 } - table.insert(self.previewButtons, previewButton) + t_insert(self.previewButtons, previewButton) local hButton = self:GetHoveredButton() -- highlight if hovered - if hButton and hButton.type == "import" and hButton.button.build_link == importButton.build_link then + if hButton and hButton.type == "import" and hButton.button.buildLink == importButton.buildLink then SetDrawColor(1, 1, 1) self:DrawImage(nil, x, currentHeight + 6, 47, 20) SetDrawColor(0.5, 0.5, 0.5) @@ -430,7 +458,7 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) SetDrawColor(0, 0, 0) end - -- draw the button + -- draw the import button self:DrawImage(nil, x + 1, currentHeight + 7, 45, 18) if self.inTransition then SetDrawColor(0.5, 0.5, 0.5) @@ -441,7 +469,7 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) -- highlight if hovered - if hButton and hButton.type == "preview" and hButton.button.short_uuid == previewButton.short_uuid then + if hButton and hButton.type == "preview" and hButton.button.previewLink == previewButton.previewLink then SetDrawColor(1, 1, 1) self:DrawImage(nil, x + 50, currentHeight + 6, 55, 20) SetDrawColor(0.5, 0.5, 0.5) @@ -468,48 +496,10 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) end -- set scroll bar height - -- if not self.contentHeight and next(self.list) ~= nil then - print(currentHeight, self.scrollOffsetV, self.height()) + -- if not self.contentHeight and next(self.activeListProvider.buildList) ~= nil then + -- print(currentHeight, self.scrollOffsetV, self.height()) self.controls.scrollBarV:SetContentDimension(currentHeight + self.scrollOffsetV - y, self.height()) - self.contentHeight = currentHeight + self.contentHeight = currentHeight -- end self:DrawControls(viewPort, (noTooltip and not self.forceTooltip) and self) end - -function ExtBuildListControlClass:GetBuilds() - self.errMsg = "Loading.." - wipeTable(self.list) - self.contentHeight = nil - launch:DownloadPage(self:GetApiUrl(), function(response, errMsg) - if errMsg then - self.errMsg = errMsg - return - end - - local obj = dkjson.decode(response.body) - if not obj or not obj.builds or next(obj.builds) == nil then - self.errMsg = "No builds found." - return - end - - - for _, value in pairs(obj.builds) do - local build = {} - build.buildName = value.build_info.title - build.author = value.build_info.author - build.mainSkill = value.build_info.mainSkill - if value.build_info.ascendancy ~= "None" then - build.ascendancy = value.build_info.ascendancy - end - build.short_uuid = value.build_info.short_uuid - build.build_link = value.build_info.build_link - build.ehp = value.stats.TotalEHP - build.life = value.stats.LifeUnreserved - build.es = value.stats.EnergyShield - build.dps = value.fullDPS - t_insert(self.list, build) - end - - self.errMsg = nil - end, {}) -end From 09bd958e2903c0153a826ce9ee4af88377e5608f Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Thu, 9 May 2024 20:38:12 +0300 Subject: [PATCH 17/55] Highlight active tab, use white border. --- src/Classes/ExtBuildListControl.lua | 29 +++++++++++++++++++++------- src/Classes/ExtBuildListProvider.lua | 4 ++++ 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/Classes/ExtBuildListControl.lua b/src/Classes/ExtBuildListControl.lua index 0ae9b06ecc..d95ae4f50d 100644 --- a/src/Classes/ExtBuildListControl.lua +++ b/src/Classes/ExtBuildListControl.lua @@ -26,6 +26,7 @@ local ExtBuildListControlClass = newClass("ExtBuildListControl", "ControlHost", self.contentHeight = 0 self.buildProviders = {} self.activeListProvider = nil + self.tabs = {} self.buildProviders = { { @@ -48,6 +49,7 @@ local ExtBuildListControlClass = newClass("ExtBuildListControl", "ControlHost", function ExtBuildListControlClass:SetProvider(providerName) wipeTable(self.controls) + wipeTable(self.tabs) self.controls.sort = new("DropDownControl", { "TOP", self, "TOP" }, 0, -20, self.providerMaxLength, 20, self.buildProvidersList, function(index, value) @@ -78,15 +80,24 @@ function ExtBuildListControlClass:SetProvider(providerName) self.activeListProvider.buildListTitles = self.activeListProvider:GetListTitles() local lastControl = nil - for _, title in ipairs(self.activeListProvider:GetListTitles()) do + for index, title in ipairs(self.activeListProvider:GetListTitles()) do local stringWidth = DrawStringWidth(16, self.font, title) local anchor = { "TOP", self, "TOP" } if lastControl then anchor = { "LEFT", lastControl, "RIGHT" } end local button = new("ButtonControl", anchor, 0, lastControl and 0 or -20, stringWidth + 10, 20, title, function() + if self.activeListProvider:GetActiveList() == title then + return + end self.activeListProvider:SetActiveList(title) + for _, _button in ipairs(self.tabs) do + _button.locked = (_button.label == title) + end end) + + button.locked = index == 1 + -- button.enabled = self.mode ~= "latest" if not lastControl then button.x = function() @@ -94,6 +105,7 @@ function ExtBuildListControlClass:SetProvider(providerName) end end t_insert(self.controls, button) + t_insert(self.tabs, button) lastControl = button end @@ -308,7 +320,8 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) local width, height = self:GetSize() -- drawing area - SetDrawColor(0.5, 0.5, 0.5) + -- SetDrawColor(0.5, 0.5, 0.5) + SetDrawColor(1, 1, 1) DrawImage(nil, x, y, width, height) -- borders SetDrawColor(0, 0, 0) @@ -335,8 +348,10 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) for _, build in pairs(self.activeListProvider.buildList) do if build.buildName then if build.ascendancy then + SetDrawColor(0.5, 0.5, 0.5) self:DrawImage(nil, x + self.width() - 115, currentHeight - 1, 82, 82) local image = self:GetAscendancyImageHandle(build.ascendancy) + SetDrawColor(1, 1, 1) self:DrawImage(image, x + self.width() - 114, currentHeight, 80, 80) end @@ -357,7 +372,7 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) -- decorator line currentHeight = currentHeight + 4 SetDrawColor(0.5, 0.5, 0.5) - self:DrawImage(nil, x - 10, currentHeight, self.width() - 115, 1) + self:DrawImage(nil, x - 9, currentHeight, self.width() - 115, 1) currentHeight = currentHeight + 4 -- main skill, ascendancy @@ -377,7 +392,7 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) -- decorator line SetDrawColor(0.5, 0.5, 0.5) - self:DrawImage(nil, x - 10, currentHeight, self.width() - 115, 1) + self:DrawImage(nil, x - 9, currentHeight, self.width() - 115, 1) currentHeight = currentHeight + 8 SetDrawColor(1, 1, 1) @@ -391,7 +406,7 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) -- -- decorator line -- SetDrawColor(0.5, 0.5, 0.5) - -- self:DrawImage(nil, x - 10, currentHeight, self.width(), 1) + -- self:DrawImage(nil, x - 9, currentHeight, self.width(), 1) -- currentHeight = currentHeight + 8 -- SetDrawColor(1, 1, 1) @@ -423,7 +438,7 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) currentHeight = currentHeight + 20 -- decorator line SetDrawColor(0.5, 0.5, 0.5) - self:DrawImage(nil, x - 10, currentHeight, self.width(), 1) + self:DrawImage(nil, x - 9, currentHeight, self.width(), 1) end @@ -490,7 +505,7 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) -- bottom border SetDrawColor(1, 1, 1) currentHeight = currentHeight + 36 - self:DrawImage(nil, x - 10, currentHeight, self.width() - 1, 1) + self:DrawImage(nil, x - 9, currentHeight, self.width() - 1, 1) currentHeight = currentHeight + 16 end end diff --git a/src/Classes/ExtBuildListProvider.lua b/src/Classes/ExtBuildListProvider.lua index eea55787f2..9e10dcca71 100644 --- a/src/Classes/ExtBuildListProvider.lua +++ b/src/Classes/ExtBuildListProvider.lua @@ -40,6 +40,10 @@ function ExtBuildListProviderClass:SetActiveList(activeList) end end +function ExtBuildListProviderClass:GetActiveList() + return self.activeList +end + function ExtBuildListProviderClass:GetListTitles() return self.listTitles end From 34d5ed06e8110345aadb09f518fa3e5f2281f489 Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Thu, 9 May 2024 20:51:29 +0300 Subject: [PATCH 18/55] ExtBuildListControl: Add responsive behaviour to the tabs and dropdown. --- src/Classes/ExtBuildListControl.lua | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/Classes/ExtBuildListControl.lua b/src/Classes/ExtBuildListControl.lua index d95ae4f50d..8fdfeaf10d 100644 --- a/src/Classes/ExtBuildListControl.lua +++ b/src/Classes/ExtBuildListControl.lua @@ -7,6 +7,7 @@ local ipairs = ipairs local s_format = string.format local t_insert = table.insert local m_max = math.max +local m_min = math.min local dkjson = require "dkjson" local ExtBuildListControlClass = newClass("ExtBuildListControl", "ControlHost", "Control", @@ -41,8 +42,6 @@ local ExtBuildListControlClass = newClass("ExtBuildListControl", "ControlHost", t_insert(self.buildProvidersList, provider.name) end - ConPrintTable(self.buildProvidersList) - -- set default self:SetProvider("PoB Archives") end) @@ -54,18 +53,15 @@ function ExtBuildListControlClass:SetProvider(providerName) self.controls.sort = new("DropDownControl", { "TOP", self, "TOP" }, 0, -20, self.providerMaxLength, 20, self.buildProvidersList, function(index, value) self:SetProvider(value) - end) { - x = function() - return self.width() / 2 - self.providerMaxLength / 2 - end - } + end) self.controls.sort:SelByValue(providerName) self.activeListProvider = nil + local tabWidth = 0 + for _, provider in ipairs(self.buildProviders) do - ConPrintf("provider:", provider) if provider.name == providerName then self.activeListProvider = provider.impl end @@ -98,6 +94,8 @@ function ExtBuildListControlClass:SetProvider(providerName) button.locked = index == 1 + tabWidth = tabWidth + stringWidth + 10 + -- button.enabled = self.mode ~= "latest" if not lastControl then button.x = function() @@ -109,6 +107,14 @@ function ExtBuildListControlClass:SetProvider(providerName) lastControl = button end + -- responsiveness + self.controls.sort.width = function () + return m_min(150, self.width() - tabWidth) + end + self.controls.sort.x = function() + return (self.width() - self.controls.sort.width()) / 2 + end + self.controls.scrollBarV = new("ScrollBarControl", { "RIGHT", self, "RIGHT" }, -1, 0, self.scroll and 16 or 0, 0, 40, "VERTICAL") { -- y = function() @@ -510,9 +516,6 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) end end - -- set scroll bar height - -- if not self.contentHeight and next(self.activeListProvider.buildList) ~= nil then - -- print(currentHeight, self.scrollOffsetV, self.height()) self.controls.scrollBarV:SetContentDimension(currentHeight + self.scrollOffsetV - y, self.height()) self.contentHeight = currentHeight -- end From e947bf3457b69bb9980af98eba2ce39326b29ab4 Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Thu, 9 May 2024 23:27:07 +0300 Subject: [PATCH 19/55] ExtBuildListControl: Fix scrollbar. --- src/Classes/ExtBuildListControl.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Classes/ExtBuildListControl.lua b/src/Classes/ExtBuildListControl.lua index 8fdfeaf10d..41622aae3f 100644 --- a/src/Classes/ExtBuildListControl.lua +++ b/src/Classes/ExtBuildListControl.lua @@ -516,7 +516,7 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) end end - self.controls.scrollBarV:SetContentDimension(currentHeight + self.scrollOffsetV - y, self.height()) + self.controls.scrollBarV:SetContentDimension(currentHeight - y + 30, self.height()) self.contentHeight = currentHeight -- end self:DrawControls(viewPort, (noTooltip and not self.forceTooltip) and self) From c40227f01382410c572d28fef24ebd5708f95957 Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Fri, 10 May 2024 17:38:41 +0300 Subject: [PATCH 20/55] Store import links in the xml. --- src/Classes/ExtBuildListControl.lua | 2 +- src/Classes/ImportTab.lua | 6 ++++++ src/Modules/Build.lua | 3 ++- src/Modules/Main.lua | 2 +- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Classes/ExtBuildListControl.lua b/src/Classes/ExtBuildListControl.lua index 41622aae3f..14257c72da 100644 --- a/src/Classes/ExtBuildListControl.lua +++ b/src/Classes/ExtBuildListControl.lua @@ -235,7 +235,7 @@ function ExtBuildListControlClass:HandleButtonClick(button, buttonType) if isSuccess then local xmlText = Inflate(common.base64.decode(data:gsub("-", "+"):gsub("_", "/"))) if xmlText then - main:SetMode("BUILD", false, button.buildName, xmlText, nil, "skdglsdg") + main:SetMode("BUILD", false, button.buildName, xmlText, false, urlText) end end end) diff --git a/src/Classes/ImportTab.lua b/src/Classes/ImportTab.lua index cb87aba283..febf4bd5fe 100644 --- a/src/Classes/ImportTab.lua +++ b/src/Classes/ImportTab.lua @@ -357,6 +357,7 @@ function ImportTabClass:Load(xml, fileName) self.lastRealm = xml.attrib.lastRealm self.controls.accountRealm:SelByValue( self.lastRealm or main.lastRealm or "PC", "id" ) self.lastAccountHash = xml.attrib.lastAccountHash + self.importLink = xml.attrib.importLink self.controls.enablePartyExportBuffs.state = xml.attrib.exportParty == "true" self.build.partyTab.enableExportBuffs = self.controls.enablePartyExportBuffs.state if self.lastAccountHash then @@ -375,7 +376,12 @@ function ImportTabClass:Save(xml) lastAccountHash = self.lastAccountHash, lastCharacterHash = self.lastCharacterHash, exportParty = tostring(self.controls.enablePartyExportBuffs.state), + importLink = self.importLink } + + if self.build.importLink then + xml.attrib.importLink = self.build.importLink + end end function ImportTabClass:Draw(viewPort, inputEvents) diff --git a/src/Modules/Build.lua b/src/Modules/Build.lua index 9e1e59b038..900012b0a3 100644 --- a/src/Modules/Build.lua +++ b/src/Modules/Build.lua @@ -23,9 +23,10 @@ local function InsertIfNew(t, val) table.insert(t, val) end -function buildMode:Init(dbFileName, buildName, buildXML, convertBuild) +function buildMode:Init(dbFileName, buildName, buildXML, convertBuild, importLink) self.dbFileName = dbFileName self.buildName = buildName + self.importLink = importLink if dbFileName then self.dbFileSubPath = self.dbFileName:sub(#main.buildPath + 1, -#self.buildName - 5) else diff --git a/src/Modules/Main.lua b/src/Modules/Main.lua index 5c1696023d..e7d41e1611 100644 --- a/src/Modules/Main.lua +++ b/src/Modules/Main.lua @@ -103,7 +103,7 @@ function main:Init() self:SetMode("BUILD", false, data) else local xmlText = Inflate(common.base64.decode(data:gsub("-","+"):gsub("_","/"))) - self:SetMode("BUILD", false, "Imported Build", xmlText) + self:SetMode("BUILD", false, "Imported Build", xmlText, false, arg[1]) self.newModeChangeToTree = true end end) From 2b48b6bb0e8cbd5a6de6af7b4a631b1138010744 Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Sat, 18 May 2024 14:13:52 +0300 Subject: [PATCH 21/55] Build: Implement similar builds list. --- src/Classes/ExtBuildListControl.lua | 21 ++++------------- src/Classes/ImportTab.lua | 4 ++-- src/Classes/PoBArchivesProvider.lua | 23 +++++++++++++----- src/Modules/Build.lua | 36 +++++++++++++++++++++++++++++ src/Modules/BuildList.lua | 14 ++++++++--- 5 files changed, 71 insertions(+), 27 deletions(-) diff --git a/src/Classes/ExtBuildListControl.lua b/src/Classes/ExtBuildListControl.lua index 14257c72da..2635080719 100644 --- a/src/Classes/ExtBuildListControl.lua +++ b/src/Classes/ExtBuildListControl.lua @@ -11,7 +11,7 @@ local m_min = math.min local dkjson = require "dkjson" local ExtBuildListControlClass = newClass("ExtBuildListControl", "ControlHost", "Control", - function(self, anchor, x, y, width, height, mode) + function(self, anchor, x, y, width, height, providers) self.Control(anchor, x, y, width, height) self.ControlHost() self:SelectControl() @@ -22,37 +22,26 @@ local ExtBuildListControlClass = newClass("ExtBuildListControl", "ControlHost", self.font = "VAR" self.importButtons = {} self.previewButtons = {} - self.mode = mode self.inTransition = false self.contentHeight = 0 - self.buildProviders = {} - self.activeListProvider = nil self.tabs = {} - - self.buildProviders = { - { - name = "PoB Archives", - impl = new("PoBArchivesProvider") - } - } + self.activeListProvider = nil + self.buildProviders = providers self.buildProvidersList = {} self.providerMaxLength = 150 for _, provider in ipairs(self.buildProviders) do self.providerMaxLength = m_max(self.providerMaxLength, DrawStringWidth(16, self.font, provider.name) + 30) t_insert(self.buildProvidersList, provider.name) end - - -- set default - self:SetProvider("PoB Archives") end) -function ExtBuildListControlClass:SetProvider(providerName) +function ExtBuildListControlClass:Init(providerName) wipeTable(self.controls) wipeTable(self.tabs) self.controls.sort = new("DropDownControl", { "TOP", self, "TOP" }, 0, -20, self.providerMaxLength, 20, self.buildProvidersList, function(index, value) - self:SetProvider(value) + self:Init(value) end) self.controls.sort:SelByValue(providerName) diff --git a/src/Classes/ImportTab.lua b/src/Classes/ImportTab.lua index febf4bd5fe..a651dbec9b 100644 --- a/src/Classes/ImportTab.lua +++ b/src/Classes/ImportTab.lua @@ -297,12 +297,12 @@ You can get this from your web browser's cookies while logged into the Path of E if self.controls.importCodeMode.selIndex == 1 then main:OpenConfirmPopup("Build Import", colorCodes.WARNING.."Warning:^7 Importing to the current build will erase ALL existing data for this build.", "Import", function() self.build:Shutdown() - self.build:Init(self.build.dbFileName, self.build.buildName, self.importCodeXML) + self.build:Init(self.build.dbFileName, self.build.buildName, self.importCodeXML, false, self.controls.importCodeIn.buf) self.build.viewMode = "TREE" end) else self.build:Shutdown() - self.build:Init(false, "Imported build", self.importCodeXML) + self.build:Init(false, "Imported build", self.importCodeXML, false, self.controls.importCodeIn.buf) self.build.viewMode = "TREE" end end diff --git a/src/Classes/PoBArchivesProvider.lua b/src/Classes/PoBArchivesProvider.lua index 665cac13fa..775769e4fc 100644 --- a/src/Classes/PoBArchivesProvider.lua +++ b/src/Classes/PoBArchivesProvider.lua @@ -8,17 +8,27 @@ local t_insert = table.insert local dkjson = require "dkjson" local archivesUrl = 'https://pobarchives.com' +-- local archivesUrl = "http://localhost:3000" local PoBArchivesProviderClass = newClass("PoBArchivesProvider", "ExtBuildListProvider", - function(self) - self.ExtBuildListProvider({"Latest", "Trending"}) + function(self, importLink) + if not importLink then + self.ExtBuildListProvider({"Latest", "Trending"}) + else + self.ExtBuildListProvider({"Similar"}) + self.importLink = importLink + end self.buildList = {} end ) function PoBArchivesProviderClass:GetApiUrl() local apiPath = '/api/builds' - return archivesUrl .. apiPath .. '?q=' .. string.lower(self.activeList) + if self.importLink then + return archivesUrl .. apiPath .. '?similar=' .. self.importLink + else + return archivesUrl .. apiPath .. '?q=' .. string.lower(self.activeList) + end end function PoBArchivesProviderClass:GetPageUrl() @@ -29,8 +39,9 @@ function PoBArchivesProviderClass:GetPageUrl() if self.activeList == "Trending" then return archivesUrl .. buildsPath .. '/7U8QXU8m?sort=popularity' end - if self.activeList == "similar" then - return archivesUrl .. buildsPath .. '/?similar=' .. self.similarTo + -- TODO extract id and page + if self.activeList == "Similar" then + return archivesUrl .. buildsPath .. '/?similar=' .. self.importLink end return nil @@ -61,7 +72,7 @@ function PoBArchivesProviderClass:GetBuilds() if value.build_info.ascendancy ~= "None" then build.ascendancy = value.build_info.ascendancy end - build.previewLink = "https://pobarchives.com/build/" .. value.build_info.short_uuid + build.previewLink = archivesUrl .. "/build/" .. value.build_info.short_uuid build.buildLink = value.build_info.build_link build.ehp = value.stats.TotalEHP build.life = value.stats.LifeUnreserved diff --git a/src/Modules/Build.lua b/src/Modules/Build.lua index 900012b0a3..2eca251454 100644 --- a/src/Modules/Build.lua +++ b/src/Modules/Build.lua @@ -234,6 +234,32 @@ function buildMode:Init(dbFileName, buildName, buildXML, convertBuild, importLin self.buildFlag = true end) + -- local width, height = self:GetSize() + if self.importLink then + local buildProviders = { + { + name = "PoB Archives", + impl = new("PoBArchivesProvider", self.importLink) + } + } + + self.controls.similarBuildList = new("ExtBuildListControl", nil, main.screenW - 410, 100, 410, main.screenH - 500, buildProviders) + self.controls.similarBuildList.shown = false + self.controls.similarBuildList.height = function() + return main.screenH - 200 + end + self.controls.similarBuildList.width = function () + return 400 + end + + self.controls.similarBuilds = new("ButtonControl", {"LEFT",self.controls.secondaryAscendDrop,"RIGHT"}, 8, 0, 100, 20, "Similar Builds", function() + self.controls.similarBuildList:Init("PoB Archives") + self.controls.similarBuildList.shown = not self.controls.similarBuildList:IsShown() + -- self.controls.similarBuilds.locked = self.controls.similarBuildList:IsShown() + end) + + end + -- List of display stats -- This defines the stats in the side bar, and also which stats show in node/item comparisons -- This may be user-customisable in the future @@ -1632,6 +1658,16 @@ function buildMode:LoadDB(xmlText, fileName) end end + -- Check if xml has an import link + for _, node in ipairs(dbXML[1]) do + if type(node) == "table" and node.elem == "Import" then + if node.attrib.importLink and not self.importLink then + self.importLink = node.attrib.importLink + end + break + end + end + -- Store other sections for later processing for _, node in ipairs(dbXML[1]) do if type(node) == "table" then diff --git a/src/Modules/BuildList.lua b/src/Modules/BuildList.lua index ed06306214..15c09f1ecb 100644 --- a/src/Modules/BuildList.lua +++ b/src/Modules/BuildList.lua @@ -67,11 +67,19 @@ function listMode:Init(selBuildName, subPath) self.controls.buildList.width = function () return (main.screenW / 2) end - self.controls.archiveList = new("ExtBuildListControl", {"LEFT",self.controls.buildList,"RIGHT"}, 25, 0, main.screenW * 1 / 4 - 50, 0, "latest") - self.controls.archiveList.height = function() + + local buildProviders = { + { + name = "PoB Archives", + impl = new("PoBArchivesProvider") + } + } + self.controls.extBuildList = new("ExtBuildListControl", {"LEFT",self.controls.buildList,"RIGHT"}, 25, 0, main.screenW * 1 / 4 - 50, 0, buildProviders) + self.controls.extBuildList:Init("PoB Archives") + self.controls.extBuildList.height = function() return main.screenH - 80 end - self.controls.archiveList.width = function () + self.controls.extBuildList.width = function () return (main.screenW / 4 - 50) end self.controls.searchText = new("EditControl", {"TOP",self.anchor,"TOP"}, 0, 25, 640, 20, self.filterBuildList, "Search", "%c%(%)", 100, function(buf) From 58b20a0d28b6d7105eb2048f4cc1dcbdd6320027 Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Sat, 18 May 2024 14:15:01 +0300 Subject: [PATCH 22/55] ExtBuildListControl: Prevent overflow on bottom side. --- src/Classes/ExtBuildListControl.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Classes/ExtBuildListControl.lua b/src/Classes/ExtBuildListControl.lua index 2635080719..e938b54e81 100644 --- a/src/Classes/ExtBuildListControl.lua +++ b/src/Classes/ExtBuildListControl.lua @@ -289,14 +289,14 @@ end -- wrappers for Drawing tools to apply scrolling function ExtBuildListControlClass:DrawImage(imgHandle, left, top, width, height) local _, y = self:GetPos() - if top - self.controls.scrollBarV.offset >= y then + if top - self.controls.scrollBarV.offset >= y and top + height - self.controls.scrollBarV.offset < self.height() + y then DrawImage(imgHandle, left, top - self.controls.scrollBarV.offset, width, height) end end function ExtBuildListControlClass:DrawString(left, top, align, height, font, text) local _, y = self:GetPos() - if top - self.controls.scrollBarV.offset >= y then + if top - self.controls.scrollBarV.offset >= y and top + height - self.controls.scrollBarV.offset < self.height() + y then DrawString(left, top - self.controls.scrollBarV.offset, align, height, font, text) end end From 9e4a5a1a872a70c7adebd73fbe15fd20ee66ec39 Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Sat, 18 May 2024 16:04:32 +0300 Subject: [PATCH 23/55] Common: Add import build utility function. --- src/Classes/ExtBuildListControl.lua | 22 +++++----------------- src/Modules/Common.lua | 26 ++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 17 deletions(-) diff --git a/src/Classes/ExtBuildListControl.lua b/src/Classes/ExtBuildListControl.lua index e938b54e81..a40e7a0f58 100644 --- a/src/Classes/ExtBuildListControl.lua +++ b/src/Classes/ExtBuildListControl.lua @@ -211,24 +211,12 @@ function ExtBuildListControlClass:HandleButtonClick(button, buttonType) if button then self.inTransition = true if buttonType == "import" then - local urlText = button.buildLink:gsub("^[%s?]+", ""):gsub("[%s?]+$", "") -- Quick Trim - local websiteInfo = nil - for j = 1, #buildSites.websiteList do - if urlText:match(buildSites.websiteList[j].matchURL) then - websiteInfo = buildSites.websiteList[j] + ImportBuild(button.buildLink, function (xmlText, urlText) + print(xmlText, urlText) + if xmlText then + main:SetMode("BUILD", false, button.buildName, xmlText, false, urlText) end - end - - if websiteInfo then - buildSites.DownloadBuild(button.buildLink, websiteInfo, function(isSuccess, data) - if isSuccess then - local xmlText = Inflate(common.base64.decode(data:gsub("-", "+"):gsub("_", "/"))) - if xmlText then - main:SetMode("BUILD", false, button.buildName, xmlText, false, urlText) - end - end - end) - end + end) elseif buttonType == "preview" then OpenURL(button.previewLink) end diff --git a/src/Modules/Common.lua b/src/Modules/Common.lua index 89fefe1f91..826f3fa3aa 100644 --- a/src/Modules/Common.lua +++ b/src/Modules/Common.lua @@ -967,4 +967,30 @@ function string:matchOrPattern(pattern) end end return false +end + +function ImportBuild(importLink, callback) + local urlText = importLink:gsub("^[%s?]+", ""):gsub("[%s?]+$", "") -- Quick Trim + if urlText:match("youtube%.com/redirect%?") or urlText:match("google%.com/url%?") then + local nested_url = urlText:gsub(".*[?&]q=([^&]+).*", "%1") + urlText = UrlDecode(nested_url) + end + local websiteInfo = nil + for j = 1, #buildSites.websiteList do + if urlText and urlText:match(buildSites.websiteList[j].matchURL) then + websiteInfo = buildSites.websiteList[j] + end + end + + -- its an import link + if websiteInfo then + buildSites.DownloadBuild(urlText, websiteInfo, function(isSuccess, data) + if isSuccess then + callback(Inflate(common.base64.decode(data:gsub("-", "+"):gsub("_", "/"))), urlText) + end + end) + else + -- try to decode input buffer + callback(Inflate(common.base64.decode(importLink:gsub("-", "+"):gsub("_", "/"))), nil) + end end \ No newline at end of file From 37b01b659faf9eea205fe69987d85fb7c024e4e6 Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Thu, 23 May 2024 22:46:28 +0300 Subject: [PATCH 24/55] Remove unnecessary debug. --- src/Classes/ExtBuildListControl.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Classes/ExtBuildListControl.lua b/src/Classes/ExtBuildListControl.lua index a40e7a0f58..0c43c28bc4 100644 --- a/src/Classes/ExtBuildListControl.lua +++ b/src/Classes/ExtBuildListControl.lua @@ -212,7 +212,6 @@ function ExtBuildListControlClass:HandleButtonClick(button, buttonType) self.inTransition = true if buttonType == "import" then ImportBuild(button.buildLink, function (xmlText, urlText) - print(xmlText, urlText) if xmlText then main:SetMode("BUILD", false, button.buildName, xmlText, false, urlText) end From a5756dcd17f16637c6de7b42ca328bd44acd0d3b Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Thu, 23 May 2024 22:46:49 +0300 Subject: [PATCH 25/55] Convert protocol handler URI's to import links on startup. --- src/Modules/BuildSiteTools.lua | 32 ++++++++++++++++++++++++-------- src/Modules/Main.lua | 5 +++-- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/Modules/BuildSiteTools.lua b/src/Modules/BuildSiteTools.lua index 7addec9301..58c068991c 100644 --- a/src/Modules/BuildSiteTools.lua +++ b/src/Modules/BuildSiteTools.lua @@ -10,17 +10,17 @@ buildSites = { } buildSites.websiteList = { { label = "pobb.in", id = "POBBin", matchURL = "pobb%.in/.+", regexURL = "pobb%.in/(.+)%s*$", downloadURL = "pobb.in/pob/%1", - codeOut = "https://pobb.in/", postUrl = "https://pobb.in/pob/", postFields = "" + codeOut = "https://pobb.in/", postUrl = "https://pobb.in/pob/", postFields = "", linkURL = "pobb.in/%1" }, { label = "PoeNinja", id = "PoeNinja", matchURL = "poe%.ninja/pob/%w+", regexURL = "poe%.ninja/pob/(%w+)%s*$", downloadURL = "poe.ninja/pob/raw/%1", - codeOut = "", postUrl = "https://poe.ninja/pob/api/api_post.php", postFields = "api_paste_code=" + codeOut = "", postUrl = "https://poe.ninja/pob/api/api_post.php", postFields = "api_paste_code=", linkURL="poe.ninja/pob/%1" }, { - label = "Pastebin.com", id = "pastebin", matchURL = "pastebin%.com/%w+", regexURL = "pastebin%.com/(%w+)%s*$", downloadURL = "pastebin.com/raw/%1", + label = "Pastebin.com", id = "pastebin", matchURL = "pastebin%.com/%w+", regexURL = "pastebin%.com/(%w+)%s*$", downloadURL = "pastebin.com/raw/%1", linkURL = "pastebin.com/%1" }, - { label = "PastebinP.com", id = "pastebinProxy", matchURL = "pastebinp%.com/%w+", regexURL = "pastebinp%.com/(%w+)%s*$", downloadURL = "pastebinp.com/raw/%1" }, - { label = "Rentry.co", id = "rentry", matchURL = "rentry%.co/%w+", regexURL = "rentry%.co/(%w+)%s*$", downloadURL = "rentry.co/paste/%1/raw" }, + { label = "PastebinP.com", id = "pastebinProxy", matchURL = "pastebinp%.com/%w+", regexURL = "pastebinp%.com/(%w+)%s*$", downloadURL = "pastebinp.com/raw/%1", linkURL = "pastebin.com/%1" }, + { label = "Rentry.co", id = "rentry", matchURL = "rentry%.co/%w+", regexURL = "rentry%.co/(%w+)%s*$", downloadURL = "rentry.co/paste/%1/raw", linkURL = "rentry.co/%1" }, } --- Uploads a PoB build code to a website @@ -83,12 +83,28 @@ function buildSites.DownloadBuild(link, websiteInfo, callback) if websiteInfo then launch:DownloadPage(siteCodeURL, function(response, errMsg) if errMsg then - callback(false, errMsg) + callback(false, errMsg, siteCodeURL) else - callback(true, response.body) + callback(true, response.body, siteCodeURL) end end) else - callback(false, "Download information not found") + callback(false, "Download information not found", siteCodeURL) end end + +-- Parses and converts URI's to import links. Currently only supports protocol handler URI's, extend as needed. +-- @param uri String Example: pob://pobbin/ or pob://poeninja/ +function buildSites.ParseImportLinkFromURI(uri) + local importLink = nil + + -- Check if it's an URI from protocol handler + for _, siteInfo in ipairs(buildSites.websiteList) do + if uri:match("^pob:[/\\]*" .. siteInfo.id:lower() .. "[/\\]+(.+)") then + importLink = uri:gsub("^pob:[/\\]*" .. siteInfo.id:lower() .. "[/\\]+(.+)", "https://" .. siteInfo.linkURL) + break + end + end + + return importLink +end \ No newline at end of file diff --git a/src/Modules/Main.lua b/src/Modules/Main.lua index e7d41e1611..af13abb7e8 100644 --- a/src/Modules/Main.lua +++ b/src/Modules/Main.lua @@ -98,12 +98,13 @@ function main:Init() local ignoreBuild if arg[1] then - buildSites.DownloadBuild(arg[1], nil, function(isSuccess, data) + local importLink = buildSites.ParseImportLinkFromURI(arg[1]) + buildSites.DownloadBuild(arg[1], nil, function(isSuccess, data, importLink) if not isSuccess then self:SetMode("BUILD", false, data) else local xmlText = Inflate(common.base64.decode(data:gsub("-","+"):gsub("_","/"))) - self:SetMode("BUILD", false, "Imported Build", xmlText, false, arg[1]) + self:SetMode("BUILD", false, "Imported Build", xmlText, false, importLink) self.newModeChangeToTree = true end end) From 48c3a9725fd419786e87011655eac131d074932c Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Mon, 15 Jul 2024 19:50:49 +0300 Subject: [PATCH 26/55] Implement similarity check for all builds. - Add Metadata section to build cards. --- src/Classes/ExtBuildListControl.lua | 58 ++++++++---- src/Classes/ExtBuildListProvider.lua | 4 + src/Classes/PoBArchivesProvider.lua | 136 +++++++++++++++++++-------- src/Modules/Build.lua | 39 ++++---- src/Modules/BuildList.lua | 2 +- 5 files changed, 160 insertions(+), 79 deletions(-) diff --git a/src/Classes/ExtBuildListControl.lua b/src/Classes/ExtBuildListControl.lua index 0c43c28bc4..31941cbab0 100644 --- a/src/Classes/ExtBuildListControl.lua +++ b/src/Classes/ExtBuildListControl.lua @@ -61,6 +61,7 @@ function ExtBuildListControlClass:Init(providerName) return end + self.activeListProvider:SetImportCode(self.importCode) self.activeListProvider:Activate() self.activeListProvider.buildListTitles = self.activeListProvider:GetListTitles() @@ -118,18 +119,24 @@ function ExtBuildListControlClass:Init(providerName) self.controls.scrollBarV.shown = false end - self.controls.all = new("ButtonControl", { "BOTTOM", self, "BOTTOM" }, 0, 1, self.width, 20, "See All", - function() - local url = self.activeListProvider:GetPageUrl() - if url then - OpenURL(url) - end - end) - self.controls.all.width = function() - return self.width() + if self.activeListProvider:GetPageUrl() then + self.controls.all = new("ButtonControl", { "BOTTOM", self, "BOTTOM" }, 0, 1, self.width, 20, "See All", + function() + local url = self.activeListProvider:GetPageUrl() + if url then + OpenURL(url) + end + end) + self.controls.all.width = function() + return self.width() + end end end +function ExtBuildListControlClass:SetImportCode(importCode) + self.importCode = importCode +end + function ExtBuildListControlClass:IsMouseOver() if not self:IsShown() then return @@ -378,19 +385,19 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) currentHeight = currentHeight + 8 SetDrawColor(1, 1, 1) - -- -- author - -- if build.author then - -- self:DrawString(x, currentHeight, "LEFT", 14, self.font, s_format('%s', build.author)) - -- end + -- author + if build.author then + self:DrawString(x, currentHeight, "LEFT", 14, self.font, s_format('%s', build.author)) + end - -- currentHeight = currentHeight + 20 + currentHeight = currentHeight + 20 - -- -- decorator line - -- SetDrawColor(0.5, 0.5, 0.5) - -- self:DrawImage(nil, x - 9, currentHeight, self.width(), 1) - -- currentHeight = currentHeight + 8 - -- SetDrawColor(1, 1, 1) + -- decorator line + SetDrawColor(0.5, 0.5, 0.5) + self:DrawImage(nil, x - 9, currentHeight, self.width(), 1) + currentHeight = currentHeight + 8 + SetDrawColor(1, 1, 1) -- stats local dpsText = "DPS:" @@ -423,6 +430,19 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) self:DrawImage(nil, x - 9, currentHeight, self.width(), 1) end + if build.metadata then + currentHeight = currentHeight + 4 + for _, metadata in pairs(build.metadata) do + SetDrawColor(1, 1, 1) + self:DrawString(x, currentHeight, "LEFT", 16, self.font, metadata.key .. ": " .. metadata.value) + currentHeight = currentHeight + 20 + SetDrawColor(0.5, 0.5, 0.5) + self:DrawImage(nil, x - 9, currentHeight, self.width(), 1) + currentHeight = currentHeight + 4 + end + + end + -- import button local importButton = { diff --git a/src/Classes/ExtBuildListProvider.lua b/src/Classes/ExtBuildListProvider.lua index 9e10dcca71..37f2bc27f1 100644 --- a/src/Classes/ExtBuildListProvider.lua +++ b/src/Classes/ExtBuildListProvider.lua @@ -55,3 +55,7 @@ end function ExtBuildListProviderClass:GetBuilds() return {} end + +function ExtBuildListProviderClass:SetImportCode(importCode) + self.importCode = importCode +end diff --git a/src/Classes/PoBArchivesProvider.lua b/src/Classes/PoBArchivesProvider.lua index 775769e4fc..e726103900 100644 --- a/src/Classes/PoBArchivesProvider.lua +++ b/src/Classes/PoBArchivesProvider.lua @@ -8,26 +8,24 @@ local t_insert = table.insert local dkjson = require "dkjson" local archivesUrl = 'https://pobarchives.com' --- local archivesUrl = "http://localhost:3000" local PoBArchivesProviderClass = newClass("PoBArchivesProvider", "ExtBuildListProvider", - function(self, importLink) - if not importLink then + function(self, mode) + if mode == "builds" then self.ExtBuildListProvider({"Latest", "Trending"}) else - self.ExtBuildListProvider({"Similar"}) - self.importLink = importLink + self.ExtBuildListProvider({"Similar Builds"}) end self.buildList = {} + self.mode = mode end ) function PoBArchivesProviderClass:GetApiUrl() - local apiPath = '/api/builds' - if self.importLink then - return archivesUrl .. apiPath .. '?similar=' .. self.importLink + if self.importCode then + return archivesUrl .. '/api/' .. 'recommendations' else - return archivesUrl .. apiPath .. '?q=' .. string.lower(self.activeList) + return archivesUrl .. '/api/builds?q=' .. string.lower(self.activeList) end end @@ -40,47 +38,107 @@ function PoBArchivesProviderClass:GetPageUrl() return archivesUrl .. buildsPath .. '/7U8QXU8m?sort=popularity' end -- TODO extract id and page - if self.activeList == "Similar" then - return archivesUrl .. buildsPath .. '/?similar=' .. self.importLink + if self.mode == "similar" then + -- return archivesUrl .. buildsPath .. '/?similar=' .. self.importCode + return nil end return nil end +function PoBArchivesProviderClass:GetRecommendations(buildCode, postURL) + local id = LaunchSubScript([[ + local code, connectionProtocol, proxyURL = ... + local curl = require("lcurl.safe") + local page = "" + local easy = curl.easy() + easy:setopt_url(']]..postURL..[[') + easy:setopt(curl.OPT_POST, true) + easy:setopt(curl.OPT_USERAGENT, "Path of Building/]]..launch.versionNumber..[[") + easy:setopt(curl.OPT_POSTFIELDS, ']].."importCode="..[['..code) + easy:setopt(curl.OPT_ACCEPT_ENCODING, "") + if connectionProtocol then + easy:setopt(curl.OPT_IPRESOLVE, connectionProtocol) + end + if proxyURL then + easy:setopt(curl.OPT_PROXY, proxyURL) + end + easy:setopt_writefunction(function(data) + page = page..data + return true + end) + easy:perform() + local res = easy:getinfo_response_code() + easy:close() + return page, res + ]], "", "", buildCode, launch.connectionProtocol, launch.proxyURL) + + if id then + launch:RegisterSubScript(id, function(response, errMsg) + if errMsg == 200 then + self.statusMsg = nil + self:ParseBuilds(response) + return + else + self.errorMsg = "Error: " .. errMsg + return + end + end) + end + +end + +function PoBArchivesProviderClass:ParseBuilds(message) + local obj = dkjson.decode(message) + if not obj or not obj.builds or next(obj.builds) == nil then + self.statusMsg = "No builds found." + return + end + + + for _, value in pairs(obj.builds) do + local build = {} + build.buildName = value.build_info.title + build.author = value.build_info.author + build.mainSkill = value.build_info.mainSkill + if value.build_info.ascendancy ~= "None" then + build.ascendancy = value.build_info.ascendancy + end + build.previewLink = archivesUrl .. "/build/" .. value.build_info.short_uuid + build.buildLink = value.build_info.build_link + build.ehp = value.stats.TotalEHP + build.life = value.stats.LifeUnreserved + build.es = value.stats.EnergyShield + build.dps = value.fullDPS + + if value.similarity_score then + build.metadata = { + {key="Match Score", value=value.similarity_score}, + } + end + -- build.score = value.similarity_score + t_insert(self.buildList, build) + end +end function PoBArchivesProviderClass:GetBuilds() self.statusMsg = "Loading.." wipeTable(self.buildList) self.contentHeight = nil - launch:DownloadPage(self:GetApiUrl(), function(response, errMsg) - if errMsg then - self.statusMsg = errMsg - return - end - local obj = dkjson.decode(response.body) - if not obj or not obj.builds or next(obj.builds) == nil then - self.statusMsg = "No builds found." - return - end - - for _, value in pairs(obj.builds) do - local build = {} - build.buildName = value.build_info.title - build.author = value.build_info.author - build.mainSkill = value.build_info.mainSkill - if value.build_info.ascendancy ~= "None" then - build.ascendancy = value.build_info.ascendancy + if self.mode == 'similar' then + self:GetRecommendations(self.importCode,self:GetApiUrl()) + return + else + launch:DownloadPage(self:GetApiUrl(), function(response, errMsg) + if errMsg then + self.statusMsg = errMsg + return end - build.previewLink = archivesUrl .. "/build/" .. value.build_info.short_uuid - build.buildLink = value.build_info.build_link - build.ehp = value.stats.TotalEHP - build.life = value.stats.LifeUnreserved - build.es = value.stats.EnergyShield - build.dps = value.fullDPS - t_insert(self.buildList, build) - end - self.statusMsg = nil - end, {}) + self:ParseBuilds(response.body) + + self.statusMsg = nil + end, {}) + end end diff --git a/src/Modules/Build.lua b/src/Modules/Build.lua index 2eca251454..77af764d2b 100644 --- a/src/Modules/Build.lua +++ b/src/Modules/Build.lua @@ -235,30 +235,29 @@ function buildMode:Init(dbFileName, buildName, buildXML, convertBuild, importLin end) -- local width, height = self:GetSize() - if self.importLink then - local buildProviders = { - { - name = "PoB Archives", - impl = new("PoBArchivesProvider", self.importLink) - } + local buildProviders = { + { + name = "PoB Archives", + impl = new("PoBArchivesProvider", "similar") } + } - self.controls.similarBuildList = new("ExtBuildListControl", nil, main.screenW - 410, 100, 410, main.screenH - 500, buildProviders) - self.controls.similarBuildList.shown = false - self.controls.similarBuildList.height = function() - return main.screenH - 200 - end - self.controls.similarBuildList.width = function () - return 400 - end + self.controls.similarBuildList = new("ExtBuildListControl", nil, main.screenW - 410, 100, 410, main.screenH - 500, buildProviders) + self.controls.similarBuildList.shown = false + self.controls.similarBuildList.height = function() + return main.screenH - 200 + end + self.controls.similarBuildList.width = function () + return 400 + end - self.controls.similarBuilds = new("ButtonControl", {"LEFT",self.controls.secondaryAscendDrop,"RIGHT"}, 8, 0, 100, 20, "Similar Builds", function() - self.controls.similarBuildList:Init("PoB Archives") - self.controls.similarBuildList.shown = not self.controls.similarBuildList:IsShown() - -- self.controls.similarBuilds.locked = self.controls.similarBuildList:IsShown() - end) + self.controls.similarBuilds = new("ButtonControl", {"LEFT",self.controls.secondaryAscendDrop,"RIGHT"}, 8, 0, 100, 20, "Similar Builds", function() + self.controls.similarBuildList:SetImportCode(common.base64.encode(Deflate(self:SaveDB("code"))):gsub("+","-"):gsub("/","_")) + self.controls.similarBuildList:Init("PoB Archives") - end + self.controls.similarBuildList.shown = not self.controls.similarBuildList:IsShown() + -- self.controls.similarBuilds.locked = self.controls.similarBuildList:IsShown() + end) -- List of display stats -- This defines the stats in the side bar, and also which stats show in node/item comparisons diff --git a/src/Modules/BuildList.lua b/src/Modules/BuildList.lua index 15c09f1ecb..736d6c0a17 100644 --- a/src/Modules/BuildList.lua +++ b/src/Modules/BuildList.lua @@ -71,7 +71,7 @@ function listMode:Init(selBuildName, subPath) local buildProviders = { { name = "PoB Archives", - impl = new("PoBArchivesProvider") + impl = new("PoBArchivesProvider", "builds") } } self.controls.extBuildList = new("ExtBuildListControl", {"LEFT",self.controls.buildList,"RIGHT"}, 25, 0, main.screenW * 1 / 4 - 50, 0, buildProviders) From c804c388478ea4f665fc6a6741297f448bf299ba Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Mon, 15 Jul 2024 19:58:41 +0300 Subject: [PATCH 27/55] Print proper error messages on build list. --- src/Classes/PoBArchivesProvider.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Classes/PoBArchivesProvider.lua b/src/Classes/PoBArchivesProvider.lua index e726103900..d795735656 100644 --- a/src/Classes/PoBArchivesProvider.lua +++ b/src/Classes/PoBArchivesProvider.lua @@ -79,7 +79,7 @@ function PoBArchivesProviderClass:GetRecommendations(buildCode, postURL) self:ParseBuilds(response) return else - self.errorMsg = "Error: " .. errMsg + self.statusMsg = "Error while fetching similar builds: " .. errMsg return end end) From 86b7b4e00f8393d3614a5e60006c368266122922 Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Mon, 15 Jul 2024 22:13:16 +0300 Subject: [PATCH 28/55] Add similar builds popup. --- src/Modules/Build.lua | 55 ++++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/src/Modules/Build.lua b/src/Modules/Build.lua index 77af764d2b..093b0280d2 100644 --- a/src/Modules/Build.lua +++ b/src/Modules/Build.lua @@ -234,28 +234,8 @@ function buildMode:Init(dbFileName, buildName, buildXML, convertBuild, importLin self.buildFlag = true end) - -- local width, height = self:GetSize() - local buildProviders = { - { - name = "PoB Archives", - impl = new("PoBArchivesProvider", "similar") - } - } - - self.controls.similarBuildList = new("ExtBuildListControl", nil, main.screenW - 410, 100, 410, main.screenH - 500, buildProviders) - self.controls.similarBuildList.shown = false - self.controls.similarBuildList.height = function() - return main.screenH - 200 - end - self.controls.similarBuildList.width = function () - return 400 - end - self.controls.similarBuilds = new("ButtonControl", {"LEFT",self.controls.secondaryAscendDrop,"RIGHT"}, 8, 0, 100, 20, "Similar Builds", function() - self.controls.similarBuildList:SetImportCode(common.base64.encode(Deflate(self:SaveDB("code"))):gsub("+","-"):gsub("/","_")) - self.controls.similarBuildList:Init("PoB Archives") - - self.controls.similarBuildList.shown = not self.controls.similarBuildList:IsShown() + self:OpenSimilarPopup() -- self.controls.similarBuilds.locked = self.controls.similarBuildList:IsShown() end) @@ -1260,6 +1240,39 @@ function buildMode:OpenSpectreLibrary() main:OpenPopup(410, 360, "Spectre Library", controls) end +function buildMode:OpenSimilarPopup() + local controls = { } + -- local width, height = self:GetSize() + local buildProviders = { + { + name = "PoB Archives", + impl = new("PoBArchivesProvider", "similar") + } + } + local width = 600 + local height = function() + return main.screenH * 0.8 + end + local padding = 50 + controls.similarBuildList = new("ExtBuildListControl", nil, 0, padding, width, height() - 2 * padding, buildProviders) + controls.similarBuildList.shown = true + controls.similarBuildList.height = function() + return height() - 2 * padding + end + controls.similarBuildList.width = function () + return width - padding + end + controls.similarBuildList:SetImportCode(common.base64.encode(Deflate(self:SaveDB("code"))):gsub("+","-"):gsub("/","_")) + controls.similarBuildList:Init("PoB Archives") + + -- controls.similarBuildList.shown = not controls.similarBuildList:IsShown() + + controls.close = new("ButtonControl", nil, 0, height() - (padding + 20) / 2, 80, 20, "Close", function() + main:ClosePopup() + end) + main:OpenPopup(width, height(), "Similar Builds", controls) +end + -- Refresh the set of controls used to select main group/skill/minion function buildMode:RefreshSkillSelectControls(controls, mainGroup, suffix) controls.mainSocketGroup.selIndex = mainGroup From b8c6277ca98637eddd29c57804c076ff6053972b Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Mon, 15 Jul 2024 23:03:27 +0300 Subject: [PATCH 29/55] Add class portrait assets. --- src/Assets/ascendants/ascendancy.jpeg | Bin 9047 -> 0 bytes src/Assets/ascendants/dex.jpeg | Bin 11848 -> 0 bytes src/Assets/ascendants/dexint.jpeg | Bin 11733 -> 0 bytes src/Assets/ascendants/duelist.jpeg | Bin 0 -> 4227 bytes src/Assets/ascendants/iconstrint.jpeg | Bin 0 -> 4268 bytes src/Assets/ascendants/int.jpeg | Bin 11401 -> 0 bytes src/Assets/ascendants/marauder.jpeg | Bin 0 -> 3534 bytes src/Assets/ascendants/ranger.jpeg | Bin 0 -> 4281 bytes src/Assets/ascendants/scion.jpeg | Bin 0 -> 3856 bytes src/Assets/ascendants/shadow.jpeg | Bin 0 -> 4345 bytes src/Assets/ascendants/skillpoint.jpeg | Bin 2525 -> 0 bytes src/Assets/ascendants/str.jpeg | Bin 11083 -> 0 bytes src/Assets/ascendants/strdex.jpeg | Bin 11726 -> 0 bytes src/Assets/ascendants/strdexint.jpeg | Bin 11213 -> 0 bytes src/Assets/ascendants/strint.jpeg | Bin 11631 -> 0 bytes src/Assets/ascendants/webp/IconStrDexInt.webp | Bin 0 -> 1540 bytes src/Assets/ascendants/webp/icondex.webp | Bin 0 -> 1462 bytes src/Assets/ascendants/webp/icondexint.webp | Bin 0 -> 1474 bytes src/Assets/ascendants/webp/iconint.webp | Bin 0 -> 1148 bytes src/Assets/ascendants/webp/iconstr.webp | Bin 0 -> 1224 bytes src/Assets/ascendants/webp/iconstrdex.webp | Bin 0 -> 1344 bytes src/Assets/ascendants/webp/iconstrint.webp | Bin 0 -> 1518 bytes src/Assets/ascendants/witch.jpeg | Bin 0 -> 3708 bytes 23 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/Assets/ascendants/ascendancy.jpeg delete mode 100644 src/Assets/ascendants/dex.jpeg delete mode 100644 src/Assets/ascendants/dexint.jpeg create mode 100644 src/Assets/ascendants/duelist.jpeg create mode 100644 src/Assets/ascendants/iconstrint.jpeg delete mode 100644 src/Assets/ascendants/int.jpeg create mode 100644 src/Assets/ascendants/marauder.jpeg create mode 100644 src/Assets/ascendants/ranger.jpeg create mode 100644 src/Assets/ascendants/scion.jpeg create mode 100644 src/Assets/ascendants/shadow.jpeg delete mode 100644 src/Assets/ascendants/skillpoint.jpeg delete mode 100644 src/Assets/ascendants/str.jpeg delete mode 100644 src/Assets/ascendants/strdex.jpeg delete mode 100644 src/Assets/ascendants/strdexint.jpeg delete mode 100644 src/Assets/ascendants/strint.jpeg create mode 100644 src/Assets/ascendants/webp/IconStrDexInt.webp create mode 100644 src/Assets/ascendants/webp/icondex.webp create mode 100644 src/Assets/ascendants/webp/icondexint.webp create mode 100644 src/Assets/ascendants/webp/iconint.webp create mode 100644 src/Assets/ascendants/webp/iconstr.webp create mode 100644 src/Assets/ascendants/webp/iconstrdex.webp create mode 100644 src/Assets/ascendants/webp/iconstrint.webp create mode 100644 src/Assets/ascendants/witch.jpeg diff --git a/src/Assets/ascendants/ascendancy.jpeg b/src/Assets/ascendants/ascendancy.jpeg deleted file mode 100644 index 19db81c785ad031e75de8e205a81e303f52d7ca3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9047 zcmb7pbx;&u)b_&CB`LLplyrCJ!h&>{G_rJem*fIVsHD;?jWmKF!V(J7U4kwwDbo4+ z`{w)S{que9%$+;u-1D4g=FYiu<8kqE6F{m7hJXPW7ytmqzXo_*0jL0gnE&Cw9{3Mf zI9UGy4+jSu2Op1s03Qz@pMdBI5dk3yAwE7a88OKdQc^Nf0wQt>a#D(aW77XfF#d}K zV&VM@BqhWr{Ac|?;;|nyia-;yv|1txCm_Tf7{C`t0Fo9UuWH{u{0JuUFEJ~EZ`glH6taeY8W3oO_i>Nf8 zu!$Nt_zp~M{rMM8j{*4Kjat;T*s#dY~|DCJqlWWHj;&c~)7gm+UT4jKu zMU##;#D||p?xc&V)b;5r7F>EFhkfSQCGRILv<@`OdsOuB;ysrJ{Wc#IB5SyiM}F-# z_UeCVh}?T-)~-BDQ3I1W3BI6F2177C6ZG#xuZzl(Ys^s^yy~?>9CEw3Q(3k%g`dlwN1&} z<(#uv)4>{}LCg*?1=(%MT{k&(?5OogCF2`UH_$fyjlD#er)!VW#T`HtYd3b6`xw@n*s}3Ei4jo=twMjH@-nU%Z+8@DV>!& zfq_4Cln;QiL=1~zbxYSrya>A&Ep78{;pa>PX9+D6Aa~CBqTkC>M2pmjP%?7AV{7&&^H9z(0 z=`uXEW4T*F>sE|Gw1wC6Rf=jlsSMV*#`|212`MYGw2%QmlL;$EN4{oriGKQs1ChPu zQB|=y3Ow_EWumH;=n#UQ7)e=xqCAPn)E~6vCiMzocgo^)^KPL>@QT~NWtE0fueKAy z8LDP(_&O+pABxOIv%Wz=>j>_@C*aTodNvg+bc}T~O#OIP+C@Fz#5t$%;TlbPsS|hX zb%H*9W}D+6Q}pqQW}hQ~FHbp5U2C5<{LTSsbhHtBgV$ra^7$g!QmW6So+0loZ$JPO z(Kl~q!;;SH=jk6Hld!CFx0IG`G_66!k(6|Td!CjU$b^T@0IB}s{o9%;Rqn_iV8A*R zOviUZovm2?wWrDYPH07)TXZZjmuJot#MofQNP{6kM(yhhkysS_JJ`%^(N|lCN2yhs4hw(}Ol$@^)iR;{a=>FOZaRj>Q%?QiA^N&~>NoFexp~y?naI@`(0Y-AJwCDMjC;UT z82$+O3yT?NHxaO#{d0L5;GEGkwX$1((IYElWVyFF8pF!?0o&>nbr|APm<9ro;IsBy zwxC4jRoc5Z1zV>KR$s+dEYavDCe@55Dn>qO^<-BxJlalt4r@i$yMHPPT_%`bgFy6U zthsBDooe*&NVYqU44UBx@b)HZV~127{6%I5C-~y~(>Rb=Th1}PvBB)f^YrmtsBxlY zqJ8J{LgLQ5;Nd^u$P|~-&UMbirf+nm{-SeS&md%}<2AUb@b+r@D%sfh^^=XSMm?n-0V2pN|9ny7nJLqub~^JS^yu4Az6TWFN6%HK7Qw1Q z^6=BpTFEP}HQ{j-f&&*M})H1Bs==dyeF(*-&>8c9K${dEvB!#=< zA6M6>@Z?+$SL5r>wYr82ts9%LmXCbg7mK%}0D_Ztqh=zd!DHN;CowSGGz<4Lc;#;q zzB~dsr2tWBVNNubu>e~(4+Y(5R+|>*#r9gif*eJ<#~zK7Yq^bg2uHMq^jxEOEa6s1 z6YrF`Ae;8rYe^a@*3IkP-Q=PnDQ_&}J=d@bdIK%di>sQVC1v@aFrT7sQX^il zHb_2_6~0;4xz>7EX;wqmO`kK#T~{%ZEyQKl^_w}3sh<{W8}z60UHtnC%7%i{h6=b- zO(ix2=35<|a6MK6RlrRPd5Aae1symA%;*fs5?Xe1bIpro%%F&bAttsyahdp_G!k$q z+KFzH;4=Y&JEXXDL#FhD!8rGrL+W4pSS{}B<%kVtCI-t4c&F4W;Y*V>6FlEvdA=zw8*#5#o zJ!s?(OtWp+JwJ9BF7p!`yV_q|zpaKV__Cs82!la+l9NFBP+?w%uXP{SdT~Ph(zY}H zqHl!lC=F*8-siJWW{trh3O@n{6O-*b(ce{c?Pol?EBm5!ct^<0vQKsU_tS5~YFK9(On}_GynU_YA=_@{CG+&Ai%0 zzy}hL7uv1q4_Cr|rZ~#PZ50#OdZMJPqX+_>vDS99jQtLdV)>1_Y07Aq>lC9ixX1qT zAzdn0Kaa!QkxdqpT4n)C5+qzp`W~3xU!Y!Po}01t2r!g+!_({h<|ls1c~^K%p7agR z8sz*E+}xTuQUJLWuKc3KwF#)xJw#e^x3gS}xK)jM;!(|8KlGvzsJ!-De}PY;ymVsm z)jQS8I5-Cs_kxl@ISP<(>YbVs9{aT;54f+qCYZHa0~LZ`QGYY5+#KCSJIWZy)FDez z=u>0`xJOD8Zgff%czjaVrBWJYcN#r&r0Ku-SHW13{pWG8^qh_nfuQ>ruK6@{Qpbek zED364JPM2&yo8Q_3jb^a9OCSZwGF_)wBS*MuUQUD8Vbr0N_3 zo+MY$b9Be3+8wH|YcSV5RqvQ7Cd;EoQyHN+Foy{z!C>43j7V)W$RMT{;bS4og#J}0 z&y@6?XWuwjLwLDI>?^(Pvy19fHc6#u2TpO*{CQV0o+XD<2Gu{eu0+(7r#Mx=Zvf}z z+sf5ZCGp(Cgylu%uXuUy6k_vuWI^|%CchoCoK2)sb01#+T`&{$Sza!ZstnL>G~3{e zN-?lNV_UU90w9HR(wO$v?>D12$!Vg&N}E|fF3Ql)NmKIU7B{QzJ@%FaG;e0w{#tnS zOIKJJLG+rv>u`g!FzA*|;HDFv>`j*b6K0n5DBwTw)l5A3F-? zSMRiIw6MJ+!j>%_3h-oFRD5QAXBVo!C+j<#>Hd6eM5u~a{HA+p`Glu0_5*8`zOJ6N zicIrGwSArNl#}<0#xO}}{X5Cibomb9sJ>K zK73;jU&45cORp@5ZJbVcVTxxSSP~S&THBhK`=J=|eTC=T$m0*<8u7A(9 z6#q1{qIEIA^K!9a=VLdZOa> zBJv$q4S$YA&rx?nS(o8N@~%aNC`-1#V=Oltc8T|Dm)fYu=HVb|O9ZsHx_{0v8`UW| zeZh3TZ?nbEP?32&yHq?!(;&E@cOq)v;)z;Vc z3TAUAuXUJBYwU{pSrWKz3I#Ob;tk#Oy;n<>8QKdcfIRJVxEFc&Qbr%K zSvzy8#n<_rXn`j{%t3|0-DNA@qm_(4jiH5ewM!PoS}NjyWizmnwI9VHe-XfhYZy3r zPQ22>xig==Pl&C?E~o8#AKHR6m8m7(DSwHQvTdN2X)i=^%SP$#zT12RJgd6PXBggx zVo|UE-3zOHmp28atf_qGMtk?xf+>)es##6z&b7WrFX@yzHZ2gdT2UWeVn@>Gh}lz4n=%a zY<0y{1HHNy;3BeSF>=rKwQBY>6Wm`uyXCR4DmK`E6C|$@Rgs@g?>6&s&2!=Hc4I?M zeK`B7C-%Fi9E5p`WVz8&fMzM+^G2~-$Wet;;1xlIXji6(T6HV;8lt{6_jLZpO$MLQ zCO1LSHi11D2BG{i_6_C3Eo|wnf2i-HqAt@k!Gg~|h$@kU>gpTs-iJuCxe~~fK zbk!W#EiK7tD4HCRk8r6-I#O4EHq}Saks0OL#rbCw5q8R?8`!x4C+MkHpVejDboO~? z2J-&?s|#!AZ=Pq!K8QxtJr+SHr;fm!TH1Ygs+=?x&8y>sqCE-O<$2?voiNO=&5LL2 z@(7sO@WRwwo0t#~Mc z&F3@;=H_8eY{?11fHg9~qd=@eMjUD1s?~(-!KYWe^?CUgu6yKb?0f@b>9y=^hUMr* zY@J`X13qcqPf$N^b$93j3{~V`YeU(MOH5qC{3!)*O0^PNPbGpDQ}A9o?PXCAN^?x9t|H{KsGdi!zsNF2jIB48tMIsFUw5+E@cbj36=c zC$C-FU3hR9Szn0k6BQidqYm=N5(^N&-fNU7Z8u}dGd6-%YMSpPC({Rc^)KrJG?a!z zHp)J~at(GmQ=P1U0)a7~6m(-^k}OFIBO$Mk~+JeDxI-ox*6<1RwN> zW30e~8O2wxQwY-`1o$!#=ek-%1EOOvVbym}Gz~`K0|ioBJ#}|H1j;@g*>_o)WMoP0 zPCYV=YF;sz9%V;rO#z>>c&Ck_*3uW%v0nM!YMe-L4j|Qscd~!mE^#xLZZD<_aOAFd zWkHXGZxQ+x>Z(2$xvU4W?Mf5De__S5dD|mxKUYXYV+V|(zFK^$&r<59;@UcKQ79~* zx#ECc;YJLWDYKNUBl^sU@zYRL)Tp%!T7C?w0@1u|`w)ax=fkUb)5!LY^hd!~ostola;Uz_O)Mj_=s}Y1eO8guy-oD8`#U%3dhRn`{eD z=4R$BA^nq`Ah|<1A?wg1a8Zq+ZQp`X@47h^w4$+rd`SD5=ZggMY^X{{vC(Zb(0gx! zTi7k5+y;KMymtRYCvOJ`p0pUj^Ra8dB44{6gxExAhqe1Asm$mVla2$ z*Iw2Pnl6Sc;lOG~QbYyAf!$i4nvsR8W;a!LghzxJ z1^(~q{CDwnbhtL*X(Wq=QeJu=N#BzTD&q1m;nQfkXPCPpN{g!UP%3g*De=}n>qOdA zD(5L5-m|eD3}X=BDXw184NvY8a~-7C&=n(!p4Xl`#;{no(4|Rck9#NsoIqKbvYS4e zZ>@4(riJM-IlW!y;g~U|@Pc(I#{5cqY7lq8dK0^oA*mq8kb5v6|q-e6)&OwJy0Xx#YpKw<0^dM|VNP*o-Z3+iIMC%(|Ur&95~pJ`dy&&66~A z9Wlq3gv)EN1xpPZS#A6**|yX7c?pP+Sobbpl>$L6ip}Z~y!Uc7i=1g_W?*lxjo)<6E0t!Vf{KL6ghNrbco$?{9|yCxDxL&DN+=0|{cVYK4P zBrf)EC_CGmqOvigwES>FSijZp=1a>L5G=uwIcmx3a&rfgdSazBC*>!gvZhA>e_C6O zZT5p2TD(p@s%AQ3zrH$E*%-|uYc$E2^{KbA)FP?b(6p^g!wE_j_zWgO$GOp&^^7$; z(~0pcn_ihqu2jI|c0aPBs;UL8rS0^v`Ni0i7ZH-t9QpH&@ZvsW^kk*Tpw(8NO#VSsZ6MCk%Op`~jgPJdz+!@&q|J{wb zhWfA%k6YH-r^dB|XXh?!6Bx8rlZm^xttKr&cKOepjqn_JnAtIFy_Vwc4=ZcUeckje zaEb!EC0gt2%4;7&OQrngC6VfZxVXehkEqPbxVwmkI zSg{QvR2oU&o_vzv_m-vN?b-}$9*{(fo`ewSE?C9U!M5+TOy=jiG1v}4Ew-_Qt*&Mn z!;t4p3uOqopNrUEAHdjAbE~E^)ln9li?TvH@#%dwp58Y7lhHVUo%7d>%3&qZ_G>=U zTIPDDbb}y!e@LNF+Kt+*LMI5Ou)jHtzBFEP)is}5>h3$ffAet`sg}f=*Ik)bKI^Qf zs>hq?iKmCf%_K_{YwA558D+pVTD(4=W0G**(V0Verm)OYJ~cOyc`OP)V$c1&hHQ@N z)B&$1(BAqL7jG|ltw@lgDMME1f)NC~-l~0z(Rx)eJB2%N zh{fg?UEP@TMS`gM@~YbM3eDWId}?PSWQ|TRYaq=gDwq`t+6vzP7C_B^C{&Nt)||br zg55r6;&qYRv&_StqEMx-E1Fr8fLHYN0~^N02lgaeB@l5>!cE}z=JbOY6q+JOU3=I~ z-`;VXp3yF7_+ws~FE{rlw!W&mi#PKHT#asU?}n$V|G_d=`SgyYAV|z%{}Hg+Ude6> zw7}vOx0YIQA?cgBaYZj^?0tlGTEpoOgb^C*-<{Y%!%d=PLF0>sg#n`)C8bvAF zsPt^7tztikDUtY~so1o>RAWa65bikI8Nx#3!K3pNokTqEtMfQ{rY}uR`Gl#G5j)U( z(QAUcEu~RliR>#@>DmUwFUkv{k5`725%W`}OS&~f&#IC?bm4uZ0fBd0n*I(`W_U&W z&A3W2RN+j@1;$qYj;Eq>Z||B9PBy_3?k?7U9e1TL3yM|f&rq@B-B)hC4Ut%|`V4!i zkQ5>7olOol5Q@hJ3*%l!on3(((gKRy854!u{cg4`^4T=llc_0>Tf}Q=ruMQBCFvKH?a0E?#{7n# zwDL>qGrmr#E6llj1Z>=9d>)GU8nDb?*1Za?{`EeI=4(TJv2Qsr8c%YEG|~r_mTs2% z%i}E!nyyiuwRS%?V1}ZR`a7S3n96RQ$hsFskH=qX?I@=@b*CW3{QoFx=H?eBCciD# z!m$OL5&g~ZRDZKiWfY?Re(!16JS_c~IKcmMUo7$b<*a{O*7&nGQFV4}U{?FFzF%zG zj2N`C;mvY9rPB_{zU|TXeqJ9{%Fc>o*?ID{4qZo7?Vsh87G;O}n*Ac12rm{^kF)RV zVH&Z?Qiy@p3!I%X)Hf}2t#P{wyf_yT;ao2We6Qylj3q9?$+|KO4)s#k6>+hKk6BSu zS$LM7H0ytQC|Ij;b7}b@lqjpHN!AQ8Szp46m2$Z4@J?$|k@(}T*Yep%*5-@vw>PQA zh&9?gxSw|tWVgGqgOw*X3aD_(ge$Tl6>_63x3HM5W?8+@kz(4VA{^@er!{;F98vDA zbaD50oJp$kN(~qKcYSW^oDMq?IUDnhW$*}F8eI2mSZH3j ziq<#Lb;Fgn?GX^b6HozzP3f1`h~DeY_F9MMv^)aV@9>5PvuQ9Cm(5OvF|YO#G!dW= zYU7?(0FfU^(J(Wv$q8v*o1GbL7nqbpE-r&#sO0>hKy41#FlcQaXDGsoOVnNp$8;xP z@x)IJbQ74hF}sX=70{7gIc7ivi#M-HCV$y8EedC|yzfjgb)aYHKTI$1dQOOP^EVsT{gJnD{aN=ueQn~`W<}4w zwt8usv2+lFhs3{4h~RY$pO~e|mW^l;@YwGdg2kF z`|sUGG3dGZL)3^=ZBJZ{M{=cm#7Kl-UXPWHKBhU>hvYr`bmdWP22E8tb9`eG;cb3j zGZMNP{p^zVus+@Y!^mK*;_&U1&n)%n;iIxrFg8gR<`v z`GcsS%G|y${hljIM(O8*Fa8LgjCiYCw)PEWJC&cV*CN(i+;XO0TnTVQ+z~wq^oz!Y zg-+;O@)n3tiIeQ%2P*hUu$@!5z)_>mJy!z=L^!cvS;Z2d0BUx~!CefjNnEzamP9&U zuokYtV3l}ZhtKo{qc9THKw3RZrX@EjUVPY_cTTipq;SEu7f#RYOhV_O~LXc^*EJ9Z;V;u z%OjQu#O;TbwI~~%w#XEOD}luxhv+frP?v7zw43za4wJ988$poBcm2lG>WUdTEpQQ!~q@hK=Of3059(Nl!dBoz;l<)jA95<6=6|faep_Z67^HgP~G29d)HvLwS8$Z&!A#q zSwn%T!w_;U)BcI{5s=Vpv&IBOS`3rj(sqp>*+T1vPu*`LrGFq$qcnT{IuSy1gsf}W zVje9OYdfsQUqWxhRGi3EjASWFE1Lv91k8*s&rnNbl<4D4%JR7rLTTlOegY479} ze|R3{8AUf`ta!FpQ5o`K&1wtb!lBNSpzsm+?+9AT>jm4eNfV<|-hKq|o)4>N4No<% RD%_w+uZYemrk*@5{SO714txLr diff --git a/src/Assets/ascendants/dex.jpeg b/src/Assets/ascendants/dex.jpeg deleted file mode 100644 index a41e2e2615fa5b62fc03286c2e64673d42472f10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11848 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 diff --git a/src/Assets/ascendants/duelist.jpeg b/src/Assets/ascendants/duelist.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..daf018456d36cfd8824dd4f60926c542b2159636 GIT binary patch literal 4227 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 literal 0 HcmV?d00001 diff --git a/src/Assets/ascendants/iconstrint.jpeg b/src/Assets/ascendants/iconstrint.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..b1837341cc37bc612896ddcab10310a32c5f53e4 GIT binary patch literal 4268 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 VJ?Gb`s}C$FuXWsrB?~6a{2x8{ys`iQ literal 0 HcmV?d00001 diff --git a/src/Assets/ascendants/int.jpeg b/src/Assets/ascendants/int.jpeg deleted file mode 100644 index 76f893a5e4343880b44306808967cbea9d1d7064..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11401 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 literal 0 HcmV?d00001 diff --git a/src/Assets/ascendants/ranger.jpeg b/src/Assets/ascendants/ranger.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..694fd0445358d38c1471250617389d5e556ac96f GIT binary patch literal 4281 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 literal 0 HcmV?d00001 diff --git a/src/Assets/ascendants/scion.jpeg b/src/Assets/ascendants/scion.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..0e0f76b88902c9fc8a4921ea213ca9a0c5387f0d GIT binary patch literal 3856 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

-}q`>f=a&E z+gjZm_!eUdP2@=UyP>u^-PNp6=k-4R5PiTA)^&!r=~6uGF!Qc##N1jpN3O3(u-BM0@&K_^wdW)21xBa6> zezmHTlBrWw=Ft%^dA184ysB(-?Pp3+VyJ@Q#Js%%=2Lo~5+h&iH**1^VboS7-nA+5 zxbZlij|Chm8{ptblEsuh%*mv^>C;w6GmUb7c9-4CEX65(Cn4I<0jW6&~6J?`dL zXlLD~UpX3wQ>mw-8kDhHQaS-#9kA7r7=;q~=#Jw)li5t(11DnUm$CM+4cqy}(k$DN z?$?oKKXs~~mutU?CZXcfzed~B^hYRFxP%vpd+>yP^en zecCFk<4C3@g=26(RCX8LuU;gY`IYDlz!I@8-Iy@8u1+fYe1M+_W>|E9C?sjM(!CeB z3`fYo3&(W^oHm`Y7sKz*{Lx z@NE*)p^^c)oKM;CnYg<59-gf|b@-@x?lj)8vhyJ+2*=>~mSSlr_l%Z4KnE@$;p^g( zy;4#~pthA`q0{eGKP|E;V$KlNU)quO4T3o28AZJ=Oj`eOi6DJ zR4Ly3laOptZ+DD+#HN(uMZVD(5E4Qp@6 z{rcMKNKx2_J=7hb&N#n5_wUL&t%|q>pK?hk6E2dgNwa2F%@fSd=RG>@X}mEY&+4<^;-GySWUX8Jk_5 z`px3?OZ?$My9XZ-J7qdiN9qCM?uUCL439_GXHX$a0lEkBZV> z>y=_CXTI;yS6q4_avgeecE(;30$BtFT{4N^R7>MB-L3aEGl>XV>a)zql2#jJaD~5NX#Z$BQ}dm~bO?g0-hpUPI|P85@}o=X5kKS&_ptGIHPHXt3GO1Thf_D`5QJ{R6v{lar6k2i`si=frR@H z{<|tOuXGMcMEzyOzIq7`Ox)v$D|iI&Jr)!_yt~o# zY|>_Lro>+_O^tF1v*4mrt!6eu)JLi%!DRF6bH2sqy~gT-1`Awb; zog@;IjQn>tckOcT-TREF+115_v#C_>L~;$5_SZ{E_G6`^`k6GO;@=Ta?)5=f266lB zrQyaQz!ZB^@>Ukf@0d@vUB9Fh8$dx-+@1|J zsu3W|Z~9?H-KXerbMK$QC)hmG%-N0!xT1Ko{i8r)R;DI>&!6wle|ZRQY@7Ml^mrLc zjHe5zhCrw$O;C7a^Y5TJKI=mG)n_)2ZIrL&OUg^-Ctz`7|2C zz;HCAgHo=aoa|N~J)Op#&y@A0q)bRV@W^4{GH!sq8KM4iCF z3ELvTW_eTTa}gX8Q$*Dqe0Uy(Vf)&w(cYd+BGym1ck4j3 z;kVcDty?3U|Eym(+>dBzZ}Rut+af?>Y6ZNT!?p2;ehT^}KX^E)Z`HEVAY@3A+ngk4J95+u1qXh1f*b+P`2cq?!m~)MGb9R8C*l zTK87E=ACZa0Jd8loO)-sP4@_DoUt~dcic_PNfj0_ZvH^IG;=Y9GP ziuEMIC32Z}us*cWI%21y>(u`Co1E{07Q_oJ;|X@N0)D06<$dGYO*9tT7P{OH?_aSd z8;rHC8E^8Q0INoZ%MoI;h<>N8x-TDAdWcjz^M5*5Fl}o&#GmDgTQ_2`u?Y<`-!3fO zZgq>w)(MZ6M_jt zTk(kke`cy44Jr;cm3V>M;vU1w-R{@W;DQn@ZHgDjZo%A*FI6dy|6GS|AXDFbe49gD ze!_@-C=u@vUz%)pg|NIqn@!5(9&GqWW(d~f;9UE>N=(B2P1lsg*JDJGhs3mKGb}8m zM-fUm@6pg9)KZjdX~Y^qgP)nt2oHq3K;$Q=lD@3L>By65rZxHc-4IbigwGd{#3aj+ z8MAkOs>$+bAmuu{v&qdoGZpeD{+L6V0AH*9cWobyI>+fNNnIqAv{BZUQ#3q>E7)~?iJ4sG)eEeviF*T_)WRjP zOBW5x$G_#>af;-wdDL)o`i~+B*9l#d-jFMH7BWX_Lp_{pzeJR)~Y7z x6E{QhB)(emOI3thidbu04wIHxGd*?vK@f`eY}f^gPPe7VD&J}Fg8gLXe*h5etqcGF literal 0 HcmV?d00001 diff --git a/src/Assets/ascendants/skillpoint.jpeg b/src/Assets/ascendants/skillpoint.jpeg deleted file mode 100644 index d57723e7ab24c1117818feba1f0424ece322fbbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2525 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 bIX@FFNIaSWrtRxa*)0B0<(_-?ckX`xF4W77 diff --git a/src/Assets/ascendants/strdex.jpeg b/src/Assets/ascendants/strdex.jpeg deleted file mode 100644 index 370becaac1e0eb2c1d1c2fa208bdbbf7c3c2662c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11726 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

_@5Dq~$Q z#~D&|h)JhjuzX=fTR_%0Jkw{q(yBF#+~+OMm-Qt(9VtaHxCiQ4DJnzqaoK7_d8w&J z-Y-DS9B_rD}kN4PwFZG`?fS`bb$DR75W zH8Y`+J66Fm_tGUfdP#~fV8oiA6$mK+vjPY+`C_8*bPvK2VTBS^-w^5C?PvA4=Y905 z160!T>(_&3_Wrw^4+V!#51ErgyTqZ`A5*^{<7X#$`=iO9dCS20mth3Ug~Of=WzT_) zumX0F+1_gAoZ@|9r;D4$uNK?n2TynLa#;u!W0g?kR-IBDTaDMJ4RemNmf|twead}h zQ`UAKtvFDT1;Y*Yr=E--9`e0%$i}AqFzwepJ2UF_&o@eg>s#W9{?<;5CZg!qVrKneFV6qI5 z8pvsnx~}ig-Z82Ph49}Y7mCljNL~!OXT5I{W2LuzVz@P9{aUA96P53e#J}ZjxEExo zpS&?Zue{2T{73p?PzV1mIYx-zqdkvy(V|k--!6eN0-CjZJY8su+m?vpea*qj8rG}E zH{B|~?mTK^A?w|=KvN?jW$f{(FPqWoooIwG7oOdPFW5KWs{n^XUd-@F(5}hiGN`ZC zj{LL!!zA={xV7$P&2tC>S?C)37l02|>vS39)$I1!9h1A4Q4P-O?&KupPPb9)*hDB}N{~$} zV=0QTt#75J&rym>W9`(;qET6&n}N*F zo`K877dRw$*rwO`T0#Uj8L;$R1qldrjD+{Sz!8@8VJ#inYk~|+7*$xK7_|XW;M@Bq zm*?htNQbG5zW^OqlTfOvZ^hjhO3YyDp81{uq>TtDkUU(Sz8*k7Zy94>yjr zahIfb6%x4h^F&QJAG_+7=V%v5wOJugqY-FqwEX*w=#WyK{^6{APKpURwr$^v2#SD} zDWMlPDd8(v=9ycdm&H+UWE^LU@{sl=Po7|vH%6c8V;kmj}VyF-dgtslJp z@8eHw4<5MBqCllJ83xlS^xZR`&5_Sh5c*~reUmQ`@WwPRD{4r0a-1(OYOP`=(4B&x z*+voW>>sngL2I5Pg?iHQ($H=K@2biMTD!|Vw(1=N&5#!)YFT>BM+%pQGJTiI?m|Wi zI!pH&jZ1LNHt5wZTnbQSpbW}Pw!2aM?}t@QX(M-$o8U5`af+xWqID3A^`iN6M^&BD z>Dh{Y@t{!PtG11$tMfX1bu%A*A-m;>7K~IitDGk|(E>(tZ@lO@xk-%Aak$-fa(&6< za`!3fZlu7~v!+>B&o{MFT=D~%ZH;j?`KjDKLt6ygGJ7aW3)0K(M3q8b8-Zlw3OlpJ z(NP%asR@3VeUz;=JZL{M4jH?@o5WjQG#bD#rkazt(5}H9i zzx4cj(=KySe{iDv{!1RbYoo=e3nsa|FP&;5oo+Dv)Aba}%`Ab#oEBq@b4bfDiHv#4HXQe%WOXZ2Mgh=fYL_p*-l|8w`FegDBxmNwnISKSP zGH{+Fxx7#Xo_2wW^D!UA7@VN|%StJaR7*HHi@i_qFIC$~@j!J!$el2*Gy^wnCE)T_(7m?=zB(o54OY3MwkmJn{dho(j4vJvsNBn6r#Y~$2l2? zUVe4DvhVz$au@78~TWEPknYe z$r)93o^gNM9zU-e3`acwQq6}}2u$`oo*JtVvYl`k5Ah|B3y6^z@x!X4<-BQXvzc6_ z5#yIsDcyVJYUwov#v%E#^Wkd#yJOYz&P*@^qQ{Orw9#Y)8IhuSm#%R}yWQf^^G{!h z9_^1gjBa23R<|+GMR)()_hI~0h!oeCx6cUsmD9;n!E^4|l^wf&rIA(uosrnO?wd!hl vzR5s%sTzK=g}_v&(9Qu*7Sd}o-)yEqNHB6cFV~n7PsHSBoFkRu{x19vJQ~RX diff --git a/src/Assets/ascendants/strint.jpeg b/src/Assets/ascendants/strint.jpeg deleted file mode 100644 index 09d764dd4437c0cfe180af6fc35451cfbd6724a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11631 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 diff --git a/src/Assets/ascendants/webp/IconStrDexInt.webp b/src/Assets/ascendants/webp/IconStrDexInt.webp new file mode 100644 index 0000000000000000000000000000000000000000..6e913fdc204b9d217253f900ba506883116791c2 GIT binary patch literal 1540 zcmV+f2K)I^Nk&He1pok7MM6+kP&il$0000G0001m003tI06|PpNJ;Df4#{PYK32(jZU>8>U z0|a*Ao>}IYq;h}dVplMbc&T{~(o%g!$H(%5xXW4D%8@UD3hXn|BBX{)t}fnoO>cx}9FyxI*82 zxMh|iPj#r=2trqsRWcZ_)e$7)PaqsVc_y#uV>mtU?2(?3LHen%4|VHVK>YOwk0NSz zXqrtJ1+w7*wpic*0RH@VpZg!vBmcHg&Sa7vYWH1#vCSJ}FVwdyi9GkQPPH^eW}0Z5 zCnG!PjLXtSbhk5kT_mi(ly@>5NYvr^_fPvmt)A6I`FhRv-tN$P+ahA@}Pb}oN9)<@` z|HWJR|Bw1_C!Ww-9%*z?-gp0{h^tgN&UyG}h6N4wvidZ(@S?wz202_>q>&tHift?bl5xtbM(2zpi zBU4cRJB%F-0-ossYM_-+h{ve}{t@7kTeCm!s_H77)qsG`bS*yQcp)`U+Ly-MN}R9K zPL*}|-XOo`dO-v3@Q4F{>z6Cq_!A51Jo2eMEa+H;zNi=^7O5D&hxW6bdKf{+A zKw)l;sK=Y0?d40Z=6U!IWJX4jJ0Jr&-#E{NyZx=uPr7(TW0v#oanCI(GQir@q1B>T z+Ioj10BEc~S-O{G5xfHvp(WlM^neJ4<($xaRBj`boYFd34CSe6uIdNh8IBl6zC_rO zmDxG=;drxkDgm&yE1%ORBMp2mwA$2Yq_J>*lm_y=-sCXh+LrU}((o^Yjw5VXBC!{Z+~7#t$WDCgoaL zW>b@}PsJoz6P1LRN29_WfiLwT*R}}uJ~RP>1s8~ q+2X2h;*@u}i_-sw2yF3m+Z-5gb3L&R@;og?pt+U1TqMBFfB*op6!L8V literal 0 HcmV?d00001 diff --git a/src/Assets/ascendants/webp/icondex.webp b/src/Assets/ascendants/webp/icondex.webp new file mode 100644 index 0000000000000000000000000000000000000000..6381689b9ca14ce75ad21c2bf16a498c2d9f7171 GIT binary patch literal 1462 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 mFC%o=&ZXT7xvS^Ll{}U19Tx6x( z+Pv|yG0vNui0FP@>`{E8cVcC)0)pe4m!7%wrH|d=KqIW)??VR9%85x!yLp}$2R&QO zP{oeuD|Bp~$Oj%{EM5vn91f&$Fp+z<|9aw73Sm*AQ2{lcBvt)r1s$P=lb^&T<4lHV+VtJI51Y3gBhc;!l%qx7w7OBl*MF03MA((^*dAJ#4Bzssb+l zqEWQ!fsifL#E5p(5q8A*A2pZW;WgX!-_}Lc*llc_WQD91mB>X#INj) z(<$cuz%<0FscT1lA3^rnaU{?|cFiY1qzSf~qH1;e+x|^k^x>=RYyLC|B9EKb@R;%R zJ&TQB)o2&|Yc*{vn609f2CoJi>lv%CR+2Jk;RLGjNanbtZmFL|krfu6?QIcZnUIi> z5QiDwPmcvF)Rqad2cOr>q1lDs^+S3m79Op6{>fI@OE)tv9|UUu|HH}M1r++}$%?9& z!QFbF+(HE-G$9u)pfjo`7gxf!=Nuwco%*2L+Acq#Fz-pkU*4E_c;ids+-h^9>M}PD zr`zA0Rts!-hqYvd;?@o^;zTF`c_0Eb$O|&A4a}?P$;t6Jk1%ZegnGysJn-LC&Rc7^ zCAnJS>+Pn?@1HwBLh2&*{(`Ud0Rd^fFule1rs|`C(sppjr}%@kS!ubvNx&Dl_*Um# zd1iG?Hmps3i5A1v2n~&f7mj5hmRU2h1X6uRMm1kxXrfI{0j@%rdQgg++eIUqs@%x= zD{(nokRNocdGaM0)qn-$#4Sn z&^v89gW^ordNsn1_t&W4(G4U26Iu57+zxA!pSfjgOYo{4N}49fE#AXD_O$@?#xMI( zNf(Or?qlcY1%7^5Ee+w9&1kVVouDe6I7j2VHl((sF1#Pu6mru5=I7W=mh!hKRQRrh zfd%h=27Nr}&>b5@)XnYk$>r1N5a z%vpp6M84NJzW~*Jc3z*-nOx@hdS18UbSe)oL6)f^3Eq`l>e%Ob>j5$$6;i2;0002Y Cxs@CM literal 0 HcmV?d00001 diff --git a/src/Assets/ascendants/webp/iconstrint.webp b/src/Assets/ascendants/webp/iconstrint.webp new file mode 100644 index 0000000000000000000000000000000000000000..dcb6ca33fb808409b8ef2b21d366eb1fa7347cf9 GIT binary patch literal 1518 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 Date: Mon, 15 Jul 2024 23:04:46 +0300 Subject: [PATCH 30/55] Use class portraits as fallback images. --- src/Classes/ExtBuildListControl.lua | 19 ++++++++++++++++++- src/Classes/PoBArchivesProvider.lua | 3 +++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/Classes/ExtBuildListControl.lua b/src/Classes/ExtBuildListControl.lua index 31941cbab0..ad1d61ccfc 100644 --- a/src/Classes/ExtBuildListControl.lua +++ b/src/Classes/ExtBuildListControl.lua @@ -214,6 +214,16 @@ function ExtBuildListControlClass:GetAscendancyImageHandle(ascendancy) return image end +function ExtBuildListControlClass:GetClassImageHandle(class) + local image = nil + if class then + image = NewImageHandle() + image:Load(s_format('Assets/ascendants/%s.jpeg', (class:gsub("^%l", string.lower)))) + end + + return image +end + function ExtBuildListControlClass:HandleButtonClick(button, buttonType) if button then self.inTransition = true @@ -336,10 +346,17 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) -- loop through builds for _, build in pairs(self.activeListProvider.buildList) do if build.buildName then + local image = nil if build.ascendancy then + image = self:GetAscendancyImageHandle(build.ascendancy) + else if build.class then + image = self:GetClassImageHandle(build.class) + end + end + + if image then SetDrawColor(0.5, 0.5, 0.5) self:DrawImage(nil, x + self.width() - 115, currentHeight - 1, 82, 82) - local image = self:GetAscendancyImageHandle(build.ascendancy) SetDrawColor(1, 1, 1) self:DrawImage(image, x + self.width() - 114, currentHeight, 80, 80) end diff --git a/src/Classes/PoBArchivesProvider.lua b/src/Classes/PoBArchivesProvider.lua index d795735656..13c139f343 100644 --- a/src/Classes/PoBArchivesProvider.lua +++ b/src/Classes/PoBArchivesProvider.lua @@ -103,6 +103,9 @@ function PoBArchivesProviderClass:ParseBuilds(message) if value.build_info.ascendancy ~= "None" then build.ascendancy = value.build_info.ascendancy end + if value.build_info.class ~= "None" then + build.class = value.build_info.class + end build.previewLink = archivesUrl .. "/build/" .. value.build_info.short_uuid build.buildLink = value.build_info.build_link build.ehp = value.stats.TotalEHP From 7e8d6224a71abcaae63f03454e177ab9f9237f09 Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Tue, 16 Jul 2024 01:02:03 +0300 Subject: [PATCH 31/55] Remove unnecessary assets, fix templar portrait. --- .../ascendants/{iconstrint.jpeg => templar.jpeg} | Bin src/Assets/ascendants/webp/IconStrDexInt.webp | Bin 1540 -> 0 bytes src/Assets/ascendants/webp/icondex.webp | Bin 1462 -> 0 bytes src/Assets/ascendants/webp/icondexint.webp | Bin 1474 -> 0 bytes src/Assets/ascendants/webp/iconint.webp | Bin 1148 -> 0 bytes src/Assets/ascendants/webp/iconstr.webp | Bin 1224 -> 0 bytes src/Assets/ascendants/webp/iconstrdex.webp | Bin 1344 -> 0 bytes src/Assets/ascendants/webp/iconstrint.webp | Bin 1518 -> 0 bytes 8 files changed, 0 insertions(+), 0 deletions(-) rename src/Assets/ascendants/{iconstrint.jpeg => templar.jpeg} (100%) delete mode 100644 src/Assets/ascendants/webp/IconStrDexInt.webp delete mode 100644 src/Assets/ascendants/webp/icondex.webp delete mode 100644 src/Assets/ascendants/webp/icondexint.webp delete mode 100644 src/Assets/ascendants/webp/iconint.webp delete mode 100644 src/Assets/ascendants/webp/iconstr.webp delete mode 100644 src/Assets/ascendants/webp/iconstrdex.webp delete mode 100644 src/Assets/ascendants/webp/iconstrint.webp diff --git a/src/Assets/ascendants/iconstrint.jpeg b/src/Assets/ascendants/templar.jpeg similarity index 100% rename from src/Assets/ascendants/iconstrint.jpeg rename to src/Assets/ascendants/templar.jpeg diff --git a/src/Assets/ascendants/webp/IconStrDexInt.webp b/src/Assets/ascendants/webp/IconStrDexInt.webp deleted file mode 100644 index 6e913fdc204b9d217253f900ba506883116791c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1540 zcmV+f2K)I^Nk&He1pok7MM6+kP&il$0000G0001m003tI06|PpNJ;Df4#{PYK32(jZU>8>U z0|a*Ao>}IYq;h}dVplMbc&T{~(o%g!$H(%5xXW4D%8@UD3hXn|BBX{)t}fnoO>cx}9FyxI*82 zxMh|iPj#r=2trqsRWcZ_)e$7)PaqsVc_y#uV>mtU?2(?3LHen%4|VHVK>YOwk0NSz zXqrtJ1+w7*wpic*0RH@VpZg!vBmcHg&Sa7vYWH1#vCSJ}FVwdyi9GkQPPH^eW}0Z5 zCnG!PjLXtSbhk5kT_mi(ly@>5NYvr^_fPvmt)A6I`FhRv-tN$P+ahA@}Pb}oN9)<@` z|HWJR|Bw1_C!Ww-9%*z?-gp0{h^tgN&UyG}h6N4wvidZ(@S?wz202_>q>&tHift?bl5xtbM(2zpi zBU4cRJB%F-0-ossYM_-+h{ve}{t@7kTeCm!s_H77)qsG`bS*yQcp)`U+Ly-MN}R9K zPL*}|-XOo`dO-v3@Q4F{>z6Cq_!A51Jo2eMEa+H;zNi=^7O5D&hxW6bdKf{+A zKw)l;sK=Y0?d40Z=6U!IWJX4jJ0Jr&-#E{NyZx=uPr7(TW0v#oanCI(GQir@q1B>T z+Ioj10BEc~S-O{G5xfHvp(WlM^neJ4<($xaRBj`boYFd34CSe6uIdNh8IBl6zC_rO zmDxG=;drxkDgm&yE1%ORBMp2mwA$2Yq_J>*lm_y=-sCXh+LrU}((o^Yjw5VXBC!{Z+~7#t$WDCgoaL zW>b@}PsJoz6P1LRN29_WfiLwT*R}}uJ~RP>1s8~ q+2X2h;*@u}i_-sw2yF3m+Z-5gb3L&R@;og?pt+U1TqMBFfB*op6!L8V diff --git a/src/Assets/ascendants/webp/icondex.webp b/src/Assets/ascendants/webp/icondex.webp deleted file mode 100644 index 6381689b9ca14ce75ad21c2bf16a498c2d9f7171..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1462 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 mFC%o=&ZXT7xvS^Ll{}U19Tx6x( z+Pv|yG0vNui0FP@>`{E8cVcC)0)pe4m!7%wrH|d=KqIW)??VR9%85x!yLp}$2R&QO zP{oeuD|Bp~$Oj%{EM5vn91f&$Fp+z<|9aw73Sm*AQ2{lcBvt)r1s$P=lb^&T<4lHV+VtJI51Y3gBhc;!l%qx7w7OBl*MF03MA((^*dAJ#4Bzssb+l zqEWQ!fsifL#E5p(5q8A*A2pZW;WgX!-_}Lc*llc_WQD91mB>X#INj) z(<$cuz%<0FscT1lA3^rnaU{?|cFiY1qzSf~qH1;e+x|^k^x>=RYyLC|B9EKb@R;%R zJ&TQB)o2&|Yc*{vn609f2CoJi>lv%CR+2Jk;RLGjNanbtZmFL|krfu6?QIcZnUIi> z5QiDwPmcvF)Rqad2cOr>q1lDs^+S3m79Op6{>fI@OE)tv9|UUu|HH}M1r++}$%?9& z!QFbF+(HE-G$9u)pfjo`7gxf!=Nuwco%*2L+Acq#Fz-pkU*4E_c;ids+-h^9>M}PD zr`zA0Rts!-hqYvd;?@o^;zTF`c_0Eb$O|&A4a}?P$;t6Jk1%ZegnGysJn-LC&Rc7^ zCAnJS>+Pn?@1HwBLh2&*{(`Ud0Rd^fFule1rs|`C(sppjr}%@kS!ubvNx&Dl_*Um# zd1iG?Hmps3i5A1v2n~&f7mj5hmRU2h1X6uRMm1kxXrfI{0j@%rdQgg++eIUqs@%x= zD{(nokRNocdGaM0)qn-$#4Sn z&^v89gW^ordNsn1_t&W4(G4U26Iu57+zxA!pSfjgOYo{4N}49fE#AXD_O$@?#xMI( zNf(Or?qlcY1%7^5Ee+w9&1kVVouDe6I7j2VHl((sF1#Pu6mru5=I7W=mh!hKRQRrh zfd%h=27Nr}&>b5@)XnYk$>r1N5a z%vpp6M84NJzW~*Jc3z*-nOx@hdS18UbSe)oL6)f^3Eq`l>e%Ob>j5$$6;i2;0002Y Cxs@CM diff --git a/src/Assets/ascendants/webp/iconstrint.webp b/src/Assets/ascendants/webp/iconstrint.webp deleted file mode 100644 index dcb6ca33fb808409b8ef2b21d366eb1fa7347cf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1518 zcmVyKc5l-`M>`-ca90C)|?SMVdx9O6L`9cUkU zDGN@yp_vajl--_4rQ7=P0C-f%1pxaQs}KE*$uX2Wn=$5+U8)prpODiq;NrjH4}=%E z{7-OF@I>-en^QrI2(jD05gPuPvud++0=b^DDw+d>Nld;=R;ZF_MdJ`(L4aw*(jTw} zAOX1PuY`vP$I8Ar%A{`%8KkdfX1ISic~PL-9{@mp3^q1Kzd>=GebtBMo>IYi`FW|O zh>y$8+7uKVX`(|Kua^h_{{DxvcbAAT{t^txA}ZH)N1Wde8B!l=(V?RWj_W5fqX5q@hVQ^Vs-zck3^Ns4T17Q z>5Z{4iM3~pZ9z(e>3sSLVAe=_B6xcN&R*uL!iZ09I+Ab5z^nI0&5Z05(4!p9bKY#g zlg!~_9AqBFf4;#DrqyfT2imL>gE!rbdvHuKEbJfxxa7`oC>u<2s+SkW#UI$JM&aFe(iwZmNa5l(yqT2>;^U>OsL3J!wtv>b~t6BB9mh=|p z|B+QYCAn8wJ>k=f)O31gFuL26NnqGp^%FA=2eo}s31K^ko0k9V}F1CtxbWP%ZB+i$Q(n%%K{YR`t<&Q$gF+KV@IQIkY#8KCbSsN+4{Mnv1* zk2XM@`ZTaRYWR~XdVW%Ugt(;T>pS|;7eo%{##W@47-FH36D68yt)#5Y^jym+6UB7K z)8$&l0V5TjGNVSuCs7t8(Ht91N(eY@Dz%V651WMs$$kuqG{bJhZcQk`EA9Jh;AV5S z%V{E@UWl%wJ8Itl0gVD1zCQ^9}||0UH6$g|i5Vd$zmWlUtP6Bbm2C|&fV5JIUr<0D z_QP9HWYtS}sx)8rUA2Gex3X_$0Z!IBZ}l>tfd$s!yh+#@wonIi!($&)4ef6RH5fXq zs7wfnPH3hQ^ff^>u{`SB4bN48hM Date: Wed, 17 Jul 2024 18:22:15 +1000 Subject: [PATCH 32/55] Formatting changes --- src/Classes/ExtBuildListControl.lua | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Classes/ExtBuildListControl.lua b/src/Classes/ExtBuildListControl.lua index ad1d61ccfc..ed6c1bd4e8 100644 --- a/src/Classes/ExtBuildListControl.lua +++ b/src/Classes/ExtBuildListControl.lua @@ -363,16 +363,16 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) local lineCount = 0 if build.buildName then - for _, line in pairs(self:splitStringByWidth(build.buildName, self.width() - 125)) do + for _, line in pairs(self:splitStringByWidth(build.buildName, self.width() - 180)) do lineCount = lineCount + 1 - self:DrawString(x, currentHeight, "LEFT", 16, self.font, line) - currentHeight = currentHeight + 16 + self:DrawString(x, currentHeight, "LEFT", 18, "VAR BOLD", line) + currentHeight = currentHeight + 18 end end -- add at least 32 height to title row so that the ascendancy picture -- does not overlap with other lines if lineCount < 3 then - currentHeight = currentHeight + (16 * (3 - lineCount)) + currentHeight = currentHeight + (16 * (2 - lineCount)) end -- decorator line @@ -422,15 +422,15 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) local ehpText = "EHP: " if build.dps then -- SetDrawColor(1, 0, 0) - dpsText = s_format('DPS: %0.f', build.dps) + dpsText = formatNumSep(s_format('DPS: %0.f ', build.dps)) end if build.life or build.es then -- SetDrawColor(0, 1, 0) - lifeText = s_format('%s: %0.f', build.life > build.es and "Life" or "ES", math.max(build.life, build.es)) + lifeText = formatNumSep(s_format('%s^7: %0.f ', build.life > build.es and "^xE05030Life" or "^x88FFFFES", math.max(build.life, build.es))) end if build.ehp then -- SetDrawColor(0, 0, 1) - ehpText = s_format('EHP: %0.f', build.ehp) + ehpText = formatNumSep(s_format('EHP: %0.f', build.ehp)) end -- prevent overlapping on smaller screens. @@ -524,7 +524,7 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) -- bottom border SetDrawColor(1, 1, 1) currentHeight = currentHeight + 36 - self:DrawImage(nil, x - 9, currentHeight, self.width() - 1, 1) + self:DrawImage(nil, x - 9, currentHeight, self.width() - 1, 3) currentHeight = currentHeight + 16 end end From f2e195717e40158f0dc31ec84e09b23b8fa60d5e Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Wed, 17 Jul 2024 11:34:46 +0300 Subject: [PATCH 33/55] ExtBuildListProvider: Fix indentation. --- src/Classes/ExtBuildListProvider.lua | 46 ++++++++++++++-------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/Classes/ExtBuildListProvider.lua b/src/Classes/ExtBuildListProvider.lua index 37f2bc27f1..2b0904ce86 100644 --- a/src/Classes/ExtBuildListProvider.lua +++ b/src/Classes/ExtBuildListProvider.lua @@ -11,51 +11,51 @@ -- .statusMsg [This can be used to print status message on the screen. Builds will not be listed if it has a value other than nil.] local ExtBuildListProviderClass = newClass("ExtBuildListProvider", - function(self, listTitles) - self.listTitles = listTitles - self.buildList = {} - self.activeList = nil - self.statusMsg = nil - end + function(self, listTitles) + self.listTitles = listTitles + self.buildList = {} + self.activeList = nil + self.statusMsg = nil + end ) function ExtBuildListProviderClass:GetPageUrl() - return nil + return nil end function ExtBuildListProviderClass:Activate() - if self.listTitles and next(self.listTitles) then - self:SetActiveList(self.listTitles[1]) - end + if self.listTitles and next(self.listTitles) then + self:SetActiveList(self.listTitles[1]) + end end function ExtBuildListProviderClass:SetActiveList(activeList) - if self.listTitles then - for _, value in ipairs(self.listTitles) do - if value == activeList then - self.activeList = activeList - self:GetBuilds() - end - end - end + if self.listTitles then + for _, value in ipairs(self.listTitles) do + if value == activeList then + self.activeList = activeList + self:GetBuilds() + end + end + end end function ExtBuildListProviderClass:GetActiveList() - return self.activeList + return self.activeList end function ExtBuildListProviderClass:GetListTitles() - return self.listTitles + return self.listTitles end function ExtBuildListProviderClass:GetActivePageUrl() - return nil + return nil end function ExtBuildListProviderClass:GetBuilds() - return {} + return {} end function ExtBuildListProviderClass:SetImportCode(importCode) - self.importCode = importCode + self.importCode = importCode end From f5232c63b4920a326642a8fa38dd0de7fae41bb5 Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Wed, 17 Jul 2024 18:51:00 +1000 Subject: [PATCH 34/55] Fix bugged font --- .../Fonts/Liberation Sans Bold.18.tga | Bin 23016 -> 23113 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/runtime/SimpleGraphic/Fonts/Liberation Sans Bold.18.tga b/runtime/SimpleGraphic/Fonts/Liberation Sans Bold.18.tga index 091cc27fa5e0f182216d8f58f68154a03be6b2b8..2de188e7f7fa8583b7bebebf7026fa313da924f9 100644 GIT binary patch delta 1067 zcmY*ZYe-XJ7(Sodl+AS0v(jC3n_IbRQ&YFh%1rYzcPULx3rdQx8&pugx><{$EcEnH zLH&rRNV-^bgrZei(bXswv$Dd%h%R18yCbacNVr7aG{_e!rgyqRL1iNY@@D6>2z}5qgIhUl-_+z2Gd4&9B21PY-^( z?;*$CfNIxeymp>}%UKJrD+1RF4nk3I0=pcC(ddz)(xE}RLmMts&Ks`l_xpypX%?)= zKZLeC4)1gO5T4tCl$=+no>vE7b_<5G8ZjlS4cq6QClVOuvgpgKm0zddGlZ%rivA{C z%8cS{R-BsCjW-$h`S#gTg3eigAf43;&rBaSrFUZAj6QyKnt_0u-i|}|A$aYPaNF%r z+fz838Ou{uNVMI-1e*#qS_!IBkKsk45-kb|wxxXL*CvM%9G&(S%}Gzulh}fRgb(~j ztBhc(^)}p=moQm$P*{}sK9wHJ%%7h^o86e)&mT9(5?qKMK+~jNbWMB*$;3{`jS|F~ zdU&OgR>+Tgj0!_H-GRL+tR~#3nL?0dH*iy5j#B+P4C+=ut$T^`*jv~d^9Gl-j}WFk zjis84IIMmEzv>9($x)^{gKyC#!XMim?M6nl6A{r?zITF-;LrF$zEx=@{8KiFK*9Q8 ziF}Xjh)-Chc!e$UUM!XypqHoPSGbw3kylS=7{2vdVVWm`HyZMdhC+n6;8FQWF`Z&$ zgKlb9^4_p`q82F3PO65gZLRTK>58fDuimn`HtXVq8eK^FyInA zmvn~)vSO?cQ=v)h|1Va917gz{zd{^0#wU6wh9pmqTaV+^GkktpX2vF@AEwG!#dI>5;eyKbN{f7 zlEGAD zptc$3Tvn91GT?9};sbAzbK89s2k_l#4%tDizkVeiIio{%4*2_V)ER@?ym*|S`(Zd? zS14u-3OMSfW8a)korGE^S(c({P=E<`9(!kZMFh||Q|l=iynYRf_%LhMm;ajBBV5s- zG$$AfXFk(Lus%6fT*ssoUn|7;8B!t(WDeR3b&`9##h$`Qf@^k-q-2+Pb()qKvN$L4CJ^tCc?AhgOK5|S)C+9uJ<}`}&Qv=D>DOLjYWUtttttYsVos5my1xU!w6;gRzndHPzdp(xgkKowE z2k5iaBG+~rXlrf*<2P!7%O_vQplmFu4yUNnb=;Vidvjv0l-dU?f7S89mkrbXc|USoL^n z>4eVGBI?G-2rQ#NqS~az{P;GMn_uIi=`CvGenX!pLw#%yx?}1nwJ^rqV|6a_DJbL9 zu#6AG%IIG(L`qR@Y!gcju>=+Req4^~K&e5BZ;>9FY)9OvAE-)@ipB`~m}_JU){W>C zQmsfCp;6tS1NoQFzSesin}(l7o9+UBhd+Tmya}s^wV_3O7N0aP5w7WgIjkQ?)B+^x z!?YJA+lzyeq45`LhMKW$s09TfLHMbvgj-dOdgW0>DXUO63uW@T!J#70X9iHDu{ Date: Wed, 17 Jul 2024 18:59:00 +1000 Subject: [PATCH 35/55] Further font fix --- .../Fonts/Liberation Sans Bold.18.tga | Bin 23113 -> 23054 bytes .../Fonts/Liberation Sans Bold.tgf | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/SimpleGraphic/Fonts/Liberation Sans Bold.18.tga b/runtime/SimpleGraphic/Fonts/Liberation Sans Bold.18.tga index 2de188e7f7fa8583b7bebebf7026fa313da924f9..c90722c9e75dcaa5c50dccebef2271ee1a383684 100644 GIT binary patch delta 208 zcmX@Pg|Tl7!Z>j&|KtKU5g_K893OBIC@aI*GC3&l`)aL^Hiu3l)3qPXb=kk DoMCqP delta 209 zcmeC%!gz8EmJpd4i7wWAo;fJ|ZB_PG2P;=Z>!| zi1XD?VRDL{;AA!bFN_QmHwsTy@ZbVsk;(1>7lG0ufeMVxlT8CZ0@*+8)F(UI%S}!X zdI983@DXQ Date: Wed, 17 Jul 2024 12:22:29 +0300 Subject: [PATCH 36/55] Fix split string calculation with different fonts --- src/Classes/ExtBuildListControl.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Classes/ExtBuildListControl.lua b/src/Classes/ExtBuildListControl.lua index ed6c1bd4e8..60253726d3 100644 --- a/src/Classes/ExtBuildListControl.lua +++ b/src/Classes/ExtBuildListControl.lua @@ -268,7 +268,7 @@ function ExtBuildListControlClass:CheckButtons() end -- splits strings by word and maxWidth -function ExtBuildListControlClass:splitStringByWidth(str, maxWidth) +function ExtBuildListControlClass:splitStringByWidth(str, maxWidth, font) local words = {} for word in str:gmatch("%S+") do t_insert(words, word) @@ -277,7 +277,7 @@ function ExtBuildListControlClass:splitStringByWidth(str, maxWidth) local lines = {} local currentLine = "" for _, word in ipairs(words) do - local wordWidth = DrawStringWidth(16, self.font, currentLine .. " " .. word) + local wordWidth = DrawStringWidth(16, font, currentLine .. " " .. word) if wordWidth <= maxWidth then currentLine = currentLine .. (currentLine == "" and "" or " ") .. word else @@ -363,7 +363,7 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) local lineCount = 0 if build.buildName then - for _, line in pairs(self:splitStringByWidth(build.buildName, self.width() - 180)) do + for _, line in pairs(self:splitStringByWidth(build.buildName, self.width() - 180, "VAR BOLD")) do lineCount = lineCount + 1 self:DrawString(x, currentHeight, "LEFT", 18, "VAR BOLD", line) currentHeight = currentHeight + 18 @@ -384,7 +384,7 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) -- main skill, ascendancy SetDrawColor(1, 1, 1) if build.mainSkill then - for _, line in pairs(self:splitStringByWidth(build.mainSkill, self.width() - 125)) do + for _, line in pairs(self:splitStringByWidth(build.mainSkill, self.width() - 125, self.font)) do lineCount = lineCount + 1 self:DrawString(x, currentHeight, "LEFT", 16, self.font, line) currentHeight = currentHeight + 16 From af293f2065e886fab303650e6f38d2b8bbddc685 Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Wed, 17 Jul 2024 20:56:34 +1000 Subject: [PATCH 37/55] Button layout and text positions --- src/Classes/ExtBuildListControl.lua | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/Classes/ExtBuildListControl.lua b/src/Classes/ExtBuildListControl.lua index 60253726d3..3feb8d6c7a 100644 --- a/src/Classes/ExtBuildListControl.lua +++ b/src/Classes/ExtBuildListControl.lua @@ -106,7 +106,7 @@ function ExtBuildListControlClass:Init(providerName) end self.controls.scrollBarV = new("ScrollBarControl", { "RIGHT", self, "RIGHT" }, -1, 0, self.scroll and 16 or 0, 0, - 40, "VERTICAL") { + 80, "VERTICAL") { -- y = function() -- return (self.scrollH and -8 or 0) -- end, @@ -341,8 +341,6 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) local scrollBarV = self.controls.scrollBarV self.scrollOffsetV = scrollBarV.offset - currentHeight = y - self.scrollOffsetV - -- loop through builds for _, build in pairs(self.activeListProvider.buildList) do if build.buildName then @@ -455,7 +453,7 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) currentHeight = currentHeight + 20 SetDrawColor(0.5, 0.5, 0.5) self:DrawImage(nil, x - 9, currentHeight, self.width(), 1) - currentHeight = currentHeight + 4 + currentHeight = currentHeight + 3 end end @@ -499,7 +497,7 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) else SetDrawColor(1, 1, 1) end - self:DrawString(x + 5, currentHeight + 8, "LEFT", 14, self.font, 'Import') + self:DrawString(x + 5, currentHeight + 9, "LEFT", 14, self.font, 'Import') -- highlight if hovered @@ -519,17 +517,17 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) else SetDrawColor(1, 1, 1) end - self:DrawString(x + 55, currentHeight + 8, "LEFT", 14, self.font, 'Preview') + self:DrawString(x + 55, currentHeight + 9, "LEFT", 14, self.font, 'Preview') -- bottom border SetDrawColor(1, 1, 1) - currentHeight = currentHeight + 36 + currentHeight = currentHeight + 34 self:DrawImage(nil, x - 9, currentHeight, self.width() - 1, 3) currentHeight = currentHeight + 16 end end - self.controls.scrollBarV:SetContentDimension(currentHeight - y + 30, self.height()) + self.controls.scrollBarV:SetContentDimension(currentHeight - y - 3, self.height()) self.contentHeight = currentHeight -- end self:DrawControls(viewPort, (noTooltip and not self.forceTooltip) and self) From 482ebeab95e13dc9cae687c0243cfab3dcbca50a Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Wed, 17 Jul 2024 21:07:38 +1000 Subject: [PATCH 38/55] Fix spacing on builds page --- src/Classes/ExtBuildListControl.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Classes/ExtBuildListControl.lua b/src/Classes/ExtBuildListControl.lua index 3feb8d6c7a..bd187ae13a 100644 --- a/src/Classes/ExtBuildListControl.lua +++ b/src/Classes/ExtBuildListControl.lua @@ -443,6 +443,7 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) -- decorator line SetDrawColor(0.5, 0.5, 0.5) self:DrawImage(nil, x - 9, currentHeight, self.width(), 1) + currentHeight = currentHeight + 3 end if build.metadata then From 257c4a59c8d64fe83188b0217c21e5e4a7b22a08 Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Thu, 18 Jul 2024 00:34:14 +1000 Subject: [PATCH 39/55] Fix Similar builds Popup on different window size Fix from Peechey in discord --- src/Modules/Build.lua | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/Modules/Build.lua b/src/Modules/Build.lua index 1ada1c0bbd..8222b320ba 100644 --- a/src/Modules/Build.lua +++ b/src/Modules/Build.lua @@ -1270,13 +1270,20 @@ function buildMode:OpenSimilarPopup() } local width = 600 local height = function() - return main.screenH * 0.8 - end - local padding = 50 - controls.similarBuildList = new("ExtBuildListControl", nil, 0, padding, width, height() - 2 * padding, buildProviders) - controls.similarBuildList.shown = true - controls.similarBuildList.height = function() - return height() - 2 * padding + return main.viewPort.height * 0.8 + end + local padding = 50 + controls.similarBuildList = new("ExtBuildListControl", nil, 0, padding, width, height() - 2 * padding, buildProviders) + controls.similarBuildList.shown = true + controls.similarBuildList.height = function() + if main.popups[1] then + main.popups[1].height = height() + main.popups[1].y = function() + return m_floor((main.screenH - height()) / 2) + end + controls.close.y = height() - 35 + end + return height() - 2 * padding end controls.similarBuildList.width = function () return width - padding From 3ab9d5e2fc40583e45c0d33d72324d6e2c12a548 Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Thu, 18 Jul 2024 17:28:07 +1000 Subject: [PATCH 40/55] Revert "Fix Similar builds Popup on different window size" This reverts commit 257c4a59c8d64fe83188b0217c21e5e4a7b22a08. --- src/Modules/Build.lua | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/src/Modules/Build.lua b/src/Modules/Build.lua index 8222b320ba..1ada1c0bbd 100644 --- a/src/Modules/Build.lua +++ b/src/Modules/Build.lua @@ -1270,20 +1270,13 @@ function buildMode:OpenSimilarPopup() } local width = 600 local height = function() - return main.viewPort.height * 0.8 - end - local padding = 50 - controls.similarBuildList = new("ExtBuildListControl", nil, 0, padding, width, height() - 2 * padding, buildProviders) - controls.similarBuildList.shown = true - controls.similarBuildList.height = function() - if main.popups[1] then - main.popups[1].height = height() - main.popups[1].y = function() - return m_floor((main.screenH - height()) / 2) - end - controls.close.y = height() - 35 - end - return height() - 2 * padding + return main.screenH * 0.8 + end + local padding = 50 + controls.similarBuildList = new("ExtBuildListControl", nil, 0, padding, width, height() - 2 * padding, buildProviders) + controls.similarBuildList.shown = true + controls.similarBuildList.height = function() + return height() - 2 * padding end controls.similarBuildList.width = function () return width - padding From f0d7277e3f89289f8c6680be9eede54c59778eee Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Thu, 18 Jul 2024 17:36:29 +1000 Subject: [PATCH 41/55] General popup resize code --- src/Classes/PopupDialog.lua | 8 +++++++- src/Export/Main.lua | 4 ++-- src/Modules/Build.lua | 26 +++++++++++++++++--------- src/Modules/Main.lua | 4 ++-- 4 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/Classes/PopupDialog.lua b/src/Classes/PopupDialog.lua index 9e5d97edec..afcf9b865f 100644 --- a/src/Classes/PopupDialog.lua +++ b/src/Classes/PopupDialog.lua @@ -5,7 +5,8 @@ -- local m_floor = math.floor -local PopupDialogClass = newClass("PopupDialog", "ControlHost", "Control", function(self, width, height, title, controls, enterControl, defaultControl, escapeControl, scrollBarFunc) +local PopupDialogClass = newClass("PopupDialog", "ControlHost", "Control", function(self, width, height, title, controls, enterControl, defaultControl, + escapeControl, scrollBarFunc, resizeFunc) self.ControlHost() self.Control(nil, 0, 0, width, height) self.x = function() @@ -32,6 +33,8 @@ local PopupDialogClass = newClass("PopupDialog", "ControlHost", "Control", funct end -- allow scrollbar functionality inside of popups self.scrollBarFunc = scrollBarFunc + -- allow resizing of popup + self.resizeFunc = resizeFunc end) function PopupDialogClass:Draw(viewPort) @@ -55,6 +58,9 @@ function PopupDialogClass:Draw(viewPort) if self.scrollBarFunc then self.scrollBarFunc() end + if self.resizeFunc then + self.resizeFunc() + end -- Draw controls self:DrawControls(viewPort) end diff --git a/src/Export/Main.lua b/src/Export/Main.lua index 35029cda5e..bd4ab68399 100644 --- a/src/Export/Main.lua +++ b/src/Export/Main.lua @@ -677,8 +677,8 @@ function main:CopyFolder(srcName, dstName) end end -function main:OpenPopup(width, height, title, controls, enterControl, defaultControl, escapeControl, scrollBarFunc) - local popup = new("PopupDialog", width, height, title, controls, enterControl, defaultControl, escapeControl, scrollBarFunc) +function main:OpenPopup(width, height, title, controls, enterControl, defaultControl, escapeControl, scrollBarFunc, resizeFunc) + local popup = new("PopupDialog", width, height, title, controls, enterControl, defaultControl, escapeControl, scrollBarFunc, resizeFunc) t_insert(self.popups, 1, popup) return popup end diff --git a/src/Modules/Build.lua b/src/Modules/Build.lua index 1ada1c0bbd..d38d81a7d1 100644 --- a/src/Modules/Build.lua +++ b/src/Modules/Build.lua @@ -1269,14 +1269,14 @@ function buildMode:OpenSimilarPopup() } } local width = 600 - local height = function() - return main.screenH * 0.8 - end - local padding = 50 - controls.similarBuildList = new("ExtBuildListControl", nil, 0, padding, width, height() - 2 * padding, buildProviders) - controls.similarBuildList.shown = true - controls.similarBuildList.height = function() - return height() - 2 * padding + local height = function() + return main.screenH * 0.8 + end + local padding = 50 + controls.similarBuildList = new("ExtBuildListControl", nil, 0, padding, width, height() - 2 * padding, buildProviders) + controls.similarBuildList.shown = true + controls.similarBuildList.height = function() + return height() - 2 * padding end controls.similarBuildList.width = function () return width - padding @@ -1289,7 +1289,15 @@ function buildMode:OpenSimilarPopup() controls.close = new("ButtonControl", nil, 0, height() - (padding + 20) / 2, 80, 20, "Close", function() main:ClosePopup() end) - main:OpenPopup(width, height(), "Similar Builds", controls) + -- used in PopupDialog to dynamically size the popup + local function resizeFunc() + main.popups[1].height = height() + main.popups[1].y = function() + return m_floor((main.screenH - height()) / 2) + end + controls.close.y = height() - 35 + end + main:OpenPopup(width, height(), "Similar Builds", controls, nil, nil, nil, nil, resizeFunc) end -- Refresh the set of controls used to select main group/skill/minion diff --git a/src/Modules/Main.lua b/src/Modules/Main.lua index 0caab39cd0..018960f31b 100644 --- a/src/Modules/Main.lua +++ b/src/Modules/Main.lua @@ -1370,8 +1370,8 @@ function main:CopyFolder(srcName, dstName) end end -function main:OpenPopup(width, height, title, controls, enterControl, defaultControl, escapeControl, scrollBarFunc) - local popup = new("PopupDialog", width, height, title, controls, enterControl, defaultControl, escapeControl, scrollBarFunc) +function main:OpenPopup(width, height, title, controls, enterControl, defaultControl, escapeControl, scrollBarFunc, resizeFunc) + local popup = new("PopupDialog", width, height, title, controls, enterControl, defaultControl, escapeControl, scrollBarFunc, resizeFunc) t_insert(self.popups, 1, popup) return popup end From 1381d4f0007c61c4e12db332db39a6aed6514e3a Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Thu, 18 Jul 2024 11:24:59 +0300 Subject: [PATCH 42/55] Add show public builds options to settings. --- src/Modules/BuildList.lua | 38 +++++++++++++++++++++++++------------- src/Modules/Main.lua | 15 ++++++++++++++- 2 files changed, 39 insertions(+), 14 deletions(-) diff --git a/src/Modules/BuildList.lua b/src/Modules/BuildList.lua index 736d6c0a17..4b71592d08 100644 --- a/src/Modules/BuildList.lua +++ b/src/Modules/BuildList.lua @@ -20,6 +20,11 @@ function listMode:Init(selBuildName, subPath) self.subPath = subPath or self.subPath self.controls.buildList.controls.path:SetSubPath(self.subPath) self.controls.buildList:SelByFileName(selBuildName and selBuildName..".xml") + if main.showPublicBuilds then + self.controls.ExtBuildList = self:getPublicBuilds() + else + self.controls.ExtBuildList = nil + end self:BuildList() self:SelectControl(self.controls.buildList) return @@ -68,20 +73,10 @@ function listMode:Init(selBuildName, subPath) return (main.screenW / 2) end - local buildProviders = { - { - name = "PoB Archives", - impl = new("PoBArchivesProvider", "builds") - } - } - self.controls.extBuildList = new("ExtBuildListControl", {"LEFT",self.controls.buildList,"RIGHT"}, 25, 0, main.screenW * 1 / 4 - 50, 0, buildProviders) - self.controls.extBuildList:Init("PoB Archives") - self.controls.extBuildList.height = function() - return main.screenH - 80 - end - self.controls.extBuildList.width = function () - return (main.screenW / 4 - 50) + if main.showPublicBuilds then + self.controls.ExtBuildList = self:getPublicBuilds() end + self.controls.searchText = new("EditControl", {"TOP",self.anchor,"TOP"}, 0, 25, 640, 20, self.filterBuildList, "Search", "%c%(%)", 100, function(buf) main.filterBuildList = buf self:BuildList() @@ -97,6 +92,23 @@ function listMode:Init(selBuildName, subPath) self.initialised = true end +function listMode:getPublicBuilds() + local buildProviders = { + { + name = "PoB Archives", + impl = new("PoBArchivesProvider", "builds") + } + } + local extBuildList = new("ExtBuildListControl", {"LEFT",self.controls.buildList,"RIGHT"}, 25, 0, main.screenW * 1 / 4 - 50, 0, buildProviders) + extBuildList:Init("PoB Archives") + extBuildList.height = function() + return main.screenH - 80 + end + extBuildList.width = function () + return (main.screenW / 4 - 50) + end + return extBuildList +end function listMode:Shutdown() end diff --git a/src/Modules/Main.lua b/src/Modules/Main.lua index 018960f31b..88590b7446 100644 --- a/src/Modules/Main.lua +++ b/src/Modules/Main.lua @@ -101,6 +101,7 @@ function main:Init() self.showWarnings = true self.slotOnlyTooltips = true self.POESESSID = "" + self.showPublicBuilds = true if self.userPath then self:ChangeUserPath(self.userPath, ignoreBuild) @@ -609,6 +610,9 @@ function main:LoadSettings(ignoreBuild) if node.attrib.disableDevAutoSave then self.disableDevAutoSave = node.attrib.disableDevAutoSave == "true" end + if node.attrib.showPublicBuilds then + self.showPublicBuilds = node.attrib.showPublicBuilds == "true" + end end end end @@ -712,6 +716,7 @@ function main:SaveSettings() POESESSID = self.POESESSID, invertSliderScrollDirection = tostring(self.invertSliderScrollDirection), disableDevAutoSave = tostring(self.disableDevAutoSave), + showPublicBuilds = tostring(self.showPublicBuilds) } }) local res, errMsg = common.xml.SaveXMLFile(setXML, self.userPath.."Settings.xml") if not res then @@ -874,12 +879,17 @@ function main:OpenOptionsPopup() controls.colorHighlightLabel = new("LabelControl", { "RIGHT", controls.colorHighlight, "LEFT" }, defaultLabelSpacingPx, 0, 0, 16, "^7Hex colour for highlight nodes:") controls.colorHighlight.tooltipText = "Overrides the default hex colour for highlighting nodes in passive tree search. \nExpected format is 0x000000. " .. "The default value is " .. tostring(defaultColorCodes.HIGHLIGHT:gsub('^(^)', '0')) .."\nIf updating while inside a build, please re-load the build after saving." - + nextRow() controls.betaTest = new("CheckBoxControl", { "TOPLEFT", nil, "TOPLEFT" }, defaultLabelPlacementX, currentY, 20, "^7Opt-in to weekly beta test builds:", function(state) self.betaTest = state end) + nextRow() + controls.showPublicBuilds = new("CheckBoxControl", { "TOPLEFT", nil, "TOPLEFT" }, defaultLabelPlacementX, currentY, 20, "^7Show public build list:", function(state) + self.showPublicBuilds = state + end) + nextRow() drawSectionHeader("build", "Build-related options") @@ -959,6 +969,7 @@ function main:OpenOptionsPopup() controls.betaTest.state = self.betaTest controls.titlebarName.state = self.showTitlebarName + controls.showPublicBuilds.state = self.showPublicBuilds local initialNodePowerTheme = self.nodePowerTheme local initialColorPositive = self.colorPositive local initialColorNegative = self.colorNegative @@ -975,6 +986,7 @@ function main:OpenOptionsPopup() local initialSlotOnlyTooltips = self.slotOnlyTooltips local initialInvertSliderScrollDirection = self.invertSliderScrollDirection local initialDisableDevAutoSave = self.disableDevAutoSave + local initialShowPublicBuilds = self.showPublicBuilds -- last line with buttons has more spacing nextRow(1.5) @@ -1023,6 +1035,7 @@ function main:OpenOptionsPopup() self.slotOnlyTooltips = initialSlotOnlyTooltips self.invertSliderScrollDirection = initialInvertSliderScrollDirection self.disableDevAutoSave = initialDisableDevAutoSave + self.showPublicBuilds = initialShowPublicBuilds main:ClosePopup() end) nextRow(1.5) From 2c325eeb423c7bb6355f46f7a5a6abd28cd5b34d Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Thu, 18 Jul 2024 16:26:49 +0300 Subject: [PATCH 43/55] Update latest-trending builds option name. --- src/Modules/Main.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Modules/Main.lua b/src/Modules/Main.lua index 88590b7446..16ca04da63 100644 --- a/src/Modules/Main.lua +++ b/src/Modules/Main.lua @@ -886,7 +886,7 @@ function main:OpenOptionsPopup() end) nextRow() - controls.showPublicBuilds = new("CheckBoxControl", { "TOPLEFT", nil, "TOPLEFT" }, defaultLabelPlacementX, currentY, 20, "^7Show public build list:", function(state) + controls.showPublicBuilds = new("CheckBoxControl", { "TOPLEFT", nil, "TOPLEFT" }, defaultLabelPlacementX, currentY, 20, "^7Show Latest/Trending builds:", function(state) self.showPublicBuilds = state end) From e2ea7a1cdca6b9bbad5e712be8b1cbf622cd5992 Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Thu, 18 Jul 2024 16:59:30 +0300 Subject: [PATCH 44/55] Add help section and tooltip for similar builds. --- help.txt | 11 +++++++++++ src/Modules/Build.lua | 6 +++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/help.txt b/help.txt index 993da65bc8..2fe6df9da2 100644 --- a/help.txt +++ b/help.txt @@ -162,3 +162,14 @@ If you wish to add more items, you can copy and paste items using CTRL+C (from t The item sets section located at the top of the screen can be used to save multiple sets of items and easily switch between them. You can add, remove, rename, and copy new sets using the "Manage..." button. If you want to search for item upgrades, you can use the "Trade for these items" button to quickly search for items that can improve your gear. + +---[Similar Builds Popup] + +The Similar Builds Popup allows you to search for builds similar to your current character. + +To access the Similar Builds Popup, click on the "Similar Builds" button located at the top of the screen. + +It will fetch the builds most similar to your character and sort them by the latest league and match score. + +For best results, make sure to select your main item set, tree, and skills before opening the popup. +If you are using leveling gear/tree, it will match with other leveling builds. diff --git a/src/Modules/Build.lua b/src/Modules/Build.lua index d38d81a7d1..03614bab1b 100644 --- a/src/Modules/Build.lua +++ b/src/Modules/Build.lua @@ -236,8 +236,12 @@ function buildMode:Init(dbFileName, buildName, buildXML, convertBuild, importLin self.controls.similarBuilds = new("ButtonControl", {"LEFT",self.controls.secondaryAscendDrop,"RIGHT"}, 8, 0, 100, 20, "Similar Builds", function() self:OpenSimilarPopup() - -- self.controls.similarBuilds.locked = self.controls.similarBuildList:IsShown() end) + self.controls.similarBuilds.tooltipFunc = function(tooltip) + tooltip:Clear() + tooltip:AddLine(16, "Search for builds similar to your current character.") + tooltip:AddLine(16, "For best results, make sure to select your main item set, tree, and skills before opening the popup.") + end -- List of display stats -- This defines the stats in the side bar, and also which stats show in node/item comparisons From a73ef614153051c8f307ea3f5e975d5499c5ac3c Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Thu, 18 Jul 2024 17:45:11 +0300 Subject: [PATCH 45/55] Use build names as a filename placeholder after importing. --- src/Classes/ExtBuildListControl.lua | 5 ++++- src/Modules/Build.lua | 12 ++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/Classes/ExtBuildListControl.lua b/src/Classes/ExtBuildListControl.lua index bd187ae13a..cffd780429 100644 --- a/src/Classes/ExtBuildListControl.lua +++ b/src/Classes/ExtBuildListControl.lua @@ -230,7 +230,9 @@ function ExtBuildListControlClass:HandleButtonClick(button, buttonType) if buttonType == "import" then ImportBuild(button.buildLink, function (xmlText, urlText) if xmlText then - main:SetMode("BUILD", false, button.buildName, xmlText, false, urlText) + main:SetMode("BUILD", false, + button.buildName .. (button.authorName and (" - " .. button.authorName) or ""), + xmlText, false, urlText) end end) elseif buttonType == "preview" then @@ -464,6 +466,7 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) local importButton = { buildLink = build.buildLink, buildName = build.buildName, + authorName = build.author, x0 = x, y0 = currentHeight + 6, x1 = x + 47, diff --git a/src/Modules/Build.lua b/src/Modules/Build.lua index 03614bab1b..1f0d0ca0ad 100644 --- a/src/Modules/Build.lua +++ b/src/Modules/Build.lua @@ -1202,7 +1202,8 @@ function buildMode:OpenSaveAsPopup() end end controls.label = new("LabelControl", nil, 0, 20, 0, 16, "^7Enter new build name:") - controls.edit = new("EditControl", nil, 0, 40, 450, 20, self.dbFileName and self.buildName, nil, "\\/:%*%?\"<>|%c", 100, function(buf) + controls.edit = new("EditControl", nil, 0, 40, 450, 20, + (self.dbFileName or self.buildName):gsub("[\\/:%*%?\"<>|%c]", "-"), nil, "\\/:%*%?\"<>|%c", 100, function(buf) updateBuildName() end) controls.folderLabel = new("LabelControl", {"TOPLEFT",nil,"TOPLEFT"}, 10, 70, 0, 16, "^7Folder:") @@ -1224,11 +1225,18 @@ function buildMode:OpenSaveAsPopup() self:SaveDBFile() self.spec:SetWindowTitleWithBuildClass() end) - controls.save.enabled = false controls.close = new("ButtonControl", nil, 45, 225, 80, 20, "Cancel", function() main:ClosePopup() self.actionOnSave = nil end) + + if self.dbFileName or self.buildName then + controls.save.enabled = self.dbFileName or self.buildName + updateBuildName() + else + controls.save.enabled = false + end + main:OpenPopup(470, 255, self.dbFileName and "Save As" or "Save", controls, "save", "edit", "close") end From f8392c1eec2b0fbd184ed87bf9fa6fca20af2182 Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Fri, 19 Jul 2024 00:56:56 +0300 Subject: [PATCH 46/55] Add cells to the grid, fix horizontal line issue. --- src/Classes/ExtBuildListControl.lua | 67 +++++++++++++++++------------ src/Classes/PoBArchivesProvider.lua | 1 + 2 files changed, 41 insertions(+), 27 deletions(-) diff --git a/src/Classes/ExtBuildListControl.lua b/src/Classes/ExtBuildListControl.lua index cffd780429..4674aa9eb6 100644 --- a/src/Classes/ExtBuildListControl.lua +++ b/src/Classes/ExtBuildListControl.lua @@ -369,44 +369,50 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) currentHeight = currentHeight + 18 end end + -- add at least 32 height to title row so that the ascendancy picture -- does not overlap with other lines if lineCount < 3 then - currentHeight = currentHeight + (16 * (2 - lineCount)) + currentHeight = currentHeight + (16 * (2 + (build.mainSkill and 1 or 0) - lineCount)) end -- decorator line currentHeight = currentHeight + 4 SetDrawColor(0.5, 0.5, 0.5) self:DrawImage(nil, x - 9, currentHeight, self.width() - 115, 1) - currentHeight = currentHeight + 4 + currentHeight = currentHeight + 8 -- main skill, ascendancy SetDrawColor(1, 1, 1) - if build.mainSkill then + if build.mainSkill and build.mainSkill ~= "" then for _, line in pairs(self:splitStringByWidth(build.mainSkill, self.width() - 125, self.font)) do lineCount = lineCount + 1 self:DrawString(x, currentHeight, "LEFT", 16, self.font, line) - currentHeight = currentHeight + 16 + currentHeight = currentHeight + 20 end currentHeight = currentHeight + 4 - else - self:DrawString(x, currentHeight, "LEFT", 14, self.font, s_format('%s', '-')) - currentHeight = currentHeight + 20 + -- decorator line + SetDrawColor(0.5, 0.5, 0.5) + self:DrawImage(nil, x - 9, currentHeight, self.width() - 115, 1) + currentHeight = currentHeight + 8 + SetDrawColor(1, 1, 1) end - - -- decorator line - SetDrawColor(0.5, 0.5, 0.5) - self:DrawImage(nil, x - 9, currentHeight, self.width() - 115, 1) - currentHeight = currentHeight + 8 - SetDrawColor(1, 1, 1) - -- author if build.author then self:DrawString(x, currentHeight, "LEFT", 14, self.font, s_format('%s', build.author)) end + -- version + if build.version then + local authorWidth = build.author and DrawStringWidth(14, self.font, s_format('%s', build.author)) or 0 + self:DrawString(x + authorWidth + 20, currentHeight, "LEFT", 14, self.font, s_format('%s', build.version)) + SetDrawColor(0.5, 0.5, 0.5) + if authorWidth then + self:DrawImage(nil, x + authorWidth + 10, currentHeight - 7, 1, 28) + self:DrawImage(nil, x + authorWidth + DrawStringWidth(14, self.font, build.version) + 40, currentHeight - 7, 1, 28) + end + end currentHeight = currentHeight + 20 @@ -417,16 +423,16 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) SetDrawColor(1, 1, 1) -- stats - local dpsText = "DPS:" - local lifeText = "Life: " - local ehpText = "EHP: " + local dpsText = "DPS: 0" + local lifeText = "Life: 0" + local ehpText = "EHP: 0" if build.dps then -- SetDrawColor(1, 0, 0) - dpsText = formatNumSep(s_format('DPS: %0.f ', build.dps)) + dpsText = formatNumSep(s_format('DPS: %0.f', build.dps)) end if build.life or build.es then -- SetDrawColor(0, 1, 0) - lifeText = formatNumSep(s_format('%s^7: %0.f ', build.life > build.es and "^xE05030Life" or "^x88FFFFES", math.max(build.life, build.es))) + lifeText = formatNumSep(s_format('%s: %0.f', build.life > build.es and "Life" or "ES", math.max(build.life, build.es))) end if build.ehp then -- SetDrawColor(0, 0, 1) @@ -434,13 +440,20 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) end -- prevent overlapping on smaller screens. - local dpsWidth = DrawStringWidth(16, self.font, dpsText) - local lifeWidth = DrawStringWidth(16, self.font, lifeText) - local ehpWidth = DrawStringWidth(16, self.font, ehpText) + local dpsWidth = DrawStringWidth(14, self.font, dpsText) + local lifeWidth = DrawStringWidth(14, self.font, lifeText) + local ehpWidth = DrawStringWidth(14, self.font, ehpText) if (dpsWidth + lifeWidth + ehpWidth < self.width() - 30) then self:DrawString(x, currentHeight, "LEFT", 14, self.font, dpsText) - self:DrawString(x + dpsWidth, currentHeight, "LEFT", 14, self.font, lifeText) - self:DrawString(x + dpsWidth + lifeWidth, currentHeight, "LEFT", 14, self.font, ehpText) + SetDrawColor(0.5, 0.5, 0.5) + self:DrawImage(nil, x + dpsWidth + 10, currentHeight - 7, 1, 28) + SetDrawColor(1, 1, 1) + self:DrawString(x + dpsWidth + 20, currentHeight, "LEFT", 14, self.font, lifeText) + SetDrawColor(0.5, 0.5, 0.5) + self:DrawImage(nil, x + dpsWidth + lifeWidth + 30, currentHeight - 7, 1, 28) + self:DrawImage(nil, x + dpsWidth + lifeWidth + ehpWidth + 50, currentHeight - 7, 1, 28) + SetDrawColor(1, 1, 1) + self:DrawString(x + dpsWidth + lifeWidth + 40, currentHeight, "LEFT", 14, self.font, ehpText) currentHeight = currentHeight + 20 -- decorator line SetDrawColor(0.5, 0.5, 0.5) @@ -448,20 +461,20 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) currentHeight = currentHeight + 3 end + -- SetDrawColor(1, 1, 1) + if build.metadata then currentHeight = currentHeight + 4 for _, metadata in pairs(build.metadata) do SetDrawColor(1, 1, 1) - self:DrawString(x, currentHeight, "LEFT", 16, self.font, metadata.key .. ": " .. metadata.value) + self:DrawString(x, currentHeight, "LEFT", 14, self.font, metadata.key .. ": " .. metadata.value) currentHeight = currentHeight + 20 SetDrawColor(0.5, 0.5, 0.5) self:DrawImage(nil, x - 9, currentHeight, self.width(), 1) - currentHeight = currentHeight + 3 end end - -- import button local importButton = { buildLink = build.buildLink, diff --git a/src/Classes/PoBArchivesProvider.lua b/src/Classes/PoBArchivesProvider.lua index 13c139f343..6d0091e227 100644 --- a/src/Classes/PoBArchivesProvider.lua +++ b/src/Classes/PoBArchivesProvider.lua @@ -112,6 +112,7 @@ function PoBArchivesProviderClass:ParseBuilds(message) build.life = value.stats.LifeUnreserved build.es = value.stats.EnergyShield build.dps = value.fullDPS + build.version = value.tree and value.tree.version if value.similarity_score then build.metadata = { From da73a02e868c8f10656786e7b6f1e182457afc89 Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Fri, 19 Jul 2024 01:26:24 +0300 Subject: [PATCH 47/55] Center version text. --- src/Classes/ExtBuildListControl.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Classes/ExtBuildListControl.lua b/src/Classes/ExtBuildListControl.lua index 4674aa9eb6..eab2a359e1 100644 --- a/src/Classes/ExtBuildListControl.lua +++ b/src/Classes/ExtBuildListControl.lua @@ -410,7 +410,7 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) SetDrawColor(0.5, 0.5, 0.5) if authorWidth then self:DrawImage(nil, x + authorWidth + 10, currentHeight - 7, 1, 28) - self:DrawImage(nil, x + authorWidth + DrawStringWidth(14, self.font, build.version) + 40, currentHeight - 7, 1, 28) + self:DrawImage(nil, x + authorWidth + DrawStringWidth(14, self.font, build.version) + 30, currentHeight - 7, 1, 28) end end From db2ef0d0e6d4cfc92f254d2522ba9637bc250a7c Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Sat, 20 Jul 2024 01:58:13 +0300 Subject: [PATCH 48/55] Improve responsiveness of builds list menu. --- src/Modules/BuildList.lua | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Modules/BuildList.lua b/src/Modules/BuildList.lua index 4b71592d08..acff43ec63 100644 --- a/src/Modules/BuildList.lua +++ b/src/Modules/BuildList.lua @@ -72,6 +72,14 @@ function listMode:Init(selBuildName, subPath) self.controls.buildList.width = function () return (main.screenW / 2) end + self.controls.buildList.x = function () + if main.showPublicBuilds then + local offset = math.min(450, main.screenW / 4) + return offset - 450 + else + return 0 + end + end if main.showPublicBuilds then self.controls.ExtBuildList = self:getPublicBuilds() @@ -105,7 +113,7 @@ function listMode:getPublicBuilds() return main.screenH - 80 end extBuildList.width = function () - return (main.screenW / 4 - 50) + return math.max((main.screenW / 4 - 50), 400) end return extBuildList end From 8ac0ffe9c6305ac9358de63c36fc4c38c66d191a Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Mon, 22 Jul 2024 00:40:24 +0300 Subject: [PATCH 49/55] Rearrange similar builds button after loadouts. --- src/Modules/Build.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Modules/Build.lua b/src/Modules/Build.lua index 9de2551a8e..9a2ccb4c9f 100644 --- a/src/Modules/Build.lua +++ b/src/Modules/Build.lua @@ -333,7 +333,7 @@ function buildMode:Init(dbFileName, buildName, buildXML, convertBuild, importLin self.controls.buildLoadouts:SelByValue(value) end) - self.controls.similarBuilds = new("ButtonControl", {"LEFT",self.controls.secondaryAscendDrop,"RIGHT"}, 8, 0, 100, 20, "Similar Builds", function() + self.controls.similarBuilds = new("ButtonControl", {"LEFT",self.controls.buildLoadouts,"RIGHT"}, 8, 0, 100, 20, "Similar Builds", function() self:OpenSimilarPopup() end) self.controls.similarBuilds.tooltipFunc = function(tooltip) From a3d6fef8f0d6399d4ded57b54820ecd79718e5f0 Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Mon, 22 Jul 2024 09:57:21 +0300 Subject: [PATCH 50/55] Remove redundant function. --- src/Classes/ExtBuildListControl.lua | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/src/Classes/ExtBuildListControl.lua b/src/Classes/ExtBuildListControl.lua index eab2a359e1..76074456b4 100644 --- a/src/Classes/ExtBuildListControl.lua +++ b/src/Classes/ExtBuildListControl.lua @@ -214,16 +214,6 @@ function ExtBuildListControlClass:GetAscendancyImageHandle(ascendancy) return image end -function ExtBuildListControlClass:GetClassImageHandle(class) - local image = nil - if class then - image = NewImageHandle() - image:Load(s_format('Assets/ascendants/%s.jpeg', (class:gsub("^%l", string.lower)))) - end - - return image -end - function ExtBuildListControlClass:HandleButtonClick(button, buttonType) if button then self.inTransition = true @@ -347,11 +337,8 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) for _, build in pairs(self.activeListProvider.buildList) do if build.buildName then local image = nil - if build.ascendancy then - image = self:GetAscendancyImageHandle(build.ascendancy) - else if build.class then - image = self:GetClassImageHandle(build.class) - end + if build.ascendancy or build.class then + image = self:GetAscendancyImageHandle(build.ascendancy or build.class) end if image then From 9759a14cdf57ee367a7539704e384d1268696849 Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Mon, 22 Jul 2024 10:01:11 +0300 Subject: [PATCH 51/55] Check if image asset exists, prevents Warden placeholder. --- src/Classes/ExtBuildListControl.lua | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Classes/ExtBuildListControl.lua b/src/Classes/ExtBuildListControl.lua index 76074456b4..641668dda0 100644 --- a/src/Classes/ExtBuildListControl.lua +++ b/src/Classes/ExtBuildListControl.lua @@ -205,13 +205,19 @@ function ExtBuildListControlClass:GetHoveredButton() end function ExtBuildListControlClass:GetAscendancyImageHandle(ascendancy) - local image = nil if ascendancy then - image = NewImageHandle() - image:Load(s_format('Assets/ascendants/%s.jpeg', (ascendancy:gsub("^%l", string.lower)))) + local fileName = s_format('Assets/ascendants/%s.jpeg', (ascendancy:gsub("^%l", string.lower))) + local file = io.open(fileName, "r") + if file then + file:close() + local image = NewImageHandle() + image:Load(fileName) + return image + end + end - return image + return nil end function ExtBuildListControlClass:HandleButtonClick(button, buttonType) From 31dff76c2a513c5dd238ce9f37f61d37b6cab5ba Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Mon, 22 Jul 2024 10:03:24 +0300 Subject: [PATCH 52/55] Reduce code complexity. --- src/Classes/ExtBuildListControl.lua | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/Classes/ExtBuildListControl.lua b/src/Classes/ExtBuildListControl.lua index 641668dda0..3b83804a0c 100644 --- a/src/Classes/ExtBuildListControl.lua +++ b/src/Classes/ExtBuildListControl.lua @@ -345,13 +345,12 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) local image = nil if build.ascendancy or build.class then image = self:GetAscendancyImageHandle(build.ascendancy or build.class) - end - - if image then - SetDrawColor(0.5, 0.5, 0.5) - self:DrawImage(nil, x + self.width() - 115, currentHeight - 1, 82, 82) - SetDrawColor(1, 1, 1) - self:DrawImage(image, x + self.width() - 114, currentHeight, 80, 80) + if image then + SetDrawColor(0.5, 0.5, 0.5) + self:DrawImage(nil, x + self.width() - 115, currentHeight - 1, 82, 82) + SetDrawColor(1, 1, 1) + self:DrawImage(image, x + self.width() - 114, currentHeight, 80, 80) + end end local lineCount = 0 From 3b48dbb607142930f3a2a90efadc8270c78b38c3 Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Mon, 22 Jul 2024 10:25:58 +0300 Subject: [PATCH 53/55] Fix savename using filepath as a placeholder. --- src/Modules/Build.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Modules/Build.lua b/src/Modules/Build.lua index 9a2ccb4c9f..ca1d23d08e 100644 --- a/src/Modules/Build.lua +++ b/src/Modules/Build.lua @@ -1409,7 +1409,7 @@ function buildMode:OpenSaveAsPopup() end controls.label = new("LabelControl", nil, 0, 20, 0, 16, "^7Enter new build name:") controls.edit = new("EditControl", nil, 0, 40, 450, 20, - (self.dbFileName or self.buildName):gsub("[\\/:%*%?\"<>|%c]", "-"), nil, "\\/:%*%?\"<>|%c", 100, function(buf) + (self.buildName or self.dbFileName):gsub("[\\/:%*%?\"<>|%c]", "-"), nil, "\\/:%*%?\"<>|%c", 100, function(buf) updateBuildName() end) controls.folderLabel = new("LabelControl", {"TOPLEFT",nil,"TOPLEFT"}, 10, 70, 0, 16, "^7Folder:") From c98d5099008616af60f697c36b68c24a36235b1f Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Mon, 22 Jul 2024 14:09:08 +0300 Subject: [PATCH 54/55] Fix indentation. --- src/Modules/Build.lua | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Modules/Build.lua b/src/Modules/Build.lua index ca1d23d08e..2cc5d1e5fc 100644 --- a/src/Modules/Build.lua +++ b/src/Modules/Build.lua @@ -1487,14 +1487,14 @@ function buildMode:OpenSimilarPopup() } } local width = 600 - local height = function() - return main.screenH * 0.8 - end - local padding = 50 - controls.similarBuildList = new("ExtBuildListControl", nil, 0, padding, width, height() - 2 * padding, buildProviders) - controls.similarBuildList.shown = true - controls.similarBuildList.height = function() - return height() - 2 * padding + local height = function() + return main.screenH * 0.8 + end + local padding = 50 + controls.similarBuildList = new("ExtBuildListControl", nil, 0, padding, width, height() - 2 * padding, buildProviders) + controls.similarBuildList.shown = true + controls.similarBuildList.height = function() + return height() - 2 * padding end controls.similarBuildList.width = function () return width - padding From fda63baa3bf4db7260becb4023e34d4bb034112a Mon Sep 17 00:00:00 2001 From: Can Uysal Date: Mon, 22 Jul 2024 20:17:16 +0300 Subject: [PATCH 55/55] Draft: Too many issues. --- src/Classes/BuildCardControl.lua | 295 +++++++++++++ src/Classes/ExtBuildListControl.lua | 612 ++++++++++++--------------- src/Classes/ExtBuildListProvider.lua | 8 +- src/Classes/PoBArchivesProvider.lua | 16 +- 4 files changed, 580 insertions(+), 351 deletions(-) create mode 100644 src/Classes/BuildCardControl.lua diff --git a/src/Classes/BuildCardControl.lua b/src/Classes/BuildCardControl.lua new file mode 100644 index 0000000000..390c06e2c3 --- /dev/null +++ b/src/Classes/BuildCardControl.lua @@ -0,0 +1,295 @@ +-- Path of Building +-- +-- Class: Build Card Control +-- Build card control for external build lists. +-- + +local ipairs = ipairs +local s_format = string.format +local t_insert = table.insert +local m_max = math.max +local m_min = math.min +local dkjson = require "dkjson" + +local BuildCardClass = newClass("BuildCardControl", "ControlHost", "Control", + function(self, anchor, x, y, width, height, build, maxY) + self.ControlHost() + self.Control(anchor, x, y, width, height) + self:SelectControl() + self.build = build + self.font = "VAR" + self.currentHeight = y + self.maxY = maxY + + end) + +-- splits strings by word and maxWidth +function BuildCardClass:IsMouseOver() + if not self:IsShown() then + return + end + return self:IsMouseInBounds() or self:GetMouseOverControl() +end + +function BuildCardClass:OnKeyDown(key, doubleClick) + if not self:IsShown() or not self:IsEnabled() then + return + end + local mOverControl = self:GetMouseOverControl() + if mOverControl and mOverControl.OnKeyDown then + return mOverControl:OnKeyDown(key) + end + if not self:IsMouseOver() and key:match("BUTTON") then + return + end +end + +function BuildCardClass:OnKeyUp(key) + if not self:IsShown() or not self:IsEnabled() then + return + end +end + +function BuildCardClass:GetAscendancyImageHandle(ascendancy) + if ascendancy then + local fileName = s_format('Assets/ascendants/%s.jpeg', (ascendancy:gsub("^%l", string.lower))) + local file = io.open(fileName, "r") + if file then + file:close() + local image = NewImageHandle() + image:Load(fileName) + return image + end + end + + return nil +end + +function BuildCardClass:importBuild() + if not (self.build.buildLink) then + print("Build link is not provided.") + return + end + ImportBuild(self.build.buildLink, function(xmlText, urlText) + if xmlText then + main:SetMode("BUILD", false, + self.build.buildName .. (self.build.authorName and (" - " .. self.build.authorName) or ""), + xmlText, false, urlText) + end + end) +end + +-- splits strings by word and maxWidth +function BuildCardClass:splitStringByWidth(str, maxWidth, font) + local words = {} + for word in str:gmatch("%S+") do + t_insert(words, word) + end + + local lines = {} + local currentLine = "" + for _, word in ipairs(words) do + local wordWidth = DrawStringWidth(16, font, currentLine .. " " .. word) + if wordWidth <= maxWidth then + currentLine = currentLine .. (currentLine == "" and "" or " ") .. word + else + t_insert(lines, currentLine) + currentLine = word + end + end + t_insert(lines, currentLine) + + return lines +end + +-- wrappers for Drawing tools to apply scrolling +function BuildCardClass:DrawImage(imgHandle, left, top, width, height) + if top + height <= self.maxY() and self.shown then + DrawImage(imgHandle, left, top, width, height) + end +end + +function BuildCardClass:DrawString(left, top, align, height, font, text) + if top + height <= self.maxY() and self.shown then + DrawString(left, top, align, height, font, text) + end +end + +function BuildCardClass:Draw(viewPort, noTooltip) + local build = self.build + local x, y = self:GetPos() + + x = x + 10 + y = y + 10 + + local currentHeight = y + + if build.buildName then + local image = nil + if build.ascendancy or build.class then + image = self:GetAscendancyImageHandle(build.ascendancy or build.class) + if image then + SetDrawColor(0.5, 0.5, 0.5) + self:DrawImage(nil, x + self.width() - 115, currentHeight - 1, 82, 82) + SetDrawColor(1, 1, 1) + self:DrawImage(image, x + self.width() - 114, currentHeight, 80, 80) + end + end + + -- title + local maxTitle = 3 + local titleLines = self:splitStringByWidth(build.buildName, self.width() - 180, "VAR BOLD") + for var=1,maxTitle,1 do + local title = titleLines[var] + -- append ... to last line if there are more lines than max. + title = title and (title .. ((#titleLines > maxTitle and maxTitle == var) and "..." or "")) or "" + -- lineCount = lineCount + 1 + self:DrawString(x, currentHeight, "LEFT", 18, "VAR BOLD", title) + currentHeight = currentHeight + 18 + end + + -- decorator line + currentHeight = currentHeight + 4 + SetDrawColor(0.5, 0.5, 0.5) + self:DrawImage(nil, x - 9, currentHeight, self.width() - 115, 1) + SetDrawColor(1, 1, 1) + currentHeight = currentHeight + 8 + + -- main skill + SetDrawColor(1, 1, 1) + if build.mainSkill and build.mainSkill ~= "" then + local skillLines = self:splitStringByWidth(build.mainSkill, self.width() - 125, self.font) + local skill = skillLines[1] .. (#skillLines > 1 and "..." or "") + self:DrawString(x, currentHeight, "LEFT", 16, self.font, skill) + else + self:DrawString(x, currentHeight, "LEFT", 16, self.font, '-') + end + + -- decorator line + currentHeight = currentHeight + 24 + SetDrawColor(0.5, 0.5, 0.5) + self:DrawImage(nil, x - 9, currentHeight, self.width() - 2, 1) + currentHeight = currentHeight + 8 + SetDrawColor(1, 1, 1) + + -- author + if build.author then + self:DrawString(x, currentHeight, "LEFT", 14, self.font, s_format('%s', build.author)) + end + + -- version + if build.version then + local authorWidth = build.author and DrawStringWidth(14, self.font, s_format('%s', build.author)) or 0 + self:DrawString(x + authorWidth + 20, currentHeight, "LEFT", 14, self.font, s_format('%s', build.version)) + SetDrawColor(0.5, 0.5, 0.5) + if authorWidth then + self:DrawImage(nil, x + authorWidth + 10, currentHeight - 7, 1, 28) + self:DrawImage(nil, x + authorWidth + DrawStringWidth(14, self.font, build.version) + 30, currentHeight - 7, 1, + 28) + end + end + + + -- decorator line + currentHeight = currentHeight + 20 + SetDrawColor(0.5, 0.5, 0.5) + self:DrawImage(nil, x - 9, currentHeight, self.width() - 2, 1) + currentHeight = currentHeight + 8 + SetDrawColor(1, 1, 1) + + -- stats + local dpsText = "DPS: 0" + local lifeText = "Life: 0" + local ehpText = "EHP: 0" + if build.dps then + -- SetDrawColor(1, 0, 0) + dpsText = formatNumSep(s_format('DPS: %0.f', build.dps)) + end + if build.life or build.es then + -- SetDrawColor(0, 1, 0) + lifeText = formatNumSep(s_format('%s: %0.f', build.life > build.es and "Life" or "ES", + math.max(build.life, build.es))) + end + if build.ehp then + -- SetDrawColor(0, 0, 1) + ehpText = formatNumSep(s_format('EHP: %0.f', build.ehp)) + end + + -- prevent overlapping on smaller screens. + local dpsWidth = DrawStringWidth(14, self.font, dpsText) + local lifeWidth = DrawStringWidth(14, self.font, lifeText) + local ehpWidth = DrawStringWidth(14, self.font, ehpText) + if (dpsWidth + lifeWidth + ehpWidth < self.width() - 30) then + self:DrawString(x, currentHeight, "LEFT", 14, self.font, dpsText) + SetDrawColor(0.5, 0.5, 0.5) + self:DrawImage(nil, x + dpsWidth + 10, currentHeight - 7, 1, 28) + SetDrawColor(1, 1, 1) + self:DrawString(x + dpsWidth + 20, currentHeight, "LEFT", 14, self.font, lifeText) + SetDrawColor(0.5, 0.5, 0.5) + self:DrawImage(nil, x + dpsWidth + lifeWidth + 30, currentHeight - 7, 1, 28) + self:DrawImage(nil, x + dpsWidth + lifeWidth + ehpWidth + 50, currentHeight - 7, 1, 28) + SetDrawColor(1, 1, 1) + self:DrawString(x + dpsWidth + lifeWidth + 40, currentHeight, "LEFT", 14, self.font, ehpText) + currentHeight = currentHeight + 20 + -- decorator line + SetDrawColor(0.5, 0.5, 0.5) + self:DrawImage(nil, x - 9, currentHeight, self.width() - 2, 1) + currentHeight = currentHeight + 3 + end + + if build.metadata then + currentHeight = currentHeight + 4 + for _, metadata in pairs(build.metadata) do + SetDrawColor(1, 1, 1) + self:DrawString(x, currentHeight, "LEFT", 14, self.font, metadata.key .. ": " .. metadata.value) + currentHeight = currentHeight + 20 + SetDrawColor(0.5, 0.5, 0.5) + self:DrawImage(nil, x - 9, currentHeight, self.width(), 1) + end + end + + -- draw buttons + currentHeight = currentHeight + 4 + if not self.controls.importButton then + self.controls.importButton = new("ButtonControl", nil, self.x + 10, currentHeight, 47, 20, "Import", function() + self:importBuild() + end) + else + self.controls.importButton.x = self.x + 10 + self.controls.importButton.y = currentHeight + if currentHeight > self.maxY() then + self.controls.importButton.shown = false and self.shown + else + self.controls.importButton.shown = true and self.shown + end + end + + if not self.controls.previewButton then + self.controls.previewButton = new("ButtonControl", nil, self.x + 60, currentHeight, 60, 20, "Preview", function() + if self.build.previewLink then + OpenURL(self.build.previewLink) + end + end) + else + self.controls.previewButton.x = self.x + 60 + self.controls.previewButton.y = currentHeight + if currentHeight > self.maxY() then + self.controls.previewButton.shown = false and self.shown + else + self.controls.previewButton.shown = true and self.shown + end + end + + -- bottom border + SetDrawColor(1, 1, 1) + currentHeight = currentHeight + 26 + self:DrawImage(nil, x - 9, currentHeight, self.width() - 1, 3) + -- currentHeight = currentHeight + 16 + + self:DrawString(x, currentHeight - 10, "LEFT", 14, self.font, s_format('%s', currentHeight - y)) + + + self:DrawControls(viewPort, (noTooltip and not self.forceTooltip) and self) + return currentHeight - y + end +end diff --git a/src/Classes/ExtBuildListControl.lua b/src/Classes/ExtBuildListControl.lua index 3b83804a0c..35c0212dd8 100644 --- a/src/Classes/ExtBuildListControl.lua +++ b/src/Classes/ExtBuildListControl.lua @@ -16,14 +16,12 @@ local ExtBuildListControlClass = newClass("ExtBuildListControl", "ControlHost", self.ControlHost() self:SelectControl() - self.rowHeight = 200 + self.rowHeight = 268 self.scroll = "VERTICAL" self.forceTooltip = false self.font = "VAR" - self.importButtons = {} - self.previewButtons = {} self.inTransition = false - self.contentHeight = 0 + self.builds = {} self.tabs = {} self.activeListProvider = nil self.buildProviders = providers @@ -38,6 +36,7 @@ local ExtBuildListControlClass = newClass("ExtBuildListControl", "ControlHost", function ExtBuildListControlClass:Init(providerName) wipeTable(self.controls) wipeTable(self.tabs) + -- wipeTable(self.buttons) self.controls.sort = new("DropDownControl", { "TOP", self, "TOP" }, 0, -20, self.providerMaxLength, 20, self.buildProvidersList, function(index, value) @@ -57,12 +56,33 @@ function ExtBuildListControlClass:Init(providerName) end if self.activeListProvider == nil then - printf("Build provider not found: %s", providerName) + print("Build provider not found: %s", providerName) return end self.activeListProvider:SetImportCode(self.importCode) - self.activeListProvider:Activate() + self.activeListProvider:Activate( + function (builds) + for i, control in pairs(self.controls) do + if control.build then + control = nil + end + end + + for _, build in pairs(builds) do + local buildCard = new("BuildCardControl", {"BOTTOM", nil, "BOTTOM"}, x, y, self.width(), 200, build) + buildCard.maxY = function () + local x, y = self:GetPos() + return y + self.height() + end + buildCard.width = function() + return self.width() + end + t_insert(self.controls, buildCard) + end + + end +) self.activeListProvider.buildListTitles = self.activeListProvider:GetListTitles() local lastControl = nil @@ -106,7 +126,7 @@ function ExtBuildListControlClass:Init(providerName) end self.controls.scrollBarV = new("ScrollBarControl", { "RIGHT", self, "RIGHT" }, -1, 0, self.scroll and 16 or 0, 0, - 80, "VERTICAL") { + self.rowHeight, "VERTICAL") { -- y = function() -- return (self.scrollH and -8 or 0) -- end, @@ -133,10 +153,6 @@ function ExtBuildListControlClass:Init(providerName) end end -function ExtBuildListControlClass:SetImportCode(importCode) - self.importCode = importCode -end - function ExtBuildListControlClass:IsMouseOver() if not self:IsShown() then return @@ -155,152 +171,39 @@ function ExtBuildListControlClass:OnKeyDown(key, doubleClick) if not self:IsMouseOver() and key:match("BUTTON") then return end + + for _, build in pairs(self.builds) do + build:OnKeyDown(key, doubleClick) + end end function ExtBuildListControlClass:OnKeyUp(key) if not self:IsShown() or not self:IsEnabled() then return end + local function scroll(offset) + for i, buildCard in pairs(self.builds) do + buildCard.skip = i <= offset + end + end if self.controls.scrollBarV:IsScrollDownKey(key) then self.controls.scrollBarV:Scroll(1) + local offset = self.controls.scrollBarV.offset / self.rowHeight + scroll(offset) elseif self.controls.scrollBarV:IsScrollUpKey(key) then self.controls.scrollBarV:Scroll(-1) + local offset = self.controls.scrollBarV.offset / self.rowHeight + scroll(offset) end - if key == "LEFTBUTTON" then - self:CheckButtons() - end -end - -function ExtBuildListControlClass:GetHoveredButton() - if self.inTransition then - return - end - local cursorX, cursorY = GetCursorPos(); - cursorY = cursorY + self.controls.scrollBarV.offset - for i, importButton in ipairs(self.importButtons) do - if (cursorX > importButton.x0) and - (cursorX < importButton.x1) and - (cursorY > importButton.y0) and - (cursorY < importButton.y1) then - return { - button = importButton, - type = 'import' - } - end - end - - for i, previewButton in ipairs(self.previewButtons) do - if (cursorX > previewButton.x0) and - (cursorX < previewButton.x1) and - (cursorY > previewButton.y0) and - (cursorY < previewButton.y1) then - return { - button = previewButton, - type = 'preview' - } - end - end -end - -function ExtBuildListControlClass:GetAscendancyImageHandle(ascendancy) - if ascendancy then - local fileName = s_format('Assets/ascendants/%s.jpeg', (ascendancy:gsub("^%l", string.lower))) - local file = io.open(fileName, "r") - if file then - file:close() - local image = NewImageHandle() - image:Load(fileName) - return image - end - - end - - return nil -end - -function ExtBuildListControlClass:HandleButtonClick(button, buttonType) - if button then - self.inTransition = true - if buttonType == "import" then - ImportBuild(button.buildLink, function (xmlText, urlText) - if xmlText then - main:SetMode("BUILD", false, - button.buildName .. (button.authorName and (" - " .. button.authorName) or ""), - xmlText, false, urlText) - end - end) - elseif buttonType == "preview" then - OpenURL(button.previewLink) - end - self.inTransition = false + for _, build in pairs(self.builds) do + build:OnKeyUp(key) end end -function ExtBuildListControlClass:CheckButtons() - if self.inTransition then - return - end - local cursorX, cursorY = GetCursorPos(); - cursorY = cursorY + self.controls.scrollBarV.offset - for i, importButton in ipairs(self.importButtons) do - if (cursorX > importButton.x0) and - (cursorX < importButton.x1) and - (cursorY > importButton.y0) and - (cursorY < importButton.y1) then - self:HandleButtonClick(importButton, 'import') - break - end - end - - for i, previewButton in ipairs(self.previewButtons) do - if (cursorX > previewButton.x0) and - (cursorX < previewButton.x1) and - (cursorY > previewButton.y0) and - (cursorY < previewButton.y1) then - self:HandleButtonClick(previewButton, 'preview') - break - end - end -end - --- splits strings by word and maxWidth -function ExtBuildListControlClass:splitStringByWidth(str, maxWidth, font) - local words = {} - for word in str:gmatch("%S+") do - t_insert(words, word) - end - - local lines = {} - local currentLine = "" - for _, word in ipairs(words) do - local wordWidth = DrawStringWidth(16, font, currentLine .. " " .. word) - if wordWidth <= maxWidth then - currentLine = currentLine .. (currentLine == "" and "" or " ") .. word - else - t_insert(lines, currentLine) - currentLine = word - end - end - t_insert(lines, currentLine) - - return lines -end - --- wrappers for Drawing tools to apply scrolling -function ExtBuildListControlClass:DrawImage(imgHandle, left, top, width, height) - local _, y = self:GetPos() - if top - self.controls.scrollBarV.offset >= y and top + height - self.controls.scrollBarV.offset < self.height() + y then - DrawImage(imgHandle, left, top - self.controls.scrollBarV.offset, width, height) - end -end - -function ExtBuildListControlClass:DrawString(left, top, align, height, font, text) - local _, y = self:GetPos() - if top - self.controls.scrollBarV.offset >= y and top + height - self.controls.scrollBarV.offset < self.height() + y then - DrawString(left, top - self.controls.scrollBarV.offset, align, height, font, text) - end +function ExtBuildListControlClass:SetImportCode(importCode) + self.importCode = importCode end function ExtBuildListControlClass:Draw(viewPort, noTooltip) @@ -326,218 +229,243 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) SetDrawColor(1, 1, 1) -- apply padding - x = x + 10; - y = y + 10; + -- x = x + 10; + -- y = y + 10; local currentHeight = y -- write status message if self.activeListProvider.statusMsg then - self:DrawString(x, currentHeight, "LEFT", 16, self.font, self.activeListProvider.statusMsg) + DrawString(x + 10, currentHeight + 10, "LEFT", 16, self.font, self.activeListProvider.statusMsg) + -- self:DrawControls(viewPort, (noTooltip and not self.forceTooltip) and self) + for _, control in pairs(self.controls) do + if not control.build then + control:Draw(viewPort, noTooltip) + end + end + return end - local scrollBarV = self.controls.scrollBarV - self.scrollOffsetV = scrollBarV.offset - -- loop through builds - for _, build in pairs(self.activeListProvider.buildList) do - if build.buildName then - local image = nil - if build.ascendancy or build.class then - image = self:GetAscendancyImageHandle(build.ascendancy or build.class) - if image then - SetDrawColor(0.5, 0.5, 0.5) - self:DrawImage(nil, x + self.width() - 115, currentHeight - 1, 82, 82) - SetDrawColor(1, 1, 1) - self:DrawImage(image, x + self.width() - 114, currentHeight, 80, 80) - end - end - - local lineCount = 0 - if build.buildName then - for _, line in pairs(self:splitStringByWidth(build.buildName, self.width() - 180, "VAR BOLD")) do - lineCount = lineCount + 1 - self:DrawString(x, currentHeight, "LEFT", 18, "VAR BOLD", line) - currentHeight = currentHeight + 18 - end - end - - -- add at least 32 height to title row so that the ascendancy picture - -- does not overlap with other lines - if lineCount < 3 then - currentHeight = currentHeight + (16 * (2 + (build.mainSkill and 1 or 0) - lineCount)) - end - - -- decorator line - currentHeight = currentHeight + 4 - SetDrawColor(0.5, 0.5, 0.5) - self:DrawImage(nil, x - 9, currentHeight, self.width() - 115, 1) - currentHeight = currentHeight + 8 - - -- main skill, ascendancy - SetDrawColor(1, 1, 1) - if build.mainSkill and build.mainSkill ~= "" then - for _, line in pairs(self:splitStringByWidth(build.mainSkill, self.width() - 125, self.font)) do - lineCount = lineCount + 1 - self:DrawString(x, currentHeight, "LEFT", 16, self.font, line) - currentHeight = currentHeight + 20 - end - currentHeight = currentHeight + 4 - -- decorator line - SetDrawColor(0.5, 0.5, 0.5) - self:DrawImage(nil, x - 9, currentHeight, self.width() - 115, 1) - currentHeight = currentHeight + 8 - SetDrawColor(1, 1, 1) - end - - -- author - if build.author then - self:DrawString(x, currentHeight, "LEFT", 14, self.font, s_format('%s', build.author)) - end - - -- version - if build.version then - local authorWidth = build.author and DrawStringWidth(14, self.font, s_format('%s', build.author)) or 0 - self:DrawString(x + authorWidth + 20, currentHeight, "LEFT", 14, self.font, s_format('%s', build.version)) - SetDrawColor(0.5, 0.5, 0.5) - if authorWidth then - self:DrawImage(nil, x + authorWidth + 10, currentHeight - 7, 1, 28) - self:DrawImage(nil, x + authorWidth + DrawStringWidth(14, self.font, build.version) + 30, currentHeight - 7, 1, 28) - end - end - - currentHeight = currentHeight + 20 - - -- decorator line - SetDrawColor(0.5, 0.5, 0.5) - self:DrawImage(nil, x - 9, currentHeight, self.width(), 1) - currentHeight = currentHeight + 8 - SetDrawColor(1, 1, 1) - - -- stats - local dpsText = "DPS: 0" - local lifeText = "Life: 0" - local ehpText = "EHP: 0" - if build.dps then - -- SetDrawColor(1, 0, 0) - dpsText = formatNumSep(s_format('DPS: %0.f', build.dps)) - end - if build.life or build.es then - -- SetDrawColor(0, 1, 0) - lifeText = formatNumSep(s_format('%s: %0.f', build.life > build.es and "Life" or "ES", math.max(build.life, build.es))) - end - if build.ehp then - -- SetDrawColor(0, 0, 1) - ehpText = formatNumSep(s_format('EHP: %0.f', build.ehp)) - end - - -- prevent overlapping on smaller screens. - local dpsWidth = DrawStringWidth(14, self.font, dpsText) - local lifeWidth = DrawStringWidth(14, self.font, lifeText) - local ehpWidth = DrawStringWidth(14, self.font, ehpText) - if (dpsWidth + lifeWidth + ehpWidth < self.width() - 30) then - self:DrawString(x, currentHeight, "LEFT", 14, self.font, dpsText) - SetDrawColor(0.5, 0.5, 0.5) - self:DrawImage(nil, x + dpsWidth + 10, currentHeight - 7, 1, 28) - SetDrawColor(1, 1, 1) - self:DrawString(x + dpsWidth + 20, currentHeight, "LEFT", 14, self.font, lifeText) - SetDrawColor(0.5, 0.5, 0.5) - self:DrawImage(nil, x + dpsWidth + lifeWidth + 30, currentHeight - 7, 1, 28) - self:DrawImage(nil, x + dpsWidth + lifeWidth + ehpWidth + 50, currentHeight - 7, 1, 28) - SetDrawColor(1, 1, 1) - self:DrawString(x + dpsWidth + lifeWidth + 40, currentHeight, "LEFT", 14, self.font, ehpText) - currentHeight = currentHeight + 20 - -- decorator line - SetDrawColor(0.5, 0.5, 0.5) - self:DrawImage(nil, x - 9, currentHeight, self.width(), 1) - currentHeight = currentHeight + 3 - end - - -- SetDrawColor(1, 1, 1) - - if build.metadata then - currentHeight = currentHeight + 4 - for _, metadata in pairs(build.metadata) do - SetDrawColor(1, 1, 1) - self:DrawString(x, currentHeight, "LEFT", 14, self.font, metadata.key .. ": " .. metadata.value) - currentHeight = currentHeight + 20 - SetDrawColor(0.5, 0.5, 0.5) - self:DrawImage(nil, x - 9, currentHeight, self.width(), 1) - end - - end - - -- import button - local importButton = { - buildLink = build.buildLink, - buildName = build.buildName, - authorName = build.author, - x0 = x, - y0 = currentHeight + 6, - x1 = x + 47, - y1 = currentHeight + 26 - } - t_insert(self.importButtons, importButton) - -- preview button - local previewButton = { - previewLink = build.previewLink, - x0 = x + 50, - y0 = currentHeight + 6, - x1 = x + 115, - y1 = currentHeight + 26 - } - t_insert(self.previewButtons, previewButton) - local hButton = self:GetHoveredButton() - - -- highlight if hovered - if hButton and hButton.type == "import" and hButton.button.buildLink == importButton.buildLink then - SetDrawColor(1, 1, 1) - self:DrawImage(nil, x, currentHeight + 6, 47, 20) - SetDrawColor(0.5, 0.5, 0.5) - else - self:DrawImage(nil, x, currentHeight + 6, 47, 20) - SetDrawColor(0, 0, 0) - end - - -- draw the import button - self:DrawImage(nil, x + 1, currentHeight + 7, 45, 18) - if self.inTransition then - SetDrawColor(0.5, 0.5, 0.5) - else - SetDrawColor(1, 1, 1) - end - self:DrawString(x + 5, currentHeight + 9, "LEFT", 14, self.font, 'Import') - - - -- highlight if hovered - if hButton and hButton.type == "preview" and hButton.button.previewLink == previewButton.previewLink then - SetDrawColor(1, 1, 1) - self:DrawImage(nil, x + 50, currentHeight + 6, 55, 20) - SetDrawColor(0.5, 0.5, 0.5) - else - SetDrawColor(0.5, 0.5, 0.5) - self:DrawImage(nil, x + 50, currentHeight + 6, 55, 20) - SetDrawColor(0, 0, 0) - end + -- for _, build in pairs(self.activeListProvider.buildList) do + -- if build.buildName then + -- local image = nil + -- if build.ascendancy or build.class then + -- image = self:GetAscendancyImageHandle(build.ascendancy or build.class) + -- if image then + -- SetDrawColor(0.5, 0.5, 0.5) + -- self:DrawImage(nil, x + self.width() - 115, currentHeight - 1, 82, 82) + -- SetDrawColor(1, 1, 1) + -- self:DrawImage(image, x + self.width() - 114, currentHeight, 80, 80) + -- end + -- end + + -- local lineCount = 0 + -- if build.buildName then + -- for _, line in pairs(self:splitStringByWidth(build.buildName, self.width() - 180, "VAR BOLD")) do + -- lineCount = lineCount + 1 + -- self:DrawString(x, currentHeight, "LEFT", 18, "VAR BOLD", line) + -- currentHeight = currentHeight + 18 + -- end + -- end + + -- -- add at least 32 height to title row so that the ascendancy picture + -- -- does not overlap with other lines + -- if lineCount < 3 then + -- currentHeight = currentHeight + (16 * (2 + (build.mainSkill and 1 or 0) - lineCount)) + -- end + + -- -- decorator line + -- currentHeight = currentHeight + 4 + -- SetDrawColor(0.5, 0.5, 0.5) + -- self:DrawImage(nil, x - 9, currentHeight, self.width() - 115, 1) + -- currentHeight = currentHeight + 8 + + -- -- main skill, ascendancy + -- SetDrawColor(1, 1, 1) + -- if build.mainSkill and build.mainSkill ~= "" then + -- for _, line in pairs(self:splitStringByWidth(build.mainSkill, self.width() - 125, self.font)) do + -- lineCount = lineCount + 1 + -- self:DrawString(x, currentHeight, "LEFT", 16, self.font, line) + -- currentHeight = currentHeight + 20 + -- end + -- currentHeight = currentHeight + 4 + -- -- decorator line + -- SetDrawColor(0.5, 0.5, 0.5) + -- self:DrawImage(nil, x - 9, currentHeight, self.width() - 115, 1) + -- currentHeight = currentHeight + 8 + -- SetDrawColor(1, 1, 1) + -- end + + -- -- author + -- if build.author then + -- self:DrawString(x, currentHeight, "LEFT", 14, self.font, s_format('%s', build.author)) + -- end + + -- -- version + -- if build.version then + -- local authorWidth = build.author and DrawStringWidth(14, self.font, s_format('%s', build.author)) or 0 + -- self:DrawString(x + authorWidth + 20, currentHeight, "LEFT", 14, self.font, s_format('%s', build.version)) + -- SetDrawColor(0.5, 0.5, 0.5) + -- if authorWidth then + -- self:DrawImage(nil, x + authorWidth + 10, currentHeight - 7, 1, 28) + -- self:DrawImage(nil, x + authorWidth + DrawStringWidth(14, self.font, build.version) + 30, currentHeight - 7, 1, 28) + -- end + -- end + + -- currentHeight = currentHeight + 20 + + -- -- decorator line + -- SetDrawColor(0.5, 0.5, 0.5) + -- self:DrawImage(nil, x - 9, currentHeight, self.width(), 1) + -- currentHeight = currentHeight + 8 + -- SetDrawColor(1, 1, 1) + + -- -- stats + -- local dpsText = "DPS: 0" + -- local lifeText = "Life: 0" + -- local ehpText = "EHP: 0" + -- if build.dps then + -- -- SetDrawColor(1, 0, 0) + -- dpsText = formatNumSep(s_format('DPS: %0.f', build.dps)) + -- end + -- if build.life or build.es then + -- -- SetDrawColor(0, 1, 0) + -- lifeText = formatNumSep(s_format('%s: %0.f', build.life > build.es and "Life" or "ES", math.max(build.life, build.es))) + -- end + -- if build.ehp then + -- -- SetDrawColor(0, 0, 1) + -- ehpText = formatNumSep(s_format('EHP: %0.f', build.ehp)) + -- end + + -- -- prevent overlapping on smaller screens. + -- local dpsWidth = DrawStringWidth(14, self.font, dpsText) + -- local lifeWidth = DrawStringWidth(14, self.font, lifeText) + -- local ehpWidth = DrawStringWidth(14, self.font, ehpText) + -- if (dpsWidth + lifeWidth + ehpWidth < self.width() - 30) then + -- self:DrawString(x, currentHeight, "LEFT", 14, self.font, dpsText) + -- SetDrawColor(0.5, 0.5, 0.5) + -- self:DrawImage(nil, x + dpsWidth + 10, currentHeight - 7, 1, 28) + -- SetDrawColor(1, 1, 1) + -- self:DrawString(x + dpsWidth + 20, currentHeight, "LEFT", 14, self.font, lifeText) + -- SetDrawColor(0.5, 0.5, 0.5) + -- self:DrawImage(nil, x + dpsWidth + lifeWidth + 30, currentHeight - 7, 1, 28) + -- self:DrawImage(nil, x + dpsWidth + lifeWidth + ehpWidth + 50, currentHeight - 7, 1, 28) + -- SetDrawColor(1, 1, 1) + -- self:DrawString(x + dpsWidth + lifeWidth + 40, currentHeight, "LEFT", 14, self.font, ehpText) + -- currentHeight = currentHeight + 20 + -- -- decorator line + -- SetDrawColor(0.5, 0.5, 0.5) + -- self:DrawImage(nil, x - 9, currentHeight, self.width(), 1) + -- currentHeight = currentHeight + 3 + -- end + + -- -- SetDrawColor(1, 1, 1) + + -- if build.metadata then + -- currentHeight = currentHeight + 4 + -- for _, metadata in pairs(build.metadata) do + -- SetDrawColor(1, 1, 1) + -- self:DrawString(x, currentHeight, "LEFT", 14, self.font, metadata.key .. ": " .. metadata.value) + -- currentHeight = currentHeight + 20 + -- SetDrawColor(0.5, 0.5, 0.5) + -- self:DrawImage(nil, x - 9, currentHeight, self.width(), 1) + -- end + + -- end + + -- -- import button + -- local importButton = { + -- buildLink = build.buildLink, + -- buildName = build.buildName, + -- authorName = build.author, + -- x0 = x, + -- y0 = currentHeight + 6, + -- x1 = x + 47, + -- y1 = currentHeight + 26 + -- } + -- t_insert(self.importButtons, importButton) + -- -- preview button + -- local previewButton = { + -- previewLink = build.previewLink, + -- x0 = x + 50, + -- y0 = currentHeight + 6, + -- x1 = x + 115, + -- y1 = currentHeight + 26 + -- } + -- t_insert(self.previewButtons, previewButton) + -- local hButton = self:GetHoveredButton() + + -- -- highlight if hovered + -- if hButton and hButton.type == "import" and hButton.button.buildLink == importButton.buildLink then + -- SetDrawColor(1, 1, 1) + -- self:DrawImage(nil, x, currentHeight + 6, 47, 20) + -- SetDrawColor(0.5, 0.5, 0.5) + -- else + -- self:DrawImage(nil, x, currentHeight + 6, 47, 20) + -- SetDrawColor(0, 0, 0) + -- end + + -- -- draw the import button + -- self:DrawImage(nil, x + 1, currentHeight + 7, 45, 18) + -- if self.inTransition then + -- SetDrawColor(0.5, 0.5, 0.5) + -- else + -- SetDrawColor(1, 1, 1) + -- end + -- self:DrawString(x + 5, currentHeight + 9, "LEFT", 14, self.font, 'Import') + + + -- -- highlight if hovered + -- if hButton and hButton.type == "preview" and hButton.button.previewLink == previewButton.previewLink then + -- SetDrawColor(1, 1, 1) + -- self:DrawImage(nil, x + 50, currentHeight + 6, 55, 20) + -- SetDrawColor(0.5, 0.5, 0.5) + -- else + -- SetDrawColor(0.5, 0.5, 0.5) + -- self:DrawImage(nil, x + 50, currentHeight + 6, 55, 20) + -- SetDrawColor(0, 0, 0) + -- end + + -- self:DrawImage(nil, x + 51, currentHeight + 7, 53, 18) + -- if self.inTransition then + -- SetDrawColor(0.5, 0.5, 0.5) + -- else + -- SetDrawColor(1, 1, 1) + -- end + -- self:DrawString(x + 55, currentHeight + 9, "LEFT", 14, self.font, 'Preview') + + -- -- bottom border + -- SetDrawColor(1, 1, 1) + -- currentHeight = currentHeight + 34 + -- self:DrawImage(nil, x - 9, currentHeight, self.width() - 1, 3) + -- currentHeight = currentHeight + 16 + -- end + -- end - self:DrawImage(nil, x + 51, currentHeight + 7, 53, 18) - if self.inTransition then - SetDrawColor(0.5, 0.5, 0.5) + -- end + -- self:DrawControls(viewPort, (noTooltip and not self.forceTooltip) and self) + local totalHeight = 0 + for index, control in pairs(self.controls) do + if control.build then + local offset = self.controls.scrollBarV.offset / self.rowHeight + control.shown = index > offset + control.show = true + local widgetHeight = 0 + if index > offset then + control.y = currentHeight + control.x = x + widgetHeight = control:Draw(viewPort, noTooltip) + currentHeight = currentHeight + widgetHeight + totalHeight = totalHeight + widgetHeight else - SetDrawColor(1, 1, 1) + totalHeight = totalHeight + control:Draw(viewPort, noTooltip) end - self:DrawString(x + 55, currentHeight + 9, "LEFT", 14, self.font, 'Preview') - - -- bottom border - SetDrawColor(1, 1, 1) - currentHeight = currentHeight + 34 - self:DrawImage(nil, x - 9, currentHeight, self.width() - 1, 3) - currentHeight = currentHeight + 16 + else + control:Draw(viewPort, noTooltip) end end - - self.controls.scrollBarV:SetContentDimension(currentHeight - y - 3, self.height()) - self.contentHeight = currentHeight - -- end - self:DrawControls(viewPort, (noTooltip and not self.forceTooltip) and self) + -- doesnt set it correct... + self.controls.scrollBarV:SetContentDimension(totalHeight + y, self.height()) + -- self:DrawControls(viewPort, (noTooltip and not self.forceTooltip) and self) end diff --git a/src/Classes/ExtBuildListProvider.lua b/src/Classes/ExtBuildListProvider.lua index 2b0904ce86..4cb5ac8edf 100644 --- a/src/Classes/ExtBuildListProvider.lua +++ b/src/Classes/ExtBuildListProvider.lua @@ -16,6 +16,7 @@ local ExtBuildListProviderClass = newClass("ExtBuildListProvider", self.buildList = {} self.activeList = nil self.statusMsg = nil + self.fetchBuildsCallback = nil end ) @@ -23,7 +24,8 @@ function ExtBuildListProviderClass:GetPageUrl() return nil end -function ExtBuildListProviderClass:Activate() +function ExtBuildListProviderClass:Activate(fetchBuildsCallback) + self.fetchBuildsCallback = fetchBuildsCallback if self.listTitles and next(self.listTitles) then self:SetActiveList(self.listTitles[1]) end @@ -34,7 +36,7 @@ function ExtBuildListProviderClass:SetActiveList(activeList) for _, value in ipairs(self.listTitles) do if value == activeList then self.activeList = activeList - self:GetBuilds() + self:GetBuilds(self.fetchBuildsCallback) end end end @@ -52,7 +54,7 @@ function ExtBuildListProviderClass:GetActivePageUrl() return nil end -function ExtBuildListProviderClass:GetBuilds() +function ExtBuildListProviderClass:GetBuilds(callback) return {} end diff --git a/src/Classes/PoBArchivesProvider.lua b/src/Classes/PoBArchivesProvider.lua index 6d0091e227..81ccebf64e 100644 --- a/src/Classes/PoBArchivesProvider.lua +++ b/src/Classes/PoBArchivesProvider.lua @@ -45,7 +45,7 @@ function PoBArchivesProviderClass:GetPageUrl() return nil end -function PoBArchivesProviderClass:GetRecommendations(buildCode, postURL) +function PoBArchivesProviderClass:GetRecommendations(buildCode, postURL, callback) local id = LaunchSubScript([[ local code, connectionProtocol, proxyURL = ... local curl = require("lcurl.safe") @@ -76,7 +76,7 @@ function PoBArchivesProviderClass:GetRecommendations(buildCode, postURL) launch:RegisterSubScript(id, function(response, errMsg) if errMsg == 200 then self.statusMsg = nil - self:ParseBuilds(response) + self:ParseBuilds(response, callback) return else self.statusMsg = "Error while fetching similar builds: " .. errMsg @@ -87,7 +87,7 @@ function PoBArchivesProviderClass:GetRecommendations(buildCode, postURL) end -function PoBArchivesProviderClass:ParseBuilds(message) +function PoBArchivesProviderClass:ParseBuilds(message, callback) local obj = dkjson.decode(message) if not obj or not obj.builds or next(obj.builds) == nil then self.statusMsg = "No builds found." @@ -122,16 +122,20 @@ function PoBArchivesProviderClass:ParseBuilds(message) -- build.score = value.similarity_score t_insert(self.buildList, build) end + + if callback then + callback(self.buildList) + end end -function PoBArchivesProviderClass:GetBuilds() +function PoBArchivesProviderClass:GetBuilds(callback) self.statusMsg = "Loading.." wipeTable(self.buildList) self.contentHeight = nil if self.mode == 'similar' then - self:GetRecommendations(self.importCode,self:GetApiUrl()) + self:GetRecommendations(self.importCode,self:GetApiUrl(), callback) return else launch:DownloadPage(self:GetApiUrl(), function(response, errMsg) @@ -140,7 +144,7 @@ function PoBArchivesProviderClass:GetBuilds() return end - self:ParseBuilds(response.body) + self:ParseBuilds(response.body, callback) self.statusMsg = nil end, {})