From e0b63f20a1ac94527aa30993b455e80f335ee37f Mon Sep 17 00:00:00 2001 From: Evan Pratten Date: Sat, 2 Oct 2021 17:11:01 -0400 Subject: [PATCH 1/3] Add a small logo --- game/assets/logos/game-logo-small.png | Bin 0 -> 64970 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 game/assets/logos/game-logo-small.png diff --git a/game/assets/logos/game-logo-small.png b/game/assets/logos/game-logo-small.png new file mode 100644 index 0000000000000000000000000000000000000000..fe614a2cbb2a1914d185278b14a26e293a168f40 GIT binary patch literal 64970 zcmb@uWmr_-8#PRegrqWrfPl1gNexJM{^*eImX1M6Y3Y(dT12{~TO>w6x*H`17&?ac z4FBi-@O*zR<&t5TIeYfLW8G`5W3;Ba0wEq19vT`Np^~DkHX0fR@GS-!E)MX|so$S# zG&J-G2N@YnB^eodcTYE42WJ~JG}ffxBnib{P4Y+$onmeFFdt%%pPIRxA7exupT=mu z_=8s=n%Q^405ABzqMn@vDTfV z<>1iYUwKCVQ9Tk^5}F)}$Q-SR$=8o~@r4c@%f^<{D>*gHEqFYnj@E3K|Z4IB%OrHXgO-WW-*KdBm z-Qm;c8Sj#-MYqx5vR_8kBut7i49(GEau`fDI=z^F9mOB9;L(vZ z5-S+#LBiFztFK=GO?s(IgSFvOqfyCXfsL_=ToS$9dki*rOk9kwFY7$bJI=-uzpLu% zJ;h@s{txZj7?~D>Zp-v&&Wb;*#ZJq2*}qht7)zQs!X@&B3O#NZJuU+p@DTWm{_rRa z7wzGZEE?*$FnSCr)N@!QXb+D*qCGs4#tQv^^wR(Pjb;lBYO%uToo(u;?b_AYUg9%7 zTyWO0&qK9ph7mU`jRHK(kfmw~BE^0ButI0H0@ebvDjlv2g|^@d!G24UULHjzQqsr7 z|9kpn{j{uB1pJ1>wS3AE6eZ1-!I-Nai~E0`eVVFmC%6yY;T03Z4|T|HuH+a*?`eGF z(@KwPEQ(RBNBWj#P`CU)_B6aDSKrYayf9hRUR45n@nzv){YDZ`B*)<*K;oBlsEr|O zvAZe7q<{@N_QPK3Q)!WpI}5R848Ie7F0hI=Gs`SD+@%|1M&tD>QRKPPx`?f-YXUuP zW@aX^^A8`hdEzKIPrX#8-K=!Z`3VG)W^)v2`qFjO&Rs3M1quU?ygF*|B&!gVCjPy5 z_Ho1DnbyOZxxdVB7(j?`Z*R-Tfu+U-n%Oe8dpG>GOS+>g2XiW({HE~_BA4s)XtTx0 zr+3C?daOwt@v67$ZI#~nj#In~t4VK{AR&#_pDvE;H1sLQG}}71B(#SU?nzs}yXi;- zcCYpdoa}M6I7YgWKq&RSo0mW`Q|)-GOnk-&CqPSN1P0To(EIDt8ezejhTfAdmjGzG5`@v4{DnfwrwUBCCS998nB5H4Jr41{z@nq&b~j~~ z8<5;U7$_(4sgaf_bvMphP>#G4|7S#GhihGDm^@SjgfjzhUM3y#M|V-*s)~x5iXl#* zs6Tt&+dDh@pYI^_IqPfD3^#mAG`;j@C(YfR%qBUHl(8*W=aj>J3;mjD1GESfKS(`n zNXByyn#lv7V{v#`UM~+p@(@$yo*4-Q@nuMZT(0*$*sQ9lU@kGA++mo>CcDq5YM$UH zFTun!Cbe+a?+UW={#Rm^HAc^`i{jcOVS`6PBHjW-L5{7d zYlEy8}5lED^;xJHkFJ7IW%RpCs~{af}+Ddv8Pb5*VC zS7sr;Ax!gM8lG)%qat^0A^-^lrDH>8PEO&>o@xCKt@ZD!e`~$j^7WdmZw;qk_iie) zaSj{RO&zYfnN&Pkxd{F?#eQbw(tqPGvf){+yLxDuKwZm5S|S}p>p+r?)aq{D`;uzO zzLtPoidBk&?pQ1|Zel)^s@WhQ`;02IEA;f4+P2aP>{&S*8fzr!aBw=Qowlvi+!Jn^ zj9%4G_u_WVk&?a|wsdxm(`6S_tu^K%#!;ZE&~w_n_zga^Z(7*xkJTU2WJ+bgqUC(* z=d2LD#742e)BNePBKB;QWs}2^*&nbTZtth7EB_uIYiDOwPxOa6=v=u2X7vW@N&UjX zQ|Q%TtOIQ}tET&YlJf=rQ#9Tq+wx)km7JXe_k&75%);PG#rF=`2I+F-a^+Ef(zJU6 zkn)8!w&cLVLxO#yfltj@Je&4zF4uF&U^?3l=~Pi;1zP;9f)Km$IU=gVzYQ)_p&0~< z2+iP&JlL=;IVy0f{RhAVGC;<7d3iC;A*nJ2$Zt$yZ&dtgvuLaqYoh%-F{DTwM#p4x z=AeVidKnQ8pa0{0SD3lczWVviiv+7*TYOWFXW#AqdC-tyaacW}nzf_cSDR(U4orUh zBpq*2@24eOWPX?40Cp@LA(Lu&jwfYu$xw|C1=Z5pK~B;p>%&ois30&z6!d;|1X3n^ zn;$p4KEQVCj+#8)4S9lFNlS587yBprrWq zA(m3Iy-;?jriP#&TBI_~$NNa|29AIWJ(H9ACE&jK-5gcndW!oH;3!t_zTqLeEnCYI zBd0jI#9Pa|(EzQ>zG{XTQaKW7VgfSsmsAh6*P^!&Ej;_a*kr@t_V)1c;qzhsEzwMh z7guhAiL)Xf@^$d=8b`y)un%d6U3QItd=7KrW)}UHKfX*Ln)?JFA0J2{p&Zk?Wa)>_ z;@;io5x3*-2c4;sF}K{8)K~R#FX%dm>d>>GsuhGd(1{w1;#p&&1}=qW){};K zX|p)_*5*Of*0;iMI88{Lh{&JEJ{rI;QcY=EkTAplQOowwj-1ryyhOt6N zHIv6tbh&vd;`_`?_2uWMn644A;a03M33B5#ikY6%4_VDS=FxUo78uSJxRWCw1ajpU z78X9eEhX&lh!_PbH?SK%%qDUDv===%vgoIld|z-3Em2kS<8kSd>*U_q*g_`J^=9eh zUxYdp^`ATLg9C^$b2ktoC;4yEm1er1!604{XjE=WDwfgMsCcr-A(112?r4=yW#;9X zXP|-T=mrJUXa)^QBzOogCj~yhgjofRp=aPjgCL$9OLNf|(EF17pGMCv5-C1<$J5n| zXV)I0@XM?j6arkAD8FoG+^A{~^!E3JPXn%$XfAWcutoMZPmgB#6tEYJ7yM~Gx_DMK z17;(?oi-%Sn1 z$H!Y_GdH>rDJ+e_@+jqUG>?W;{GX)aZBkI5e0)65c~4iH9+{-6+WI6x07(MmZO?iB z%pNZotWh`)3b+ebdKdUAJj~{8tq-Lc_w?r{jK9jstAwct!|1zs2=ZNIhX3Pm z8tUaSAvydI@~C4alk4QjI?4Eia)5?f$0Z1p#=?eNs;po6iQyB}i8+7oHg%D2s~HM6 zte*ye!oS&hYUh+ze1}6in3q1UuR6N>w;iBQla{=90kM9e=x`_WD~xoP|PYCh-_WEh1>{@lgkg8SmP(@OLpzRv7j zc7Q!Y?xTk=^0H}nu2o~|Z7kXP=SpE5%%&dzn1GNf3oTeN?)>-Y_F@jN>a&S~DK2^m z#*D6kvgsdmaL<)LlGpv)-mzuF5Ye-Le*iQjkE#{aYgacN!1lhiwT<#Swscw$3OwI` zk)`VT?}k!fqfD2*cV%hKXi*}4ORB6(twq3pfl9s1SZ4Z@0AZz4p8q|LCjJ{E3)ula ziVZ9kx^ZEt*5t(M6yCWUM6j z{)2_c_x=lUB0}p_hEjSrW7hs3@%KgrQf)WGDFzp0Xze1*$uLFKUQ!J9o{J~yl{YvJ zwvuqq3Dj^p>BQZ4A?VtwTrX6Img6h?x%Z){*1f*o(peqZ4*5bGLF3}>*D`NChOf8( z^kJsh6Q~7dwyZ2lahO=up!2gO*NnNjIg$;cJIULoE&j#N8XK;juM6BAzCL3mQ&sj;;{i8klfknc;B3~r&06{OR75kqXwZ!f($Bvi*!+M zYBG)`Ed_vEql!vLYd7CllA^B%UR?=*P3(`HE7Zg$fHGUaY8e#t`JHIH#W)%aq4!F< zZHV`(?+=JbjXdk!P4vh0TQ^L&`30ot{$a@CdV}?4@-Kj)u4$jyDK7vm15s1Pd&p{? z_83-|_2DP0xfJak^Fw z3IJeLrmIJA)54aqmLJW~n#@(AZF$>-Zt=bB`UULOpR4UaueRxPh4VGr|B7&dP_t0+ zN4A@}^&vX>H%?+(S+0H;?7%@d?ILD^y8$)aKf<#xM{QG#DuhmNGdjS-nnh}4Gdx8^ z_sfeWhS5IMZfvpLE)NzQ#t zAv5&)sF4^AufV|T`{WjP0_;e(PPmpub&@G%$l0DY1_b~b<91dKd_LqN)2Zg1Ok!bh z=qA(>$~Mz&l58;J7Fd3q;kW2PL&S1|&Xl55JI9%BWBTVpaCO=_nfowndpjsQ&PKVk z!-Wh}Gs4I#z;H5;pFukMm;zO)uYd>x+J#>uR4Yb~$_m6Q^T6InutESVbSCo31TlH(cZbrR^xK8yilYYyD7%rWX1 z;6*|2JmVhE3>fHXQ#e(pbptifaF}WONV#++(xpse+F2-i!!I*cP)JCKV3Z5?TThwL z?g@d>lR&8O`W4aG9sE~wkmI0;F9m|!`O3&SHdq;wiU?eyg@AR|hCJhSy0dz}b|cxz z@n#!e4Lra%Cz7ZaK+>z1PF`d_NV9TDkD8mJDZ|<1k8r14kyB; zzuIQ;<)NKsRTuD1R*ZEK$-Vy9xM3C--NiVNGLp*)YiOeCvzC_``J3~Z69;a?R;+R? zaU#oqJ-*Jbit*!%FT746$Ts^dn>A`H>zGP8aZ|7p z2ms>%>{GA=m!cnl>;)o2X!!T8ZhIFo?$4~VHjultlo7}or(4)GN7pAxQdE8no10LS z-n}BMgE%t4SV{+5crylgnSbrgbL~9 z;nK66QI);@;~l9C8!(iHxmYOG<+-d~1!|2@S3Kd?r4~1>BxF=oDU_iwav{Y+&sDdR zeJ7eABbu9jg^s%PUfpd$i`bT@m*i*yLiIcKBDCSvx$zz1P7k!+pS>bY<`D1kUg8R~ zVlMYxOL?Y^xoEUe5ES`|ju&a1>q^eMfbb8=AIodw@7?RRr~GOGD$-^%nK5nJp_3y4 zPPC=vwNb@154Vk@V~i}r3!qE`)mEkoKeFr^yyx((@R@{AF}+RpqSnuo_o^`${K*QK zjTSuH1{_iCxW)#l6K>}S_158w9VhYsDhcE7wPD~aRle7+TU-+*Vi*9p)nMe3dC&Lp z-K$*g7eK#_aOqxpob!m~WHA}GYWCL86w@fY1@tY?om-tn=#@Ogcszl@Hb9d5znq}6 zKAI}OH9QzNV>k)6qf|QC%Qx8o68MS{<;9^ltdNBD2BQF|WpyOJ%`*Pwm}(?^lQ`Z~Au99+;b z(xsr)cY7-iOdEUi2+Ld43#IN=-!&kw!`#cV+@FWoDnu7pA?TK0t4aJRKU~>*Rj}f= z`7n_zU?};Ja_M`f4?W^zdsE@?f#i(7kB{plWQu3!O5EJ#*ogj(0jlSRxf{Nvj&Yh) zQf@s6k^3cAe;*TK)x)j+@5;As5JPEI8H&vjd3vCJ_#iccfAajY`GZOr(zu=}}z)w@2^vHpk*8e;O4E zFqBq6Ib#5jFl+W*(MS94+Wz$&d1F1A=4wB$Le6t!P^Ba}c9?q$<9}#9{W>Y>kq+6t z5v8otejagjPDNHfsv8Q?@Vt}?@;2}ANzsWL3Bx_UMOkQaWgLqqrkEyDJfpH-#moXI zoqgZ8WD&1yZwaRou^u{~FhiP*}qo)Qka*isf=a zf}EptYH0D+RGDQY^D?d>s1P6JiW~T~sBP|4&`&pnN!*B0Gc8NSP;s2@>@ZvlqNZj9 z2BL*V&Q$j+vvQlq5wX!O3vr2w{6O(Pxxw`-o!U|?RGTCEtyq@oZd0&pcLlpaSDJ4V;cO5FPg4KXIKhk6-xu@x%{@9ca#(1~AWjyu8xwW`h^O%eaionPuYyj3bB${Gn)F$!F=!7A0RUJG zcP&8cH^`&L49Dkh(>2r*y{dKJjwE@qS-2F~+`ar_9^09;EmV?sWcM5VBcM@x2X4pS zW&)2}-H^51AIdU%)+*lsxN6cqp@(yLH^(b z|Edk%ohy5(LXXsLXzFmp9)Svit8vHt7<2jH6xUKs5ZCXA$;MvV_K{?igEo8G&n-_N z*&J>eQJ`^4Bq7|!P*zJ|g5hkz%X_;$l>1<*yV=Q#8t*R|6X(m1R^LLph$#Nu9+dfG zR6MpE{jUrwZ$(0BLO>~NTk*~EO`?z#cYvp(ZPE zB6=>NFH!aVpnZrl*0ScKjUfu?&|r`BWoJ;Cb`Z@lwZuLXa zD>5B6zVwzuD<;A9E2nIWzJ&uW6yRCOGkWXq6XUV~aLt}AG=JY2#dSW6D;=5TNe=JB z+&lV=bchPm#^3itIyGIA8VRT@k^*C1<0UjyS}{qS-sV#ewCTDW!4QHW)xXi`-wJU3 z$4Vac81ldBUOkO1o^TwT2avX)s9O3S|C?=P2ZCbv^yf!=FW;Ws)m>Q|EFS7 zO^^Fkubh*UlNjqgXM+1O6au;+Lym2abKjkTM`!FKUx1su!dhcrCj-Q+9-_+d2ovey z`aa{E8fT%o`fRM_vc0!{Fw&Zj?J)!uj3N{r@C|=jBPRfH>6MS~oyoU-L-(@aWDJXZ zs(bfI*!X$KguRxr4_5WWmtG6-`jK<4(#(tLPdxD?FGM{d#hHj8DEo{&)%ABdVyx2u z3827uo4y`eptR#I9@Nk^B#`T&vB z1C@X|C7@lsbxCsX&UKXes^?JYyoeNpr#xm!MqhK^Q}8}PAoVVEvWAuf2a_m75H5+8 zfJK5e-X9E(t)hr}p+!FQ2&Gp=6a(8B1rW9X$yzb}tNNc+B)PD)PNs5=aN4R&B&S%) zAs$R)cAG)liAwrs+s?+|F&;OhdZn`C+L1Qo(&GGZDb^u7b=U^#zfJk%x#&ByDnu71 zkvqKoLYtLb?+&MQFtVllywXJP1JP5Gs}Z~A9cbW~VFAS;FTmccUGG(a%ME@T@r#MY+88qS zbRoolEQJ&Unj0wzs+cmMr3c7S{p9Gcw{Zuggbe`BDgQ8tVjzV(-0i7!zN$=^vHMMk zy^W(W(mD$%q;s;AxV~vPH=!8>1i^gG)vouLvRd!d3%@rE)N+zW_q~SmOGv1R<^rNx z4^I)GUtyuAq@(~TjzVf^7B^H#vnmBZk6JiL@N*J=>C#ahnA|#0tIA?RTEey!La}dR}mQB)- zHP`YrM}MVh>*YE{=g)-aVwZK`8-DfABGTk?^+vA-1_y0Y04g}*0FVRf7hKfyBqf|r z_)Ey?ROf@<)&9KO@ISXnHc*Z}HfIU>e!LDM6bS!Br$-fZ(8n3_ofl?xYRVGl|L$AY zj*nV_&YiW&439g(Mr|xE0648ZB z``(Y{O0kpHvNAS6^#UL$%oR@;&<*C-C_CZQ0U6 z1U?}!2yJEccWS+&ng<90zO15gdmdroi;nZZHCBUue~UAK81EH-&l;mxI=SdE_}s*I z$(tkY=56ZP>LR4Y9VJ)yoC_Mo%7oyUr8%7r-<}tzG;eQN*jHlp(mB{iyg1-tkVoj1 z53hXA-l0x=_SoC@ax}oN(Zqe92proN~;Qrgoj+T_U<@0EzpSjeOkG$Sot4p z;7z9flA6Bx;Sde&e_jB~!Gz~QSHtGpe@pYWqgkL*PHMzhe$WpaBL55Pg_NzeKlKi$ zWU#*1MihW<+`PQrqWm0yGneR9oK$_w>!hX0pI~gxDiw2ETnYJ8(|@R_+>R3z+CI7E zWtWmfh>HpiO#NjVc$qL_Pk3xePH!T|_Jp9^0%Xlc39ugtR^O)n{r)=W5wslck28pd z*$ZA}0be~{x!o2nn{o^~Ny)Q@FSqwDI4^9MvwsRh?%Z8#3w%Gy+rKZ$cqg-A}`4P8aZ8{ zU)(Wo;Hcz9yV*!So#5pLxZ;V#fmH9xR4bEO$|Gfeg6kn)3YJ&Z_Zi@9IUVSK2Qaz7K$|_vY~*B8 z++6r+t6Mwi@r;=OSC3I2r}`HspUb_AZNG05UF)jN;H*$0GdEsISCYtV%!{Xfr%Aje zEV*^G6(F2?G2XxRLt=x0G}l^*Ew!|~Z6QT}<$0riG?Spouzg3civ2lFq0#V`paq+* z0gOf4!3UXe=LMn2H}Bu%hq^2jcq z4JI^kL3$o-Z{8{Gq8Juujg1Babe`rfR8j#R&52H+h;?MuUv7@6JU`!}@$EU~T=>|` z>u3FpN$*vSjwAE(RudL#XB!I)s^@sOl7}+w;wxFP9}90+F4T!MS~}K_=yw>=Er)#D zK>$Ue4Q}P`A)764^<_52vqdQPpT@fJhMU_561PUtHcgi!>y`ohSQ&rvPwJ><%91kl zod+4t4=E;3Q;t+F?m1{$2^sqr3Vc^y)$t3TyG^RaB%Kf?A4Xgp9KSjaWe_;yDO!JI zplo3twPl-upEUihHxnRdJA!|V32q(5yx3~KhlVpSlM1dEUNZkfP5l;!1~$p*NXag+%iQw7Cq_SGb02Mm>5GxiE3Y?Ii8BmmydX@=?(Uh~$&CMUgn5de&#Et1g5$!}r%|9Od(tMzHYfD6Cb71!G40?Ci|L5$@sJBD8tPj#+GcK;9oTezKA0`}@kTJUWASzL`=O#5 zd)yZUO=AHawhlg_()Pnf?zmRd%mM$^I=AXkSFnF&i>Q*M9m(Kz@Z->K zt61zu-sHuW{KNnFC&W$*z5J^4>j9owjVl0BzqBOPtYnc^$&zDe|C%01%LfH zDr~FB6zBcncE&Pjajl~jVNVFV{nBBB1;pR}Y)$xHRVP%t?A>&fRJu)#*N*x*d<8a? z!t%kYe5Q3Koc_y{$@3?5=I+a^%vaclVLj! zO$$IrSg`2pe9a51@|R>A?)p^%jG@~?uZ+ZtAD~po9DS`|fajR3lhWK&ziNn5M+63T2e; zOG?2{rTMUcm*wKJSRZ9XeA3>6jclB!L?Zd~ls%4+7_C0cno$hTHXz*tS3wthHx>>F z?}1qo#rum5YY|BUoyo6-_!2^wQ&E zI5x~zC*Evq;jjeKcGlWur`l*&SGc4Rg9d)bGR|AbRvXMW*=2Oc)45;23YZ!QL>gTr z+9W?tX?2BFTg@}Bo#znz=kx;XzqIiuP7=PO{BrHw__>ejYlHNHrD#8dOX5s|8FVWW z(Ad)(`J>kNZdnkG5QI?Wx>uVWy z2j^e@wHBW=rM44N#l} zuztXJdKbG-Ds!1OC;F88t^S0K{)Fl6!F1`__jw)O?2_JTVQ5i?MeH; z_yjZ%j%q56^2Qh`!26^a2+D1 zRe#5~BzPH{fA2m-MHyvTEt}K86jhM-shUZ?#;J7JPEtY|^bf(e7;x`%%k^Vk!KB%*7R0ReLo8OKk=! z!iJo2ziAb=l!^mXI+O&EKce@uV){eHU@f&N;9J0RrsUX<{uOd@5OSOmE)Ulj9jT^Rbp{ipEV+e1k`}DAI#`Dec8i9!+iHNR<3sL zJLgvvO~-`;cy#y9^qB4=7jE}&erhl#+}4LpSKmhoOs3>4%%7WN?74bM7;%Pg8%s%<}QU7_z+nkaf9-KiYYPzRdcm=q> zp5{&ROG<-?;!CEf7KCPBAMk0_YW+Kj!(z4io8671zCg6Vg3}+-`mKK6xu@Wms5Y@z z^ejgWWI_adWf^2xC^xTB1pvF~aicDB_{f`VOaP}MV7L78))?d%DBMGcq1HsP;m@1i z@R~7s!vHaMOly9(N2v}yabF7AUA(aJQEdrA)}<6_8)_>dYGbkN388e82Lo8rE4%6% z8eXei=#sZ%9;$%Zhs{oqK&F5QwMjRASAZlbr*_}9IZLImqBskmSM?nrWO89H`!~XJIiPhomRs0wqXJ1==MoDTjYM;of1kAT z5TKxn$h%!)g#;Q(s(XM*0CW+d8PwADsP3dQ`B802`C$22xpx? z=OJ+y%YPqcb(|E!xO_l|Zr|=PK>e{8Jeg7`xIcdv{ImB$L(+Kb7_R4cgBGC9O(vMjV3BBdlX@W#AzYoVALc%UZUWg?79qnDQ_U>{ z*DLGDd>v9S2#`enSA%Nvra!l1ZvRyw+39X(2Zi2+dkvDTxM;YO<|lP3rj+d%ENQ{pJW1)_7q{lY75(P7Qv{G3KRf%& z3`y6Kn%O)RFBj1%IPq7(@vYe_jWc74Jin?z^Pu1;_^k~1!;3r>cL3^o4ZmvoG`uCG zdpQQsgz;`c;hnd`oiuoa3ynjzbq47#2QeP%()tgsV(rJnwV8lnE~eS=#2s>X4n&EkftNC$FOJ^kZp2$`63}B&qaIg@1F*D&jW`-?`&EE3eaa132Q#~Ld%6V)NYL%# z(N5#t#%pR)*WZ?fVn8#?J-_-6bV(rEVEnL)$Zo=!tl7r*7OXVJNy=G33CA$!*FQfF zjyFY!6YJkUm+``TPmkPJ~VxZ{77)}ht8 zGlm-2728Qpni4boFJ#?j=c@FGuEy8K@MK=Eu6-XKEFHK!GJuA8ZI^>{-2t_Q#F*^~ zV0a&Yq4o7~Pv$Nul(4Uc8CTHa>v-~81{C9^Vs)D`!~{SxKyd?_B%U94jDOW~zhF5z zP3*!t0bm9D>@p39EG0cH1}w;dlS&~zJ6M2U@UI*%jQh`3p$@)OXKlgUgg8=`VmA-s z8wgO1N)@yxD;+v(ks0BLfOhko5ybHjuj{ZK$k%1$+Z}a^!R6a1sVSqbap6`Pq*AQoT^wrwpfCx&WW0CYf*74QpbC&W24KQ`o6W36 z4rm}9@I({byl>u_7wX3x`f4eBY6D9lnZ^dW(sf0jZ9D^CguekCII1!p-*%1*9~w``bKrud+2k?65gJNU}43 z2Oi$7U!fNZpq#KS4;tr%bixPTDFe6KB?ll?|EDLbA~^=LOBW~G()md&{ zh8d}tbx|du4QsMqEBX79*A}UU_muIu!KU>V?`K5XkRGU~KyT!9BI>j#HcVVLBFFWv!Awb`B=IdMn zH@k4RpOV7F5d^><)1o@Pc3J(}jfj4UISE`!-+hEDPSN{?6H3=t)@)o#N7PrhZ%x~& zJX=)w_nC18&TM}!wk5(7<)wWN7l)8{H**b6Gf^EM0Nj7kc^`~iB|^S6a9I_30xSpc zZ&6^PQb(f3CFend|123CAZNL{=Gx_JN8wjDC7plyR;d4OSrS!}r;Y z{svTlur_^;d#@EYj6H4fmL0A5%N(Bn`6KU+i#u#HF;UToU$x)WjyoErdw&D!q09>= z8;=mnZ};@6 zPPemWKPY4AO+xmuqW0u}_RfGi8t9@lo*r3&HwW=6yutUm{ohkbU1Qq+ z0~~B0MKo#4Ql%yBl9aP^=JCI*Y!UsbW$oPivFZ7mFKZ;KqhrUv?e2V`?Q}wgM$E@q zHMZ1-8?2cU&?+P8A@1fQ&LplAoi<#B}rE+#Htc($;XX zv;;(-=z@=q4azMhlHB2)ZLnZYws7kGtBb^2JHT)U7!i#t`Kt<5>OXWLEX~B`x94{D zZg<_iHqUtogb&&QA>YhzEs|sdEGQ@^l#@n_l2N5as7oB4q|_I%G61r&S&Fu!h;{MI z9w8x;uyLsSm=hR@bl57DUp~uu98El{2zX3p3sO$3FR#Dz`+l2g+&8uZDC=-bn+H7!1K$ySPvbTyg*Tm3ZN*9pRzKj zFyIA<0Ok}!K?e?8AO&U6(cIO3t)=K}?8AzA(|QC6fg2v`->(=55SuaEE!0Hm-HZgz zwRo|h1oKBkwAPlEmc3@eF$`vqJ8xRZtp_yZ`tQ@5OJ(8Y4me7PKMP=;s`>|Ll;n8W z(T*rYDPy`0QvSm+j@^S$zn%ZqgFRFfP4-s*_rx+W-YjQFjpwCZ2OdwJ;BpmR^7 zWy6MslmMTC@Vjd>nnA!5&~Y{D=6QLvwuT(t@&x27=Y@`aIemP&amVd}lvGAe zH?{6O=h^uqix3!M>?Tm;>$D*#al@ou-zX8pbp6*$=icWY=0R#!-j{P@t?+d4#;YyufXMy;JhOzrGF{vs_tbYW4lW@ur(vx|Et94EOq1uRsj-ui=TCt+9GE zV;1--@{I*1_QwLf^5Z3VNCx;G0j5JPdz%8XiH*f9aL@M4-nhL$W^V3tywa__Q5JCa zCREI8v(_#mXZr4DIlwE5+D$QKIGY12)FO1psX!4?1@U6Zb&arLUk4@R?H&V|XJhFl zW0qL%lU#MMDv$jmNn#aDEqW4kAlT_mqTUr`W;m%KLu}tul#lk~``&X(Ch=TX_zACF zSCFR;qu<{J;@|dOQ26c4X5n@<%$T*ZWnE~I6GGCHM{NNmbI^N9C1ARup=9zeLCVe8 zEiETLvr3Hh81?WTFyyVRLFDV^*pR;=9 z^kx4Mjf;<8iT2KY)@yzjc+{S%;j4)Z)dszW0(o zbOo98UnJMN4OimbfeTs9qHo{oYCA@5mv`EsGa72T4uqI;xbI6GWEn`xxal8fj#{#-3CiQ^~>q=BL-e-OL`BLc)x{oq3jy-4Ek&-T&?k z#1&s)0sQe&tFLbygq55jXOuLy|1kU5(-d%NskfMv=(2lHkR7yj?)3;m8a`-1_|ISPow3dik7GzZAuyanNm z+o!sV1nJ|=iNksYM#qRN{?5F?ovl^cAtUOaYmw*=&sp!YG>R2i%yJTvU?;}?8plb* zUu)9sA_g%2l_*$oq{$;FI7LFKO)l4nrwnX5FIo0_6WXuy&X%)kmzfR4 z;;~2lc#Xty!mpM&{y&<&!jaDZ{TtI`y4&;&ppFZzoq(Ln|koOlSM=PcZWfuv}$#(KIuww?L`HM zS1wjApBWR)yuH(VdU}Kr5I|x8U^Y#T+T}Wb8tut|Njp^Vz({B9L}=LZ6hdCHQx)L& zI%H??bDu#hOgwpWcu2d_kcK(=^6p0R)3{h?0#C*Sg+6V`rEL;o$JFos{sN`C%g%Fr z@hPf{g@3@09{AhG{&WjTsPgcIWR#8q&r{seGHfpB%Ttf zf1~qYb^dH}^!ZC3t67&n<~+BreV=`V%;XAYF)kIWq&2p6i_akG zVisFayCm!1v)4~QE=9=Lz6PpeWh|x~$hJa;GF~9v;mM}U+48OrMe+)v-t`mGHmx7A zBYBqSDBX1$1{D3@EN`5@${7uL3>XV?0No0;kTcR~o#ym+B0~9h5`u5uO@;{gaii--2@au7~O9vG-68C3CDq@>&Hmq$j@;Edf5@_j4;;fvWgg zbA3$M7lTD+v$BN)DD9>8*z0esZ? z{@SH?m1hNyL?qze8(ymeKEV9bfcPx9(gs;x4;;9vHYlijm=w~G%-vjd#402>$lXsm z5tC*rJn0@J@5vvr93SL;o-MMcRgMj4*Hf(~mzM)|;rcR!NRfUxM7b*u%E?YGpX}Y* zACN&6g=RjqtoFEZy1Okh`4gQx-k7(t(gI9{|KU7z?Mjf-G+z%qVz;tCmj{#UlUg5S zVy-558uz5P#^|V$Eo+0rjJOoJ(%K84bmZg!L!)qVyAt&uqs?YKJ7aqOlOk#1B-^Y* z(@Oz&!I)&nd4O00fbDVX?i&x#`!Jk5ggc(SuKZU8kWPwUliGXm=f)l@S%!d%(av*j z?BlIK@xkEu1@)-)_4Hjf2CSfdF90flI$#FcDNM9^qRmYqk;yh3WaAIB znqLu@URoXX)gu@fIaxyCy;ogV;wJtl1N!!8b7+C}4Ad`(u){=9=}Ds(-!=B^^|(+2 zQivP>uCuwO*CO!_(P#aa#94xaN-XE`Vc!->3$osmw|w&W282K*J+y^!em822(K<|2 z6xaWS6gLN><7jNybXJGJyOlAc#D@|mJrtX!CS83+)t* zs!vmYfzE8}67)so@FzZXU?fDF}e zImY0M3brU$jjz9rb|@t4_{Rmi+RD~%VAXdj(qIyhnlwBGV*j3#lt2a$0~}_KhlB#b z?kaSMr-~mJjRcy%{k|C$&9;TMNG%yK*mxWrczY?ZuP+IIv{pNrLc^wmE!_DHYiGsT zD*oUFC=^3-QpBMwnj)j7SUt?Kr*_yUjY zz3NWL-hW!<^O@tNY}mDWF`8`d@Yr~Kl+ij{5G9`sBC=)t*Fev>X5NjQRv11THs>MU zah9oR|4I^LAmR&l?(s`LpvOv;dW*z#Xs^+^;geCa%(u@_6V`o-ihMESDXNP(s1}_U zx8-B!A2szFCP~Fht~7`*<6NM3KpD8_U8v2*_L+bV;|2fqp=3<5(srmUN1k6v#1QRU zLagugo~mruH-69~L!%8o6c|yqF#N9~_g|sFg17YfAt(b$V-XlsaPewQHaWoFfG~1l z=E&af(TnP!0s-8H`dK;5uks|l3||!*DJG+D*g%`f0a+<>jcq8XXQ3@-was73*MM+ftHC!^JBRPWu&dRGy^GB~ zmzG<7ziK!cMXtBqUwa4$DIU;){BvS*TW-6<=Y9y{L?2eqGWmVS|t!7>e zc=QoKS@8)`(zDoz;#o}?Dd)p=_3;~Iscw+)JD1C$>l7Nmz{t)Ls>NGpYsCL$QFU>qatU$mpQy&hd^&3%*Y7|EviT|1^5*e=9w%Tt{Ly(>l))~ zyh{z&i&i2TK`yebNXY4sq5tgaU+Mm>hQ+##?C0)D{7zm=+)$~ZPP>A|d3Ij)>ZF|E zCI`0pzxmvQ#Gs~M6T)mrc2!d;sP<>#4NZibHuIABvN46rh6bGfx*DcYYwv_*ob~p{ zu1EaqEOY<8tcU-SL?r#Hy75eZ5a76Pxqh3eRk2E&vaz8=B$U)S*2FXK2;G7R-&YC> zySs$AZ72-cay8g|5V^g>p`%cjL~cGSt7{02A4-0# z@GI0~$l_PSwR~-FULM8zv$MJr#7GHA?(tx zhCN3v0|!m$J; z{Y#|P;H}`o*D-WVsDI)Xj+mZ~3>W*#snFc_nxM;?lJ1$s(n z;%h7}@IUlP!F32fK#%S+a9_O*m5E8K*cahLmjYv&zENGYAE3n1w!pcK%Y@S+#$&iYQ ze)Bh^uMOl1G`s6Kqni36KYj^?)C*BFRhH}Wi-Cu%ydeE<1Ecaf(9>>AjY|E&rj2Nd z-M0k4Jvvgy+bh^`m@LG2e#4rZoUDDEGLH~zY`F0C(hU|Hs^tH0XpF%WQK*qkpiQ!0 zP0Ys;Xys8dB9tsdxL!ENx^xB_PK>>QbDvkjI}xuWt;?{Xj}yL4T!yMb`Rh%w9r(5t zBW=MZ;eJV>I2H;Lrq24o6Ad(Ru^ZR*ix?tsL-VdgpWqK=m8L`+fscaEI!=9q$pU8* zp1%ajvQX|3phM9F1MXvyR{GTChWFF6Z=zDixVgs(CqwvRR1MdcFFPotLx5K-*7*rd z<(CUcejtaXW(_O2kPXKwNe%_QWc{=^V#u!L(Poeua6yq&AFsRqCB^;9`~yf{zh+Po zb5ei4OYU3F_XsRo$~0_}C6R#Kq=TjNH_s}1Z<#yAYON_UY`q6B-hgn854yN?FQ}_E zKYdGgx=Q25?XZ)Lv6ZuM|Cxj;MTmqIdB_$7*$a@S=h?+luxFXiWPu#V2F){*qgoAZ zco&a%$%LI)H&19t!IeToLUGnB6j*Gx`(=@3!qvM{L^Oj7@jDi4CRwA-QE@n77FL`x zI&cxYNUAq-@H{E+_3#_(0=E3Z2Go=`*s6g7d;+AEh@XW{b}}#8G?5o`l6OhHe^1-9 zPecjvA3H(aDpAfR&of{DCC{lo01T(Du3#X`Ruz~h4S}t&K zeg%Q1)7bTFZvJk|H%Bs+YxF=c%V0@QK;6kUIQFBcNS#m)JvEQ5-it8bWIR}`OQGh0 zQC{OL>R#G8L+DEP&B?gmRN!4+=M8cx>+}2Zbv$!hj_^$~vv8be2O>}vOzFisw&|?j zulFAP=}GaAT#U;EjZWnw3>H(ea-NzcUBMAYYRGSIA2HaaLy}q~If1b~g-$WwQGmNa z{O=j7XZ{bXu?|LUUu}7ujZyG_dox}4 z(oh>KRbIAC_noc1N~?M%>0K1bY3kURQhp0&Qrq~9dv?K(pGU2z}lr`y`%xUaK~BmuG@**_n#1b zFOY2&QBci%Lj>b;Y|2;%ip|l~-jR=&{NV*jaS*m~ywM^?n{pBIw@VUd9j`~+U-KU& zhJCyvF=IfL)Ir-V8I6dj*q_s0n^?_U*!~yldbe#UPrRw&9)PF=;JN|^J5J!CYt!Hs z$Q$w(1iy7En)-^v-wx~?zS@nHC)fYo_e+%!LL@^L1Svmf{XChW)frjA*5UbIJMQ6t z)|WJ8T>Q-)YP#wfpUYlUNw(iD8E^Omj%Vf46E>f(+D83i|D!@q ziDi6L_R{3w3QQfbsLlNNFfc0X>bp*$aLdc7&I-vgIS!T51*0dq=*So7(J_?m?Mt}C zS!k04=G^h3dgR=ffJ1R}(q7~+ddYK?thLEzxv4lgPt)h58h_syp{ ze?2?*nA@?HqRe5pBH^W1-`>4*4y7-#7n{zqw%}FHFHR~o8v1IwqsxIUSml@yso?E8 z=DJoupBA-YXGa*eIxpBlc-m-W6DI6#Hc7O7{K zTf!~5iWUaz-hLsbyctG3yxmi8*WIZl?M@%))HOMT#m;oXALWB@#H;G2rx{|Q|8B}6 z>a*bPN(=qv3jJ(5^+_rmAT?jArd%ga%8cR|3kVTyP)2a86@KT4)^?FWerTgAMZ!@l zW+k;AlS(!9vwWEsXhy<6WqlRtcJKJ=yb8r4cg4w#B;QpLzSgmKBAC1Zfurk$l|fb+ zG1)j=WG!6S{&1*wh_OSA#Y)G%(nZ@V;6j=Nkd2F2X$u5tnZ*v~Fc~n(DL+TDWu;b8d9pM>ed3%@Q^5Btje(|9?8SRb=`MqJ$pa93 zI4!jm`Cteo)6}Ogj+!{;-F*k8d^pBY$ZwywF^qd9j!H;3zmwHC1#Gj|5q=LnguvbR|C?KCz4i6OMQ$ax_CW8grN=VZR)S?{AoJz>zL>26eS z{n6)s%i=*e-O`Ve;%JdNsM`GM^))f#_)vOD%r}*ND%T~D6J(pI0HTx!gDGPbY$oWH7L53s+pe$Tbrs_wfYLR(O%+05ygCj=`< zTi)p~AqiQW3V=q*$Y~Fw;)GO;WO|3XcdzJF_4tMH+I(E>oN3xy4Cbi|><)qu;i6;i zQd(4NE*8*A{HI$hWQbnPrpraTvqPGsH^3AJ;yZF+Cz#T@} z*Vg6Zi64nnFlUBj?u)FVDPmA(b6%a6+6)S9U8B3vQ(B&x1=^7I<|Itn`E6#{hAw}0 ze|9%+wASstnhCe9ocoIxa4Udln4zb{K{~#FEV`dHyldymL2@@{O;qA+SwLJAQZ=@z zbeScq?*R>81;;uvAyD)$U?c|3kDPH#&6R!XTPm+mb`l%05s0gC8#@LIhnXtoC&tQS zZqGU55@-b}O_-gTNsiXBi!liCCzjfYW^#!wns7wJ`3Ia-tb$zUvvSm7Q(tioUlfZvTI=#7Q+3mSn{vX%Bo@KVg z^|h>ke!1JHiqMh@CK+iExRv<}XQ*VsCp#7&?LaqCKX=1qNvimXtgrN_K(aNRYfBw^ z|H53D3xg}>tPf9Pt$~z*8x?U>><@S0mCmu5sWuy`U=YB=~hpp5b<~wjl!hOa7dZ^qnES*B;Euu2u;g<*L{(%(X|-G z9;+|Y-_~K5|EFBUPEK>?40*|NIhZ&F;>IionB`dNYykBrOC|w|nKmB=25E|rK z|CY)2I9ayTIr}@JM3t#u+dl2=ciV=gMPjN%&lpjae^t+`2#u37Syo};L}*oB@{4WD zLTLxMMaSH}95O_%of$+KduxnaA@WkPYl5c}w`tPWea>u)TLlA7L@oMm3m5|YX>9I4 z=Zy=4Z2ZGMUUxS+07R@^K6r~gH8?)LN!;njFw|PkJFokq zQGzc}taMgvBOgM*%UD(+(>?JO?b+|_!$Ki&!D!zIn2M=a+SmL;FY@~B7cc9R6&?8= zPjU4ajg!7FrJvF})DV!Jf_vB}>JPxT!M;FWUOZz^blsrHLx!%v>NrDs=nFJ$d#DhX z;vdNsY*-W`$hUuvUbjlR8fbEe-k)!wNeFGb2iO1~C`Fk72c67aS@9_cQ%SY=8e#$l z8#Vyx;A7)RQb5>+{g?fP+_e*p|Ac%>dS=hmmKL-(ehOCu9wjN7e_EF4X{TD8hu69l zxrUwbM_tMd1;R_l_6m4&*5qIa$w{*yZYP7_jTW6u7DdIs`O;slf{?q(x8o%C ze2mCVj==vOZl!NoKZ}-km#3afij(MtdJ!IN=Nl@cOg0HjQJ;5}Y5#j7&|{-P)f8f( z3=X)r0S7NmqyKtN_x4X6ySjiqK2F8`Wi?(+nOBtLeUZ@?d8dAuDPoQ>JQdx?!YlC^ z-9|b`#=fXqqNdbVPXRKz)=8Y|(LFOtND!pf$2O=qgDIC)NJ3)3Yv~p(d5d+nrXk)* ztS+*ER&p82Mj#9Sopq?BNfH)*;Ox#h)LzOxj`=VT@dH02#Y6kkYMrjf)_t`s+OMJr z^IF2&rks=t%C!xx7ViiKx+KIItDm)a+`7;=?FvPnRcYY z0js|ZZY(*p9kPYZOYudKPI&@OwX*MH>f}Dsc)cztu_9BTsszW{6^V4lH_n18$YCyj zeR07Aw6Kh!^aNN*)zdy^WqFOyIvos~(tBv3wzc9(*9yY%A#|2yh5~6(B%U;qLwOyi z>ZPnuNy3#?5*0ns36+Tnn+6fg`;dW@XkTFJBN&&PK>$XQ7NLAQAOt75~Uq{px%!rXHTGKAm!IWRllySsAzTsokuN@boO!ecGs=XSc_ykB| zr2NF3!l|_=Au$@v#c}2wl3lZrM@NDI#2$uY>$M%@b{8zF%Bx zywgCorAj>~z(vKxh|$NA%3>nLMhnFU%)A&Ae}tS(smWvB zLEYs{zEAfwsc)23*ZG*8%b8!nv7_`=6%^xqeiE9WdT7jKKIBfufVeLKnMn5}N*we7lVc zc(6ZBY8o1_kWHvUrZn(Bugu<&M0ep(-;WIKZxV89$1PXpGJptUu*^L@bvhUlD`KQD4 zFAfki9w*1E&RG~kalhOx-alusZR08`=HR9i8J6sDOHe7^wOVH~^Wo@ivWkvuJim1c z1+iZbM2*(j(Qa$FiRd1xVp6Mz8j7z?K{D`}dKsP$H>4sa?R$sMKF*L^O5EJ4`>7C+ zGuDM{GX<*shQsiIk5H>;>FP>2!66sveMZU|kOklUF{!~`=qY*+3cty0B*`cIH{^(yf6 zGKMV(9|i6K_$$%eEZo@Yh2jHd^8ly@_*c$%iQRhl%^^WAVgqP>d89>rjvU7vVNjlp z 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

