From ec7060668a9b79170d7509c0fb4b8ee30c215d8b Mon Sep 17 00:00:00 2001 From: ShadesAndGrays Date: Tue, 14 Jul 2026 13:45:07 +0100 Subject: [PATCH] minor updates add fruit class update simple sprites include variant type --- data.dat | Bin 25252 -> 62466 bytes html/README.md | 9 ++ html/shell.css | 96 ++++++++++++++++++ html/shell.html | 115 ++++++++++++++++++++++ html/shell_custom.html | 51 ++++++++++ html/shell_minimal.html | 152 +++++++++++++++++++++++++++++ html/shell_minimal_runtime.html | 26 +++++ makefile | 19 ++-- src/engine_variant.cpp | 0 src/fruit.cpp | 30 ++++++ src/imgui.ini | 8 -- src/include/asset/asset.hpp | 2 +- src/include/asset/raylib_asset.hpp | 2 +- src/include/components.hpp | 2 + src/include/fruit.hpp | 9 ++ src/main.cpp | 2 +- src/player.cpp | 50 +++++++--- src/scenes/game_play_scene.cpp | 16 ++- 18 files changed, 551 insertions(+), 38 deletions(-) create mode 100644 html/README.md create mode 100644 html/shell.css create mode 100644 html/shell.html create mode 100644 html/shell_custom.html create mode 100644 html/shell_minimal.html create mode 100644 html/shell_minimal_runtime.html delete mode 100644 src/engine_variant.cpp create mode 100644 src/fruit.cpp delete mode 100644 src/imgui.ini create mode 100644 src/include/fruit.hpp diff --git a/data.dat b/data.dat index 38c52b6d1b4617321f68fb4e5ffabd5326cab7c4..25bd5cfeb216655e33d08a296ad8a9cade65f2f0 100644 GIT binary patch delta 10774 zcmb_?XH*nH*JjT!gdq+&MP=A|N10 z6hRRfGDyxl`hMS@-97tj&-Rbor|zv=Ro%C%>ON2Pi*85^jsQZK0a1r$LNc@r*#ZfG ze;23Yf9_8H{;mQ3qHgyC?*?QzNO5Pn{73I_{eQFj`#5>JIyn2@3C(a2<=RdAkFiYr z|56F%>XczGMw;9HADg?>n*t)|x_GD-4@l(%08~zpGS$+%cq4O|nN@(<-2g9F03dlT z_(gBPFm33jfj$IaNQS|Fb~!Bp0P%>9#tpNO>5W+%A2wM8p|MVO{J`dK-q0XfMH4P{ zT9Ra?YQ9{}AO2BZzpo_Zm}h-6YJLBojsc)NB#>n3AWG?CuTb^i_485i*oztlkV%J( zhS4CP=w86Pf_MWvWZ^82nzB(lx zv!)NEkL>wZq^E5dg1(fUv+*Uz%Vba(+L_c|)-zcBtn4?N>bvpLYU(B;%+BcexBY0} zJSZy4lWhQo5qLbI7{%g8F&{E^*46g#{TXbYhcoyn1U^e{S`9%(jdkh$kOtC*l=rD6 zDXtm-Ih=24SnyJMH+Dsv-Ql;>ox*{rEXPGSa<}-I8UcvEy;LK>%Z7il=bs$^DV#oji8NU3^ANC8r+Fk-+=dUi?52ADiIDK3Iw zj!nw{N^0nTWIlO&@JeJ9G&9n;><0tDGFuXMU5Vty zF+b`^nPn0T7Vz2!QeCRMQRWn0)gBGtBirsiDaX0<+`lQNNzG!6*S{ZyWdS$E* zft%Ck^kptexytrLDI`FAb9lYcEK#j6Hb2-m0qJ-n*l8V(S~OS8T@ zUb+r&S*-z9K4*=mHt(Es4zlraw)yA?1z<>8y|l|9O3&L?b@r0@v3at1?P}iuMSZWd zo<5LVfB8+6!u!vg=%*?tPNh~ey4948M^;Iu00|$^_U6>a1p;)Tc64fZzg%vR-?nIG zsM%LQ!+{t$n(!akqWfU<918#(F;Es|yc zkPqArcPyJJxBK3rr7P=C8^ef}hcP?m4D0J(gGDw5~#TC2M7pMm~#%wT0$^26(%+Ikec<< z4|LgYnP2D`JqPG=q~YU|z_Sa-vKSZb*|0uX$6nmdZp+qJ!B)OA+GCqjU;WOc|-Ld9} z_z!UW4SCSy&fJN9ec847TTL$^X_p$+>%Y9eaq4p`x_uAwBRLR8jiP(nohA(ac<*x> zM=Q$YTyE(D1Z1;Pm>q3adf*<&2qTQ{X)oq?h9XH|#L+#~BWJ|~=o+r!qkZyruB^R+ z4oNpE0t0ZCW9Zbu1)5zJ?M6zFrkY3!nYZqMI$?emR-GRK2q*=M&lYlcdsh}L!I$z` z?t6-%_5yR;t%2caqNN;X27LkC_*Y<#&-fh55k#}fRNAOA|NzY-Y&kU+*E(USsbXn?Hmeo>@FeLJx0a`pzw)JTh1n*$&_t(wppR>hZ367clD?H{q z_RrnkrD`M%eXZ)&J{YX``3d?ZWK92`!)L0mQR1Imo$_fAvqy}tL`{gfW_|O~rgf8idP$U8s0Yh^Q z@5$9XZAxpZRGIBr>xb2ta)YPu#F{RxxPfOPeomMb_Mc~CHL`#Zml)(Ra4S!V~y)E0f7E$Z`*QBFq zs8OZn81w&{E>N-jSGtfNTH&Bc-c#1F(dYcmdZOg%%1Fe$W8QjbunoOn$?lJff>#dQSqQW=*s&{THnW+9^liymz zTFCnA!sW@~hw(Yi;k>IrO+3qqDfV2W*c$W|Toq-Rl8C%+(eU`A?TFckeYP0CqSq?OuihMi?~~)P%rA}CYgpz0VK^}E>OP`^UC`8yJJNH|uGby@JkLB*s2&jkpssrC)E5Z#!Q)6xJ&oIVHKU18;8-ueNcAu{}AoZl}&?K6@Am#67W&K2u59ycwLT zqAnNB_=REcLsMT#Y~pfq0}t5M!4j*Hl_>W*?e?z6?Iah%tI#sG$c0Uok?Rj`+mhLM z&uKEL-QAP6$^T#zO>KZ98VQQy{k^n+T@%mKY2|LY-qkCP{*9aeq4dDb{$%7UeVpJ6 zwbETTN1-fHhO{dYMb+eVv(XvfJ+UaJpX3|ctq8_X9mxGhU%uMjwEEZs4#!IubcwzF z7K{A|_dgO4AsJYfy*rJ-u%1(1n&^+nDGRe09LeTZC#!Ukr$q(Nn|TfEM?HWT>#2UE z9CVsPWWC_oHZfABIjX`O;BvzCw~F?4To#19ZW)R2c9@6;k_Ek@YPmXbHHPKwD+d?$ zOI(AcDT&*d_6k++v&m2VV62#`F4ycL3KsOIJ387Z*hE1Xv5{OE;g^lGi(%k>c7fSu zkG@CA(5hL3een8QZmdO6mO*Eh<{>eWHane z)gyu;u~bd|6pkwpvqX`h^HN0P1d+g?BDPo)fI_xRk zLhosQ{fMv506vRzb$#{pebCnOb@vHVOQ=8>)!;L{+RrFy$bspHHBwrZ8)s9hopiCW zf<2Y@!X+C>w6nC8D%tsdJgUHD{ScY9fi{VEU2E@QYNtFL#@yNF9dRuXnKW&EY2!a@ z8$2o-O{B!f#`+7?yL%O_f%_sds+sE&K@&|7Ahtb>Xum3zmZgohSwmeUs0hmbyl7-F z*!C;ppy}8sa?4ecnLVPon=a1n!|ThkCOx@=Ra~RP4X0u%CW<>PHG?yNY3;eaa4RXM zg(oCz#jHc?oWE}ET}8`;=t?o{K7o0lqXhkGy2;q65xh z->S>`!l|r3Au8I+qYtfISc0PJa7j`pgMv@ji z9ECWofEj|ML zj#fDnZP7dIHqUEH*=veNMWYbW1l`ctC|(R}3a(-j`YCRbDcT^=!<8*7n=NuD;X_X3A{Mk_a*8n2WA2H zA@CNz;BCl*?lYu=Z{`U1rnuERm>)+G@vxwwa3J>9+u?`UZVQ`Shf6o-BNOBy&7^KU z&tbBzIl%86h1r_Ly>Gox~Pr z%k}v~<Bfa09hp|i9du#&MYVI+?fFzy98t8v!GUl4n_lN6)TsqAMOWHBnP-eZLAD{bM?HJVh~Bdc+_gOHU}8+sUb4HLX;F#lMN6J%L1A= zWhfs>K(^1Qj1%rG0M}?c#`nmO)GGDa022Wq@KJ<;769?QfvcE2k(eBSgzG@$~`>@lAo$!0+zgOlXN2T{7mGQ3^H}p=TCxap1S0Rai}u zALP^Lm`q~5eBeh3{!t|c??dP90Q7tP#ynu)0R$M!lr`lL3WSC{yTI3+6Xr*+bRq^| zND3E$6(;1vcQ(v4ZDqsPyr_w!b%E;CAYFWC{LDHn8i{)%?_~~bB{m)Qe9j~uG=U7z z3iCw(yZo*}9=prB0O!_^S2ULWjH{aPIfhRe?zi)IJl>I`-!W7P&u=VisVJ(!Rsz?Nfzy>4AsN zzcMNg?dFNxlC*Ann)g6EZa{}$wL8fh89V!S*sS<?7K2?R&uWCV*fCPe>a3K45O*5d^hMbs!T!ch*tuJVq~wQHOUH%O&J2fIQD z<;3n-!2-Nb=-(Ih!Jxy-t-lUvmPGS`D9uU8UJ4w)8Yob#-gi>3Y*4^EbR1Q;x2ZU+ zw?2=G_uV9d65tjnZUuC_PZ+A+M>JZ8vCnIF3Uhy37v0R4?IAjNF%p_YpRk};hH>ONbb;S|gcBaagDFX)2m<80? zBr_y8H2e@WgJ!oQ?68FRWzn3uDwaK%28o;t^f#bi+VUwT^|fABa1UAGz7C;5f?5H# zUOM#rRrk3JO9^~=^oxEjwYOf!cWv4&+wPrY-r-24tVxePmc*>N4pgoFHaF@%H{BzE zlCex{TUy?|*gTNXBv+h-GGoZ`}vfI`5&DtzzI+Q#6 z>M^^R@{%3)gV>%^0>0@X<6<0$#%v0BT`XeW{>;EA>?+=AMv0Et;`gnU$Ov}C`vhcM zPUG>h#lYO`Ln2n3FEKtn(6{jCaH#I1Z?L zD3uw;U_#CEW6O~3I~JdsM9sv|tw0Vk7T+`JH%edboU-`Ti(}m%I9vgBfL&j5yPxhF zNo$VTAOE~oQgHmU(E^i5CrtCMPOZ$D3xgVOk{Ff}>A>pK{cHpiHX53rBm^i*H*tqZ z9To0)e&W>V&GrrFPiuBasw2pq5Wkg^L*ijivBCaJ+vnw*3z8b5O2DwZjyh)#HHXR?r8J~d)E-N~MS1$FrvQ2XDH=471Wv{_K#`N-&?NvSm@!*0HPw{*mW z=aqSUnk&qbs+{xD8>Z~Ba(#VRzfB~JfI!NEGa+YP84~G^N)n`WNpf3>Mp$kV;+EX> zN0^#tqgnp^IYwl0^?S0H&Q?uQLU~UD3?)R&IF9iITzA23a6O^bhX_V%QP#biY z_3gjL-BJU|-($9(U$QL(ok7#vQtwIpgxNDQ{VLdbA|6m(!s(t*yISW@kCgqWVVUaY z^e6DeyLEfEUuJ^HjVZkVi==QCnPczP!jy+xY_Fqf`ib79JfveE(GZh z8;a%kfU8|b6;yFS(5eTB4c=AWX`=u~;rT|XuWja7cMrJJ4PkjDe1bNS0brs|k|-J2 z`4zspf+Z0Tlz76d_nJ@*WzVa4Asq?pJkt&V?{NZI$}6TC<*-Wf3z3#N*J>)DM1$a5 zVI&o+tFvE*)5iX2BFK!skWMVL{DqmztXF9I;EIRTeHenk(qs;vPc{{EsfNKjcu3tu z>+$dm0-5DApl44|ydjjw9Twd&Xr~Y&r&SM9h!BnAL|E2pO}t~iRsXm*Wd%tFNVP4$ zr!iJ?i^Y209Xx2gr%sY4QupoJ`$M<}ZH~Y+bt7!fOSmNgE%|CfGpl($ken+xz|WUE z`X8p2`%eD{kEwIu6#|S5?8&EUo>R922%_m)edzbQ@foMc{V5`5m@&)O+c})S!0~Mz zTn|e+Lac99WrVs(-s?df`|h!8jtr~}JNHxdrg5gBzh?Nt#p06LNH0wN)dXdpK2zqC zLTaGwr2`G+q7$aS;l+oYk(RKI9lINUa0P!swSi8g3!T$rzU80uW$`)sO)p}7`T`XV z(^ki}Nb-+HT&mp`2Fjj(CDzskKL{AM(4GkpuUykUCn;@`>)Kfn`D~P`d5W;OCuX%L zn#Zsx6!{NTw{clV*YTw5dMsj|j=Jv7vtq;9VrAyDeu~VTA79gVO7vAI&=;skc!7|+ zmPZ*;kF&qe1#@dg#i1zS7`cG(&Gx4C5O4Hw1q}uL`BNBzBR@Bv8(fX$^toAbt8c=j z;bxK5-iLk>#dm&iI2T*KokbW0*RWu`ePNfe>&t!>sqjP?BH^w`_$AMLrMy`vZA_Jd zvhJRVewq(sQIW5(>9%J_b$Rx*jRYm*IbVZT?=yg}+3Rz)RCM77tTaiEKBgFqVW5p7s)e;u}xB!cD!4CgqXWqZI|bk{kQut}wRUUcQ% zedbNjW+Y8qN-6;+*3BD)PXGzpuO3VexoY?2_JmOcrQnt_+1Rb;Gw-&tMA!t7!7)(* zC38Y1RM0{Vgm~EYzzva^lmeJBae4~n)gv7!95Y86(dqmVtau2qWewlnEl6jd_-Q=S z%)sg<-nu$rF6kU>y**!X&yrwkoF@8Jnud_|9=ChFEzh(KhDY6; z9ABMbwDEXUV)nZHJV$fm-c3}-ZqIFa1;fU5YmXxFXV=k%h%;m8%vy?tBq#Z8og#;T zsht5iuCc8y@SX*fUyfjz%KFWBCB~^u6&M~>rz!ETIs{x1dJjFj`f}bqYA$F_BhCjE z9yF3Bpx}CNf9hq59MkXRu^lt0=orlnr-$YNgvKF6SC2-oVB4nE_eObGjqm(})zlkk z^&6WH*(XBK7LXyvdp~&u(f7n*s$DvFbWXK3?V7+csVSR!5^d-fC5JX|jaK~=lq-&m z5s#~Nwh1DS9QHCddw4`_HNws^QE$o=9};x3{l(S9e{pr~BSv8?6vcBCtuhPP5veNd zX{wiMDvugT+VZmzrgVhh>peIi4ecDJ?>H1DRz-H=#1H4-`0~o|o(iaR-XFaKUPn@O zO!1F(t62cVGzhq93kta*R3K!YP!Srei|L`WaZNsxeRY(ZvV|`><8e#DpxDn{-ul)6NAR)}zb|E)W?; zc?f?fQ?e(dKG{hH{Jy;H&N-syIsSWvDwl#JR}$K4*N~{Sc~k);%o_sD+o2As>yi+* zJA)}o=iIkAl{B)ynHb>giw)Y{sU8B#eZJ|n}*h7B`@vG?QJ=*$A%~XcwcUx^UgE`XugZYXR zttYGHtifXk;Kpp*>E;@x;<}h@0M1y}YqI9??bo_nOf2$tW^Z_E`u0{v1!=k}Hzx{| z!!1NwaM;gZOY~YBMjwl&R;6=8lysqJ18$>}&p#763v4cRU5)R0cwEx+|BoEo^T67ZbeElBgHmfJn z++`QK`1DoIKB6D)82p`MT;l%kPxGDa&&WiYI%b1rysza1`r=LCcaBW|FY^3WQ|;HZ z(pbzvJNHLS4RV^z@7kyenRWbua-1iCSuGT{earrtSXPHMVsV>2F5vG5L-IG4|v*OsQG+`r_l zdg|~5Fa*BM1{Co7h!*j8w}EV@T5r=*LxVnWtT~O~_j4fRQdIuLoYR|3&1V4!>NO)x>jM^EJ5$Te9$t;1pJQinZKK#t|HN1sHF!^^*KXB z62$~WTf(aY6#`c?Q<@FhphCRlpHqEi4OnA$in?Ks^uyv$Mj}rG*L?cd8)kf7WuF?P z!U5ffn=`)8Ap}I(J`U_c4S%T(0r@agqAL*vOJ>R|f5Ep*1nBR>wBbU;;6#<(U_-Sb zo-?^B*+*Kbp1!s^HM%701YXg4aIMwS)h zPUzJ*8+7gY)NiH^iH!3_$N8t5v+v%KiM}7!4{r%rael2V?{uFW89I^@-!K{Tv`QyPBtx8Bw}w(^blv>g)PIWv=K`5AsBJTX*w6$Z*6orS*a_Wm&h zEjx8KXr46=y*>XYk6`5{b}1cSOA#mWFtC3#F>~ARSBD zDv@EX!Tc$cWVi`VIK>#~{{C=q7 zu5_;mEb2Y0&>{pXNhxjUJBURT!(9RkR9B0kRszc$V%)pBS^2_Jw`G&&)PDug4S zYqmpve^C0j#D4c4Od%&yd!ZuHJ98f9RbMp`F`L87OpGS^O9lz=?0i%aM9XRnjdUWn z8g6FJAA_My{aDRcP>_qKFr;HGlDH|_%>?wca1{c0ZUPGX6BEmX zYIzhP%IuUdu)JyZw3WCiSy^Mqrv87jK|FQp?lz(mry#R4f;YCY?%4Ey)plIK!BlU%aKym?XPGWX3(GM)Un&H-ORm=f6 z1{r`klf*tP5}B+*=jNrv0+H`bsz{m7%ya4do`l8JaB$qx_;Xj>3x%_-O*$Rkns&;z$M(NQbBOQJ znFF0$kXg}%Zmfv?p4s;qEa!ri@mH0W_n+pgr~8vY?!Dimkg#2obOwgFcv zgnF16bBj$V5NF<98jGI15Pkm)eKM`h03D*JxO2=!R5kpRSt5m!WHtH25+iXXRW+=e z5R7}z?}2E&gU`3d7uL}8A#Bt%jmNhw@Wa-QB?{A*66+}_q2W4Gjpo-l#b;~XqJO@m zOo8IBh-$XnP_^S+src;~!9@SA7%F2&HA}IUzO?Q!=~$-`>#`MSPo~Rx*XqvH7L>Z}VVuAs0wP0ZRIw-h2>>?sp?@&>b=ToI^rWoj}yIenocF z3M8~jwE(V|QpQQNvSiLj4L#sKa?u4+3WSe7O2D*IIy3&XR`!0w_Koc6#Syic?+uQ% zqU@ZbGzF$Gr9Ss$6<%K?kCbZEX*vi!aqoUiuB+64FCCZ76njl;4@Pfi5sJFq3J&V3 zIa=3!mK3phd%}lL`xTQf_@>z}cMF+F_6+{K$61ZUFtKumS99>R47u`CK;o9ta;S2S z+uH4&a|kDytRZY$wNDZNHGkcK&gvI7B{(^R4nvI{vW9Px*4<9wh;Np_U&6qI|lZo8+f#mMKgsP0Wv##Vh3d z={%9t@bvSmhrja8)6ae}XfHBTO_8X*=23-1ekfKtgO+Mb+iA&VKG{mK2l)Zr@^m{M zcO&H5%0exBB0TB-ihb6`cQWHeg&3?<$^pz{yWi5Tfl&U&(KAZXns0l=m_==7ax-}Sm~xX;WjK-u z4~X2EVg?JU7y~~Vbjr3+fXC*ryyyHE8YbX(8nw|G*TfrbH@JwhqM9T-UBguXx)h&k zm2uZ)T0~ydTjPM};xXb_T)=2EHWcQu8KxP)Awu*9vo-)~&NqZY(yO}VsDopyrlwro zdxp3$HbUoeYx-GV`pg0IlN1rgR^%gJE@juo5m(bnpl_6mWw92Nr09Qdy|s)j_Dgie zbk%lN;g4Js$7$4G+nBbl*H$)cQP1**rC0IeiGe-;DN~c7f;pRdhZl!M+V#q~+8wId z#CzB5^q}aI6(N>iwF|ETOh<=O!jf88@6IJ+vurKC4p9#>3j0lsu|EPjXx~lHd=L@I z^&W=3DJ{!FmFFo|zy0J&5QvY2|5OZ{-4=$mtOE02q)<_$Ff}S>n77WRYWMKq?Pa?q q8SdNL%j)y+sW7m*^F;>tmA`CI;4bG3*QvF@;qQMxYX0}%75@WBrF+Bx delta 33 lcmZpA!Mx-sBO}v9MrWoa3=`e_xLTPQz(77>a~~sH5&)pT2sHoz diff --git a/html/README.md b/html/README.md new file mode 100644 index 0000000..faefa40 --- /dev/null +++ b/html/README.md @@ -0,0 +1,9 @@ +HTML Template Files +=================== + +The files in this directory are html templates used by emscripten when +generating html output. These are only used when the output of the compiler +has the `.html` suffix (or when `-oformat=html` is specified). + +By default the `shell.html` file in this directory is used but an alternative +can be specified using the `--shell-file` flag. diff --git a/html/shell.css b/html/shell.css new file mode 100644 index 0000000..d93a92d --- /dev/null +++ b/html/shell.css @@ -0,0 +1,96 @@ +body { + font-family: arial; + margin: 0; + padding: none; +} + +.emscripten { padding-right: 0; margin-left: auto; margin-right: auto; display: block; } +div.emscripten { text-align: center; } +div.emscripten_border { border: 1px solid black; } +/* the canvas *must not* have any border or padding, or mouse coords will be wrong */ +canvas.emscripten { border: 0px none; background-color: black; } + +#emscripten_logo { + display: inline-block; + margin: 0; + padding: 6px; + width: 265px; +} + +.spinner { + height: 30px; + width: 30px; + margin: 0; + margin-top: 20px; + margin-left: 20px; + display: inline-block; + vertical-align: top; + + -webkit-animation: rotation .8s linear infinite; + -moz-animation: rotation .8s linear infinite; + -o-animation: rotation .8s linear infinite; + animation: rotation 0.8s linear infinite; + + border-left: 5px solid rgb(235, 235, 235); + border-right: 5px solid rgb(235, 235, 235); + border-bottom: 5px solid rgb(235, 235, 235); + border-top: 5px solid rgb(120, 120, 120); + + border-radius: 100%; + background-color: rgb(189, 215, 46); +} + +@-webkit-keyframes rotation { + from {-webkit-transform: rotate(0deg);} + to {-webkit-transform: rotate(360deg);} +} +@-moz-keyframes rotation { + from {-moz-transform: rotate(0deg);} + to {-moz-transform: rotate(360deg);} +} +@-o-keyframes rotation { + from {-o-transform: rotate(0deg);} + to {-o-transform: rotate(360deg);} +} +@keyframes rotation { + from {transform: rotate(0deg);} + to {transform: rotate(360deg);} +} + +#status { + display: inline-block; + vertical-align: top; + margin-top: 30px; + margin-left: 20px; + font-weight: bold; + color: rgb(120, 120, 120); +} + +#progress { + height: 20px; + width: 300px; +} + +#controls { + display: inline-block; + float: right; + vertical-align: top; + margin-top: 30px; + margin-right: 20px; +} + +#output { + width: 100%; + height: 200px; + margin: 0 auto; + margin-top: 10px; + border-left: 0px; + border-right: 0px; + padding-left: 0px; + padding-right: 0px; + display: block; + background-color: black; + color: white; + font-family: 'Lucida Console', Monaco, monospace; + outline: none; +} diff --git a/html/shell.html b/html/shell.html new file mode 100644 index 0000000..8e5f42b --- /dev/null +++ b/html/shell.html @@ -0,0 +1,115 @@ + + + + + + Emscripten-Generated Code + + + + {{{ SHELL_LOGO }}} + +
+
Downloading...
+ + + Resize canvas + Lock/hide mouse pointer     + + + + +
+ +
+ +
+ +
+ + + + {{{ SCRIPT }}} +#if MODULARIZE && !EXPORT_ES6 + +#endif + + diff --git a/html/shell_custom.html b/html/shell_custom.html new file mode 100644 index 0000000..26a6ceb --- /dev/null +++ b/html/shell_custom.html @@ -0,0 +1,51 @@ + + + + + + Flappy Bird Bullet Hell + + + + + + + + + {{{ SCRIPT }}} + + diff --git a/html/shell_minimal.html b/html/shell_minimal.html new file mode 100644 index 0000000..6a07b34 --- /dev/null +++ b/html/shell_minimal.html @@ -0,0 +1,152 @@ + + + + + + Emscripten-Generated Code + + + +
+
emscripten
+
Downloading...
+
+ +
+
+ +
+
+
+ Resize canvas + Lock/hide mouse pointer +     + +
+ +
+ +
+ + {{{ SCRIPT }}} +#if MODULARIZE && !EXPORT_ES6 + +#endif + + diff --git a/html/shell_minimal_runtime.html b/html/shell_minimal_runtime.html new file mode 100644 index 0000000..74d50f0 --- /dev/null +++ b/html/shell_minimal_runtime.html @@ -0,0 +1,26 @@ + + + + + + diff --git a/makefile b/makefile index a882662..57c2571 100644 --- a/makefile +++ b/makefile @@ -17,7 +17,8 @@ LDFLAGS = -L./external/raylib/lib \ WEB_LDFLAGS = -L./external/raylib-web/lib \ -L./external/asset_packer/bin \ -sUSE_GLFW=3 \ - --preload-file $(ASSETS) + --preload-file $(ASSETS) \ + --shell-file "./html/shell_custom.html" LIBS = -lraylib -lwinmm -lgdi32 -lbox2d -lassetpacker @@ -60,6 +61,7 @@ IMGUI_BACKEND = ./external/rlImGui/rlImGui.cpp SRC_FILES = ./src/asset.cpp \ ./src/movement.cpp \ ./src/player.cpp \ + ./src/fruit.cpp \ ./src/render.cpp \ ./src/scenes/scene.cpp \ ./src/scenes/game_play_scene.cpp \ @@ -75,7 +77,7 @@ OBJS_FILES = $(patsubst ./src/%.cpp,./bin/%.o,$(SRC_FILES)) DEP_FILES = $(patsubst ./bin/%.o,./bin/%.d,$(OBJS_FILES)) -all: build-game run-desktop +all: build-desktop run-desktop ./bin/%.o: ./external/imgui/%.cpp @mkdir -p bin @@ -110,7 +112,7 @@ build-gui-backend: $(IMGUI_BACKEND_OBJS) build-core: $(OBJS_FILES) -build-game: $(OBJS_FILES) $(IMGUI_OBJS) $(IMGUI_BACKEND_OBJS) +build-desktop: $(OBJS_FILES) $(IMGUI_OBJS) $(IMGUI_BACKEND_OBJS) @mkdir -p bin $(CXX) $(CXXFLAGS) $(INCLUDES) $(ENTRY_POINT) $(OBJS_FILES) $(IMGUI_OBJS) $(IMGUI_BACKEND_OBJS) $(LDFLAGS) $(LIBS) -o ./bin/main.exe cp ./assets ./bin -rf @@ -128,11 +130,11 @@ build-debug: web: @mkdir -p web - $(WEB_CXX) $(CXXFLAGS) $(WEB_INCLUDES) $(ENTRY_POINT) $(SRC_FILES) $(IMGUI_SRCS) $(IMGUI_BACKEND) $(WEB_LDFLAGS) $(WEB_LIBS) -o ./web/web.html + $(WEB_CXX) $(CXXFLAGS) $(WEB_INCLUDES) $(ENTRY_POINT) $(SRC_FILES) $(IMGUI_SRCS) $(IMGUI_BACKEND) $(WEB_LDFLAGS) $(WEB_LIBS) -o ./web/index.html web-native: @mkdir -p web - em++ $(CXXFLAGS) $(WEB_INCLUDES) $(ENTRY_POINT) $(SRC_FILES) $(IMGUI_SRCS) $(IMGUI_BACKEND) $(WEB_LDFLAGS) $(WEB_LIBS) -o ./web/web.html + em++ $(CXXFLAGS) $(WEB_INCLUDES) $(ENTRY_POINT) $(SRC_FILES) $(IMGUI_SRCS) $(IMGUI_BACKEND) $(WEB_LDFLAGS) $(WEB_LIBS) -o ./web/index.html clean-desktop: @rm -r -f ./bin @@ -155,7 +157,7 @@ open-browser: start-server: $(WSL) python -m http.server 3000 -d ./web run-web: - $(BROWSER) http://localhost:3000/web.html + $(BROWSER) http://localhost:3000/index.html $(WSL) python -m http.server 3000 -d ./web # $(WSL) node ./web/web.js @@ -165,3 +167,8 @@ run-debug: run-test: build-test ./bin/test.exe +pack-assets: + ./external/asset_packer/bin/assetpacker.exe assets/ + + + diff --git a/src/engine_variant.cpp b/src/engine_variant.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/src/fruit.cpp b/src/fruit.cpp new file mode 100644 index 0000000..f0abf38 --- /dev/null +++ b/src/fruit.cpp @@ -0,0 +1,30 @@ +// src\fruit.cpp +// +#include +#include + +#include + +entt::entity fruit; + + +void create_fruit(entt::registry& registry,Texture* texture){ + const auto entity = registry.create(); + registry.emplace(entity,100.0f,0.0f); + registry.emplace(entity); + registry.emplace(entity,texture); +} + +void update_fruit_system(entt::registry& registry,float dt){ + + auto view = registry.view(); + + for (entt::entity entity : view){ + + const Position& pos = view.get(entity); + Velocity& vel = view.get(entity); + + } + +} + diff --git a/src/imgui.ini b/src/imgui.ini deleted file mode 100644 index ff52523..0000000 --- a/src/imgui.ini +++ /dev/null @@ -1,8 +0,0 @@ -[Window][Debug##Default] -Pos=60,60 -Size=400,400 - -[Window][VBoxContainer] -Pos=540,275 -Size=200,250 - diff --git a/src/include/asset/asset.hpp b/src/include/asset/asset.hpp index 9ddab55..08ef308 100644 --- a/src/include/asset/asset.hpp +++ b/src/include/asset/asset.hpp @@ -41,7 +41,6 @@ class AssetLoader{ std::unordered_map assets; virtual void load_all_assets(std::string data_path) = 0; virtual void unload_all_assets() = 0; - AssetReader get_reader(); public: AssetLoader(std::string asset_data); @@ -49,6 +48,7 @@ class AssetLoader{ virtual void load_asset(std::string path) = 0; virtual void unload_asset(std::string path) = 0; virtual Asset get_asset(std::string path) = 0;; + AssetReader get_reader(); }; diff --git a/src/include/asset/raylib_asset.hpp b/src/include/asset/raylib_asset.hpp index ac73934..5e82631 100644 --- a/src/include/asset/raylib_asset.hpp +++ b/src/include/asset/raylib_asset.hpp @@ -3,7 +3,7 @@ #include #include -class RaylibAssetLoader : AssetLoader{ +class RaylibAssetLoader : public AssetLoader{ protected: void load_all_assets(std::string asset_list) override {}; void unload_all_assets() override; diff --git a/src/include/components.hpp b/src/include/components.hpp index c7be5c1..f95ab1f 100644 --- a/src/include/components.hpp +++ b/src/include/components.hpp @@ -13,6 +13,8 @@ struct Velocity{ struct Player{}; +struct Fruit{}; + struct Sprite{ Texture *texture; }; diff --git a/src/include/fruit.hpp b/src/include/fruit.hpp new file mode 100644 index 0000000..d0486c2 --- /dev/null +++ b/src/include/fruit.hpp @@ -0,0 +1,9 @@ +#pragma once + +#include +#include + +void create_fruit(entt::registry& registry,Texture* texture); + +void update_fruit_system(entt::registry& registry,float dt); + diff --git a/src/main.cpp b/src/main.cpp index 8a42615..03b1d57 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -79,7 +79,7 @@ int main(){ SetTargetFPS(60); // SetTraceLogLevel(TraceLogLevel::LOG_NONE); - InitWindow(screen_width, screen_height, "Bullet bird"); + InitWindow(screen_width, screen_height, "Snake"); SetWindowState(FLAG_WINDOW_RESIZABLE); diff --git a/src/player.cpp b/src/player.cpp index 97ea87b..91d3fb2 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -21,30 +21,48 @@ void update_player_system(entt::registry& registry,float dt){ auto view = registry.view(); // Constants for fine-tuning game feel - const float GRAVITY = 900.0f; // Constant downward pull (pixels/sec^2) - const float JUMP_FORCE = -350.0f; // Negative force to burst UPWARD + // const float GRAVITY = 900.0f; // Constant downward pull (pixels/sec^2) + // const float JUMP_FORCE = -350.0f; // Negative force to burst UPWARD for (entt::entity entity : view){ const Position& pos = view.get(entity); Velocity& vel = view.get(entity); + const float SPEED = 350; - if (pos.x < -50 && vel.dx < 0){ - vel.dx *= -1; - } else if (pos.x > (GetScreenWidth()-250) && vel.dx > 0){ - vel.dx *= -1; + if (IsKeyPressed(KEY_W)){ + if (vel.dy > 0) + continue; + vel.dx = 0; + vel.dy = -SPEED; + + } else if (IsKeyPressed(KEY_S)){ + if (vel.dy < 0) + continue; + vel.dx = 0; + vel.dy = SPEED; + } else if (IsKeyPressed(KEY_A)){ + if (vel.dx > 0) + continue; + vel.dx = -SPEED; + vel.dy = 0; + } else if (IsKeyPressed(KEY_D)){ + if (vel.dx < 0) + continue; + vel.dx = SPEED; + vel.dy = 0; } - if (IsKeyPressed(KEY_SPACE)){ - vel.dy = JUMP_FORCE; - } - vel.dy += GRAVITY * dt; + // if (pos.x < -50 && vel.dx < 0){ + // vel.dx *= -1; + // } else if (pos.x > (GetScreenWidth()-250) && vel.dx > 0){ + // vel.dx *= -1; + // } + + // if (IsKeyPressed(KEY_SPACE)){ + // vel.dy = JUMP_FORCE; + // } + // vel.dy += GRAVITY * dt; } - view.each([dt,GRAVITY,JUMP_FORCE](entt::entity entity,const Position &position, auto &velocity){ - if (position.x > 100 && position.x < 120){ - velocity.dx += 20; - } - - }); } diff --git a/src/scenes/game_play_scene.cpp b/src/scenes/game_play_scene.cpp index 3f20e38..f4ec0a7 100644 --- a/src/scenes/game_play_scene.cpp +++ b/src/scenes/game_play_scene.cpp @@ -1,23 +1,29 @@ -#include #include #include #include #include -#include +#include +#include +#include + +#include #include GamePlayScene::GamePlayScene() { registry = entt::registry(); - asset_loader.load_asset("assets/bird.png"); - create_player(registry,asset_loader.get_texture("assets/bird.png")); + asset_loader.load_asset("assets/snake_head.png"); + asset_loader.load_asset("assets/fruit.png"); + create_player(registry,asset_loader.get_texture("assets/snake_head.png")); + create_fruit(registry,asset_loader.get_texture("assets/fruit.png")); } void GamePlayScene::update(float dt) { update_movement_system(registry, dt); update_player_system(registry, dt); + update_fruit_system(registry, dt); } @@ -49,5 +55,5 @@ void GamePlayScene::ui() { GamePlayScene::~GamePlayScene(){ asset_loader.unload_asset("assets/bird.png"); - + asset_loader.unload_asset("assets/snake_head.png"); }