From 16a11bb9e10ebac1eef1f51f315bb0d356635119 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Sat, 1 Mar 2025 00:20:45 +0100 Subject: [PATCH] feat: sound effects & working death --- CMakeLists.txt | 2 ++ src/assets/attributions.txt | 5 ++++- src/assets/failure.ogg | Bin 0 -> 26210 bytes src/assets/success.ogg | Bin 0 -> 25157 bytes src/events.hpp | 18 ++++++++++++++++++ src/main.cpp | 22 +++++++++++++++++++++- src/player.hpp | 4 +++- 7 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 src/assets/failure.ogg create mode 100644 src/assets/success.ogg create mode 100644 src/events.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index a53249a..ccc7b3e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -154,6 +154,8 @@ else() copy_helper("assets/Inter-VariableFont.ttf") copy_helper("assets/MartianMono-VariableFont.ttf") copy_helper("assets/sunset_on_the_beach.ogg") + copy_helper("assets/success.ogg") + copy_helper("assets/failure.ogg") copy_helper("assets/gs_tiger.svg") endif() diff --git a/src/assets/attributions.txt b/src/assets/attributions.txt index 46ba3af..20cc0f2 100644 --- a/src/assets/attributions.txt +++ b/src/assets/attributions.txt @@ -1,3 +1,6 @@ "Sunset On The Beach" Kumiku Licensed under CC0 1.0 -https://freemusicarchive.org/music/Komiku/Poupis_incredible_adventures_/Komiku_-_Poupis_incredible_adventures__-_55_Sunset_on_the_beach/ \ No newline at end of file +https://freemusicarchive.org/music/Komiku/Poupis_incredible_adventures_/Komiku_-_Poupis_incredible_adventures__-_55_Sunset_on_the_beach/ + +Success sound (CC0): https://freesound.org/people/jolup123/sounds/668791/ +Failure sound (CC0): https://freesound.org/people/_def/sounds/751863/ \ No newline at end of file diff --git a/src/assets/failure.ogg b/src/assets/failure.ogg new file mode 100644 index 0000000000000000000000000000000000000000..fa25db6016bec93c8fd8354f21e5bfe4ca676f61 GIT binary patch literal 26210 zcmeFZc|4Tg|37@LYi1Z@X)rV)4Iw6khERH6wk)Bsj4UZ@*;65Dd0!Yz6D1*`8f#;s zP?oe!C23LiP)a*m-g>ubzt7bBvwZJ=e)r??z5lu&_toXP&UNQSpa^*3vWh#z1xsgl9KZ&U zT?`@pe(T!V`yv1XKxYe`xuSZDDwnEe$DZ>t2uUVis>3=Zh<#-x8!M63G8@* z`e{9R93Ux>ZJR>l@@>glTwNQ#{EP)QFvPQhaZ!>us@=aHj#iN{)s{S$`^3ajF5{Wy zj0V@y%8v@;CK%jVc5NjYbyhI5j=3{CL&|DGgL~OfpP$}g(x%EKn(ODJKQ-wZ$dI+; zm1MY>&!}-X*rurdZbQe`IWI%Xwu{bPVGDa8Wz|OG-n12}ahX=+d0Yl7Tm|F-AgIvi zSLjoyYE2Z-1ppQEq+Q#jaecqW^+pX@vb;YD00fX>K4*TF^WLY<`8xjjy1(w{yG4dK zn||G9zlu8p!1k1L+(eW9RW2L=vcQsG?Z>Z<vmm6EtElB#|^rmjwElqpL-h3C%{mG)eP zp;eue56YP{&vl{4+2 z+Apl{@bZo`AM%TNWA&mWv7v&fI7?AdMQgg!dJS8=U@(hlZZKg1V zzsbpvObr05{?_PKoco{qt;QWiT~8%=8}*x+_j@~Xk|ORFCHc4R3>?l3`m}Ql-ZM!d zenk=f|Kt8WbhykJklB9^#GsSD<(AciP672_!-NwG5@=4p_|2tBXJwyGcc0;^cdS*) zHl8%ceio-!CCGD0oTo)Zzj=_iMG(g~Zgo*yU`x`ygAw;W?R@xOcaZe2Au0i2oj>0o zU)v!6iRE4$7c8=i2{0+iisV1m-}}TeU&ke1H!6R_wj$x7lF36yn4(`<09BGja`9_Y z__Zl~VanbKUVh}EB4KUG!W%WO+E2XvKi#sw7+eQ{L>;HiI!<0Xj$SbEi@La+gt{76 zOm!SL8{X_={T^elvJE8Y>crnda0a$c{h8=aXOnpF9=OU7OM$IJ_ zk{@B)FNiX6{|_y6V1jKwgAZI_LJy0l{hy?Km>`IvI^tC@AyVz%YY67J!_wkY9gFqE zi`{wJ4vIB0|0(s~At;&Y2~dHXl*|3QPnP@$1mI6Biy$W0`@~Nb0KXz#J^;b~CHhd% z|L?B<*`N~Op&&sYHh8Vka2&R%bG-=^k$RTlH3%FH%&afzU4yN6=q4NreiV2DAa%9T z&|TRvzbdL^0bj?Zf7vQpRLP5NN1`sjTP7KHMPv!p(Uav~ToWZ?nz(aRAYK`lkUgWO z<1xt0sv`nB6lm~6{Y##2JFJJ2$rHsYD7(j?(ddKRFn^g zllf1yNHhf-T1A7oIfF@$BsIVmMN{p+8twOS=OhI&_%%@_B9Z8XtiviAtTX6tQre5% z6;UG5@pfaXyQI3LAb%-I4@EC;m|+}PQ_$)nL{j8sdy^cSa~Gx;MF7c{;Y~<&1q}$5 za|8!+n0p#}xw5mca;=3Zt`C5iUPJS~VWOv1MOEw6;nM8%bgTQkM2spgF9Q{>k1JER zvcN0afJ5~%s4bw_F?9>Q02odqz`sm(WS1*o%mTQ{3W?J8(5|9|-L_hw=*2gEQFg%9 z^f`n241musYFBnW zC(gJ1MQ$$y$n6c2kQ-8}NaxpV>6g^#x%{30(e;1Pvk*?Bg!CfjT@{E6+&P?}Cc|H} zoN70bkPVXMH__USV*@2ri@Z+!?Pz|jWz)=O_T-#RNdFf(m+kt zkQJ^g(U%xKBM(CI2&x@Li(BADhO6Sg*k1`aLzd5J9FhR4A#4MDzz}}x*XMs8UXs-R zeEvTQ89{LN3!(kjg9N^CEWykl!wuG#U3&e3;fx|UWOp&Wn!ZKO&Y;?d3}+zGCty#b z9nbWIPSrp_?A0x|ZS}PZhe8dHY*DZ?Fu3X)=4rt7@^Uq5@!R8CUYYOZT0iKQV_I7^ z6tJhhGc?D=;PgPi9#hr%vF^3a!_mhZ>0vQUqto=ToU7z@;jubD%Koat@gQJBL^(&ul6-2m_IC43hJXeEESgg7L4%whu$yG*|tK?;1P)&0sYr#Yq z=i@3<&Q*fUDWN^Az|{cGu7)K9$8_5Tb2zFYl`^w6e@m5ch2nf&)Hg&uMmYc2gQjZU$0Dg><`4de!jemE~I$pj5O4 zIGzUpfk;{m#N*)67HT3&bW#U6!(lzo;fh^C3R{M%=#5~Z>2}7z$8Swl&>HL@Vm$Hq z1VM|aMYc6m5a2|OvV<$j8&fXJd-NDElNhjGh!nvz?BE)psMvceBs?-UAu(kK&gJFg zK>-P`*Ty-%A2i6w)95r=~xtjABTH5nqNJ5(!Qu{x-2OXnIR7 ziHR+VKfhRNEXdTH_4ThG!~MfQi4*;IXMU1&^mKK#4Gn)HKc#yNjf@r<8XKA!8~-HF z%%88nfT?d_YP9(CgUdhVj97+7?>~R<`-!)ng}Y+y7o z0sflVDsya1pY%tkGy|?fb7;gi4d3wh9XYFFiq{$etxfeaB>!4pQDJno;SKFQhD~1e zoEy%w#cO*M#Oqb3va-F4duV#BISn59zMhpU>gbALij_kZcxX;zr=NVkiK8QlS_k-p z(aj@74#(5p{Ypi0e|(8(Fzze|&@hL7$exV$u3$SQsoh!_k1@e=0iJjkPbWv7YL~AH zMU^bR-m1|@uY*4R^G40xaeLVB%XAeGe?raX};RdCV5f0(prBI6*^dt^Wi21y{H9x_(&r=Ka?t8n1*F zUjH*{4U95_+{B1Q7ZS90x9{E!sOI8nZ(u; zU_K4La+~LneAr>Rd?DQ&=NkxxA!;=SQ0D_nzB}~MILL2ufUnw`Am0E-N^NhcOC{U% zAfIMI{eYaZm63;|7z43a{{CpD5v5|mItcLjIvsEz4gl=u$%9r{Ht)$}Lk0x!<0c+B zv{x7hdK5_?rGgjmVOoQWbmU-VDieSV>0giEex@we!RcPqbZKQPx-cB!fh+^zkTPMQ~bpgD8XGxg49>)^WRT+>dWpRFU2 z=AcCE9X0{dwyO?%a7Y!R{@3r>ae);A5VifiTZzX3CIX5G_nf`FF`>utsB1sK7w`sy zevKzetEkYIqeJE*NP{fYytbDyyg{X_(Iyb71v%w??_U9j=E3(9z4~6rOh${-9Vq~= z_s$GcLv$uTMk1gfG4(x^2F)aa;)*AgFcI`6Guc)BQ7B-Hc|cEDMZ3*C^bG}AL|Nye zSbrQv$fOP?-$U1v#I}2$$Y{D8u{WxYGmmV)VSNA7@tU?8y33Kp0nrbmyAlh7X3BS* zFgP)10lw1|a#sXwWj&q?c!Zh(D`^SW z<<7~XNZw%J@GTT?rbBrPuV!l$h+a*;^$N=iT1z_3=Nlp*SOzro0jxbC zoiQUm1A*b&2K*6IaIK1iiiz&L8k0*2b^~0QP$j%1Iu7^yWgLdUwZ>KfIYIvb^L_-F zY@$hq3*-;v#LjMjTM!-cR1rB51Y@iNvF+8+pFxGwy z28p0S=_ZAh$k7P|O{=w=1E%grw@os=AO0+PT$11QHoxEN zh3^&j)rY?PxT|xwzzvot0^l9dZN|2s8GunZmS3~P1tzxMtV~n61r7&HY~9ejW&%b6 zo{||ck-#3f6kHBV0k=)3CF2wDWta^3hR%n<e$BRLA_n(L6yg0b(D#2XugyQFSQ@J&NuIl{!zII|>wA-36GtZg|vj39&uEs~* zvh|?2NG5QzbsZsVM_v^gs%XA$O<0qna;do`pNRrns9uEB|s}DcV7VXX3oO;PkCee+lm1kj42RUkJa2ewP7LT*q*;wHZ%~a z3b3T@$t$Z~pT=n5lPvg=Q4ZMbxYkyH-+(|gstCmg_!i*wMSZLWl|$evgt+<6$f3j3 ztu61?=I980m0Z?tUa@)Ju+4VeH+8qq?ymvO`Ea7nX@K$Bkf;q(ABGH26Wic=mVOKq z1lN!x+D1k>(kydRT)v4MC5us^2Sqg6r6w7L77(sk8XyU=8xYo~Kj9EPU%@Z0+Q_9G zd2&^6pPjikNeM>dH-B;uLmP=vb>?DRF#{n2Ty|JBueca4RDpq9ZYN|=6QcYc$qL6v zN?Gu8VhV;~kqgehlnqFI53|SuY@a4{!odZ~3c_H;lPEsx2wnAzHYYd9M!3)H;YN#U zz1<=E7kUl)-Oc!-|L*&G?|8dMC>ZX?D)W6Ih}1Z4XXn6{2MuLMOZbO81L)muZib4^ zfWhmyN>Z5X8G8&wmFRJtxgEM{8AyV{*IlM3?JWx6jFLc4^7ges*W5R+eJ_)g|0Wvo z$sTm7T(~e(xWc?I(c0bTg^|T1B@-R12_#Re#!P>_`?T5^lQ!GBKBI1#9?%azV6-*_ zJdm{n7wqL^V)0l75|9(`+PHVgFdniSbbAHM=r?qIM2wIJ&QkV4UW0sY`SpmCd>52dR~D2avGw$uR&s@VGT8-(04QbX8E5euJyFNrh0jH| zg|1a1*C>L6@)MzogLWEp9d~AyyL`NFK9@i(Eso@I<8=IzW+CF09f&BM=jl|^Rt4|-u>mg1!t@@bv7hBfJ z99vi#G(#-g|5O*quXvQVe7*do^zQ@*v*(Br?GhT9I$!=YJwY9fCtUDff973n@JV~N zc5FL)@rdE6`=5Op?rP~PS_BCXxzz>2)z}5zkvi0YLiUwMh^6;(|Ai-;n+jt()Eb9` zjlLN5cm{>X=kw7TcSi(>dwHSrlXcW&4vS?fDG?2Z4W|#s_gfTF5=m@&N2mJDCb>_t zI6D;0yVR5o@WK?kIiSVXm(H~ArD+=md-3ifGZ87bXY^^6T<`|fH*;d08ZRRfko_9X-JAT zgw~k}qsmcWX}nenFc7GE=x`xpoP8956&S2i2h!psiU|Qr)dQMf8PH82upV;%I`KJP z@yCg1xPQeVDIV`&TFv$&Da}){Vp;LLH(4kUbjCXVTHELT?agZ$IMXz&*{6zXeJFSD zWjzX>wc0ctD56sA{N0hU6C{RBYvKp^bYQcr5*!|cPWejjk|;^Z-kokrh7!Z7E5T@ z<5zCGWII{4!8JR{_l{8cUc|C{gv;kQY{%MKn*-RcDy3I@D|`!2k6Gl-?Cg{cSt+}1 z(VVjB(2o-rG%6P*zI;-!ee8?nvj?17MWos%SJ=p};smKZdzbX*x|%zd50c)Nmus7! zfAKN1?n~6rL|;U_Fc zN+;1^xYxOZY74$e0ma!XOaWbgERl$bfWt8ebx{zPO4bLgR3;`Tmegl<`UnspkbOMB z94u88ng)^ES!iB)QXom71bq4xXOO%prT}r3#^s?M84NUKil*}^16LVmzK(r}-tSSb zqh$Cmk0|07Z=XjGsXgY^3d0m0C&6O~wsCsuN zkw?H+gL=Yygbp-ZmKoE)c-m!$#}RN3savuNiZN+8p1iQf1cEpWG=wVerho+MJX5G7 z;mV-tP0WFg!@?sr6nzBSJ4cUzfzvjlKn&K{l%f~~3|7i_fy7euKDgVC^x(cB z)O&z%5XM~utZ`VAf|}|l!_D~#c}n`l)#lBe`rn6&J8brp>1b3DLyLw6)GBWUh5e1# ziF}TG9y9hE3K@0Nw3K<+Eaj|}rEPVbszc__ZuV8luom*cV|)@v!Q;r``Wo1MGDLyt zT+<*apgC7C_XWfr<6_7YZxyXd;F8r_OCHwDi{BSd!P0{L++2YK31SLikC#HR;oR!9 z5lB0<&jme}auCf;zSd8HaE8W4goE+m0s#m{0IQ8ugiQdQhFORJWh5%&htq4=2m_Pi z-bQ>Z-@bT{MMu}mmr<5wx%_=2dH1OYBi-M38xH^3ymR7p&8Gy{c=IgZTU?Jngek>6 zlWD$#b&k}^fc$kS8&4cecotxid~P+Tz101a#^k=1muJ^DsLw&Ux5H~O73%{o$SKuL zT<^3iZy#>`bk^8v-Q5?wzL46cBO+1j&c_s+lADnNgzItAjg&ZX>v87XlO%18QfU>JuqfDV7}gzJ%T%(iJagGBCe1m`x>RAqy^++V z$3I1Gw(QU;IXCM6(C=7wo@!I>dLXGfbFcleb#}UERkQ7@(40f+f5DX}O?Fyf z@MXKlMvb`j1J?rs)hTp1L>D97!~MQ$%i}jB$oL6c>L=*#r@D84ZB)tq%SX`n^=N?d zD&p#6aZZGD?0MU_E*i-G>*J7T4O#J~s912_^fk-31pPW*QJ` zS8gAhy-AAo;P zoDaCK3-_OIIB(Xp^_0b8(_7I4YI~Y%J=8cs)+Hk2sERnx3)k&}QZCOn&N@?iManw* zO~?Kxc^6Ju#wR-stXR=~*mAQ*-&WOY-EVlKT~Iugx-8R1$i*kppNcibB=p!=T-Kge4)~UcpaLP#nFyP z`Cz1ZKt}I`Lhw~R zwMHNSK1)1MKqdjk0zJ4i@d?i$k~0O@;J&2;p(=LoR9F|@;shF?2~{R%%3CoT^8%ws z5QQ(gzz7UR1qbpxC>Y9Ur`Tss$>1n98>k4@fke=O5cMzN1l7-TM<^@572V06;*RQS z9`nul<`H`x4OqU;dhx(6q%7e2B4`fn-lrdP1Ax;Z*4xJW`_1Itq_3BTD~IU-s=xQr z{E}#z2A_XT4~qo4pxQ>F#Jfe^WObATqHwGX5~9sLI& z=<3qDfZ>RWfAV$BOHD5a4j>|IlZMKkxe;G(1l45(X792%Jd$W8FL(D@UGJmzGV_)b zC#?6g2ZN1xGvujD0~tZHYIc>Tnj|?%$@Qy21Bvt#9gLzSY$j z#xS%=LY{e0^QW&1;{@9Bsjdf(ZLz7n^|E<{+;Q7lkJH#+byK5oRGSpc86;m48QWjK zkubWEKju91d4`>Ibz3|`j&Q%n<;ePt6FLhn4RN#=?+zKnRm{IAWc=BI7pF=I&L%f&d_7Qa)?3pqPgWE)w`sRRC}0$z%q_YJtz`?eEMbZm9kVBMFm zKlmrlMZ{LA6Gx*wZm2MKNoiaf&|KQ>at6D42M;u9zVZjaa}2@$Lc4Q7Q&k+Q;`hR2 zZrJIk@lD-o!TyG*K3_@~tK;*{heV1mBbN-aJw59H@NLv0P*v9v^%d23Y@V zCId@sH)2qF-Wy_Q&zeOzAmFrpmrTx`z@>0Jgbu=SpVf#w<{gBorBtKH^bJfcvYq6N z&l9*HF0;8a2n*|zWneo1h584Mc1SZ4h$NmAk&uo6&9CQM=T^;(G?XXPVbI)5OT7gQ zDEyRo1R@5!r9ud8J%s)(Cw_a!(@Q1TK%$J;3k&^#*700$MwSbYmZ8TZ1k zVaPHmxoNsS?&P_ijV%!vB6v@f>jV%h14qD%I@Dvszci6p3%IYrGlriM*gvlYjpEk88=dzkl30FsAWw`Kp7T z2fj9JI~ya)NAxPwS3CZ^Hh=Zs*q-z$ID+n;AR zksd-Fd3t`c-=RmxPr6#~bc^~d=EU9b>0UJ2zx|y5wbz!0PZA3BGD{8^U935JbI?1x z_UP_+_uEBd&xTvh+-)o#T(|vVK*#p$tUtG#?N_se=k4Qcaya%XJcFJJgwLEiM*hF$$z z!@uPhzPYrBE)ntAy68r($h&hUZxRI%ZUCO+WR z6;u;(GgLoaDD1}EJUvYT)mxqj6ahE?x?t*7cXw6wgW!-*R&mK8MpeaZyXFErl!5u~ zU^N(W5q2JxK-wE`jgnkjOHsUPffO46*A84fdp111hPzCNLA?Urf9f~`@hy#ycGd-# z*s@|N!Ki|Oge`;U^;?!~j|+*3nIA_v;=nXx!3hE}g%khG-Iw+HQzyQc=$)JP3F&R&@DKmHWqHg##-BZl1m8)p0WYYk_>> zXxASY)U6M2o;Alrx=+Jz!_mc^!5pL_nPddeAXS4?3#A zR$(8O5`sxuo;ZXo;8014Y4a)bdMJsA8e1GePP^$e159^-ES2T!TUa9uI*~x!75JcN zq34G^rjN@esnOZ3&*IvZ>UV{9T2^EU zhVB8g*|=;Qu4bl>p?^%p)lLf2!$|7oW zk{Jg4YXf!8A)Z4zmSL=Gkrt)yMOQ^kKwT)R@TJBeCM!4tu-Cqdo`|#-=&-&GkG%?J zct`_yT0A2Lc~iaeCbpxRaTo=<4^c2_L1GF@j!1)LV>BT?mAC~%2BQdGjJRVs&H0`I zL;NQo^uVa}jy*U0^rz;y@oIlcF{#YDRrm)=XBj4`eDmfQLupI!e{)}i^xD8Plj zH*oJSf|Z0VzI7rdDlWRJ#sMngzMN!Wi0S0W*vV>eQFh`46~PGO!3-_PRq+7ZGDrhz zU>bE!TLU4aIHFl4j|RO)P^IPo4EXfC?u{Sbf(NWc7n|cm3p^123Gn4=ASJB_N$Zg} ziK&e0Kdddc1)THQcr9e5_f+?VD81Pm?Jc%Ny3Sial6U=Oh<`C528)A(zX!Xjf7 z6Of@kIRf=6h=;MI* zEAQDi7QUHx$G9hQBJ|*(sb6wxOZoUM zM3`B2Lalju_}o9fS;{27Yq{>$c<_+>vjaAZ?3WxU%QgLh>bO+&tV>y&JrP!OcAsxW zVZ<|Lk$Xq)se2)1;?>Q$D~3u|+5EA2t9I|DqrCp@Gx6OKoXRyJ!Y*c)Jsg&Qb|6qO3_v+{`&6T!@$?8?oPi6U$yGN z&h;vas-=u<>4`a{#-z-0I_(ScdRmbg*RgVr%t!t8A zQ&(e7rgPbUKzq4-%Q$;tz0q1;9*X^pHujZWyKW**GbUNg=hJQ49!@*CN8b)?_%&K~HXO2$wKK_IG zL!GtDZ(fYs>$7Ioyzb-qR=R(^czUVv?t|qaN4LbSTdZ+MCHuaj`H#-HdR1aAKWz*% zJnR$L*R?%NhI@A~Y~zoaheFQM9~Si0IXmTjo*g*7o%31e^@H{%p_ZUPL~ryPd~)K` z(SxJeULq&kW__WmW8MBxcqACA%YK!nFD?o8al`)!&PWcnCWMubh5e;S?^X=9x*1wW z1xxkeUA+WmoIjL2b`HVH=~XbX-H}^N)#h9 zjbbTGhYH9&uSaOkQ2HUHT8~+2U>xE*YE?;#>}f!hF$5-VV|oI#aH>{-zt?Aw9?I(r zpsQ}e2QjMZLr|aDLW-r&44#M+Cr}o9qgbruOu0ZL24q^S0a+=bJH!-?EGc8gB_^Ay zFpm@}=vI}BYm3}rc5}Tl`Bpg4j9EUW;;@63ev0V5G{^kt8_MNBD3{K|k8cD(&P!tA z>gPMGmMF!mzB=W!w4{4I{)~y@(Fhw<1{0}Jx;S|PH_(B>2we_f18n2KWRG*+3gFB# zO#=gfVXOs(r{!`*2;?0!X5l8Fag*e5-o*ZBgaLpq8Of6qn@9r&?r{e_1BxvHnTS8O zhn`Hf5pb4DyoaNS0SqJI6r#fzQ;kG;1R#UQtF!SK{4@j#4C+R*iq9+zJ3c)p5g1IX z`XQ#@Fe3z69*oFSu}ov~$;l$4i6On*?)A=$17}9S^1ufzvcq4TWm<3Lj6RC}9J|`& z^?cp?W?|9U(AofC9V1!^2uYS(h-F)ngB!wFP6s0VGl4)8Ll2QKB!_PbLTOm8h{OgC zOck&n#n;A!>d|D1$)L6v?z^)A0}i$UR7J0VuwZyT1sWD6#X>n8Nyvjj6`^)qBj5-l zXAc<1fP<2}JVpi~@E{|=(^EhLQm-i>o|yHRIOc(oCQf4k?1f8lJTQ}W&R2l%MUg}# z4%Z}AVMzoLTH=ugjy@tJqAc84KuQGi(^6_}X+#e(E~QUh5R4&2JCYn(>HU!5;xtST zTnKpZj09)8t+l*%?unwU+YrThq&IPq(b<0jAam%0DlYvRNIiG9gvatmO-l^-G(saw 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 literal 0 HcmV?d00001 diff --git a/src/events.hpp b/src/events.hpp new file mode 100644 index 0000000..ae1cab5 --- /dev/null +++ b/src/events.hpp @@ -0,0 +1,18 @@ +#pragma once +#include + +const Uint32 playerDeathEvent = SDL_RegisterEvents(1); +static SDL_Event ADVENTURA_DEATH_EVENT; + +static void registerEvents() { + if (playerDeathEvent != 0) { + SDL_Event event; + SDL_zero(ADVENTURA_DEATH_EVENT); + ADVENTURA_DEATH_EVENT.type = playerDeathEvent; + ADVENTURA_DEATH_EVENT.user.code = 1; + SDL_PushEvent(&event); + } +} +static void emitDeathEvent() { + SDL_PushEvent(&ADVENTURA_DEATH_EVENT); +} \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 6aa2ced..bca89a9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -9,6 +9,7 @@ #include #include "adventura.cpp" +#include "events.hpp" constexpr uint32_t windowStartWidth = 1200; constexpr uint32_t windowStartHeight = 800; @@ -16,6 +17,7 @@ constexpr uint32_t windowStartHeight = 800; void loadWorld(void* appstate, string worldFile); void resetWorld(void* appstate); void loadNextWorld(void* appstate); +void playSound(void* appstate, string soundFile); struct AppContext { SDL_Window* window; @@ -28,6 +30,7 @@ struct AppContext { Player* player; World* world; TTF_Font* font; + std::filesystem::path basePath; }; SDL_AppResult SDL_Fail(){ @@ -40,6 +43,7 @@ SDL_AppResult SDL_AppInit(void** appstate, int argc, char* argv[]) { if (not SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO)){ return SDL_Fail(); } + registerEvents(); // init TTF if (not TTF_Init()) { @@ -148,7 +152,8 @@ SDL_AppResult SDL_AppInit(void** appstate, int argc, char* argv[]) { .music = music, .player = player, .world = world, - .font = font + .font = font, + .basePath = basePath }; loadNextWorld(*appstate); @@ -177,8 +182,13 @@ SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event* event) { } if ((*app->player).hasReachedGoal()) { + playSound(appstate, "assets/success.ogg"); loadNextWorld(appstate); } + if (event->type == playerDeathEvent) { + playSound(appstate, "assets/failure.ogg"); + resetWorld(appstate); + } if (event->type == SDL_EVENT_QUIT) { app->app_quit = SDL_APP_SUCCESS; @@ -281,4 +291,14 @@ void loadNextWorld(void* appstate) { resetWorld(appstate); // You won } +} +void playSound(void* appstate, string soundFile) { + auto* app = (AppContext*)appstate; + // load the sound + auto soundPath = app->basePath / soundFile; + auto sound = Mix_LoadWAV(soundPath.string().c_str()); + if (not sound) { + return; + } + Mix_PlayChannel(-1, sound, 0); } \ No newline at end of file diff --git a/src/player.hpp b/src/player.hpp index f3e1d0c..5b549b4 100644 --- a/src/player.hpp +++ b/src/player.hpp @@ -5,6 +5,7 @@ #include "blockPos.hpp" #include "output.hpp" +#include "events.hpp" class Player { public: @@ -55,7 +56,7 @@ public: */ void setPos(BlockPos newPos) { if (!world.containsPos(newPos)) { - alive = false; + unalive(); return; } this->pos = newPos; @@ -90,6 +91,7 @@ public: playerTexture = DEAD_PLAYER_TEXTURE; //redraw(world, this->mapToWorldspace()); alive = false; + emitDeathEvent(); } /**