From bd898afdb9f90aad5b47a03e9233743b16e35bd3 Mon Sep 17 00:00:00 2001 From: Christoph Urlacher Date: Sat, 27 Jun 2026 08:04:44 +0200 Subject: [PATCH] implementation --- Cargo.toml | 25 +++ assets/background.wgsl | 10 ++ assets/background_color_grass.png | Bin 0 -> 22809 bytes assets/bevy-bird.png | Bin 0 -> 13817 bytes assets/pipe.png | Bin 0 -> 1851 bytes src/lib.rs | 110 +++++++++++++ src/main.rs | 262 +++++++++++++++++++++++++++++- 7 files changed, 405 insertions(+), 2 deletions(-) create mode 100644 assets/background.wgsl create mode 100644 assets/background_color_grass.png create mode 100644 assets/bevy-bird.png create mode 100644 assets/pipe.png create mode 100644 src/lib.rs diff --git a/Cargo.toml b/Cargo.toml index fd32498..36ac4be 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,3 +5,28 @@ edition = "2024" [dependencies] bevy = "0.19.0" + +[profile.dev] +opt-level = 1 + +[profile.dev.package."*"] +opt-level = 3 + +# Enable more optimization in the release profile at the cost of compile time. +[profile.release] +# Do a second optimization pass over the entire program, including dependencies. +# Slows compile times, marginal improvements. +lto = "thin" +# Compile the entire crate as one unit. +# Slows compile times, marginal improvements. +codegen-units = 1 + +# Optimize for size in the wasm-release profile to reduce load times and bandwidth usage on web. +[profile.wasm-release] +# Default to release profile values. +inherits = "release" +# Optimize with size in mind (also try "z", sometimes it is better). +# Slightly slows compile times, great improvements to file size and runtime performance. +opt-level = "s" +# Strip all debugging information from the binary to slightly reduce file size. +strip = "debuginfo" diff --git a/assets/background.wgsl b/assets/background.wgsl new file mode 100644 index 0000000..f472faf --- /dev/null +++ b/assets/background.wgsl @@ -0,0 +1,10 @@ +#import bevy_sprite::mesh2d_vertex_output::VertexOutput +#import bevy_sprite::mesh2d_view_bindings::globals + +@group(#{MATERIAL_BIND_GROUP}) @binding(0) var base_color_texture: texture_2d; +@group(#{MATERIAL_BIND_GROUP}) @binding(1) var base_color_sampler: sampler; + +@fragment +fn fragment(mesh: VertexOutput) -> @location(0) vec4 { + return textureSample(base_color_texture, base_color_sampler, mesh.uv + vec2(globals.time / 10., 0.)); +} diff --git a/assets/background_color_grass.png b/assets/background_color_grass.png new file mode 100644 index 0000000000000000000000000000000000000000..87ce76f497956e8d8f4efe267e9b84d926ba7f27 GIT binary patch literal 22809 zcmce+Wmr^S_%6I=m_b6MQ-ProB&87;1q3Cfr4^-NkdhGCqM}GD(h?$#lt|a0ARr~( zUDDmd%;9%Fo$EU9$M=6e?X~xQ_7f}awb%39p}N{?6l5%9004@6>MD8wATF8+KtgnJ zQU5hw`rn=1ZLQk?ltz)`9w7lB0=k+8s#3!dT`TMDgQJT5QHuxX8JN4N`4LN-I}JV$ zK6aO>{`3*7aknjUk@$i6;q&ktr0-Ys;z^u^SH#1HBDX!vd2xAp=3syM_+X;@cYo?@-P-57r{`6{PkN@8 z!UJ>$3zOWYD@A_>&QDLc4wQVyXtjNf>R#UQ&9Wcv|LZne@?ySf<@nsDFZ~dQ51Xu6 zI6UZybnU=a&kpz6^yU_=4;ghOL{ByKjgHrZd$bjNRv%6Lv$gPg^4Hkfj!a8P%g$1{ zqspHELeTI}rzH0gZvcpy7!v@)x4ebTTyexjwS_}{|nG2U%3uXb%>d23hb zXQ0B!$CYFJyNMd*wkYk6_?M&Ae?IyAjq?qk{FSlT={Z#Tq|{{~w`O&*ZF6H{7w13QxOjwb-k49D`}1n7+Mp}mp+Aqk*lF_Mpl^4B zrz3#-w;ylsOW~h^eLDwSKc6oj;U0{A$($eCI3dg)5`2fNrw{NU;6Z`mu zLwwcBI9smW>;X>XXJGO2gkER-zhk^wdlYA#r}5;McT3pnt*Oa<{L~(9d9Q>&9eqla zNrmD-!>_-FNMECKr$%1y_PUsh$+$uhO(^3VSD9_hXg=~R7c*Y+mk9DyCic$a{Y_hRRhlbqhNVbhU_hJ;)eRT3^@5Sj1#+kJ4G)8@IXP zb@c5DpPcz&#nSW-`<+%*)|AW`K_;)=ue~^O!(C3bMHb^OQD7iM0sssE`2R+Si#FAN zkpnaU5cnT^0dph$e`4qVjOG7q|33=&f4m?6@0k8)$L;^Ncd?!P56+YSPkZ41rwL1; z!gYcIV+aG-2Ol-#=SR`>las8h9~cloH?efOxBf})tuXnyi{*jREVU4hiSoR`=H8UF znI8k-knZ8)yu}IW`P|${#B&PLl1#y10D?6qYNQ)8xlA|JKJ&mW{`)fF$0xs%=dF6Z zjkfBMJkJn-3SH9?;@bL=gWj`+3ZP5=G3`dT{P#S4J*Yjp@FWNw1At|jj3_*}?#_jLIxRaHm6Pd({#afRYjBG` zBfLK$oM0x^y9?ZD4?5E2U%61*=UK>1cAXjlP-;J%_%Q<; z(g5a(0wp|p5{&^`&p&s3gMl`^~yYCOGuHz--9CpMi=w-{j6fmomUBOvb5Hsl={9R}g5gg8LP* z?wS%bYybYOYKs}Hc%mSImJ{uvNg+e`d!~pCWo6-3S3@9E5{4iKJ6u-f{sr(oq(tj-Qm~5}+e%rQE{=0k?z;wY4 zEhIgB<@9ZS%vL!kwR<0!%RkuTVoSwyvyx3HM|IJIWa&;vQ(yfL zaZ~RV{HMlhb*z&bI`ItjV(huE(3F$sg?C||8}g@pTOE5pU)I-JgqjJQQ3R2p57~cf zqsvLtod_@Og0_O=4>v2Ewni=N5=Xp}sB@-&H7Hc2+F+|DF?VI|2WgI&IM`icxcJ6Pe);`>mT zoQW(8VVaA7Q~5_93AguOq-5Jo>l@4{iuNMr%p`DZ5*gG1V*D)S)Gn@%!}ro_dm9I0 zLP{{mN8!30oA~LY!b<9-q0OMGFhDN^H5lV($lu2Ph~FgH=`lwkP@3!IO2;i9z6d-( ze=fP=OJCxS{EMGp$IVA)NYQRfcTy3GTzTQ!+dG6q_JF6K@{P*4u?N_U)3lu$$`Aw< znkodJO8DAio>4UU<25(FHpWZC2*Cv!LmST32oLj%77-p~_a5QXMh}UJP$0kfJIOh5HboJrHN?cIV8=;#f*8|!uf=WG(C40ZEAI+Es&H@F$a4sv)h{I}Q zl~gh!Eo&A}vj#r2xPBaI`xwccH}}=+L$oSf)spQl@C)4_HNh$QqqtYH=a;=!A8qB{ z>{z?4ESCH=7(wOFVZTFI-<#!^t@Vk`8LfA_5wFf2%PT5|D&c|1XwWt@sRX%G(Eacm z7oOrV^_K=`Zp+1+2%;JhpB54nOY?D%_iYkA?fAS?n%Ow>N&ib;9H4NX@G_iWS4@F# zraiLonoTwsw0OyYNRJV@#i(vcic?mbDZQmhhC(A?_6z09@b}M_x4L)TwwF>v!-vVI zv+`4~{fz+oy;K9oL9RNt?{1&wmfrSTSDEY?v!Yc7cTm7(UxAU=Qg$wd=nwt+gz*xi z#{ScSTCz6L^a>a@$Vd1|-L8o!jm}Zj0*`oYtnoT}X21+n@6Ja162}6Le|pT$$M&+7 zcYP$SUAuy1$*ZI{$OlE*Or0q-e?oyc{2g;yoxA(5&Bz21W!7Rv#`}jp{nREI;yhMd z&tC}|0At>dokH{um2UbAXW~xY@pY9oQ|$Qh7l<#zIyE!%L~J1R z=8iBoWS^Hc&z5GpAG>^~119ntSv$xBzSoc3zfABw2)$AHNvm}(76qwSYr00nZpNs+dDa67;gW}opIR5Xvf)4aUgd>Ze+uww&kqa znZD9^M%IIt^f|Fxqp@-cV#agnm?cUI?Jqk4_rX6suZKEc$tRho$On%vmj>rK$4b%u z`=i2fGsV2k-X2Ny?8|nGC7r^N61%tMP#TfSoW&&BcMN@3#rHo@CGY#he+w&2lzCvn zFyfX>*GSqO5or17b!NF>Vh7tHo%Ix1Ox{vs%1w_4Ki_*?d;0W)D4BJsh)Xt|e_AoP z^7`vWfy4JjJ!q_!{pwBI&R{W{DVCc{o24)P7kaclJ>BfQuC18QR(qwpI$wW8XfQ;yg>0^NrbczUQI zV!-+6A0k&^#nhOK-EupJW_UT)dO=-~CfJ;L#uXhg5a7{AuIripYRkxWo9`jZ@v$-Q zZo*(c;iFP)HF}tsgIq?<0EGG`y;5!j+=o8K&prwj8@cT#Z`3;a0iysYt5~K=<*k$Q z4T!#i>#5Kz6*QoIW!DCFW|ixC#VQ%MtkfFLym9{f(G}eh3n3PbQ=PZNZAXFF!k_S} z!N6~~7>Hrb0Revdjr(_EOYM3RdTj(H@Z>S=rT*8f;*fY=nEu+J9Z+t-&@HHdJ`w-8 zQuB^+5d*#;@f%d(v#@es$3Us-eI3{4f6E66;>I#~TKy2X6XXtm$FkR&74N3L&egyF zhA}@uiM6VkaOLG(it{cTUwLs=4cn!k%mmV{UBPnrJB|9mt`Yu?p}dTzP~5=J*nprS zKTEbn4-6_p2iRD7`-(-r7RS>nH%UVEU@mM?_+h@SUpbn~v0d1}>^_c<)h#rtx_GzR zoQu646SbzXQ=#JlWzIEz1~>^Q0&rS<_a%I)8+_1h_TYyN_Zrg~SyP(B@z--2bfpw* zV3WFv>g|hak^{XRD!HU!iWIaV;}x+nMd0Qv5H)>(-@GusUH+R$SHP%KI%r zkFz=gjksMK3>37~Zq1d08oEr)1EfEG{fj>`HfBc9c}PI(s6!zMDSVaS8hI2RO+wSFP@2|!}TD|Kt4Ze%cDAAUA-M- z=HY?CV06m99-#NGv0xjvvz=}>v1G;I#XE2OBkJ<_8%`E~m5p<%kWN%?pE!CIB&;7C zAHr6m(ACkxtJYv5-CBv99P%)CEKP?S8mcA^SweJ4?XN(=dZo>YZ z=UP`1!`5S?(<^N_hqyqOnfLmAX6v$;Yu5R%X5)7Ao*NsK0n<;;IgC}hP0H|Efk=ka>(r9$uPya<{#0tAddcu!|s zn<(b>HehLoNz5|I_*NmJ*^t~i?FZpdNb5_0u3L5lNV-WpGM8K0W9W@`%J4%_(MJ;U zD&Iv!PCZWZUFT@-V74|e$$=+qIRE%5_{^utMlOs~D&l$aBS`xfD3fyb8XDshkk4rG zL!jz5Tm2FSVDV$NY#O9)m!fWOIlgo>CK6)xLYL1_I(a}FQs@wv-$&wqnm*%~be*7Y zpxKUKDI}+~DxNI#I9wLIt|U4Pr^o^!)BWy}k^e@e{x*2=QItGgj+}bk8UV70b3ddJ z%Jj5>(X=Kd_MtTP>*IvgYN&O!`r0K4^T<%1u`Q{uR3p_{{SF>!8QUdt2IOd4fa2f* z1%1jwr5jWjGFUz%;Wesm#_!&Tq^?Q?fvl~&Er@Hovr z#3SD@&1ChhDRVo)T-OE8Z}av!Juj>>H#~?hEI6R;kK@8!;9`rHo8-@ue_Xxq zbK8p)wP&F5enzD>E?}{J?II?kZQoA>9XjXW{%TDRnk`c@C5al)h3iS?4tQkBgwpT4drt>3nKWKr>(|ZSdZQ%Qx zdiOWjiOr@^-$7WH4b17z9!|%KS~9lxI*bt=FAh7_2mGZEe!k4V56D7*_K$$?i=J@p z&PZbJmM@i8(tYT3|H-91pYl!fnj+V=X^wq!6|9d`+bnmp*|4WCp-8ONW5HaYsk`b0 zxQ_m@a@9%qgu6Y~u82NO>5UbFoH|FBtQ6Z%MEDcw6OM$T?gQRRrPF^)T{^DQ4UdN6 z3>(N%Me0D@128yTk6`mfPCU9PSmnLW^EL8`iCgFl`6c=&c#Tr+R?gK9ipU`4uG-fg zY#4?1V=K(-AOXDH##m_=2Ig5njSic;g3VtlG>c&FllT8@L0_P%hoSCul{LRMuA#;% zjIXYoDmYla$Hf8l1j_cC2z%n>9Yf%E$Bvc;_LOJ|wcZb!z4~gnXhgk$4;= zew83Ef6f3sNbPF4mCnWBKurfVYoNa^fx~r8m$>79ryD=Lu)WP?{_a+ZH!D2(R!eFv zkb|2lqde4v-+Oas+HZ2b`9+oR&zW`_pB50{{JXc+ZmgPu_jdR9UAvgDUjPGr(6-6X zhfwQx9RhOEiP+T-?&uG+gmu<_;+A$7w`6b%JYK!)A?a%vomN7KGwukX4IYwLQKMCw z2Cq-u=#{{F@4SQ*UY7xlNzZh}*(y}7kC@w61Dw1FQs5p;Toqa}z+t3Q3AKGY)1y~4 zVVSG1ShdewBx!gcRjFhimaDv1<#`lNGJmZ-E;anak@4`yW!%_y+Vf7J{oP)a z(Q^5pv7vMP$2{1+Z3y9G4#Cle9SiA|jw{K3Nk9*!p?nNFjjx!U!Bsj zGhL@O!=Hob26J%!Qd4)s-LCdXk-z2$swYJDK0F%_#^+BObob53(SeDc6%m*&X1vbt zAdfu(YS_126wEx&HRZ{Uf4?w?ghIx;36_NdZZA8u>Gqm2-sD9b&U423>U7N)e*7DR zXn8Oq-R)QAV-YqE@p^%)1E(lxc7)NH26}x5)@BSV^V;nGJlm*=!xX$`fvNy6uLN0o z9Cklkyr+H4*o(wk#?=Mddp-WwPDoK}QV&YK5Vo9MCS>@=a)GQf9{P=hhWM(>_xWbp z6oueSQ#mGJd4&q?tr2b5zH7C6BEm*EfQ1J=fN3Tc=z+>UA`(YF>y?i4iw%t86}W5a ztD}9=_>lixhdY>w5DeG7N>GL8PU>r!`@5Vr#t;Gv3#=pwTc$DlLD`Bevy8Sr-kDb zG$o&zt!1pc_zzaQD;tab^pjM$pdyh#^1G1+Hj#4mEU(sns+H*LZ@=r1AT0~h?dYX~ zAtRxB$EVN?mhdG_8*ymvU)aVmk^}BK^?w5EWpdF4+$_BmE$qhftM3jLUjz*NN@c8} zBS}Bp6g!mO@hX+hBqvQjc7c{g)VCOJYOJn%Dye>N@cR{{Bj;z)8d%d9ZHTV9G=sb8 zz8gVQF}jqh@OHmBC~a_sqzC?e6Y;5z?$TX&9oS2jXw&lARQj*!K#>L)#^UrpzN{;sAg3J#ay zcI_;ft#wW+L#J6#uz^Uw$tEp}?GiqCn?^*1i}pr*(nHbf-z^^JlbOid>PWh~;O8d} zFm`hU)1#-a!zCDQ#dVB0KWJBP#bfnwx{B^6=mwZn&wJ&ItVclxu?{Ao zkBb|KL#W*(V|d9okYLuCJl^3NI54~LQQsi-j3OV2D&ey(w02mhEl(x2wtI#%-Kq+Y>tX`K7V9qUH$Ovo`g#=x%cTz8w)1aI4w|{n?4T=Z4N>|T>Ai4ou%S6 zT}7Ojuq)V)e-yFTSCKRBI_Wk~uMotF5xV<0jJF67fCk0M?1i8`=gN4ktLgo3_4+s| z;3a;PaYFHJtOPv_;&04N7Q>eVBFKcW0Wb;?d80#mcA$O4L=ot4`}>F7raPOM3cSW_`1=eu$YWDieQ|L%PUt zHiZhK~h#M5OwxdPk`=L#u1YR|XjN;@8qp>N~3AZRyL z4X(>*xoX;Hh$pko`#D}^?OCV@*QvAIZa-aPw_*f~}MO$%B&i0y#bovifCNLanHr zZ)diX!(KFMKZUv;cx~p`hZ4xGlosq$@zfO0`yI=ukZ@6Ac=%tPdZBxszYGvm>XuFq zM4-txR=W{?S=8RC`7y)d6f@kl=o>Q>LPvXTCJJy}Z1ENJ%-`>JJUzW41-@uOzITNC2DEh%&mXn|cW4WqBhuS=w zL!>?kttog{h29z3e58Z0HU{d4g2tqt-|15tPaVKPHD$HN{ViDjRs(}G0}T_5zjG3e z)cQ3=lJ17wj<=F|w49q`G5pn_QE#e&ydk|g`JUs!)Oab39{rf+neh%OdW8k;9d+`7X9+Hn zl=O8DZk}rfc-)~ZzbzM65tJ@mcPNO+fu)`X`*I>c+ErxAre-+crfDYUB^lLPuuid^ zx|Dq8U04UQc}3AYW#czt*AgVeb2=YKo!Gv#&3w#l{UH!G5=k7{8}OWQ;6Aza8wMD6 z;4=igsdfyZi?bN@8_%CR-lC(%UMCZVPAe>Mtlq^uy+QtJNJGF!} z(1T}8C7BudOqcGx^6x>b-*f*~Vtv3!%yqWA@~$|9I&mUc$r}l12Xo)8U*@@Yvm@keop^Ri`~?wzNa{L{pR_T$Eg)N@{R*%NjIa(8%wF)T!;fV-82MR34tnkRpyqCizMV7^ z?tsny^6+PjBq%m0xlTtHoc)euRl5j)k;hdKGL)xV7ZdT{jG>cQUP_VoUKj7q+Hx)8 z`>!JY9~Z#R47v$b#@8^QH%5BZq9lV1Pc-x7f`!rhE8&D$MKc(8#Q}E*q2Bh$$}{Rj z)_plJ`2AAd)7B!2@wAB-XQy4a8L$te;cdV1ACk3?D{g7BDpM(njYVbrzv4itpBN9aL~E#7;dadrdO?&$mmYa8NF z6KZ0$RC2WSY|_6mb#}0py*mv5b}R6x@Xi4F3?t??DuKQC8bNhB_r=D>lbteSj~nBD zT11^=+Y3u-E=a1^{`Eh2nQ>dJ0;kE(kFuZNxavfGPLdw%E4}1}D_}&=EvHc{ocj-u zq*v$kOF$2ZNq&ICq02&(PDk-?8x+0m*N0v3di5YsbsZTjRew%ss;r}e#ELcdaY02Y zpx`o*vlvB5hc?i}$L&O^wc?IkE&D65%x>HEI&bTzwnJ@)wZz?i_o>2ca{; zg_xiyT;}BnIU<1m1B_|@&wO(?!No8I%7l4u{Gi8fg{FfO6UilvXev3FTUY%$3l=S=lAX-e^zeTi@P1nuJ=V8!(2JP zvwjygVumMh_`x=N-DUX9)}umzyGiy{#~}?2}pRcV~EC zo{6^E6E?F)>WaL8x&Gw>VcJ-Qp(|B(@XB>vgZA44$jV~F(IbEQnY``VVX2bJ1eAbb}-J*%w4Zp zi)O;3yMR%akp>I#NV+DVc$~Gy`*Ttm_QRh8BK^6na8C}eKS>za3u-O0@C|^}-WRu8 z%+f*oN$m@c?F&WsbRsno(em*|u`b`o90qtGBN4>5M^jm>k-04uMgnnx>q$MqE3VuPa!aZc(Furr9dc5NuB|iUjF(fpeTR$roVI+?Ys|d8l=@ zT7^8o&%Pz}2tKr8M)fZOY*NdvweM1v*Bz&oKT__Fv}QnJqsh=(xST_+n}^!055*K7 zt{Oysgz<+3MTEV?7x2NUR<-UQIqm(q$bvBMSbc!&O6iYX6MtAPV0S2G0iplqd&rhZ zGef!-A*;8}BJ*_J$+><_iKUS!z0 ztApg$U)n-Dx?M)&2sr8apuM>7aQmYJ+b|N;m#9JaN-g`bOZ@7g}sDsT>7r zX_I#`f(GWp2PmTGnquNvNX=uJ@zc@o32N*XjSY3+^cNrWHO7+#y#U2^G!#cx9hH%% z-v+^=8xkaH{GoWI<~{8s(LdSsWC&FKOGB<_O5!BC)Nrao zo_kvED_xff$%~C@80onne_z;T={LIIJ5t}H&(pTsAm;@mI&kriJ6x&5nuo;t%fHc{ zIOfI8i4Q`AHrL;U1R7{-ft3`zjZx&^OkW0AQ;RX_vG@b(H+&=zCb;iVC-}Ef>jJoEh2*mu8 zFDSogF0LMA4Dvw1$J6D?dK34(i{HC)ZmPXAC!` zWu_TMZXI$2xBr$QjF!U7-`r^os5PfV4~~Bu5B1MV5fDK}kC}B#UmPu|k{q>UcapcHz|p*A z;@JObVwn&l3s0EA>zW#tceeRQ+g9F%-7p^eEIz+wR+&k00R#+Wsb|-EkR|OsWaYiVh&uE_4dl_!@Y>y$|{@$Zk!*7D_mfm478d z7YVJ>qV=1cKkA0VuN1iIR{Lu%2sIQmwk|qY#iPNg+CAe%O`zTyw3$sxe(sz*`<~F0 zal-wG33;Qgtz#c)o}xi?WA7fYctnGh?2G@xCl5o_JKUejCUv!iyXaYbbEWXWB^OVU zH}P9vq(E0MSL-W(fE}B@C>mY6g51ljh`dF(ShT)pMN4&tpM@h;eG45=rnapmEtG1` ztktdmcAwb6 zX`wrydv5yCA*}=b@%AH1q+8TbLP7HUQeAPsJlS@e8=#mm1xX@$Kf6j*3JgI<3MQCI zKgQgi7FufE%!4^jL|wl07Zf4W$H8#54BcR@@fG4*n=$R@yNj>H>iNni^kM6Rr*WZg zgs(nN5rI=_47{L$Z0$tG*V16#m*h@sGuToFTro)0bn4y1gjMIbKOmg#-i73L58#B4 z$Y1A&>pDZ(WdHUBsn9X4@Dagkz-JegmmQz0p2=#s$rqIK4xZJomG9uV}i+ zfJ*qq4>i{_KohiC)=|}UjaQdX7ibkpvBlTYmkc?IdgHF2cQ1Zu{#4QZ()iW;fVLWYSY@GaBBga1;T za8&41Ru3+J&Bc8fFZr!e94(}zlZGX=&T1@_G=0VltzGKqx)|t+iTF;QoP@|H-~b-) z`#B2!jstk`M)yP&Bohfhxpr`S@>t+Lr&QiL@D8j74-`>D`Y#yJ{%9oCo+b$JL%Nmy z8Tv%{*uD_vTS+F(6Vt9pmQD%dwuAc)NLOU@r0)cI43u#~wlEbTI>B3H(MKPv2iQC= zP+=7>SG-?JG7VG?j+3Vl`-q!dC9ptWq zpbB|}Jxq9O)Gq{OXoohh*W%(ed5060NM;OqiQ9b>o8}n%^s#j=9&m0bN($YE*_%@@Y!)2|x+KCP z2<3eqpU-PEjhbU6v*wP2Bf9oiitpBSs=9Z2#%87wA}u9&m(4ZLdcfr;E5myB>j`; zqNJMRd+zz8K-*9kJ|m3$YmN-BEbyN@wB-e^ZOw$!hq6HmgB#_RD^Y;u4iDtC|GTla zHv7`Ng5z@x>}a0JlVMU@Y0p1O(RQl8V6Y*!guX423l z1FCn&A15Uo-xCrlIgFQgAM4x!kqIWHaFWlkf%;6Y)m106TlYZcH?w7J9BI6CJj3On+Oh7A2KenCb$I6Y$mM&qwC84XTEgn4<1iO^tC>e0QX%=H-+B=Q$fY%~ z1w3QEq&3LoJzP~gMw*78B2NK_JtQF&Ubk}Lu|yIlJb?8n6u5?|(Y9I&$S=?z!Ub+? z2;Kv7{u;tR6w-ro{}_+aUGb>tx;a0UXgEG0Zp?MxXx^;8eek!u|EFtR#=-nhG=wZQ+2xOFl3O)q+I^B!Im8!o)px3qf z!VKu1p_F?>xAO0T(D&46PA2$Y35R+ylAYoghDGB<_W1y&8S6CI^^j;^K=yMOH8fVI z6$LU}Zc{$?+s|)l@fx#BmPR9 zYYs}2C)t}#Uzxl^y5$#?3CUfVAN-|okH~pC`w1`h7;Bi~G)1jk0J7y2!*k<~gZQX& zr&DX6qSw`lKk=vc;K?N#p8gyRWiW=t5Q|o@CS`HsG2bmH*UbdUGeOa_7fkfm2wQcu zq}|mAmHhvVM*~kkRgWe0X+B?;9sUV^cmFc;&dr4dw&3Sb5H1m|NQRQxA!sL`^7vBE zzFLV)l$spEOh7eE~sc6ux}K4&_DFatxKWi{fjkW>iWqs zI+M>+rX;Jj)N{al8I2nX`S)Sp1_pRpx4Y$IT>x_vvt(#oc|e5rDO@NbvQd4HtxW&b zNBE}~(r#SvwvO@aV_v8NB2CxWSZR3@`4p8>P;np~_f6;Ssk!~#txY{wvOm|0hP+Vo z?Z8~LR|Iw$p$Q!Mh*T)=vuZkXzbR?h71O^=ZA>$G9v7-VnYzHK(E99q_MGz@GVB*v zl7I!ExPKFjk}YG^^;t_gZwysb#f7`VaAS+Ic-5YSg_ik)r?!D4Gjfw~x1r~2oJ4M~ zJPT#xx{PYSrCOgqIQrN-iA-2I{=9r)WUf|)>k0Z z_m;NZJ`=6E6L3ZxBmFBtJ~d|;cp$sovs+n#5(SDEdcIGN{ZKuq^T~lM0Sqk3^t~;U z_lRI27a6y9w@$}cQOyZae&E{mB>8JagpeXSPU*k&aV`Z2RFjL|nEq}0(S}sjxWNe} zaE)+w=uk+cNdbXPHz^fm;^=;&1U2GxMWT_yC7;Kt#)_QJcZ!BaJ{nyRxG9m9XL-Uz z|Fkw!D+12Gxumub6b}ks+Qga@>84jU{ZRilaFr2nkb)tp)0^?(J?4beb8kYa1BZE0 zMaHE;`M-{*a{|SzGc#^NRXCWc-l(I21KF8;VS*9;%10yol-a7ha-05&*>Pi;C`5uyx&2&A6?LWC( zqJQdVv9XPksAKw;^&LrNCK#Y1MzJ(-9jX?;RB@->v_*sHv;TXtbbi(QTc4k-rwL3W zWm;!%|MPj}@|4_KhSLQkhfT2?z_=H*pT7xixqam>>}%kGf-2Iw{H6OC=z}M${Xn=e z!rd?sY*hJu{wA-XdAEAjF}t~BUHDRC7Qmh^ zf`wP<;e~O7L1$RP^5Z1}mvpsA_iHVHFw7RTE+dv5Jb7ke5|)g8yl|0bWHAt2mzqXmVu1IP0Xy9$i%@d0hhM=mPLZu_j4 z>HMYw$GE*TTLPejg@=yxSWRT*Z0&`H!6;SNn)w9{jle;*M)3zfB<78YXc@4#ERw5> zJ^c_wa&tk)MUGV1ZD`EK@$z?I^k@1_MSnQmOl`Y9E8*`nZeu!d|0_}8-K5Jl5kb#E1fhsYIvGn{8GTqB=rdnY0*EBQnvD@mC2xnBgQqJ)f zrNWaXTq|>s`)8F$yf5G~xeiAvLGxBMLdGw_m5SH*LFjd|&0nnzj-K#_xLc!kyCur9yZ19sA$%qxY% z{|=BQ2n-QZL&>B)?w1BLYuqwU7Ez&Ag6c3!37IZaKv*morMYcLitY*UkRqW{y&$W+ zT)5(h_L^0x1T?gZTg}fxfUtDhp(^}%h%$n3np5098H2wdc3ReB;D6}}_}KqSW(GB- z<)8k5(_vyAaKV6+LNH`Nd^@K6)V|dW?-LygNdho3%P}?Ot zPZbr~Ck&QjG}ce@sF&@6T#hRU$vrup$4X~mk5~ipnLpim1v8R4otvydP_Z&yreQ(+ z&BW)52PsD5!V=bc_RwIL@0|K(U)0rx4OMc*8%nr!eWDmT>`a~6C(1FIv$=*YGcNO6O z!u~8UGPvZ9jy!hFDXplJ72Q#i@i`2Odm$ov)WQgBYaDvIWFV=~i&o%`&l#Cc!r2A- z_9>0J;*HF(wP5FGkMpOq?Z+_B?8*eo#)pb{%mexx%cj2@-(P`(C|NJ^G54<^zL`@e z!`BxfahDXQlnRpKB_Dk4r{jg=zg66Z5y^SKHSl0w{%~%RD4@j12!RL zz6ej?EA!pe4BbhDNU-6j=Y@OA?1Q%(cWH9o8__=aY)(gNJwCK>_;H+q2=SPtM1_4u zd3Mu#=rX^})S&Cy%P?E**pr`CQZNa*lhbk+=}OF)r-8^Hr0BOfBQr7-FW$Fhi&zsQ zS{txud%}sm^;8R|+_EF0gya{3U_rSLP92u3?hz{jXPs!YwrhQ%#x{(*CPGy zG`24D3PZWgm)P}hKm){OzsHySp3W2Wyf)5WXwhT!9$StN+1_&a=O*2DK}6a7ygBi`84OD4Q9qc$VBdB}d4O&t*i%1lKy3(iN!Qz0o4rp+ByXw3WR6 zK^T_nG-<~`K2!MzX?@G;vT1~F9L8}^|Bk)A)82hRJbk|0D6|4;*lE}OHc>h^w!0q~ zRYZdx5WshNPLKZ`=7H`aD^0u}i}kp^diV>Z^sRN!S8NErM{H9Y9%bEr&^f+qsYfi$ z_yoy<*cP)19hfdo@aYs2G-hBxDxRL$7%?e)zu9$8t4;2Rn>O74dn7PTSqiw7%6*Ev zT$ul3ux9_MI5*R>0mPPymP?hkF~KaCCJ~h{dPue~i#Y!)c|WGZ30p`Byjs$CE6RW_ z_`4M82R353r3=t$G=opKr0zpM3Owr-RQ z|F)-0F9;1R+~i`GF>&j@LJ>Vo+;H}b9lxE{$;8e-p_J7~keS~K^husbd3Tu$JX#?7 zQgCse3!2-^tFa_Ym%_gdV;~Z&73z3}g65uJ6EN%^ZZ4;feN&GU60ci4`T)DtpY~bj z+zgXOkbXMV{|;OZ$EOCXw+SWZzbmqVi$G7NJWQ{{UTjD(i(FCzzU}CNP#DYCU$uMq znaV^_r7|>VKPKdvU&6Lr#_mumxOb?(Ik~JR3EgKz`|mDQPzuz-sOe`Vb$Xn5g$?N=4wqMi@em=IO*HSl(CXbQlJ$bCr>rkZ!H+Ylowi3S4U<45 zn~N5MudAgQC#s9h*Q$w~_efV^+^5g%Mp~7*3*`XssZK-Hc735V2Q(LF%S}`yL}hFN zSC517hTH+jn=oM=K0@m~48;VaF6^2X!^B}S#bUbGaBj;kN3_JEv=GuQX^!QG>QYea zLk9m}lw2S=&ejxbxuYfYLHL{*9Yh#xVn8=rf@wLkz=!CIGo1QwGf#av2WJx}=12?G zc)>(?-7(Kab^l((dyUrwE=IE-uRA_Zg=*0YgYh_9gMgv2LEPiojZ2T_^6xm?rX$^q zcU?%P1sSl6`jf#J3gc`Lmvci&DMz^Eh1>HGgWEFSYZC?xOGlJvJ10MWx(-i$M30Y@ z2MrW$e!P&$N`_8%S6B3>7xQfdVJdXLtD$`x%)5Xqam~__8=_1rtaH`>)fAj5nB+S^x%LNmZ>47VaL&;2s7bn&NREnqW*4Nv zKKsLqAT|OkQcROi`sLdKq!!$hvOq)TLgdH-m=`H`B9)eHq;`qD*h@o_r{zY{#y1@M zgrP~t9GKPz%JYy3R@B&ACByAo{txcqw^YDd+!;6IT`SOn*Ay5T5*@)j+bJrc!L|D^2_2Kj$cAo6Y@mrbBV0sjR>_Q4xj@-WYP-De|jS!gwE*PM%x)y*b67>*aa{Xk4-Q3ch zl0*Y$zWJcXS^vTHDbt~dSMQOc_Ob?}Pio`av%`tIhq)kp(-ZflTX@W~N-lM`xkd%` zHP&&xmes`$as<@_0ccW?I~&ns&M}oc#$wvBMd%|)T8I!o(@P4K{cyCa?%D7d_QUjm z?W_YC{^e!J+)=ItM|`pn#=gyUa8?FCX#j}Iua!vV+jY=3{c_N>O7$*;k0@YNKY9pz z5kjt)-t{W^GD(s++L0|{F7xZjozRER7(^}+L{bNByAlMAFa7gK{3%C`t{{oNX;eM& zU=U~5vZ9wp;xt?#N#~j{vRQ(USAW5ic@@4sOiTDV-jfxksD*sfZl6Y+6i!GJ?^hMy z?xp;^e5yel-Wobun4;i18(#Av%GBtwI!-EJ93HPTaTI@E>h-Kr{~;?W%F;7B`R{$P^)6JUN*Y z>QSWFac_2O?{A#{BLL{X{l^7hKgRUD7&*zADnDEbSmGkf-0d)8XJ&3e|; zCTxhh(=#a3%qTED2Z-D>d(WQ-#{7V&0dScA*c0R)mq3U!#^op%8hAiBA zzl{nxFFJ$wy@3;9?y*TRpv5N{u**TKKCsxO+y#tR`cb-g*N~H=4%rdfG0H)Mf9q@^ zbP5}04E}-XRP*SF0yT+9dKD6^7Xw9jNeYpugW4y&o++8$()Z#$O`kP-Q-c&oY7}$# zt*MY^h)z|PSux1KeM1ZSGpCYIg84ZGNeN`$ji(FUWuRKkXCaR3lurMKYth)!Q4U3y zBV{#gq#w_OtMUEJnKHv;<7q(f>ivG#3%gC1rV}5_lfM z>lSe%H?zv1|KraA&wy%Pk(h~DFN1^4_&oDGRM?WkpvB$$?WuWW;#`~mBRfQH$Y>IP zte_-c6peijQ(l=<5An$7IrD6}JoNbTi=Mv8_J1YwGGK-^D&>1JNTs#lHu zvD;DkQ!~zfXJ&b56dOSjjZKN?^eb{4-Qy=-3RuO_Dlu%53j-y{>Yy+yGNWOWj1WI};F__{4s~vg4km8Q4ui9ADyaQ=-U(_OG+ZQS+W$AI<){;Tey)P_V{SOY?x@ z-c)#xXUrk=w$2v?sxuHUu~;T(SQv2*YX~ftF7(X0=G}%PPFjfFb4qA83FW|Td~<|! zv1&nuQ0qU7q^Kp``TeKPom{}01LOr_FfZDv>TqSbA^hq@9w?vJ(BCzgRrUKpN|rd# z;|bLZ_cSU}VH4$dyr|G4^V)+OXAfiu@#UY$>E(a{)(QD35PCz%Stql@m2383T5bic zwYz6|>2+lk2dQjLsZ*`57?`%WkfnU6yB;h|=KE#aH{P;ZVc}?hBTW?M%a5M11LQa~ zYW$NfhK`0d#;F74i~O2UcFM{xkA=K+9-Qp{xO@0QI;U|c+a5y%O=&+30gDdAn7yuT z4mknO_XB-TDL?RbW}-np7(S{l1j}By0#FfWt9&xDcAkC_2nWM2vQ6r`=4mM0 z6R7*nZv#;}fn%@K3NqLo&B`^q{Qyk)k!4?K3Eh0!vH+(_FPQ2)ySBsT1nn0s^42Wc z%{uin^ioYb5Ep-{e*66|15MDyq3Nnpzw!L(0!X+dAz8pcxyt8TrUM|xgb0CiL>0KsDZpA}1t$w{jB*^eI;+r2@0-tC zir~Qc=bduat}&CEJLQ`V$|6e-TYg$D&^j(e z6SubLeXpzs!SM8VPg&a&!kel$p*HQ?sO6QBiminsBX%b*b_AHN0&2DfoQ_vsn~0x# z?%MFK!Pw{3#08NySU$jcSr8q{OOgjE+5w6LgxQ#6k4}{{z<<^>#x)s#2X_$3IVtO6 z&H`j}Xbd)_%fu|4&ji*v>gq;cx$h*VXUR%WKZ;XC=U7qY)zi&^yAuiWz)C+06vpfs zYnDi*Rw~u2_2sjE|FJDI@~YJA-4BFFJ<^Lt*F zq6N(0;%K70rE{m>&^0Y5Urs};9s2r2aduOTG11+yRNGH(e35kz-R^;k)faG#jNjat zvXMnwb?CkAmpgL9SBz3TAO0o)-Z<1!?>P@!6eR^GnSneExJg`Aq73iQbY?`SetDtG z!S7F|rXHYOx>sI8as{k_dG{w-_!$@N3Re{Sh)eLTFOX`fVUV) zHQpJd>rGfWYZG+pOmrfz8M@j!2`p-_fNnS*$i5#q=kP|IxkNl%CmtRype}!TcDT2I zH$N@0b0mSCRQ6#hOqX3Cv?0gA-8I=6G!Q<;DPFBBUD!CwLImzk?tGPBT>(wkiS8I}CgkKIj~v{k4riO7u~xLDjLxcePd~vQxN} z*>CJEm2ZM3kCl4vqz-Mes}3N`+XYEQbF}On?i**&c?E60+p7yw%*Fk~x_a*l+UrYV z%D{#5ABj=HR-@JUAZg&;ve6N#!1v7zi#=i?ld;T%$$0Izrl4HR0XZ)C=q^C6RLZDc zN=lJc++Gz#BL~4hvQOY>dMN#Mn56zeY!8-rwxG1*G#GA=r8fnD9HBfnYw$`c=#W99 zdy>07s6*PqMD5{cA*&zj?3iLX-4f@j(|9H8S-6hQDONE_K^tOP=R^v}{Y&V`XiLX~ z{7z2$V8J@VCySsHBxmKogl+xqQ00lmNglTrdK+|(s=5(@NbH-sGXz&b*Lo);`yY4n z>DC`r3m7O@b_KMj*@&lMoB-Jw9i5a(_#4_?Z`FQQ}&_|O}D(b zdk?<1pH=}?bc|C)$EeT3f zsL*7N53H~D&@%SzfdTNrg_S7V@uQDbT6;)4L zs5cjTrs{!)z8s8INQ zX?M2vd+UwY&%R^mnpQ0H(1%w0P*kL1{ov0{l^Hg;b_n&-eek~q!VOeao79%Mh)%Ix zb`quXs;x8#GsU41FkR}~#>VzBR*Dgse54<`v9;Wr>c+h9b|=F%gi|lzx{9BFN-{dW zrw4_HLA$Fh0Iz#@pVZ=W58kIFxAtJqf5Y}!T}oj-Z4OOEglFY<8S7+)SiTAX{Xmh4 zJwXdyRtk}yzJnlVQObj{OSMFGmQWpBtX%iEZu1l>)E;JM&$hf4bt!^w?erq_Qm;qP zEX9HajQAYcfmOZau>L|%vY#??bzzMAOzSF40b|PPX5{ALM;1ShD#Sa6_p&`YT7cY} zOA-$ZVZ^j;9@t1l1kOFi+}0JR<<@*a^OtzFxnyhaCyXTrw+rx)VwcxfzUu`jO{^PjpJ_5^*4r*j7umes zDSRIcw|SS+(bh3^ZyPI!>plL(B>!B$RQu-)9;pB$u1!((8JWg>%U~T@u!cKq@%K4T z+lbZjKWb$y;DsMqN8!so{{b0{1m+0tF0BXsGu#pp9`5IV^)kW7Hm#|6558-v{LP5N zVsSo0Dm^b#^J zhwp8psJp1@>%h>`&ktjlY1i2W62;TVaFoyN&zZM3Vc59)YtL2X@N~Jz9TzQ6Px^I8Itf zx?_+gi3*x218=Cryyu4RHAxX8OI^6!x(PdO2D>O3+DOl^4f(uuyYnM%;g%7zO?cZG z#qj>xp8+HBb6LQwC9`woNZMrUeQ~=u`X6ceOCZ9+AfOno^@M@JYjrs zuPq;sMsBV!wW>4Q5Ic^8+PH=wIWu5amUy$?+~i7~+S1GMd*n&;A7(q3jvoD3%+?bL zpKj8|c(Pdxy(2o7HQy>rT_bOd-}Ir~tN9XFhzaZESgg>Byow^Mn*xocR+3H^NKbux``*SE&`Q7?b*Y#U^2y2Z+`MUt%UdWpC@3~FJhJ7)x(NX^+*)?#s zK2Nof8Q+Lntuh1f^1_U32U`6!sZqhbO`$zY!h>jtsXbR>A_cgN7&0aTWkQiEb z)El=~lX^Xfc2F!Y2PLy>&I%GRnX=gw(RU^HtMTf|lfHL)wN}`1VRCgpU!HuSE0q%a zpm*yR;fvkd#3PbAUj}_DtFgC{+DMs2k+OOFd_WTZa{D_zDR@^7v#>EHyRB@*A%0Gh zPB5U8)IUfb*)_1x!H4n*tKYY6x4At_9+O9xx_<2?>K9Bk#=LmCS!PRpf*S=>_!6ZL ze0udFBr}b9BgtIFre$|pvq~2q^;Vbx$Noh$Sayhf#F%qK42byEUbu~u$v!a`p>B6* zXwPF;RCd+D4jgf7K8m>Z%k1Q*_c0CXW%ClJjU;FW?&m3XSH9&{4y@Td1L@l#-=ul+ z!lPE3KQ7X(8)zQg3D)a#`n>}wt9hRtcEkd0;7|wy)+}$z>A!nlW9N^guiz z#yH^&mao9r5{~kPbnol8*K)hbCaBy-k^{`HY|ayp#GHkCUeIu8n$DPghJQThAb@V> zxp0eYVpCIvga#eE!v@NW@Z~OSE2fDrU#4OQ{waI@$2I?u|Nf(o6+D0K{}V)%0zmfP k-B$nm5dVJ>us6~e%n+>K7Sk!>0AMwfYnH#)TycB&Z)ZCDjsO4v literal 0 HcmV?d00001 diff --git a/assets/bevy-bird.png b/assets/bevy-bird.png new file mode 100644 index 0000000000000000000000000000000000000000..229ec4097411735c7b620287b3171479504a706e GIT binary patch literal 13817 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 F{9n4nR?z?e literal 0 HcmV?d00001 diff --git a/assets/pipe.png b/assets/pipe.png new file mode 100644 index 0000000000000000000000000000000000000000..901b10c76108f81459ceea756ec64946f78f73bc GIT binary patch literal 1851 zcmbVNTWB0r7@iVZV8a8joDuA^qkG`knQt3#x;>a$h$QKb{mH&ddi~5jlC;Nk ztMl=E<#CG&FGHAE+16JXU4Yg~Us?Jdp^Z`N}Ms6d^}u zMpG!pIx3hMqEV*lPEI?5bgbu8O;d4E(ef5HEghr&CWBze9BZ!hXkQNQY`GrCfu*YL zc01F~W<*$1HPbXztgE`N078jY{FrnUKRUF_j}k_*D4MY?L$JLpydb6Z zqkg5JW@?87s+Pe?R$U;YDK2P+jjlMODsOO)`*8$VEyV_P5sRoUwxLd6-yi_htyEHt zp|N;gDiOuy7NpTH$WU}tT?x24$0N}UDKEDm%tJ{wfi)R&5{s}ZL}RO0vs)n}J)g;; z2P=fSev-sP150>`#N3vlZ+Qi4iiWE?wlv*>2I8WHaSvJ%%ym|VLZQp}1}ON3k(m4^ zm{H3Sp+_KP*CREq27XOOX(6pi(GVdBLv-106qSlK?ME^3DW5LcGGv``U1l*OOAIHM zRah2tCC9)ri$>N_2zRhfXn~Vracg}^&}P!xWPQ)+Oi7k9fDNJ;l;}#%EaV`d98(r`J)bXP-830V z{M@yOHRVRoyp{eJa*{9iuNp4uy22tfal0+kq|Kbk{m1T*dhAHKzrJ1PKzfVj_tYcd z#BCDti5k>y2li684PW>z9u6cBkdVNn;bCOUPAEJ?f}r72l4Ps4eAfSZ)Bd1XpzChg zRwp8@TNi0(rs-urv`B-t|9?g5w}94(U*j;TRXIsVO$J)e0P4-&=)M~mep_&usL5qI z&EY2fA8;S2Lzwn=8*iV0KgC-F`Q{f#qLEjB`|{(fOB>H7OQy>+rFR~A=J|gC+yGCZ literal 0 HcmV?d00001 diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..77a8149 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,110 @@ +use std::time::Duration; + +use bevy::{image::ImageLoaderSettings, prelude::*, time::common_conditions::on_timer}; + +pub const CANVAS_SIZE: Vec2 = Vec2::new(480., 270.); +pub const PLAYER_SIZE: f32 = 25.0; +pub const PIPE_SPEED: f32 = 200.0; +const PIPE_SIZE: Vec2 = Vec2::new(32., CANVAS_SIZE.y); +const GAP_SIZE: f32 = 100.0; + +#[derive(Component)] +pub struct Pipe; + +#[derive(Component)] +pub struct PipeTop; + +#[derive(Component)] +pub struct PipeBottom; + +#[derive(Component)] +pub struct PointsGate; + +pub struct PipePlugin; + +impl Plugin for PipePlugin { + fn build(&self, app: &mut App) { + app.add_systems( + FixedUpdate, + ( + despawn_pipes, + shift_pipes_to_the_left, + spawn_pipes.run_if(on_timer(Duration::from_secs(1))), + ), + ); + } +} + +fn spawn_pipes(mut commands: Commands, asset_server: Res, time: Res