+S&! 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 Date: Sat, 2 Oct 2021 17:31:17 -0400 Subject: [PATCH 2/3] Add discord presence updating --- game/Cargo.toml | 1 + game/src/context.rs | 7 ++- game/src/lib.rs | 40 ++++++++++++++-- game/src/scenes/fsm_error_screen.rs | 17 ++++++- game/src/scenes/ingame_scene/mod.rs | 16 +++++-- game/src/scenes/loading_screen.rs | 14 +++++- game/src/scenes/main_menu_screen.rs | 30 +++++++++--- game/src/scenes/pause_screen.rs | 74 ++++++++++++++++++----------- 8 files changed, 151 insertions(+), 48 deletions(-) diff --git a/game/Cargo.toml b/game/Cargo.toml index 27126cb..d20822c 100644 --- a/game/Cargo.toml +++ b/game/Cargo.toml @@ -32,6 +32,7 @@ cfg-if = "1.0" num-derive = "0.3" num = "0.4" tiled = { version ="0.9.5", default-features = false } +async-trait = "0.1.51" [dev-dependencies] puffin_viewer = "0.6" diff --git a/game/src/context.rs b/game/src/context.rs index 27fe726..a3e0ac3 100644 --- a/game/src/context.rs +++ b/game/src/context.rs @@ -1,4 +1,6 @@ -use std::cell::RefCell; +use std::{cell::RefCell, sync::mpsc::Sender}; + +use discord_sdk::activity::ActivityBuilder; use crate::{GameConfig, utilities::non_ref_raylib::HackedRaylibHandle}; @@ -6,7 +8,8 @@ use crate::{GameConfig, utilities::non_ref_raylib::HackedRaylibHandle}; #[derive(Debug)] pub struct GameContext { pub renderer: RefCell, - pub config: GameConfig + pub config: GameConfig, + pub discord_rpc_send: Sender> } // impl GameContext { diff --git a/game/src/lib.rs b/game/src/lib.rs index ca21477..d1ab32c 100644 --- a/game/src/lib.rs +++ b/game/src/lib.rs @@ -1,6 +1,7 @@ #![feature(derive_default_enum)] #![feature(custom_inner_attributes)] #![feature(stmt_expr_attributes)] +#![feature(async_await)] #![feature(c_variadic)] #![deny(unsafe_code)] #![warn( @@ -69,7 +70,7 @@ )] #![clippy::msrv = "1.57.0"] -use std::cell::RefCell; +use std::{cell::RefCell, sync::mpsc::TryRecvError}; use discord_sdk::activity::ActivityBuilder; use raylib::prelude::*; @@ -97,6 +98,8 @@ extern crate serde; extern crate approx; #[macro_use] extern crate num_derive; +#[macro_use] +extern crate async_trait; mod context; mod discord_rpc; @@ -133,11 +136,14 @@ pub async fn game_begin(game_config: &mut GameConfig) -> Result<(), Box Result<(), Box Result<(), Box Result<(), Box Result<(), Box { + if let Some(activity) = activity { + if let Err(e) = maybe_set_discord_presence(&discord_rpc, activity).await { + error!("Failed to update discord presence: {:?}", e); + } + } + } + Err(TryRecvError::Empty) => {} + Err(TryRecvError::Disconnected) => { + error!("Discord RPC channel disconnected"); + continue; + } + } } Ok(()) } diff --git a/game/src/scenes/fsm_error_screen.rs b/game/src/scenes/fsm_error_screen.rs index 7a57148..d1fee04 100644 --- a/game/src/scenes/fsm_error_screen.rs +++ b/game/src/scenes/fsm_error_screen.rs @@ -1,6 +1,7 @@ use dirty_fsm::{Action, ActionFlag}; +use discord_sdk::activity::{ActivityBuilder, Assets}; use raylib::{color::Color, prelude::RaylibDraw}; -use tracing::{debug, trace}; +use tracing::{debug, error, trace}; use crate::{ context::GameContext, @@ -26,8 +27,20 @@ impl Action for FsmErrorScreen { Ok(()) } - fn on_first_run(&mut self, _context: &GameContext) -> Result<(), ScreenError> { + fn on_first_run(&mut self, context: &GameContext) -> Result<(), ScreenError> { debug!("Running FsmErrorScreen for the first time"); + + // Update discord + if let Err(e) = context.discord_rpc_send.send(Some( + ActivityBuilder::default() + .details("IT FUCKING DIED") + .assets( + Assets::default().large("game-logo-small", Some(context.config.name.clone())), + ), + )) { + error!("Failed to update discord: {}", e); + } + Ok(()) } diff --git a/game/src/scenes/ingame_scene/mod.rs b/game/src/scenes/ingame_scene/mod.rs index 1509484..bfe505e 100644 --- a/game/src/scenes/ingame_scene/mod.rs +++ b/game/src/scenes/ingame_scene/mod.rs @@ -1,4 +1,5 @@ use dirty_fsm::{Action, ActionFlag}; +use discord_sdk::activity::{ActivityBuilder, Assets}; use raylib::prelude::*; use crate::{ @@ -13,7 +14,7 @@ use crate::{ use self::level::Level; use super::{Scenes, ScreenError}; -use tracing::{debug, trace}; +use tracing::{debug, error, trace}; mod hud; pub mod level; @@ -57,7 +58,7 @@ impl Action for InGameScreen { Ok(()) } - fn on_first_run(&mut self, _context: &GameContext) -> Result<(), ScreenError> { + fn on_first_run(&mut self, context: &GameContext) -> Result<(), ScreenError> { debug!("Running InGameScreen for the first time"); // Set the player to running @@ -68,6 +69,15 @@ impl Action for InGameScreen { -cur_level.platform_tex.height as f32, ); + // Update discord + if let Err(e) = context.discord_rpc_send.send(Some( + ActivityBuilder::default().details("in game").assets( + Assets::default().large("game-logo-small", Some(context.config.name.clone())), + ), + )) { + error!("Failed to update discord: {}", e); + } + Ok(()) } @@ -105,8 +115,6 @@ impl Action for InGameScreen { } else { Ok(ActionFlag::Continue) } - - } fn on_finish(&mut self, _interrupted: bool) -> Result<(), ScreenError> { diff --git a/game/src/scenes/loading_screen.rs b/game/src/scenes/loading_screen.rs index 0ccc70b..01b31be 100644 --- a/game/src/scenes/loading_screen.rs +++ b/game/src/scenes/loading_screen.rs @@ -3,6 +3,7 @@ use std::ops::{Div, Sub}; use cfg_if::cfg_if; use chrono::{DateTime, Utc}; use dirty_fsm::{Action, ActionFlag}; +use discord_sdk::activity::{ActivityBuilder, Assets}; use raylib::prelude::*; use crate::{GameConfig, context::GameContext, utilities::{ @@ -13,7 +14,7 @@ use crate::{GameConfig, context::GameContext, utilities::{ }}; use super::{Scenes, ScreenError}; -use tracing::{debug, info, trace}; +use tracing::{debug, info, error, trace}; /// Defines how long the loading screen should be displayed. const LOADING_SCREEN_DURATION_SECONDS: u8 = 3; @@ -49,9 +50,18 @@ impl Action for LoadingScreen { Ok(()) } - fn on_first_run(&mut self, _context: &GameContext) -> Result<(), ScreenError> { + fn on_first_run(&mut self, context: &GameContext) -> Result<(), ScreenError> { debug!("Running LoadingScreen for the first time"); + // Update discord + if let Err(e) = context.discord_rpc_send.send(Some( + ActivityBuilder::default().details("loading...").assets( + Assets::default().large("game-logo-small", Some(context.config.name.clone())), + ), + )) { + error!("Failed to update discord: {}", e); + } + // Keep track of when this screen is opened self.start_timestamp = Some(Utc::now()); diff --git a/game/src/scenes/main_menu_screen.rs b/game/src/scenes/main_menu_screen.rs index cc0f68b..13c8295 100644 --- a/game/src/scenes/main_menu_screen.rs +++ b/game/src/scenes/main_menu_screen.rs @@ -2,19 +2,24 @@ use std::ops::{Div, Sub}; use chrono::{DateTime, Utc}; use dirty_fsm::{Action, ActionFlag}; +use discord_sdk::activity::{ActivityBuilder, Assets}; use pkg_version::pkg_version_major; use raylib::prelude::*; -use crate::{GameConfig, context::GameContext, utilities::{ +use crate::{ + context::GameContext, + utilities::{ datastore::{load_texture_from_internal_data, ResourceLoadError}, game_version::get_version_string, math::interpolate_exp, non_ref_raylib::HackedRaylibHandle, render_layer::ScreenSpaceRender, - }}; + }, + GameConfig, +}; use super::{Scenes, ScreenError}; -use tracing::{debug, info, trace}; +use tracing::{debug, error, info, trace}; #[derive(Debug)] pub struct MainMenuScreen {} @@ -32,9 +37,18 @@ impl Action for MainMenuScreen { Ok(()) } - fn on_first_run(&mut self, _context: &GameContext) -> Result<(), ScreenError> { + fn on_first_run(&mut self, context: &GameContext) -> Result<(), ScreenError> { debug!("Running MainMenuScreen for the first time"); + // Update discord + if let Err(e) = context.discord_rpc_send.send(Some( + ActivityBuilder::default().details("main menu").assets( + Assets::default().large("game-logo-small", Some(context.config.name.clone())), + ), + )) { + error!("Failed to update discord: {}", e); + } + Ok(()) } @@ -47,7 +61,11 @@ impl Action for MainMenuScreen { self.render_screen_space(&mut context.renderer.borrow_mut(), &context.config); // TODO: TEMP - if context.renderer.borrow_mut().is_key_pressed(KeyboardKey::KEY_SPACE) { + if context + .renderer + .borrow_mut() + .is_key_pressed(KeyboardKey::KEY_SPACE) + { Ok(ActionFlag::SwitchState(Scenes::InGameScene)) } else { Ok(ActionFlag::Continue) @@ -64,7 +82,7 @@ impl ScreenSpaceRender for MainMenuScreen { fn render_screen_space( &self, raylib: &mut crate::utilities::non_ref_raylib::HackedRaylibHandle, - config: &GameConfig + config: &GameConfig, ) { // Render the background raylib.clear_background(Color::BLACK); diff --git a/game/src/scenes/pause_screen.rs b/game/src/scenes/pause_screen.rs index e960b71..a496c5a 100644 --- a/game/src/scenes/pause_screen.rs +++ b/game/src/scenes/pause_screen.rs @@ -2,19 +2,24 @@ use std::ops::{Div, Sub}; use chrono::{DateTime, Utc}; use dirty_fsm::{Action, ActionFlag}; +use discord_sdk::activity::{ActivityBuilder, Assets}; use pkg_version::pkg_version_major; use raylib::prelude::*; -use crate::{GameConfig, context::GameContext, utilities::{ +use crate::{ + context::GameContext, + utilities::{ datastore::{load_texture_from_internal_data, ResourceLoadError}, game_version::get_version_string, math::interpolate_exp, non_ref_raylib::HackedRaylibHandle, render_layer::ScreenSpaceRender, - }}; + }, + GameConfig, +}; use super::{Scenes, ScreenError}; -use tracing::{debug, info, trace}; +use tracing::{debug, error, info, trace}; #[derive(Debug)] pub struct PauseScreen {} @@ -32,9 +37,18 @@ impl Action for PauseScreen { Ok(()) } - fn on_first_run(&mut self, _context: &GameContext) -> Result<(), ScreenError> { + fn on_first_run(&mut self, context: &GameContext) -> Result<(), ScreenError> { debug!("Running PauseScreen for the first time"); + // Update discord + if let Err(e) = context.discord_rpc_send.send(Some( + ActivityBuilder::default().details("paused").assets( + Assets::default().large("game-logo-small", Some(context.config.name.clone())), + ), + )) { + error!("Failed to update discord: {}", e); + } + Ok(()) } @@ -49,26 +63,35 @@ impl Action for PauseScreen { //Mouse Position let mouse_position: Vector2 = context.renderer.borrow_mut().get_mouse_position(); //Mouse Input - let is_left_click = context.renderer.borrow_mut().is_mouse_button_down(MouseButton::MOUSE_LEFT_BUTTON); - + let is_left_click = context + .renderer + .borrow_mut() + .is_mouse_button_down(MouseButton::MOUSE_LEFT_BUTTON); //"Hitboxes" for the resume and Main menu buttons - if is_left_click && Rectangle::new(322.0,321.0,435.0,80.0).check_collision_point_rec(mouse_position) { + if is_left_click + && Rectangle::new(322.0, 321.0, 435.0, 80.0).check_collision_point_rec(mouse_position) + { return Ok(ActionFlag::SwitchState(Scenes::InGameScene)); } - if is_left_click && Rectangle::new(390.0,464.0,200.0,50.0).check_collision_point_rec(mouse_position) { + if is_left_click + && Rectangle::new(390.0, 464.0, 200.0, 50.0).check_collision_point_rec(mouse_position) + { return Ok(ActionFlag::SwitchState(Scenes::MainMenuScreen)); } - if context.renderer.borrow_mut().is_key_pressed(KeyboardKey::KEY_ESCAPE) { + if context + .renderer + .borrow_mut() + .is_key_pressed(KeyboardKey::KEY_ESCAPE) + { Ok(ActionFlag::SwitchState(Scenes::InGameScene)) } else { Ok(ActionFlag::Continue) } } - fn on_finish(&mut self, _interrupted: bool) -> Result<(), ScreenError> { debug!("Finished PauseScreen"); Ok(()) @@ -76,11 +99,10 @@ impl Action for PauseScreen { } impl ScreenSpaceRender for PauseScreen { - fn render_screen_space( &self, raylib: &mut crate::utilities::non_ref_raylib::HackedRaylibHandle, - config: &GameConfig + config: &GameConfig, ) { let screen_size = raylib.get_screen_size(); @@ -98,85 +120,83 @@ impl ScreenSpaceRender for PauseScreen { (screen_size.x as i32 / 2) - 223, (screen_size.y as i32 / 2) - 40, 120, - Color::RED + Color::RED, ); raylib.draw_text( "Paused", (screen_size.x as i32 / 2) - 217, (screen_size.y as i32 / 2) - 40, 120, - Color::BLUE + Color::BLUE, ); raylib.draw_text( "Paused", (screen_size.x as i32 / 2) - 220, (screen_size.y as i32 / 2) - 40, 120, - Color::WHITE + Color::WHITE, ); raylib.draw_text( "Click To Resume", (screen_size.x as i32 / 2) - 80, (screen_size.y as i32 / 2) + 60, 20, - Color::RED + Color::RED, ); raylib.draw_text( "Click To Resume", (screen_size.x as i32 / 2) - 80, (screen_size.y as i32 / 2) + 60, 20, - Color::BLUE + Color::BLUE, ); raylib.draw_text( "Click To Resume", (screen_size.x as i32 / 2) - 80, (screen_size.y as i32 / 2) + 60, 20, - Color::WHITE + Color::WHITE, ); raylib.draw_text( "Main Menu", (screen_size.x as i32 / 2) - 123, (screen_size.y as i32 / 2) + 100, 50, - Color::RED + Color::RED, ); raylib.draw_text( "Main Menu", (screen_size.x as i32 / 2) - 117, (screen_size.y as i32 / 2) + 100, 50, - Color::BLUE + Color::BLUE, ); raylib.draw_text( "Main Menu", (screen_size.x as i32 / 2) - 120, (screen_size.y as i32 / 2) + 100, 50, - Color::WHITE + Color::WHITE, ); - if Rectangle::new(390.0,464.0,200.0,50.0).check_collision_point_rec(mouse_position) { + if Rectangle::new(390.0, 464.0, 200.0, 50.0).check_collision_point_rec(mouse_position) { raylib.draw_text( "Main Menu", (screen_size.x as i32 / 2) - 120, (screen_size.y as i32 / 2) + 100, 50, - Color::YELLOW + Color::YELLOW, ); } - if Rectangle::new(322.0,321.0,435.0,80.0).check_collision_point_rec(mouse_position) { + if Rectangle::new(322.0, 321.0, 435.0, 80.0).check_collision_point_rec(mouse_position) { raylib.draw_text( "Paused", (screen_size.x as i32 / 2) - 220, (screen_size.y as i32 / 2) - 40, 120, - Color::DARKBLUE + Color::DARKBLUE, ); } - - } } From c988944e3d00773061e605bed3c97ab15408004a Mon Sep 17 00:00:00 2001 From: Evan Pratten Date: Sat, 2 Oct 2021 17:41:02 -0400 Subject: [PATCH 3/3] Give the game a name --- README.md | 2 +- game/assets/configs/application.json | 2 +- game/src/lib.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 86a5b8d..5c01e57 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# ludum-dare-49 [WIP] +# [data::loss] [![Build](https://github.com/Ewpratten/ludum-dare-49/actions/workflows/build.yml/badge.svg)](https://github.com/Ewpratten/ludum-dare-49/actions/workflows/build.yml) [![Clippy check](https://github.com/Ewpratten/ludum-dare-49/actions/workflows/clippy.yml/badge.svg)](https://github.com/Ewpratten/ludum-dare-49/actions/workflows/clippy.yml) [![Ludum Dare 49](https://img.shields.io/badge/Ludum%20Dare-49-orange)](https://ldjam.com/events/ludum-dare/49/$261521) diff --git a/game/assets/configs/application.json b/game/assets/configs/application.json index 57497cf..f8f92bb 100644 --- a/game/assets/configs/application.json +++ b/game/assets/configs/application.json @@ -1,5 +1,5 @@ { - "name": "Unnamed game", + "name": "data::loss", "base_window_size": [ 1080, 720 diff --git a/game/src/lib.rs b/game/src/lib.rs index d1ab32c..3dc760f 100644 --- a/game/src/lib.rs +++ b/game/src/lib.rs @@ -154,7 +154,7 @@ pub async fn game_begin(game_config: &mut GameConfig) -> Result<(), Box