From 64ba1b9f87cbc775a57f64ae10875cbce9edfc76 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Tue, 1 Mar 2022 14:40:32 -0600 Subject: [PATCH] started audio library; theming --- run_tree/assets/images/background.png | Bin 0 -> 561 bytes run_tree/assets/images/spritesheet.png | Bin 9756 -> 4364 bytes run_tree/assets/sounds/knock-1.wav | Bin 0 -> 44162 bytes run_tree/assets/sounds/prompt-1.wav | Bin 0 -> 54874 bytes run_tree/assets/sounds/walk-1.wav | Bin 0 -> 2420 bytes run_tree/scenes/quick_save_new.scene | 201 ++++++++++++++++++++----- src/build.onyx | 2 + src/entity/components/dispenser.onyx | 2 + src/entity/components/patron.onyx | 4 +- src/entity/components/player.onyx | 2 + src/entity/editor.onyx | 2 +- src/entity/manager.onyx | 13 ++ src/entity/schematics/background.onyx | 33 ++++ src/entity/schematics/player.onyx | 4 + src/game.onyx | 4 + src/sfx/audio_manager.onyx | 98 ++++++++++++ src/sfx/wav_file.onyx | 130 ++++++++++++++++ 17 files changed, 453 insertions(+), 42 deletions(-) create mode 100644 run_tree/assets/images/background.png create mode 100644 run_tree/assets/sounds/knock-1.wav create mode 100644 run_tree/assets/sounds/prompt-1.wav create mode 100644 run_tree/assets/sounds/walk-1.wav create mode 100644 src/entity/schematics/background.onyx create mode 100644 src/sfx/audio_manager.onyx create mode 100644 src/sfx/wav_file.onyx diff --git a/run_tree/assets/images/background.png b/run_tree/assets/images/background.png new file mode 100644 index 0000000000000000000000000000000000000000..d8e1a10320cfc8def7a45cf8e34c44b72312a17c GIT binary patch literal 561 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 literal 9756 zcmeHsc{r5s_y3GFL_*0vjchTDF_szo7GsaHhK3nTmSJWX+gMW(ku3@(Yo#cAvZW#k zA=#5PJ6W^-M(_Rleg64e*Z2F^_dVCl^*qmg&Uu}4UiZ20IrmJonTZ}NGcPj$0ANMw z>zD%oKi*>tp zw&J55xKY)K9qNU3i^av8U)*1-)ZPDnLKB6T)C<}hl|TQ!_{Qwu=3Y$U$4~VhA2-}5 zw_nPush6(}<>omcdijI!NprWI7bdz@I%`&gMH4Hph79>1?5n{!E!0F(T4e8RpTw@1 zN^fVRbR1DjK-(J3boi)6$7`UD=pY?gaJ%|bmDN8_mJ8MGw^lg71Kim6V}nx1#()Vuepz3NI)l%O(f_d*tPUD3K6ld?KhDOfTDlDpYjGC1zYz#Tv3;fzj zeA_VD9~jc>PgZ;F8#h%S|b-7j};u2KHul5R_T{@zJ*tvNnNLYk}AC^}9)%c+r<% z+(q-0)Cjtl`ky2~`4Q?cW{ob&B$rN8(%9PV?|4Tx51?j1mrCD*ck2po6W8899a9Qg zXIbL?`dHaF$XFxB+U|(x3HBS16DY{rETU<&3fuB|Z~(ynx_5UC71#QGKX}zF zJ)gGxU>R|~rMGCX1Q*y9ZcreISXh&5R|(7>fK)nEFKj3;zS<5SVEJ5JNQoa3%1L!7 zoMbHIP+B|IQ#HJ^!}WerhhL8UgM7F@nGQtqYa7!qchU1YFCSi~eNkW3z{gt(;RLca zZ6$Ow`rU8YW3M!8{`wjc8h^?A`#$SLg!ZNYq5kaxV`2J-;Slzq$50hiT+|QcJRx(K zWwBq*`{9A@xFa!XJT<%@Y-{|8%AOfUUW7cCF-Wy-U%Bhme8}40v>3uK43!li(wZH@_x0?G+-1!*WdhhvCFZrzffTso7-e%*{@YEw= z)>{B#aS`c*2g%r_Po${kOKL@nPBB6~h{M?OwAyXYk_D0ec3*h9>>v%4wwCWn{|m~! zk%wn$!kLGnSB)0pjLb(9-+in=cbV-E+iv>TkobNy5pRUTMvJo!v^fJb*G|&5dwjb0 zioBRUXxn|+=Mq!$@JCS2TZP>C$)Pd^O5yph-a0dAdapri8@mTuo0>ciA};IB`G_S= zm<{u}y}W|V`=%AskE>P{T(lhQ;fbJ=a_zSf9_smUJ7rKIk0^9pJ0jT8dW!-Fb`rXDOh`y5P9(_ zn5)c@s|cH-W1vI3@p!x3ZX=Yyc3%-wgyCd0W}OvCUiLcEm&KYw2}H*Wy{WE?E$hya^f`3tF@!5AWs zCZl+x*OXjE;(d!Y3uZE^Q6&;|#nBfjn|q7)ZL??$<_;VEF8SlVN0I%f9f_YMOMK?* zu2QUp1}3s7Pd0NE_Vle5EErCeZqfTAvWxC{l;lC!B_RFNN4La%H?NkN#@?wuUrRq0 z*UA~IV8<@?_*3@Yb-F~FS$ofN(zXk4rjBTZ8}Ku+a5g&k`zLo7=@T;0ORvtyP*lWl z%1pj=e%;@!9Za~AbNs*YbUKkifn5ca=edU&N6%`&DZ1s;!SDM($~p8YuI18(P#d(sNj9SjC(6 ze}8yVEb%CNnFCn0TZ6^HX)oEh)piSLwOW+3p9y9Pg#)Z;Q@M`VcKl$CkPaSgsJeW@ zT;S%#nU1|!|vzc zbI6)A?6j6KVBhy2hA-x4ce;D$E;@#%^43c4QEH~XP1;*61Jwq$HzoVsz z$FRg=@TNrp<93<0o7)+0*VUHtdbV_#<%OL~7dm70uHHpvexiSU;?}^4%d;(gh>^+O zSOrCSn)lBG=jroh1UWc$l?v1~t~|)}Of!aA3OqM|#d=4Wdy`SfUIcccd{6yiYjmH@ zaj9LO{UE(q4}n4Jt4|^Jr`{^FbH(DSdn$X=c>Rn|mcxg^pME%H6lw+TJ7)i|(<0g# zKA4cC=gx|aSD!8U+;>&O?b8jtMHR}+>>TC5wTTRebLF2FT7bdl1c>*T_;lADPYlh! zh#JQ7C<)f`bW_+W@a9H$pr^ytUAys@&Us3}hFGsX5iz$trv$rIBfFoqkXCv%#_rm! z^$O{QLiMYTyyr{4ZYq6q^s!MF+eUoqhz>DXBR)JB)!F2&klJM)G2}^AtdvWjHa1sr z+S+C)ZS6mL8EOZULAkB0-(<#h?I7Pk_bi(wyHAT*rqqp?@A((SwW7=<%VsYVy1C&v zee+BF^j{((z6}w9*$ysuKg%+> zz4XlI@R3cjKcQWG1gy~?&y#NRF5`^IH$KPB3x+=2}%ZuCgEyM+dB_EL!nK zfr4k`s+!N$6WElk4F8^7V6;&6GymOp)uS&Og3h&(u4E}`Nu3<9#yMNU<;PHCg^y=? z99#U02qR-fDNl+JVxefIf?_FRCgBK^loJz&j(Fk2t1yo@-+NHc6CUnV#fNsT8%~(F zT%-|hra9XQstH+E->S8fRF_@!Wo`~{=WhOaib1PJBWFtKYxAvcC16BHL(0extJ#J% zv6=GJld3dhQZ*3@gD;#7 zpylVM5vHH5U0hv!wo$uh*FE(0m^KX|`K~tk3$^Fu#Zh}pYhxp%Gu~4gjlnx%rTsm< zsl6uvprY>Yjdpg&l0Z&aSDcqBc&Vly48mbl!B+CdP-AaxtQ$^0kbt!aG`Zj$=M#62GYh8upqcJTp9|| z^~d?az-r7O6#~WuX|8kbcL?f}D%g!g@bZ3>_@dnSk>q;qYFdLrk<2-j}2b22oa;MJFdE2wV~E z0zoTa?Z`zRKZ3#FJJ$^1Q&3gSPK&RkWEWqi6s!Jm3W9L3zde! ze@PCf1xZbYN-X-YPN@LD#;Lg=wFy`>2~W6y$9t%P4?_YSTK+0;kjih9qK_j|H3AMR z{`Z=wfk+1y1h_$E15sHtKT_0r15|8_4{1>FM6Ot|Lf$x;`d*={-x``V&K10 z{QH6PepQK!K>5@ zlefMN5de@DKKuav^VI#QgN!7Uu`c5jEs$13?A4WIN9qs{N!OaBjrTn4n*qPtIV=W5 z#*y4WhwYqII2$(rz(#}8(Y!$YC4bm1*4`?hVdcQqeTk^ze7%a!mY(3lVI~x&!NE+I z_%H_Sm2H}!R(1gd3RhVNh8skg$&_)VJXY(>&E_i9u}fyoJ*o91e<(4`@O@O`V@T8% zLt}f&XkQk>b*Z*aZT|UOTAy6S>9mytF&i~Gq^tCF+vd~qy7dL$QE@Q%Wq{BpU!Mcv z69}+b;-%$HJ{|^#^-_6MD7hX=Ov#!mZ!aKB0M7+)kH!AN$c@nHJi=y9yXu z&X&Wa2DT4m^dIao#V_1jNiJxLv^SNryX^Cv@p1*J!PU%GOg@aX{BBCLYHFCVul$K~ zAAEYq&~9WcYcHc(3BA(RYQx6|ILXaTVaW4M1h9#Od*Rp`I#kPlq>>lLvl&?cu3f7Y z3uptL*3hz?x4;1Cy{!a(krg@hXTLn0+2GYoh2BS zjrDZBt)zOw9kVG?Tq;QCCTQw$tr0V0y*THeW&xI>y`q#i`jaZJ185v7>0fFG@HRS zK79Lm_o#6d3GqBGD+hBogQ=Tj((&V2@H3fOOdxZE-FCcMl1_>HrZgcU`!%Mklj}y9 zdfi5_e)=Y5qDJ<9N4(_miKB+Avy$LU113-&SN(dc&ov>SJjWhDqzQUdiX3H&9?{m( zxG=K)7=dVHz5nsNyS)X+R^v#k$07?@HT{R};swc`Q+hMz93t8#om`-I=W8Y+9i>05 z<0i+;2dhr|G$P(w=^&$A04pPknax>@ID3FDP#p97( zI=r!r)kSr8->zevBGg}oQ^JG5YIF>49keLVN7DEtD6?-v5o$oW~7inbWyN# z@$uobR~+xnymQ<9+w1piQvybVBb)N}uwbjGe~skHx~`>2e%UWtJw)Vzr_KpR;cLo#Rs zfW;BS&=A_AL}|))=27{+RSh!(CnSnwF9MeB89l*0qG=EvTDu9W*t8;gRVO7!BzIYZ zRIXhQ>9lxZ2$*?KDl@k)^JHP7#;=>4h`48JF{klVvpwNR>U8H99mmLu@N9;ZH`PBy zuLx|7RZPoy9-}{y%?bL@&v~-o=hcwtNMjw-4fTWIGA~zv{TClW$O;V|5w}8$sTYgHgWd<38lvCbvppmBN*^qpzT-pxqU5yfJ^BT%Yp0(>qi7i; z;%-8P&aMXJOGMi(&3f8)AsuKE0#^F%er}lP14EZr?BT{u<;8qKG?(XD#1Uz}(O>tL z)7VG$2Yg3d?nWXgqT&qr;=}hOfwClK zAR|&-Lhjx%j}U{?1+8P(-sBqd_c_`ug0AF2q5>EhQ^OL|$eMWxL=7ciC(;yPn)&sO zM~GVJ>Q5g`Nb}t3Po*l?ams!)`CLa&3~;;}fBam1bh|^N8y-Bm5ViWl*q!hFqoK{t zR`y_iFqrc5S>(=jRe+U4R|y`WG#;xJlVTqW8^J#MU^LhoTn)?Qnp!oWn^!k`#K&x$ z8-&kbL2lWw8kuV0&UcWmz4apd66 zD2>W!t_#a%$ioEQ=cI3m4~Xh^IS{FP=f+ z_&;CIPSigt={}Xr-0hbkwYCS4NHV8^A>swD8i$kXLgEa=D!LR*M*u_luV0C72!%zV zHe@tK!I@hmmC?x4Rv{0iOm`~LvVr5u#kLOMYN8YdnX+C>WH`q zTN_7S$qVHY1C5Q8yu5Fn$UU*zqg4y-S?}SpkVdQe{+j(SxS6yXK&iB51j1CZc ztqTQviUScRMApuqc;E>uw@lrEJ4kkFC0HXw=hMtl6Bz*?Kk)9)NUq9@geNf#+|YM? z={zq4-NMo+!9Z41OHAUAXrhy|H&T*$^C40l%{L=vJLQBpZg$f=>O4mKsoDQV3$OB& z0wmW*>@f&r***4L z%JZzGfr58)|lO&EgP{HzqYb5pgu0{X_kvGbMV;4#?I z6q`HQwXoY&_-IQ5pi6uXTNz2}s&1!tQqQ;o^k!e)s;{bE z?zK7=e6TODJ4VmlmG>O&;-l>{_-sK^_cchQ>ia7eoI!SRdVkUMPLLm9`FSW#sqbM> zn^E$&TL;J&>lJEVty$(VGQ<6=F^;Vh`IDFqwmzjO+FLu+IrC%!*sEuKsf6=^;=0%H zo?qY6PiGv9bv@8+9jcjgsK_9m-ZQi5GYfn38Z!@UK@{6E_SN7o5%}HDhCrFxUK-i$ zaPH?>7_9vG0NXi+(NB?dNT}Z9lct^E7)_|GS2%Soyne4MIe>fq6<$ol^@@hw*`>W@ zlaYhxJN}!jg8?1un~AGcoCy|Vc7v6`#&t#0=p!QmpJ!L+AsyC1^LhNiEA2^qdxj<+ zwFS;|ij2r(rxTe*SMpge1%3A4DOOh($$LWys#vKVuBjRwV);4h%l*lB*#Glad2a8; ze!H!W_Drg0Wlturt+uT`cSpPQ%_n&Jk%JbW-Od@ajz*vOK8d`lA6;$Sb!rv+=XACQ zR8y=RMn+EyQOTJauZ)cYl=jE+;jf{?^69?zSI6O(w%W55zAi0{v}Z9^bf>mnV+#H* z^bQPe(8H(0aMr#|B{=j#({fIHrgcVs@>q%tE?R7>+_iKx=4L5MqZa_!Mlz^Laxd%9 zh3>~YJAPFzj;J%ewCS$-G$r}+h=|wL{DI?I_ogc4E3HobwZ6r}3?2^r!ftiRoErWcPcm9nqkv4K)Ve{TsahdkAE8aC@U%>&iMp}R z6qzq!W`LM_uhGnj=i?sRiaZ$8LaFoaUKa}=ToN3clreg>7LZ;%;(Xq$V1;AUdQVvr zznK!&<7;orvvMD5Z6L8m`$UkXV)|Qo{CE4%VCr|_D$Lm8XKQHBMKVuauwKFu=}<2M z;(_l{;WUunFQx+(7a@_SRK@CFHma=BY02jsKV2tAIN+qjmPvDH6cJWJkbR(%m>f!G zxtc?l=_3a3vQu&L8|y;M`@;3@RqpJfz!|P0AivrbA;EdQpiG|ukDB2c z*277yB4I)WVp4SHPVII*dPQeFC)J?!pp1<(Ot_51D;8GXMq?t5vffQH8Rrd~3!QP5 zq;6@PN+STZ{$|5%2`S)F>zTFNR(x;AF#|Lf1VxQ)n+)KtwF~g%!GG*a|L+aX^&9}- Y@q0T3=!b);M@9fj*F@);*5!!*2mjQb!T@;!wOuu_8rU9Exl47I$}Oi@UqKyAz_jJNCby zd3V@NC_U|WzVo+_GryDB2uXH!_qwm=e&4iCwaS(IuI9Lg>Ehgr87|Gbl=kv3ms4JudL`-ApRa~p8+*-pefV|Z#-JPO zjUR4C-|T+t<*g34AKq?x=f<6echBGb^4`&V74Pr5U+Tf82L&E3dzj_XtVbyxPkiir zGUSQx$@foRJZ<~z*0ToBPd%^vV%LijFW0`z`D)Iqc8o^jaf#R zIoOOezu_)&RrsxZUSXCHCJq!|i!G(IQh9l!oK=~u2#y|(dyYEJz0Sg}`L1yHK=(^` z(~x5!r9zj5?v5!EyCgPs+?Y5muB+#+r>^&)_ha93Us`pns;OPHTUsrBk6y@FU?eez zm~YIM+!^jOejT4t7%%8TC-ItCP1+*ml&8vq(oMOg#Jp}FaV4Vqo9%D%N6v{%6g4pF zbySP!)6wN(*2iRuofvDzeiwHuuBK;)C!cqw*Xiryd+4jH?o$hCbF>isNBxmr&)92x zWX>`jTu<%}R}=RthcF30tAlt^EGMm&QprQ*mvSRzzf!>Qi$idBc3yUtcdc|K$NhTj z{wkz3ep;EBr7=lk2gW{)tsl21E}v(*hxc~!Uh#C^&ypagCTl>Mz}ws>>VX)XE^`p;E)K(UICY(D}ew-L>A8 z(%sK}$6YyORY>B{o}pJmKMkwz-Q~^Yo9OfSTB=8IpMKFey}f=~FJa6zWV5q*-Ym(@ z;}pI#e~vFH%oQZDqj*LvF3plSxvhLmE~rdZyh=02K1WXH80RZz9oO%!wC(}!yYA0J zmWPCdeiwQsv}oA$Fi+UmiFPK+6h0*Uet4zC%Mv@2bWCzQ$wgmDb(U(Vt+f5PZ=>{Q zdQD>;9=9Im1+zFeo%3*^FT1_G__EZixvzxR?Oq>y{ZYi^h?t1RZ+5)N6gf2VVPw^) zRZ)qeyG5UmE*>)@#vAi>?9SLsaf9RT#Z~ky_Q>9L-oxJ9zR|v?zG~`9)va~Zj%j)I z(fU)pnz7t)nC;AiW;SjpcNfo*xxB_V5w-{^#h&6hv5+)gdL~tsm*9EQLfN6DcJy+b zb9{t*`N&zpHP_{HHE?fmhlP9_av&sAXy4F_p#{Ungf-B9(~{}kaRmz)V~wXq6?3u4 zam~5yTxz}-uHi?*SmCkoxj0|c#75F)DY4vHJ}hTb1}ayTVvdQ9XO2qF`A(m+zH6P! zta!9tn@%Ci|77xxuP;liBzgP7C1bP+RkN8 z-C57I%Eh}Ix!1bokgr2Fgg8Q*hHeaXhBXV@6y{9SEYZe9j_{`88^YzpO%kt7EGB7~ zWL1)`++i*w-;+PiXT{GsE#wgUAF-<9wuLr^DBe#y>mPIJ5D>YIeR;gIy1Psx%T6E{;hkvJ5fl> zkc}a7Xv5GIp=xN&u(@FoVHFZhN%SC5iSUu(SHklo?wj~n;&e$mC)trCG-

Ym(|o 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 Mz=tdF|JN1xUlK9j=>Px# literal 0 HcmV?d00001 diff --git a/run_tree/assets/sounds/prompt-1.wav b/run_tree/assets/sounds/prompt-1.wav new file mode 100644 index 0000000000000000000000000000000000000000..4214420a359d536722189fe334f7bd498467bb5d GIT binary patch literal 54874 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 TpC0(>fuA1u>4E>hd*J^8@|sWs literal 0 HcmV?d00001 diff --git a/run_tree/assets/sounds/walk-1.wav b/run_tree/assets/sounds/walk-1.wav new file mode 100644 index 0000000000000000000000000000000000000000..eb822ab625efb518372e5ffa31ec33ecb59ce4a1 GIT binary patch literal 2420 zcmeHIYgClg8h-cp4a0ncAPg4;W)v0if}*Jv2&r@oJtvbc9tkyF7|X1z(`k{Wo@2*V zUOHIIl}i^|NSUUY5^5c_^FtKxmxEjag)}vB7|=n2hTHe;=e!>tR%>iXz@=4_<%ibwlTDHB+uY7ZPRz+sz%5STyGA@al zvf2|@E`Q(a#;lvgw~{@l8?(Iu&HrwB%@@~E+m$QFic)p1wZ@hjus*P)cXi0w(7f;o zeZJ{ykBX0WIj=fjah-FuxmsLDT=QHN&VJ6x(P>e`BE5aKL?nb4hPoVo555=_8JHQc zK|ABG`z2VilucAB1C6J<3OamknZ7fvQ(LNrtA6yh*nW!jO=_Fnp3{-r zncuZr-)|g{dyr47M7ENos+MDx#eOd9Ve1tCv;GrpJ8i1=l(s=TrQOv6?9ujq_C9ut z-K`zb-q&Vm4(*g}v8|u2*#9|ypEcL&w0_~2=y%+bZmCfhs4dD$#i8sF$)b|}N}+TZ z&%=Qea)nHhFismAjfF<4(a#{mtykzJ`XRkY-^(b{59-DGdA(L|)TJI`#2G2ZGsert z+s22+0ppx;!{{`EWt>cw>2kh&L#~#aT4yrhX(F+n^lUKjrq+r%MpL0l8f zd{_gOzDkS|rwn5ZQ3feaB}~y2Lp1UFMNuri6!~JESSDWNy;DV!h!-y55dK1vkDACs zKhPDbq6>7C_H(W^w2&rK6y3%_yoJfoP%87}0y$nr$WFs;TxGb8cEcgZ$PBqs7Rv8r z0Fsc6btpn9tCtAk{jn5J4^SdaqQ@zd>v)GgremBfT%?JmqDXi|tTI>0Q!Xlg>O<;$ z^J!ovy*x*nk{lU?PSik~^b7 z=N@%Po%>`*82WRUk}#DcUceHpMILtHFwWo->fwWh9MqpiP!fCfB+a61dX>4~qSf>s zZJ^DxmA27mw43%&Ar;X+c6L9HMf4@@<=I`dgFc~rj@wAk7I@j^oA@5Jd|JwI9;Z;u+V-)+e0+dacoQ#S4xg?^ z@i0ar4l!`S$?q5pMm)w~JpO=b_%r5VAzsJduo~;J1v|KZ-{1r;GH)H4&;h|YL#Pku z?@t35G32613ZtNIEkGyQ(8_vR*^zcWwL}(P>CF*+IdTA>fg!Aa1dXHw8bzc3hf(}1 zfoJ1s7!9StG?3Y&xxx^#bA>v7WQVVCUB~e+e2x$CK33ulyo~vn&6=O$x~4Op#53HR zImp5SEaEEOX%*w3CE!AV>|1!{1eS-tp)RSNQ_K)(B?#({j#hO@pN zbqTC$2+x|12a%P)m3eUsS5e*V^lA2|1jiU9tnVaF<1F)+q8ydni%XoRmbG8y-dy91 z*KvdKLpN@6$L^1N>*i=i_n>E29rxlE+^pV%1~lRh>uEwWyVT0nw6X7<=z_tw&U{uW z?4Td(_UAs>DS&!$r9s@0U`7a^SqInsOPI3`UNvKSb94~z>BW2P%wc0DD>GV{S78V< z3A@67mh7a?nL8OBtfHN@nDG4y?yZ`7+d1BZxwDI5@)+F}NSLqg6y1aQOg5j!_n@+d l9#~k>FVVAh@3Uu@srhI8%zgiF-2#5YaDSHHXaC=U{{kfo{L=sc literal 0 HcmV?d00001 diff --git a/run_tree/scenes/quick_save_new.scene b/run_tree/scenes/quick_save_new.scene index 516a9a1..8c8df20 100644 --- a/run_tree/scenes/quick_save_new.scene +++ b/run_tree/scenes/quick_save_new.scene @@ -1,3 +1,15 @@ +[Background] +id = 100 +flags = 0 +pos.x = 0 +pos.y = 0 +:RenderComponent +layer = -1 +color.r = 1 +color.g = 1 +color.b = 1 +color.a = 1 + [Wall] id = 10 flags = 2 @@ -29,10 +41,10 @@ color.a = 1.0000 [Player] id = 12 flags = 2 -pos.x = 318.3422 -pos.y = 217.0257 +pos.x = 312.5422 +pos.y = 271.0389 size.x = 16.0000 -size.y = 16.0000 +size.y = 32.0000 :MovementComponent controls.up = 87 controls.down = 83 @@ -41,10 +53,12 @@ controls.right = 68 controls.interact = 70 controls.pick_up = 71 facing = 3 +velocity.x = -0.4420 +velocity.y = 0.4767 :PlayerComponent holding = 0 :RenderComponent -layer = 0 +layer = 10 color.r = 0.0000 color.g = 1.0000 color.b = 0.0000 @@ -119,26 +133,6 @@ color.a = 1.0000 item = "beer" max_timeout = 2.0000 -[Patron] -id = 22 -flags = 3 -pos.x = 392.0000 -pos.y = 408.0000 -size.x = 16.0000 -size.y = 16.0000 -:RenderComponent -layer = 5 -color.r = 1.0000 -color.g = 0.0000 -color.b = 0.0000 -color.a = 1.0000 -:PatronComponent -state = 0 -order_item = "beer" -order_show_animation = 0.0000 -holding = 0 -consume_timeout = 0.0000 - [Wall] id = 25 flags = 2 @@ -154,12 +148,12 @@ color.b = 1.0000 color.a = 1.0000 [Wall] -id = 26 +id = 27 flags = 2 -pos.x = 424.0000 -pos.y = 592.0000 -size.x = 816.0000 -size.y = 32.0000 +pos.x = 8.0000 +pos.y = 312.0000 +size.x = 16.0000 +size.y = 592.0000 :RenderComponent layer = 0 color.r = 1.0000 @@ -168,9 +162,9 @@ color.b = 1.0000 color.a = 1.0000 [Wall] -id = 27 +id = 28 flags = 2 -pos.x = 8.0000 +pos.x = 792.0000 pos.y = 312.0000 size.x = 16.0000 size.y = 592.0000 @@ -181,22 +175,86 @@ color.g = 1.0000 color.b = 1.0000 color.a = 1.0000 -[Wall] -id = 28 +[Furniture] +id = 30 +flags = 2 +pos.x = 136.0000 +pos.y = 336.0000 +size.x = 16.0000 +size.y = 32.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 +:FurnitureComponent +furniture_type = 0 +taken = true +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 32.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 + +[Furniture] +id = 31 flags = 2 -pos.x = 800.0000 -pos.y = 296.0000 +pos.x = 184.0000 +pos.y = 336.0000 +size.x = 16.0000 +size.y = 32.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = -16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 + +[Furniture] +id = 32 +flags = 2 +pos.x = 160.0000 +pos.y = 336.0000 size.x = 32.0000 -size.y = 560.0000 +size.y = 32.0000 :RenderComponent layer = 0 color.r = 1.0000 color.g = 1.0000 color.b = 1.0000 color.a = 1.0000 +:FurnitureComponent +furniture_type = 1 +taken = false +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 32.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 [Furniture] -id = 30 +id = 40 flags = 2 pos.x = 136.0000 pos.y = 256.0000 @@ -210,7 +268,7 @@ color.b = 1.0000 color.a = 1.0000 :FurnitureComponent furniture_type = 0 -taken = false +taken = true sprite.sheet = "./assets/images/spritesheet.png" sprite.pos.x = 32.0000 sprite.pos.y = 32.0000 @@ -222,7 +280,7 @@ sprite.color.b = 1.0000 sprite.color.a = 1.0000 [Furniture] -id = 31 +id = 41 flags = 2 pos.x = 184.0000 pos.y = 256.0000 @@ -248,7 +306,7 @@ sprite.color.b = 1.0000 sprite.color.a = 1.0000 [Furniture] -id = 32 +id = 42 flags = 2 pos.x = 160.0000 pos.y = 256.0000 @@ -273,6 +331,48 @@ sprite.color.g = 1.0000 sprite.color.b = 1.0000 sprite.color.a = 1.0000 +[Wall] +id = 35 +flags = 2 +pos.x = 192.0000 +pos.y = 592.0000 +size.x = 352.0000 +size.y = 32.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Wall] +id = 36 +flags = 2 +pos.x = 608.0000 +pos.y = 592.0000 +size.x = 352.0000 +size.y = 32.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Wall] +id = 37 +flags = 2 +pos.x = 140.0000 +pos.y = -142.0000 +size.x = 16.0000 +size.y = 16.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + [Tap] id = 14 flags = 3 @@ -290,3 +390,24 @@ color.a = 1.0000 item = "beer" max_timeout = 2.0000 +[Patron] +id = 22 +flags = 3 +pos.x = 319.2968 +pos.y = 422.7386 +size.x = 16.0000 +size.y = 32.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 0.0000 +color.b = 0.0000 +color.a = 1.0000 +:PatronComponent +state = 0 +seat = 30 +order_item = "beer" +order_show_animation = 0.0000 +holding = 0 +consume_timeout = 0.0000 + diff --git a/src/build.onyx b/src/build.onyx index 6264c36..1485f53 100644 --- a/src/build.onyx +++ b/src/build.onyx @@ -19,6 +19,7 @@ MINOR_VERSION :: 1 #load_all "./entity/components" #load_all "./entity/schematics" #load_all "./gfx" +#load_all "./sfx" #load_all "./utils" #load "stb_image" @@ -26,3 +27,4 @@ MINOR_VERSION :: 1 #load "modules/opengles/module" #load "modules/glfw3/module" +#load "modules/openal/module" diff --git a/src/entity/components/dispenser.onyx b/src/entity/components/dispenser.onyx index 2d3698b..512e7d8 100644 --- a/src/entity/components/dispenser.onyx +++ b/src/entity/components/dispenser.onyx @@ -49,6 +49,8 @@ DispenserComponent :: struct { // This should dynamic... item.pos = this.pos; item.size = .{16, 16}; + // if only item.flags.Carryable = false was possible... + item.flags = ~~ (cast(u32) item.flags & ~(cast(u32) Entity_Flags.Carryable)); (item->get(ItemComponent)).item = dispenser_comp.item; scene->add(item); diff --git a/src/entity/components/patron.onyx b/src/entity/components/patron.onyx index 41e2f6e..90d54ef 100644 --- a/src/entity/components/patron.onyx +++ b/src/entity/components/patron.onyx @@ -90,6 +90,8 @@ PatronComponent :: struct { if interactor->has(PlayerComponent) { patron.state = .Waiting_For_Order; patron.order_show_animation = 1.0f; + + Audio_Manager.play_sound("./assets/sounds/prompt-1.wav"); } } @@ -129,7 +131,7 @@ PatronComponent :: struct { r.y += 2; r.w -= 4; r.h -= 4; - immediate_set_color(.{1, 1, 1}); + immediate_set_color(.{0.9, 0.9, 0.9}); immediate_rectangle(r.x, r.y, r.w, r.h); r.x += 2; diff --git a/src/entity/components/player.onyx b/src/entity/components/player.onyx index e552b9f..0501ba1 100644 --- a/src/entity/components/player.onyx +++ b/src/entity/components/player.onyx @@ -90,6 +90,8 @@ PlayerComponent :: struct { render :: (use this: ^Entity) { rect := Entity.get_rect(this); + rect.y -= rect.h; + rect.h *= 2; immediate_subimage(^Spritesheet, rect.x, rect.y, rect.w, rect.h, 0*16, 4*16, 16, 16); } diff --git a/src/entity/editor.onyx b/src/entity/editor.onyx index 753bb8c..17cb769 100644 --- a/src/entity/editor.onyx +++ b/src/entity/editor.onyx @@ -79,7 +79,7 @@ editor_update :: (dt: f32) { for scene.entities { if Entity.get_rect(it) |> Rect.contains(mouse_pos) { selected_entity_id = it.id; - break; + // break; } } diff --git a/src/entity/manager.onyx b/src/entity/manager.onyx index c205a23..7f45403 100644 --- a/src/entity/manager.onyx +++ b/src/entity/manager.onyx @@ -143,6 +143,8 @@ Entity_Manager :: struct { query :: entity_manager_query; query_by_flags :: entity_manager_query_by_flags; + count_by_component :: entity_manager_count_by_component; + query_by_component :: entity_manager_query_by_component; create_component :: entity_manager_create_component; create_and_add :: entity_manager_create_and_add; @@ -339,6 +341,17 @@ entity_manager_delete :: (use this: ^Entity_Manager, ent: ^Entity, delete_from_a raw_free(entity_allocator, ent); } +entity_manager_count_by_component :: (use this: ^Entity_Manager, comp_type: type_expr) -> u32 { + count := 0; + for entities { + if it->has(comp_type) { + count += 1; + } + } + + return count; +} + entity_manager_query :: (use this: ^Entity_Manager, area: Rect) -> [] ^Entity { ents: [..] ^Entity; for entities { diff --git a/src/entity/schematics/background.onyx b/src/entity/schematics/background.onyx new file mode 100644 index 0000000..0d294c4 --- /dev/null +++ b/src/entity/schematics/background.onyx @@ -0,0 +1,33 @@ + +use package core + +Background :: struct { + #struct_tag Entity_Schematic.{ + (scene) => { + this := scene->make(); + this.pos = .{0, 0}; + this.size = .{0, 0}; + + scene->create_and_add(this, RenderComponent) { + comp.func = Background.render; + } + + queue_assets(^Background.assets); + load_assets(); + + return this; + } + } + + render :: (this: ^Entity) { + size :: 10000.0f + immediate_set_color(.{1, 1, 1}); + immediate_subimage(^assets.texture, this.pos.x, this.pos.y, size, size, 0, 0, size, size); + } + + #persist assets: struct { + #tag "./assets/images/background.png" + #tag Texture_Wrap.Repeat + texture: Texture; + } +} \ No newline at end of file diff --git a/src/entity/schematics/player.onyx b/src/entity/schematics/player.onyx index 40490f2..3d51622 100644 --- a/src/entity/schematics/player.onyx +++ b/src/entity/schematics/player.onyx @@ -41,6 +41,10 @@ Player :: struct { this.size = .{32, 32}; this.flags |= .Solid; + scene->create_and_add(this, SizeComponent) { + comp.func = (use this: ^Entity) => Rect.{pos.x - size.x / 2, pos.y, size.x, size.y / 2}; + } + scene->create_and_add(this, MovementComponent) { comp.controls = controls; } diff --git a/src/game.onyx b/src/game.onyx index 242854d..fb5f832 100644 --- a/src/game.onyx +++ b/src/game.onyx @@ -16,6 +16,8 @@ scene_canvas: Canvas; Spritesheet: Texture; game_init :: () { + Audio_Manager.init(); + scene_canvas = canvas_make(800, 600); // This process of queueing the asset bucket should @@ -34,6 +36,8 @@ game_init :: () { #local quick_save_file := "scenes/quick_save_new.scene"; game_update :: (dt: f32) { + Audio_Manager.tick(); + if is_key_just_up(GLFW_KEY_F8) { debug_log(.Info, "Saving to '{}'.", quick_save_file); scene->save_to_file(quick_save_file); diff --git a/src/sfx/audio_manager.onyx b/src/sfx/audio_manager.onyx new file mode 100644 index 0000000..e7aa85a --- /dev/null +++ b/src/sfx/audio_manager.onyx @@ -0,0 +1,98 @@ + +use package core +use package openal + +Sound :: struct { + buffer: u32; +} + +Audio_Manager :: struct { + init :: () { + map.init(^loaded_sounds); + + alGetError(); + device = alcOpenDevice(null); + audio_context = alcCreateContext(device, null); + alcMakeContextCurrent(audio_context); + + if alGetError() != AL_NO_ERROR { + debug_log(.Critical, "Error creating audio context!!"); + } + } + + deinit :: () { + alcMakeContextCurrent(~~ cast(u64) 0); + alcDestroyContext(audio_context); + alcCloseDevice(device); + } + + get_sound :: (path: str) -> Sound { + if loaded_sounds->has(path) { + return loaded_sounds[path]; + } + + wav_file := load_wav_file(path); + + alGetError(); + + buffer: u32; + alGenBuffers(1, ^buffer); + if alGetError() != AL_NO_ERROR { + debug_log(.Error, "Error creating audio buffer!"); + return .{0}; + } + + al_format: u32; + switch wav_file.format { + case .Mono8 do al_format = AL_FORMAT_MONO8; + case .Mono16 do al_format = AL_FORMAT_MONO16; + case .Stereo8 do al_format = AL_FORMAT_STEREO8; + case .Stereo16 do al_format = AL_FORMAT_STEREO16; + } + + alBufferData(buffer, al_format, wav_file.data.data, wav_file.data.count, wav_file.sample_rate); + memory.free_slice(^wav_file.loaded_file_data); + + map.put(^loaded_sounds, path, .{ buffer }); + return .{ buffer }; + } + + play_sound :: (path: str, volume := 1.0f) { + sound := get_sound(path); + + source: u32; + alGenSources(1, ^source); + alSourcef(source, AL_PITCH, 1); + alSourcef(source, AL_GAIN, volume); + alSource3f(source, AL_POSITION, 0, 0, 0); + alSource3f(source, AL_VELOCITY, 0, 0, 0); + alSourcei(source, AL_LOOPING, AL_FALSE); + + alSourcei(source, AL_BUFFER, sound.buffer); + alSourcePlay(source); + playing_sounds << source; + } + + tick :: () { + while i := 0; i < playing_sounds.count { + defer i += 1; + + state: i32; + alGetSourcei(playing_sounds[i], AL_SOURCE_STATE, ^state); + if state != AL_PLAYING { + array.fast_delete(^playing_sounds, i); + i -= 1; + } + } + } +} + + + +#local { + device: ALCdevice; + audio_context: ALCcontext; + + loaded_sounds: Map(str, Sound); + playing_sounds: [..] u32; // List of sources +} \ No newline at end of file diff --git a/src/sfx/wav_file.onyx b/src/sfx/wav_file.onyx new file mode 100644 index 0000000..cfc5fc1 --- /dev/null +++ b/src/sfx/wav_file.onyx @@ -0,0 +1,130 @@ + +use package core + +WAV_File :: struct { + Format :: enum { + Invalid; + Mono8; + Stereo8; + Mono16; + Stereo16; + } + + format: Format; + sample_rate: u32; + data: [] u8; + + loaded_file_data: [] u8; +} + +// +// This greedily loads the whole file +load_wav_file :: (path: str) -> WAV_File { + wav_file: WAV_File; + wav_file.format = .Invalid; + + data := os.get_contents(path); + if data.data == null do return wav_file; + wav_file.loaded_file_data = data; + + pos := 0; + if read_data(4) != "RIFF" do return wav_file; + read_data(4); // Not sure what this is suppose to be... + if read_data(4) != "WAVE" do return wav_file; + + while true { + header_name := read_data(4); + header_size := *cast(^u32) read_data(4).data; + + if header_name == "fmt " { + fmt := read_data(2); + channels := *cast(^u16) read_data(2).data; + sample_rate := *cast(^u32) read_data(4).data; + sr_bps_c_8 := *cast(^u32) read_data(4).data; + read_data(2); + bits_per_sample := *cast(^u16) read_data(2).data; + + wav_file.sample_rate = sample_rate; + + if channels == 1 && bits_per_sample == 8 do wav_file.format = .Mono8; + if channels == 1 && bits_per_sample == 16 do wav_file.format = .Mono16; + if channels == 2 && bits_per_sample == 8 do wav_file.format = .Stereo8; + if channels == 2 && bits_per_sample == 16 do wav_file.format = .Stereo16; + } + + if header_name == "data" { + wav_file.data = data; + break; + } + } + + return wav_file; + + read_data :: macro (n: u32) -> str { + defer pos += n; + return data[pos .. pos+n]; + } +} + + +#if false { +main :: (args) => { + dev := alcOpenDevice(null); + defer alcCloseDevice(dev); + + con := alcCreateContext(dev, null); + alcMakeContextCurrent(con); + defer { + alcMakeContextCurrent(~~ cast(u64) 0); + alcDestroyContext(con); + } + + alGetError(); + buf: u32; + alGenBuffers(1, ^buf); + defer alDeleteBuffers(1, ^buf); + if error := alGetError(); error != AL_NO_ERROR { + printf("AL ERROR: {}\n", error); + return; + } + + sample_rate := 44100; + +/* + wav_data := memory.make_slice(i16, sample_rate * 5); + for i: wav_data.count { + sample := math.sin((math.PI * 2.0f * ~~i * 263.2f) / ~~sample_rate) * 32768; + sample *= 1 - cast(f32) i / ~~wav_data.count; + wav_data[i] = cast(i16) cast(i32) (sample); + } + */ + + wav_file_contents := os.get_contents("/home/brendan/test.wav"); + wav_data := extract_wav_file_data(wav_file_contents); + + alBufferData(buf, AL_FORMAT_STEREO16, wav_data.data, wav_data.count, sample_rate); + + alListener3f(AL_POSITION, 0, 0, 0); + alListener3f(AL_VELOCITY, 0, 0, 0); + alListenerfv(AL_ORIENTATION, ~~ f32.[0, 0, 1, 0, 1, 0]); + + source: u32; + alGenSources(1, ^source); + defer alDeleteSources(1, ^source); + alSourcef(source, AL_PITCH, 1); + alSourcef(source, AL_GAIN, 0.7); + alSource3f(source, AL_POSITION, 0, 0, 0); + alSource3f(source, AL_VELOCITY, 0, 0, 0); + alSourcei(source, AL_LOOPING, AL_FALSE); + + alSourcei(source, AL_BUFFER, buf); + alSourcePlay(source); + + state: i32; + while true { + os.sleep(1000); + alGetSourcei(source, AL_SOURCE_STATE, ^state); + if state != AL_PLAYING do break; + } +} +} \ No newline at end of file -- 2.25.1