From 1a71d1274f643722c3e935cb3d00e7de9108f9cc Mon Sep 17 00:00:00 2001 From: Cyberarm Date: Mon, 29 Nov 2021 21:18:29 -0600 Subject: [PATCH] Show estimate of game balance based on score --- lib/pages/server_browser.rb | 29 +++++++++++++++++++++++++++-- media/ui_icons/arrowLeft.png | Bin 0 -> 15286 bytes media/ui_icons/arrowRight.png | Bin 0 -> 15282 bytes 3 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 media/ui_icons/arrowLeft.png create mode 100644 media/ui_icons/arrowRight.png diff --git a/lib/pages/server_browser.rb b/lib/pages/server_browser.rb index 81468d9..28c4c26 100644 --- a/lib/pages/server_browser.rb +++ b/lib/pages/server_browser.rb @@ -262,12 +262,16 @@ class W3DHub end end + game_balance_icon = server_game_balance_icon(server) + flow(width: 1.0, height: 0.05) do - stack(width: 0.5, height: 1.0) do + stack(width: 0.465, height: 1.0) do para "#{server.status.teams[0].name}", width: 1.0, text_align: :center end - stack(width: 0.5, height: 1.0) do + image game_balance_icon, height: 1.0, tip: "Estimate of game balance based on score" + + stack(width: 0.46, height: 1.0) do para "#{server.status.teams[1].name}", width: 1.0, text_align: :center end end @@ -348,6 +352,27 @@ class W3DHub Store.applications.games.detect { |g| g.id == game }&.name end + def server_game_balance_icon(server) + # team 0 is left side + team_0_score = server.status.players.select { |ply| ply.team == 0 }.map(&:score).sum.to_f + + # team 1 is right side + team_1_score = server.status.players.select { |ply| ply.team == 1 }.map(&:score).sum.to_f + + ratio = 1.0 / (team_0_score / team_1_score) + ratio = 1.0 if ratio.to_s == "NaN" + + if team_0_score + team_1_score < 2_500 + "#{GAME_ROOT_PATH}/media/ui_icons/question.png" + elsif ratio.between?(0.75, 1.25) + "#{GAME_ROOT_PATH}/media/ui_icons/checkmark.png" + elsif ratio < 0.75 + "#{GAME_ROOT_PATH}/media/ui_icons/arrowRight.png" + else + "#{GAME_ROOT_PATH}/media/ui_icons/arrowLeft.png" + end + end + def prompt_for_nickname(accept_callback: nil, cancel_callback: nil) push_state( W3DHub::States::PromptDialog, diff --git a/media/ui_icons/arrowLeft.png b/media/ui_icons/arrowLeft.png new file mode 100644 index 0000000000000000000000000000000000000000..5d5bf2e8c02921806ea52c04969452f1b648812f GIT binary patch literal 15286 zcmeI3ZEO@p7{`aBLR(%eng~&Y%hf7I@Al>H+TMCSdM~Z5;Yuy7v|s|;-D$gWcYE$` z+be;jt(a&66tE%?j0E8eAM}gSL}D-~Bt|j31QSe9qmA(`fk?m@&^mjs)9W3Bi63W^ z>ph+MKmXbJ%`9pYnO=Z{mkHI?-1}qNT?GV8Q*? zXAU@cXc++BeQIa7*&SIe%391RDOxXdCSwVt2Eex}nULho&}4dHzZ!3_Up;Zs&ZtU* zeVr%5MG_%6ptfw$;o2>2o${8=vRARM@>lwjA~J|UQ(}^_XxtE!4fd3;h+?amwKFM+ zxw*j}um)thBkfE`(;?$=dK@w*@JyZ8$$Q*ho_~rFINrtb94mMoJTJQIM81~ETy}pY zihR1#Cw7FJGsB_(8ten6nGjiaczD=3>~d;)Kg)Z)UX~MBL2w|2!x)L1QqmDOs?#P} zpD;9JT}_y(7H2G9saG2`8|-##pxl+2S1gemC~jofA&P8LO0c|>V@o7OB6m)U#foMc zW(UmAtmuG7=STvw9njDQbr~Xgb+KD8%%&kUr3|9GFlritakHqEBIkS(gL*UtT9H{8 zg)x+3APRiZxg-WOQ!@s%5&(1EB{7<6UkMggPsucxR7<2;J?XSmO{JIGhYDE?=}Zq<9?Fk zMUKNv(#islh^DB0BeOgNk*gP7F5ClC7J8sPs7R)CS1!1ArcWdyw#E%pip#Jy>_>BV zs;VLiZnRxFS#by+!R-+0+=|1Cnj9XkPvCp&-LOt_rzSZweU^1tlLxID%2+GN+Fc(C z)VjlUwL++w=bPO1!FpF9xgU4w`F$*|z*mr8BI7(t;vudUxeJE4}m>!viorW4jk@)wESgRocYR`pjWThk<^yBM663 z+Hht@X=iyriuXgs&t{=z8wyi=thH)Ub>^a_TW79iw*F?Xy-$(FK248FreBRo{g6$> z`+aP_F+Zj+_X{9~w5X<|!wmXeKDJmhmSvs&R%s(jQmP(!A3Lk9P~UBB{ODjxUng+r zLQfm$%B14mg{eJvPQ|+mQ}dZ!anTdMJbbT93!&@v()?g&FN? z5=OhjDmqIIYlonzWs(Yeie~nd%*1*!ndxG{9-vaSl5RzhXXwe0%{>~TR9+>Q={(;&ta7ZDLIptx`v#F*kDBEkg}7fyp1Q(QzuxPaoqX%J(Ii--spP+T|- zVoY%n5#a)g3#UPhDJ~)+TtIQ*G>9?9MMQ)PC@!1^F{ZePh;RYLh0`F$6c-T@E}*z@ z8pN35A|k>C6cL`1lN z;=*YV<2&N2%)e|2B^#z^|JC z5cdPHRNK4pbTa^R4z`8^oyl*0zj8Kqs=ex!^Zc^`bGI4%nW;G!6cdlDV`gyvSM%VW z$o9mcTl=rKKJd_I6BEtz7EY)=`#Rd5J^@}G1xu+s)hM z%*DoybH&a}x4#&?*>yt=3f%GIZI3-V|HoV21G^tyIDc?iL*x41qvP+NZYfiD?wNOC zd38lub5;2crfOM$;l>*`m5qH;Zo6!gFDEzL*!tzZw{H&Z-?8n=h`(>Xe5tK^b<2nH znMvP@#ouGhhEgw|nUce!Ucd#QwW%%qZgA81zwf}O&j0`b literal 0 HcmV?d00001 diff --git a/media/ui_icons/arrowRight.png b/media/ui_icons/arrowRight.png new file mode 100644 index 0000000000000000000000000000000000000000..f0c041b32bd5d6c9de51c175fbf2f976a57c9c70 GIT binary patch literal 15282 zcmeI3ZEO@p7{{kYuq{-ekkAl`>xl}1>+ar5+uK~PEq5(f! zw%6iItp-F;!62X^#()t+hzSut2nouIiU=kcMMdKWz#xS9Mj~QjaQ0s3u6GP3e4I<} z?zx%&^PipHJTtdnc0*h1((o`04kktq|Wl&p^q$#BG*|~ zIs;rF>V^G^e^i5=qpe-i=z!#sE%lx#VA66M;Kx_ZXzWfrVdBCP*dKjG#|6pa<2o168w?vvt{c!Oja#$0Cjw zI1V#OD04gls;mS@CV1Ecu2!(yaSu$H>w)&5EE?i%x!~GtpFlupiRgwHkzk9@gXUhP zD6$ajb@ukU?6ubFUc19;;~aLYi%0t{=n`d~uXP0Zpglgx?DPrNK2;htYba?gBWp*k zx3Svcvsc@^%{<@as9jQPZ}d7H_9fnG-sP-L*P z+BWI)AXx+PeJ3arr<%MTuJH9tNX=XiGIuAs<$^QiNzPbm#yO24Gu51uM(CGo3Odon z5XQ<}!T*Cfj|FxS$PEqSS9G*>MzHbCd7I~ICwwBiHPsPPZgXMM%Y#lcL6poB+oOwU zaoueEgiEz$E-H~>4wMk&S<~Aq-wEl3#~AL1k*w{WvsDvTaaCaxT@4z;q6QoL(2gJ+ zLJ7m{jKa=RzZmI*vWHDUOEu)CxLI@6LQ3|cC0euBGF5*Q*WN8lLQvJhqTx}(VjpCq zkv=z@Y0Ql2PX7Z4UNxj@=rDsGbZ+Ep#uYQr zdZD`w^h&1U-MOi&Zk>vE=cZ;dS40%UV@r;f(~M=Ae^3b+o#>_vda9jHyVK3)Hs@xv zDKQx8_9^Hr)y*A(rj|^~?a78}kka znJL|2W897og3}C6cL`1lN;=*YVV~UH22p3RXI1OS&z z0KyIc=BTee{z)?cMcZ0@ja{*GSARUxeza}&x-%Qg+sB72Lp`MjdhXs|vD&}Tm{GIu z(UO<%zjo>HwbSzU@|_>fXQ$UL{-WdL<K|#k%78(Ix^|2l1cu` zDVw=zj9A%llpA|q1f|Eir^@TLOtu|4QGDawz1R01{P^!@cK`c}eeSWQx@mdjpkf^_ z`0xGn1hb`b_xSPNO(hjCotZ5EI*vZBppT1ZpFS1g_Ksd%f8gXJ^IjMOGiNZx#U`)p i`06edE#J+XlfcQrCkJ*!XKp}0K}%Ds@4Y2G