From c36edf765131ea799fbafc34355a6f1c7ee2df28 Mon Sep 17 00:00:00 2001 From: Martin Felis Date: Sun, 28 Jan 2024 12:22:58 +0100 Subject: [PATCH] Added sounds and refactoring player handling (WIP) --- assets/sounds/pixabay/dash/sources.txt | 9 +++ assets/sounds/pixabay/dash/whoosh-6316.mp3 | Bin 0 -> 9600 bytes .../pixabay/dash/whoosh-6316.mp3.import | 19 ++++++ .../explosion/081895_impact_wav-43951.mp3 | Bin 0 -> 55170 bytes .../081895_impact_wav-43951.mp3.import | 19 ++++++ assets/sounds/pixabay/explosion/sources.txt | 4 ++ .../pixabay/sfx/game-teleport-90735.mp3 | Bin 0 -> 12000 bytes .../sfx/game-teleport-90735.mp3.import | 19 ++++++ entities/BombEmitter.gd | 2 +- entities/BombEmitter.tscn | 14 ++-- entities/Player.gd | 10 +++ entities/Player.tscn | 16 ++++- entities/SpawnPoint.gd | 5 ++ project.godot | 2 +- scenes/World.gd | 62 ++++++++++++------ scenes/World.tscn | 2 + 16 files changed, 153 insertions(+), 30 deletions(-) create mode 100644 assets/sounds/pixabay/dash/sources.txt create mode 100644 assets/sounds/pixabay/dash/whoosh-6316.mp3 create mode 100644 assets/sounds/pixabay/dash/whoosh-6316.mp3.import create mode 100644 assets/sounds/pixabay/explosion/081895_impact_wav-43951.mp3 create mode 100644 assets/sounds/pixabay/explosion/081895_impact_wav-43951.mp3.import create mode 100644 assets/sounds/pixabay/explosion/sources.txt create mode 100644 assets/sounds/pixabay/sfx/game-teleport-90735.mp3 create mode 100644 assets/sounds/pixabay/sfx/game-teleport-90735.mp3.import diff --git a/assets/sounds/pixabay/dash/sources.txt b/assets/sounds/pixabay/dash/sources.txt new file mode 100644 index 0000000..f9a2b87 --- /dev/null +++ b/assets/sounds/pixabay/dash/sources.txt @@ -0,0 +1,9 @@ +punch-1-166694.mp3 +- license: +- source: https://pixabay.com/sound-effects/punch-1-166694/ +- author: floraphonic (https://pixabay.com/users/floraphonic-38928062/) + +whoosh-6316.mp3 +- license: +- source: https://pixabay.com/sound-effects/whoosh-6316/ +- author: Pixabay (https://pixabay.com/users/pixabay-1/) diff --git a/assets/sounds/pixabay/dash/whoosh-6316.mp3 b/assets/sounds/pixabay/dash/whoosh-6316.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..38c7d5a54eee96da70545fa99116cf300d7f85a9 GIT binary patch literal 9600 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 Num7#A`Txb({{ip9!WIAk literal 0 HcmV?d00001 diff --git a/assets/sounds/pixabay/dash/whoosh-6316.mp3.import b/assets/sounds/pixabay/dash/whoosh-6316.mp3.import new file mode 100644 index 0000000..3c9bbfd --- /dev/null +++ b/assets/sounds/pixabay/dash/whoosh-6316.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://bhbhh78j5rkfe" +path="res://.godot/imported/whoosh-6316.mp3-c09ddc29973a4f106e83f9f9f20b7c35.mp3str" + +[deps] + +source_file="res://assets/sounds/pixabay/dash/whoosh-6316.mp3" +dest_files=["res://.godot/imported/whoosh-6316.mp3-c09ddc29973a4f106e83f9f9f20b7c35.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/pixabay/explosion/081895_impact_wav-43951.mp3 b/assets/sounds/pixabay/explosion/081895_impact_wav-43951.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..494b2cebb485dd3a22d2d483fd02ee46ca5ff7a5 GIT binary patch literal 55170 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 a<>VaAni!3XV;t=L+lKzbHuRtU`u_ry7+co> literal 0 HcmV?d00001 diff --git a/assets/sounds/pixabay/explosion/081895_impact_wav-43951.mp3.import b/assets/sounds/pixabay/explosion/081895_impact_wav-43951.mp3.import new file mode 100644 index 0000000..0e3485e --- /dev/null +++ b/assets/sounds/pixabay/explosion/081895_impact_wav-43951.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://qeg12ynvjvy0" +path="res://.godot/imported/081895_impact_wav-43951.mp3-b97c4fdee4abc0cae63af4d92e0a6e8a.mp3str" + +[deps] + +source_file="res://assets/sounds/pixabay/explosion/081895_impact_wav-43951.mp3" +dest_files=["res://.godot/imported/081895_impact_wav-43951.mp3-b97c4fdee4abc0cae63af4d92e0a6e8a.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/pixabay/explosion/sources.txt b/assets/sounds/pixabay/explosion/sources.txt new file mode 100644 index 0000000..52e20ae --- /dev/null +++ b/assets/sounds/pixabay/explosion/sources.txt @@ -0,0 +1,4 @@ +081895_impact_wav-43951.mp3 +license: +source: https://pixabay.com/sound-effects/081895-impact-wav-43951/ +author: Pixabay (https://pixabay.com/users/pixabay-1/) diff --git a/assets/sounds/pixabay/sfx/game-teleport-90735.mp3 b/assets/sounds/pixabay/sfx/game-teleport-90735.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..1a0c20c0a8d0fc56488b3955cbcb285ab10f419e GIT binary patch literal 12000 zcmeI2cUV)|y6|@@Aqf~Dgn)>lg%)5ZAc7(W1Vo4m3K|eJ2}QuDfW4B0B2A?eii!de z5HS=L%g7E$$AaJ}j%P#>`zV4liX!_zI)fRpH<#fcJ}_|UF%)% z+VJGl2!M9uy(hWuDj)(-J_t4ds1tMhKiml7-1h%8Bpts!E=osfq1X}Gl6(6$9D01g zNaShg?`^CZbhvZuot1{$wvwolv!Y|iw#4b?7&moYd&y}}yntTheXDi%KGC_gT@SIC z@UElp(unwu@Efc0tBhRF7*JDLo*y4w^=&wP`@^E8Mj5~E{b6PVv?1g6xtcu|T3{5{ zpKGvPQ2usmo`Ii@Dk3Bs+NM!)=#e>D+vFIzaeDDRBUC3EymV|^4T0}$hx6>m3BR7vyojJS4=Wf|eX)!<&q6vU zw~;#=p~IF=VciZ!b+cneaw9+Wjcv7B*8@MZ2fQiz^pg@gd9GJ-;DBeKJR=dFI_x=| zg3QL%GQ-qS^M8)obDZnY+y6vy0*0Th(M|;<&nyUDub4y!aLB@jPL$Gpd-CYyiALVp z6)+4tR5yd=B38FsxD1J42ZTZaSNlhu`$reU)AEgpF#HKe0i{%sXU+sYK(aQoG63vn zgN9nnr*s%r^1beK{O zRn822z&YE+g#?PUIgMQEw#I4&Sy&fhWBK5)RaZ@K*{K%)wV&L*TvjKqwY4u_h1nBx zwYjR&mW3%i=H$<4?vUBq7ZkA@@9Y)I+A#E94CO>0r_@~bfv`Lo&u+eN%Myx=40|V>mnsNK`Y2H-Z{bE`9e!u-TY|UDQl~?GOMoY2g1a{0u|puhbOcA zfnTD(^MwGwX%Vs&?(->CZy1wJ+@ULPr-&i=lv>G4-NZ4CVz1Nea;t>F;)Jo&w)TbD z%_)_(E-^q#Rzo-s>Z70->~j-?dxey2+&bm+$FZ*8w_SkIkHRX%a)x*#K3bIp^|cf`x5$qk%978+r|a8 zF4k=oD^}-LZ1Ir0AFuF@d%9PCMkoL2C4WJg4c^*4<)iR${ExI?nD{w+TgT{t#(xN=8tS)>lL(nZE^-)%AwZL5+GZ zye&HjOmB`NTPx_nFyX^6!E8f>dZFhviC2~)$3$e(X;pI?3^t|k(A*Av1oPL2!|N>S z?|iO*6n6Gl(*^IF!2@(|{*pnIR`a}IV!Nh) zA}B?KYqCMG7+pc2-2f?Ak3niMYDy%hih)of9aDuAHSic1b3}@0;|qiSO~&GwYzCe( zA#aHBLu^|<>&BY(4!q-y4%_LBv?r@~PZdAB-K$bT~IZz0fAm!S>(1o9E z)i-pegwOjFcp;p1+w(k9B;H2V?ictn)1ZFYN*JDKNI%g@Po&ZUawXjqEQK1%Kog{) z`Qj+hydaB!*s7f4P=x+&rY)0Kh^0umc34n)orflfvzE#EycRMKLoLM8RD54L9eeEo z+=~0IzajwO^HVx${9USPQk;^irySNUB%GknVd$X^psRg zC5iyG-MJ(7=s1nUsJg*$--?h`cPQD-9jBM)-jVghu-hi?h>_i7ETtf&w+-^Y6qD&I zj+EIlRjCg}93xjwM(oyaePQ@Lz=mkp+BJyS45_mR4X}>K0nX?elxTU-86036R%^Wh zW&pazT(mR51Jp%qB!Ckkxq$V~`Wim~fdf1cAb>bCZ|B)R`2MZ>s+%uy2kTjf{KG9+ zhnZIq4mR4^tP+DH1pgh_thQP!doIYuSK#C)!DjVvEG-h;K}2DAhF}768-nBss$(70 z%1Pi3Sx&shK;|!gvZM{>O)O+1-W%CA?eX)!%)+=j4KW5~m8*q_}*+QZ2unHORz4BEzKlY@l^;wu{Kr zXZzX^O$J_nzFt7v&X<&lLix*3nMbGL1z$z*y0}Cs{+Of39mX0{(#GXc;<2?o)t8Mp zd<=s$arHdx(s)Un$0 z=7*cBE$zK#3)b(PBkQuNYY)ynRPkVDmrmF+^G$BCD{`G=6Yb}VeEq1KdJOXVtJ(s7 zJThgrx>pw4;8Ol0FukGi559k{zJHx3=f)bWN>?1|rbw-@R(X(+iop*T@|=M~Bu_KC zZ5znDN$u1e5%HdAKT|XI=WQX=F*G{Q4Tl5+Kqg`dFpk3@CPLC6S27~DmuHFMmD_`K zz`vqBhcLa{dBYR48!ry~FD*c(`jk(4^=gTr%(9S|AwhZ(S2#JEqg}JC8LTd%Ph-+D z8Wo}~7>gn#^YhCYo3qX;;xk$ z3IsZL=xEIe95`~Ve$aYnDN=sRln}SY$EeOG%>52@HCAvr=!ctOHzz)>zdfnL-5FSy z>0UxgJMKV$d~^jdH+o`iv;%D|F$orC2BT)P6IQ=*m7^RkRGfLNAG%BbPaL}|o8#Z~ z1kEiTMb_(vNV#PGx&VE_6Wemb%WZx0-8g>rl?@lILpD9mKfm_ozJfpa{;t13S_M6- zA}%67G)i|QpI^J8(*(Dl_ai-ufIPw%>87ehm#uTtj#^#ha)5HpTDJUER_%6s zubor-U4Q8;_PtI+ES+1F9Z2fdRXYYqe43AqhKAgjGz)uuz&_aE=a7aDj(qErQJX+2n`5HCsrMjZ=ZWXbpKLFF zUDIOwud>2gQRXm#Nm-PY5Pv!#A&TB2-gDji{IrrU2U_J`v1iEAa<3QuOg z9njyNW`+{g?PhYw?rbtrM9VT!6G2FDnR3d1@sZBV#6fs~VkQX9P6~WhEaaLj3}t9p zLPQ~+%0Hy9?V65NQz-dRKv~+AUntnD$%f??GAw?wXo20VK2a-r& zIu1Jd(64N7DgA9IV&L!8n#v8(*e}?bh z68~M|&q&Np*z5rc?jICLz4@!QN4B&@?0F;D?J00><^jokb}aAHZXP==d}MEUPeL@w z$J!;AAk)k&S5$Y3n(?!wJPoN7Cne!UNlEHJli5g1*OjrS=uX}#mZ*I6xkST+qk;6P zjwvHK#$CoFQ+!@lsZ~xn3bV=kh9pU;dZF5R<}oMvOZ3Bh1!gf!_G2`=e0V#_t!Y# zV}5s=W6q8;qq5FVow{&^Zv3VHd`qkSuO%^|4J}uo2+_L79ZY1J@ELG zLCEs_*{ow>-3%x^vGTk5Ql>los5<2C80c7*fU#;1o&g}3Va z25q# zubVrEDqlAyj^Q@-c0WVwP)RGF(RIWrofM^wZO0`bQaY5j`P?zlE~P~)(<4x_+Z2gN zOfOU=2uF(jfK?4HToP37Nl9eB_W&j>i#F5Yg3KOiedCYz4=S5Fi)7V1MvYjbe*A!@5KCTdJF#CeqN)=K=lFehd>q zVYO*WgB2ARcsA&atWCMy$H;EUx@5QD+BNkx1vY_!H-c)dqiSmmD%J*ehzLP}ugdC> zckz(Y?mYzDWpWW`K9?!?;METfe=akrJzV|3`m=RS*O!GpopCpZ+nx6hx4Z0rWYKeM zpUZD?Hy@d0D+LQT+Lt*p)I5&_jB|9(XfW%tLtM_}@`07imFl^2DT8Fi%#hn7IB({7HG{j5X%|&cSlQmia<~ji<)NuXUs!G~= zt}@c*iQFX!I!;elf>*dH3tXC9oh{1tZ}rAw^hO#rig#Uz)MhV0Qp0f&E)Df=mN=p1ua*;Bucrb6jpr+tI89OeG$HHXc9>}KH4`NSj#`K z&g7ka<2yzMdTsnc0&Td|_+Tb&*zfJ|z3|A~#p%bpbxlnIk3Ol)J)bzW&@3V{hb{R< z**@$>!A`ro_pcPiAIvrxz84em(}K5QRbPaC4NZEZ_XKZ+H_BQM_B^dSG3=T%4ga=c zW?ALY=dHPGVR+c2D)#7SS>jzAbQGN=ab$CKv`qmQH&6#en1V@$rZ`#>vkm81of<$O17D zPX}paNRpuRxRW^HVFz)W`5bNqYhYKV_BXugipPXa=k}sJj4=I!GCTGm> z%2!#Rs;h&!59L-y}f37_Y?+?Cp&1&|{O{H$D2K$fsS+ys!N?x*9?8dz1XBuBV z>=G>+)R`!?(Rl)$pgza;@XzlRfMG?w>Ryjqi&xJ9li*9}3wtHkG*|^}bNID5LM$dVBrdKPclwDR(An z$y7=z9b}2KunfwcOiU_+vYX0P`T;`{my5;G13U%^K!|AJ#8eKK!Q?gdA=@bgd`Eg? zh{v5hF*>|v5edRI16tB7r6-7p^>~bgoE6X$c|6xu0gbAmG8AK#%a7Wc2$hY)A00wA~|8 zU}qup@{u^64+}E9X#0_OBcL}xFj#mD*|$RJ{|wnaygXUC#;82JvaZjk;XwG+u`{1f z$IjHi4_aYZ@kUYVu$MwSb?ZU8>0tIzpZqU+HD3a6uFivh30t)8>Tn^D}8 z5L#s31Anyoo=IwjA1cdAp#}W)yC@;_#HV?`XA@^MzO_%_!SKg#&1~Rr9g-HSQVSTK zNp;Xa>|GI1s}%g6e#Q;O&NDci2zOQlRI9S^r*8u9R(SNAK>vHw>i&)21rGXI1Bthl zgGl?M96bNv``12={~2W!Utm^ul96>{I#$IOPzFSGEc)$Ma?ADG*h(l3S$$hK$+k`N zAeBXhk{$5`9AFIH8w(1umsq55(mbo&wF7V_z7!2De0o}vx1@86%fq}o9w~UT3E9$} z?2}{SnQj&~-;aWqlvi6DV8!JzPvc3B-%7Jhis}_wya-*)n&%%9;lY`s@Mj&;>Htn( z7Kdp4pMl_i`9=UlW)1~?E=@`H`}wcd-Y5v`~4MQK>RXg~6# zXh`YrHACFbMy8@fI4n}6=?#n^(2yZ3VYH_79R1einT?+}CBk8gXHJ}h;Q$!E2P?yA zRdf`dNlJv@&Qx9}53Od6>Y(ud83_O382^*`x;eM2^cSW7K#v04y8WH62ms1J4zS79 zot*@}lIShi(v=2IAdY}UQ5>iRxq<4?CJwLP26x=nr(%vGWL9JK*iUhrc>;jAYldYkf%q+(Y2;Zjl-)?P11B|TcjvDA zx&@Q0%pmj2v=ia!w6tj_mglOc!wu!Ri7=e&k*_nF?U`dTN~~ptTYTO6YU{79HI2j3 z7re0Vg&A6$3n3<>%67`|H1uL&rT=-8vWq5Tm$v+UzO2$ySq=yA_KW7E-?gFm%*5IP zP%*}}%NCi|c?OlQSc!iFNpWPT7#RUckr5rQkXhHQaQVtI@4F1MII8qgREB4&dfhXQ zj(LQFCw({7oE1}Jp{Q%mISm;n^R<%Q^^?Q3lEd}jsVeiD<4Ye)Hqx?QGKtY(mMH`6 zB}%I^1=CEGN8OG-?RH5HU}qk!eb5+ZO7&?%0=W>0OX$ZDdLfBixo}OlpJKEHj9-U5 zyV*lNUzj6-V7Ds+K}RdEluoo5BQletsoLm7c&3Hl-Nu8;_%G`C+28zE%JZXEZQ$02 zKloCYO6w8Sa&>A6O^P+B?nN8`Ajk`-H9Hmk?R01onQVN!uASE3CXa3}x7-~8_Rj{Z zS#$7*mViEFKG(4Vhy7KDfmFuY0p|K_rCF;A(m;fC4Mvi*4J)odw}EVLW1N_6mCWXj zXYom7oOv?V z3sPR$v^ty(5)b7e0g3XxApHP$G0j~JEaU3@!S}!0g!=cm-?#Ob)RL)+)E5ydRp(nGMBN|;(wpy+-`2Ur9Fx^o z;`$(BT={)Kit^+iv@zGs;_xUAH0b&2Cf~lSQaxty2Ruc2AYPb{XQHUR%2RfJOuMt} zJkj8A79SH+NcMH)VyYjMnKY!djVZqe;9@D1W5}%iB*!#)|B^{t<9?cum7e7R1dfT+ zK3CbAV8kgS{5>&_;wUe)zG$Z)*Eqw^+k8$jDKz|~wRh7YmHs}Nr+AG=-WvbDKN0~z z*CXRQG-Ox_xBGZlk{+SswG8N>8OcyT7&=I?R)(7BMgTs zRef0X5mSy6fusDQpgbUEFrvAdEMC@Fim75(68<6IzsLOFT;{geeG7;LY!*@4FMumV z?-npSsi2EEOdA0~`+y-xU3rQC7>ixi6cPrSeOtxXes0Jd9B^ysyZ$PxF%!v~lc@j= zlxpxO4KFvLJaZt@cC0gIeET=n%?4e5vjsgdXF_d&mXVqeIrmPAM5r zKZo@ZMx=po5@(AB0R=#X z4TDK3?Vz2c2sB}}II5 z^JV}04i-D?li4j6@bo>4ZSiV1Lccg@gFl{ZR*)q6xkVUJD?Af(!98{0Sq9wzVa?kf zU)+DDV{aOpuq>0NGOTXUlk{l)qBxf5L-%PE@fasoGsM=*r7-XKCGITcODOhlqd3pf zB-Z+%sT`yhOVr#phM+d0H!Zie*KASo?PkS{PXo8c|KQ8aaNeX+k^T~GCip?IWWdZS zt0Ps<7@76VQC%uZ6#&`s((9uyFQs#aX6MV0LoowqRPEszUW0lj;B7f4EhW_oFRkQJ zsM2VTz}-sRiJe7}3YF8*9#IN(QvJ~NJNJBpC~*Ro9^Twyr@+yF$T#uZ5XvWtSZ{`6 zvbS5?X(6&gv_Y_rXDtxvCwl?`z<^~tVl`UbeF-zM@7fQJ{DCdv`e2 z9{(V#+Iu&eDLeAE5P8<_z+d_&|IKytzu@P6v#*pMjY?odiC4A%g#h56{LlXv{JejC N$p4?7<)3&P{|9pGuL}SG literal 0 HcmV?d00001 diff --git a/assets/sounds/pixabay/sfx/game-teleport-90735.mp3.import b/assets/sounds/pixabay/sfx/game-teleport-90735.mp3.import new file mode 100644 index 0000000..e6c2c4a --- /dev/null +++ b/assets/sounds/pixabay/sfx/game-teleport-90735.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://b33xjins3dqpp" +path="res://.godot/imported/game-teleport-90735.mp3-112905f9f7cb1de6d452cc344a4b2de8.mp3str" + +[deps] + +source_file="res://assets/sounds/pixabay/sfx/game-teleport-90735.mp3" +dest_files=["res://.godot/imported/game-teleport-90735.mp3-112905f9f7cb1de6d452cc344a4b2de8.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/entities/BombEmitter.gd b/entities/BombEmitter.gd index 70ca425..35ae1c0 100644 --- a/entities/BombEmitter.gd +++ b/entities/BombEmitter.gd @@ -13,7 +13,7 @@ func _ready(): collision_area.connect("body_entered", on_body_enter) # Called every frame. 'delta' is the elapsed time since the previous frame. -func _physics_process(delta): +func _physics_process(_delta): if processed: queue_free() diff --git a/entities/BombEmitter.tscn b/entities/BombEmitter.tscn index cafcf05..b91a03f 100644 --- a/entities/BombEmitter.tscn +++ b/entities/BombEmitter.tscn @@ -1,17 +1,15 @@ -[gd_scene load_steps=3 format=3 uid="uid://dx6fxak21icvs"] +[gd_scene load_steps=3 format=3 uid="uid://ck1gd38drird6"] -[ext_resource type="Script" path="res://entities/BombEmitter.gd" id="1_110pt"] +[ext_resource type="Script" path="res://entities/BombEmitter.gd" id="1_nvjs2"] -[sub_resource type="CylinderShape3D" id="CylinderShape3D_7yhwp"] +[sub_resource type="CylinderShape3D" id="CylinderShape3D_yy20u"] height = 0.5 -radius = 3.0 +radius = 5.0 [node name="BombEmitter" type="Node3D"] -script = ExtResource("1_110pt") +script = ExtResource("1_nvjs2") [node name="Area3D" type="Area3D" parent="."] -collision_layer = 0 -collision_mask = 4 [node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D"] -shape = SubResource("CylinderShape3D_7yhwp") +shape = SubResource("CylinderShape3D_yy20u") diff --git a/entities/Player.gd b/entities/Player.gd index fe89096..8ffc4b9 100644 --- a/entities/Player.gd +++ b/entities/Player.gd @@ -14,6 +14,9 @@ class_name Player extends CharacterBody3D @onready var geometry: MeshInstance3D = $Geometry @onready var collision: CollisionShape3D = $CollisionShape3D +@onready var dash_stream_player: AudioStreamPlayer = $DashAudioStreamPlayer +@onready var explosion_stream_player: AudioStreamPlayer = $ExplosionAudioStreamPlayer +@onready var spawn_stream_player: AudioStreamPlayer = $SpawnAudioStreamPlayer var bomb_emitter_scene = preload("res://entities/BombEmitter.tscn") @@ -143,6 +146,8 @@ func calc_coloring_position(): func on_player_spawn(): print ("Player " + str(self) + ": spawning") + spawn_stream_player.pitch_scale = 0.8 + randf () * 0.4 + spawn_stream_player.play() func on_player_falling(): print ("Player " + str(self) + ": falling") @@ -154,12 +159,17 @@ func on_dash(): is_dashing = true; dash_time = DASH_DURATION energy = max (0, energy - DASH_ENERGY) + dash_stream_player.pitch_scale = 0.9 + randf () * 0.2 + dash_stream_player.play() func on_drop_bomb(): coloring_bomb_sprite.visible = true; bomb_time = BOMB_DURATION energy = max (0, energy - BOMB_ENERGY) + explosion_stream_player.pitch_scale = 0.6 + randf () * 0.2 + explosion_stream_player.play() + var bomb_emitter : BombEmitter = bomb_emitter_scene.instantiate() bomb_emitter.global_position = global_position get_parent_node_3d().add_child(bomb_emitter) diff --git a/entities/Player.tscn b/entities/Player.tscn index d824754..1e63fc4 100644 --- a/entities/Player.tscn +++ b/entities/Player.tscn @@ -1,6 +1,9 @@ -[gd_scene load_steps=4 format=3 uid="uid://bfyjtfdko3l7o"] +[gd_scene load_steps=7 format=3 uid="uid://bfyjtfdko3l7o"] [ext_resource type="Script" path="res://entities/Player.gd" id="1_w5gy0"] +[ext_resource type="AudioStream" uid="uid://bhbhh78j5rkfe" path="res://assets/sounds/pixabay/dash/whoosh-6316.mp3" id="2_ykhbt"] +[ext_resource type="AudioStream" uid="uid://qeg12ynvjvy0" path="res://assets/sounds/pixabay/explosion/081895_impact_wav-43951.mp3" id="3_mjsr0"] +[ext_resource type="AudioStream" uid="uid://b33xjins3dqpp" path="res://assets/sounds/pixabay/sfx/game-teleport-90735.mp3" id="4_y7abk"] [sub_resource type="BoxMesh" id="BoxMesh_yle83"] size = Vector3(0.24, 0.75, 0.24) @@ -29,3 +32,14 @@ mesh = SubResource("BoxMesh_yle83") [node name="CollisionShape3D" type="CollisionShape3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.496337, 0) shape = SubResource("CylinderShape3D_rwgp3") + +[node name="DashAudioStreamPlayer" type="AudioStreamPlayer" parent="."] +stream = ExtResource("2_ykhbt") + +[node name="ExplosionAudioStreamPlayer" type="AudioStreamPlayer" parent="."] +stream = ExtResource("3_mjsr0") +volume_db = -15.707 +pitch_scale = 0.84 + +[node name="SpawnAudioStreamPlayer" type="AudioStreamPlayer" parent="."] +stream = ExtResource("4_y7abk") diff --git a/entities/SpawnPoint.gd b/entities/SpawnPoint.gd index 11c2039..0e01a56 100644 --- a/entities/SpawnPoint.gd +++ b/entities/SpawnPoint.gd @@ -11,6 +11,11 @@ func _ready(): area3d.connect("body_entered", on_player_enter) area3d.connect("body_exited", on_player_exited) +func _process(_delta): + for player: Player in near_players: + if player.state == Player.PlayerState.Dead: + near_players.erase(player) + func on_player_enter(node: Node3D): var player: Player = node as Player if node == null: diff --git a/project.godot b/project.godot index c05adf4..e437ec2 100644 --- a/project.godot +++ b/project.godot @@ -126,7 +126,7 @@ move={ 3d_physics/layer_1="World" 3d_physics/layer_2="Obstacles" 3d_physics/layer_3="Player" -3d_physics/layer_4="Collectibles" +3d_physics/layer_4="Clutter" [rendering] diff --git a/scenes/World.gd b/scenes/World.gd index 0a64fff..7a4a05e 100644 --- a/scenes/World.gd +++ b/scenes/World.gd @@ -1,6 +1,6 @@ class_name World extends Node3D -@export var players: Array +var players: Array @onready var score_update_timer: Timer = $ScoreUpdateTimer @onready var pixel_count_compute_shader: PixelCountComputeShader = $PixelCountComputeShader @@ -9,6 +9,8 @@ class_name World extends Node3D @onready var level: Node3D = $Level @onready var world_coloring_viewport: SubViewport = $WorldColoringViewport +var player_scene = preload("res://entities/Player.tscn") + const GAME_DURATION_SECONDS = 20 var camera_position: Vector3; @@ -28,30 +30,16 @@ var game_state_last : GameState = GameState.Finished # Called when the node enters the scene tree for the first time. func _ready(): - var player1: CharacterBody3D = $Player1 - var player2: CharacterBody3D = $Player2 - - players.append(player1) - players.append(player2) - - if players.size() == 1: - world_coloring_material = load("res://materials/WorldColoringMaterialPass.tres") - world_coloring_material.set_shader_parameter("world_color_texture", world_coloring_viewport.get_texture()) - else: - world_coloring_material = load("res://materials/WorldColoringMaterialPassVersus.tres") - world_coloring_material.set_shader_parameter("world_color_texture", world_coloring_viewport.get_texture()) - camera_position = camera.global_position score_update_timer.connect("timeout", update_score) find_spawn_points(level) - - for player: Player in players: - player.state = player.PlayerState.Dead - + + spawn_players() apply_world_coloring_recursive(level) + # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(_delta): if game_state_last != game_state: @@ -112,7 +100,7 @@ func _physics_process(_delta): if not spawn_point.is_occupied(): occupied = false - player.global_position = spawn_point.global_position + player.global_position = spawn_point.global_position + Vector3.UP * 2 player.state = Player.PlayerState.Alive spawn_point.near_players.append(player) @@ -150,6 +138,42 @@ func update_score(): if players.size() > 1: players[1].score = pixel_count_compute_shader.blue_score +func spawn_players(): + var players_node = $Players + + var player1: Player = player_scene.instantiate() + player1.color = Color(1, 0, 0, 1) + player1.coloring_sprite_path = world_coloring_viewport.get_node("Player1Sprite").get_path() + player1.coloring_bomb_sprite_path = world_coloring_viewport.get_node("Player1BombSprite").get_path() + var player2: Player = player_scene.instantiate() + player2.color = Color(0, 0, 1, 1) + player2.coloring_sprite_path = world_coloring_viewport.get_node("Player2Sprite").get_path() + player2.coloring_bomb_sprite_path = world_coloring_viewport.get_node("Player2BombSprite").get_path() + + players_node.add_child(player1) + players_node.add_child(player2) + + players.clear() + + players.append(player1) + players.append(player2) + + if players.size() == 1: + world_coloring_material = load("res://materials/WorldColoringMaterialPass.tres") + world_coloring_material.set_shader_parameter("world_color_texture", world_coloring_viewport.get_texture()) + else: + world_coloring_material = load("res://materials/WorldColoringMaterialPassVersus.tres") + world_coloring_material.set_shader_parameter("world_color_texture", world_coloring_viewport.get_texture()) + + for player: Player in players: + player.state = player.PlayerState.Dead + +func remove_players(): + var players_node = $Players + + for player: Player in players_node.get_children(): + player.queue_free() + func on_game_startup(): print("Switching to startup") stop_gameplay() diff --git a/scenes/World.tscn b/scenes/World.tscn index 20db0ef..d20f00f 100644 --- a/scenes/World.tscn +++ b/scenes/World.tscn @@ -136,3 +136,5 @@ player_index = 1 [node name="SpawnPointPlayer3" parent="Level" instance=ExtResource("8_ykvyf")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.55561, 0, 3.26255) + +[node name="Players" type="Node" parent="."]