From b108328085d91ccc6df6c2d006d6d67642dd71cc Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Fri, 12 Aug 2022 18:17:26 +1000 Subject: [PATCH] sound for adding fuel --- crafts.lua | 7 +-- init.lua | 91 ++++++++++++++++++++++-------------- sounds/sum_airship_fire.ogg | Bin 0 -> 9201 bytes 3 files changed, 61 insertions(+), 37 deletions(-) create mode 100644 sounds/sum_airship_fire.ogg diff --git a/crafts.lua b/crafts.lua index f161362..2c57a49 100644 --- a/crafts.lua +++ b/crafts.lua @@ -16,13 +16,14 @@ minetest.register_craftitem("sum_airship:hull", { groups = { craftitem = 1 }, }) if true then - local w = "default:paper" - local b = "group:wood" + local w = "group:wool" + if not minetest.get_modpath("farming") then w = "default:paper" end + local b = "default:boat" local m = "default:steel_ingot" if minetest.get_modpath("mcl_boats") and minetest.get_modpath("mcl_wool") and minetest.get_modpath("mcl_core") then - w = "mcl_wool:white" + w = "group:wool" b = "mcl_boats:boat" m = "mcl_core:iron_ingot" end diff --git a/init.lua b/init.lua index 9b3971f..90b44b9 100644 --- a/init.lua +++ b/init.lua @@ -180,57 +180,73 @@ local boat = { local sounds = { engine_idle = { - gain = 0.2, + sound_name = "sum_airship_lip_trill", + gain = 1.4, max_hear_distance = 10, loop = false, + pitch = 0.75, }, engine_stop = { - gain = 0.8, + sound_name = "sum_airship_lip_trill_end", + gain = 2.2, max_hear_distance = 10, loop = false, }, engine_boost = { - gain = 1, + sound_name = "sum_airship_lip_trill", + gain = 40, max_hear_distance = 10, loop = false, }, } -function boat.sound_play(self, name, sound_params) - local params = sound_params +function boat.sound_play(self, sound_obj, sound_instance) + local params = sound_obj params.object = self.object - return minetest.sound_play(name, params) + sound_instance.handle = minetest.sound_play(sound_obj.sound_name, params) + sound_instance.playing = true + sound_instance.time_elapsed = 0 end -function boat.update_sound(self, dtime) +function boat.sound_stop(sound_instance) + if sound_instance.handle then + minetest.sound_stop(sound_instance.handle) + end + sound_instance.playing = false + sound_instance.time_elapsed = 0 + sound_instance.handle = nil +end + +function boat.update_sound(self, dtime, forward) local fuel = self._fuel + local is_thrust = forward ~= 0 and self._driver if not fuel or not type(fuel) == "number" then return false end - if fuel > 2 then - if self._sounds.engine.time_elapsed > 2.1 - and self._sounds.engine.handle - and self._sounds.engine.playing then - minetest.sound_stop(self._sounds.engine.handle) - self._sounds.engine.playing = false - self._sounds.engine.time_elapsed = 0 + + if self._sounds.engine.time_elapsed > 2.1 + and self._sounds.engine.handle + and self._sounds.engine.playing then + boat.sound_stop(self._sounds.engine) + end + if not self._sounds.engine.playing then + if self._fuel > 1 then + boat.sound_play(self, sounds.engine_boost, self._sounds.engine) + elseif is_thrust then + boat.sound_play(self, sounds.engine_idle, self._sounds.engine) end - if not self._sounds.engine.playing then - self._sounds.engine.playing = true - self._sounds.engine.time_elapsed = 0 - self._sounds.engine.handle = boat.sound_play(self, "sum_airship_lip_trill", sounds.engine_boost) - if self._sounds.engine_stop.playing then - minetest.sound_stop(self._sounds.engine_stop.handle) - self._sounds.engine_stop.playing = false - self._sounds.engine_stop.time_elapsed = 0 - end + if self._fuel > 1 and self._sounds.engine_stop.playing then + boat.sound_stop(self._sounds.engine_stop) end - elseif self._sounds.engine.playing - and self._sounds.engine_stop.time_elapsed then - minetest.sound_stop(self._sounds.engine.handle) - self._sounds.engine.playing = false - if not self._sounds.engine_stop.playing then - self._sounds.engine_stop.playing = true - self._sounds.engine_stop.time_elapsed = 0 - self._sounds.engine_stop.handle = boat.sound_play(self, "sum_airship_lip_trill_end", sounds.engine_stop) + end + + if self._fuel <= 1 and self._sounds.engine.playing then + if self._fuel > 0 and not self._sounds.engine_stop.playing + and self._sounds.engine_stop.time_elapsed == 0 then + boat.sound_play(self, sounds.engine_stop, self._sounds.engine_stop) + end + if not is_thrust + or (self._sounds.engine_stop.time_elapsed == 0 + and self._sounds.engine_stop.playing) then + boat.sound_stop(self._sounds.engine) end end end @@ -264,6 +280,11 @@ function boat.on_rightclick(self, clicker) clicker:set_wielded_item(item) end self._fuel = self._fuel + sum_airship.fuel_time + boat.sound_stop(self._sounds.engine) + minetest.sound_play("sum_airship_fire", { + gain = 1, + object = self.object, + }) elseif self._passenger or not clicker or clicker:get_attach() then else attach_object(self, clicker) @@ -516,11 +537,13 @@ function boat.on_step(self, dtime, moveresult) local chimney_pos = boat.get_chimney_pos(self) if true or has_controls then -- only do it if you got the input - boat.update_sound(self, dtime) + boat.update_sound(self, dtime, forward) end + local is_thrust = self._driver and forward ~= 0 + local spread = 0.06 - if self._fuel > 0 or math.random(0,100) > 80 then + if self._fuel > 0 or (math.random(0,100) > 80 and is_thrust) or math.random(0,100) > 95 then minetest.add_particle({ pos = vector.offset(chimney_pos, math.random(-1, 1)*spread, 0, math.random(-1, 1)*spread), velocity = vector.add(wind_vel, {x=0, y=math.random(0.2*100,0.7*100)/100, z=0}), @@ -534,7 +557,7 @@ function boat.on_step(self, dtime, moveresult) -- animations if self._fuel > 0 then self.object:set_animation(self.animations.boost, 25) - elseif self._driver then + elseif is_thrust then self.object:set_animation(self.animations.fly, 25) else self.object:set_animation(self.animations.idle, 25) diff --git a/sounds/sum_airship_fire.ogg b/sounds/sum_airship_fire.ogg new file mode 100644 index 0000000000000000000000000000000000000000..b7a9bb2c7916da04c76c7a2ad3a2166f2a17b91f GIT binary patch literal 9201 zcmaiYc|4R|^!Q`RmSin!k+DYE8C#ZY!-!$5Av-a|7?LH~cd~|2$cUn{N4B!>`^cW1 z>{(0rJ@mfs_xt_pcRzRTbDp!_d+s^+o@ega+v@>@z(36->xI)9IJ9}=GQl+hPgi#< zNAwwj;BMjB0{{Y~2+p6M2=1Lp{@2bV&nQ~yNxD=jr~j)xBl@dG9HbgKK61Eq&)uHg z+0n}2TsgZ2yNHmml#r;f1Us*`s~5YlkPsKUovoLxJ3HFJ*4Y`&cV>g&!e1pfl#~q! z00jVmpc(m9ap)_-)XYjcOmnPCJx*&(N?J65tRh;bom}X6j@&Gza8urAeep=(Odw40 zF@12PA{j?8mz+^T5RV)Pg+oD{;~9=x>EA&G>Hty|$=HJDgrq2g7NibYgH@nL)F5t| zJ@~THr}UsgD98*ESJw$5fiANKe-+@33~UnmbS0QroHsgfUZ`y-=%P}1dXR?rA#P+ZcmY6~P&hKtIt3cPi#H2lGS8t_QP=*)Ra{0Faf#8=1pPLCsu3 z0ki=CwSq2vs~c{E=dz5c(qY9= zHmrKNcS1&F6?6%U?rC4d3ip6e4%V159pqcWHf0%8{DpXmz5CMn&v0%%D-WT=R}Ki3Y2!857KLerBpJM!cEl5H;bAOdMI(c zk<$irDLtsnz{IJj90B9QB_Sxz{l^aaUWtUsCSLbUvsF0X8>~A8fBs*0vY%}Y0Nne@ z+E2swKYg3EmxfE17VLt9BI1L3DoBj&ND9Wd($Dl;h}nVPB-jrzmPRSI#{Z}PT{@WQ z>|n6}T?k(bBf1N^3`wH?cbVXZ0*~m`&f`s^1fn?r=^hZcwMOBDBC~MclNWwX}N|Gf=E5VVT8)C9`gU!;DcgtI?%D?X9?S9g6=9x zja6JOOl{-M%^J~$F6NGO@djd-sD-Uxv?7F+DO*w$gOe_RP9p|%!MqY~6K-O4@6q@H zQR#v5v*B8xY6Y){bYaDLCNeNwg}&1q7JTjC#hGZnW5ek?y)6cX08;RGF}p9Gfk1&C z0G?4IDELB>ta|vC;t?ItMOLdw=o_qc50p1EsRPQBnMlir17G=;ut_}{i`c{g4PG!l z8VJCj60ewz3P8;Re1F6WPZWdGbHV9U?$Mi#(5Vb3i*<{M>*^!n^zdPQr12FvGKC8+ z3Ww7p_2^WP3`o5cII`TfR}3|(kDR=M9Imi6-S;z0!Ay$6N6%hCDh7Ntt3XYr{-+8# zqK_Px0IA}-9%i~oTVqhOrLTHWC}1`&QC$arftg%pQJ#?u6&ox=f%+yr%q&tdlMbuZI{HX6 zL)*~Hf0MF=>9r57kOBmcSOKXoD=7*kNT zxU25H>}NNRPYu+B(#tWm?Z`ngR#n5isAG@;8DOA9FJ&X4DN#RF`*Gk zd<7v0L=Ljij zt=NW5On~y>lFkWTQ2xvy@CXGDIuilDW+NyMS5PdBlmnLl)8fK0D)Sd7Cs~1nZzj%F z%`ecrxaI_yGZ)UtR0~?ch>kro&U0=YSB^k9C8H6bDqAWTKd1@@69#7ms-jYYfvWUi z;H<1}@(mlo9u|YDG==dxh$xVt2@?iYxfCzp6&(a~X{~v=TCP~XFDhqN=KE`W_=Ndc~8s%6DG-43>RL?6(bW~#3n@wFR|w$gcn(Z5h6?M zNePHE2tk3%O+YwhCm|3Ii@>}mJj;6)F|I45VA^s4@f5&=N35McWp%}nqn-loJ9qoV zz|3Mh$AH;~>imnrU?$IbkQg(wgS)!oU;u*wE(c117~_4vLH%<~MTmtM(h$U?*iIXn zo$*v)Oc@P^&oC%c$xzb~%;Z6cB~-f7Wwmj&=r>lFqhN~>x~KLa9^oX6H$iXK zrsAy%#g`_6sK1ucTfeW`|L(KNS7GAREqBNstW!K}g5EkSCZmK8CW5xW0`q<}bm>~~ z))!Js0PqST0`3OJh!#RJ8DdGUo~@RQ9AKxm0yh{7<{`Ljked~}oO!tr=Qt`QGA^5c zak!-DzkKAlq=bL?z&b)?DGQVZaR}JCEZG^f@*j@xtg=0)@^SqK;ex4Qyk~r%Z>g2Q z;U6#mi%a+qhd}&`1GnlQz9fVOSc0-jfuYK%$isxZV)>f<>a~FL_*DP^`X&Rth)l&U zVfz9OGU5CJB^Y0*uyO}`9-kfsM+gTxl7le2*+8=yyx6IU0W#19LJB%UL;xifwLGaJ zkHVueu)0;U2~`&pAPyr<255vC00=klJfT8Jv&vZW1rMh0fwwlKsgs3BKXDome~D+GIA{0)GOY{O*uOM)wY7FZZrtGH zS@tAV4YdYSgaY7_)T-S*?D7d61_ ziPht{^~aO=gLgrl*9BmCS<GD^XZWm|_j{wM;7D=~Ht@!(IX6`PF&X6fuv<-yc*T zhO${Rt5rJB<{NWR_2PSWzZj^Yn-AIMH2PjWYSVwh!D>s3?)f==O3ttK`_2zp!mLw0 zEtM%g(GmC~oxBV;RAcZYq??*)GhlMG{%&KO)zjzk_HRAfXSEZVdg#9kQT*ak%`E7; zae|I{6Yfvxd9^v5g7F(~fhL2qP7AT)cM(oT-H01YrTHYuTY$gx@wzYT*Da}wr&E}F z&Tm(xtEqf!@_6oWk*~p|$7xj#R>MY5l*?FGoJx zRIRhrN!wki$dERo%gw7D>x?TFSlaxY4Xug!(oZNN#6%LC5A7xSm65R~ECHWDT0bb$ z_+{$09eOyLMy7td7EyfKz`oo<6OLESZpR7}%12L%nS?!Xj$6vX9&UVQQ)9xg5oZ{W zU@j@xwRCOVWm-Ftnb-_}a^gnS>oxCb41eoJGvo2g?2#1oPFlM+y5^9IXgp2?Ju7nD zVc{he+rZ_owco9etxRlBm5)SUKK;1#2+=WTK^Xm!RY5_2e=c@84{ArH6TT)OgPTh+ zF9`FQ^4AR-b0fK3^LhI|B$fq{^bLVGxu{7Rcao9#Q%_RiMj{iclI;gGG!Ct7P>O5& zgSnXVyV=VXKVE03HE_T}Luhzw8a7H!EsiX6MsBk1!J5XDe|QS6y}X&m^V6L-i++w zicKy|8dg1??6S+c*4;-^_NVNtRJYTCTEvaYC^O6XD&sYEEtTg!s`Y*TCd^JdSqwKB zd#xM8zZ*=t9kjw}LZ@KCH-Kwhll1ICHy+nquW=Rip<+UJG1=Hr)^21G;}@=>75CGI zy`1|EXIwX9#bjD>Y_5rD{@GA^o=zfer7d!(IoXA3PVJ!RJ*geRClYUa#Mfr}DtF$w zqa?^?@DCO8+%Gp)y|)dPju}V0?UJA_Z)N0aM(uRCpWTX~E6S6j`vhSN<`Y1y`uKlM$&hxCo8nK8Nk;V0(shkwfAGqb| zZ~3qd2&XAG!G4F_Gjhf6ZXec;j z+EPDX>s)t7A}a6VO$#50^KDB`--y(nXycIW#d~(x*7B{+dGj?5HlxG3-kS6W5o|+8 zzJE}bOG7dW%-o6(-zkiLv^rMT){-5GSTW@`jahW`W2_w=oN~QeP~e1@%q%cWYl2w2 zq`m7Lgy>(5DCTCY4n<}EN{Oa;SzL3}$GkM+fgkJ>+ z2?C~4%uJ4PZohL6!ne8@guVW_!k=scHpbY8`+4a^I#+=2S}CDVF3NMg{`tq{CEXt? zil&c|J)wZJX_|xA?{x;z2RlH(uYKCo2W)EZxuj=y+$bf<%(7ok3lln9$U01tW)TBh zgv%?dx}?RBiE8tI`+wT)Xo*KM0 zcqd+8`$O3furZTedE{03CQX3`*n%2VCv~p)YKY1~d|2G#gT}eiF_)bup9~B80tP|) zz=`w9FZTBje4&-;bq6D(Qj|^`w#s#Empag`QJXZsivcaO1+CUyf&oARXg%W#Zhf5F^m<7*p}*$wJC%=3i*sg|Hk15Nu4_|4^zLZ{Hq3LBnzY}_g@2_q zLDn98h3l6(uuY3{r)YIH+#q+ZvHA(D$X6ScWA=pw9cO9 z@~pkKnMwzDH+9cZ-h!k10!CA1FgD*S(&5^U9c!!RZ-_vroQF@9ruI{z;oNHD#-8}h zvhrSzy~L}7HN=svZ^!({jA`J4kTG*nbZnK}18fc{xDO=8I+*zk0wc#T=Grn5!d~gEs8dn@~-=kzE zl|Vgb(5bj2N%qP8pOFuIF57mz4zJ~#x7MEa&NB2Oc>SVGfcVvc8cW#h^6M?1Ch0?^ z;6?8FKPN7h)6N%Br9X1IetYhIdivw`*X+A9Zk5XX?61~m;Q^Li=0+1aDdP3B>y@6r zpSN|-ez-eY^XwQ}*%Fi)uUvR1gn98uCSz+VVl6my=DN)h4Y7FWhKPW;MxUTR#k1D|tG1 z;MrpSrB}lOlZ)HBI?Lh3{Dj=wxc}jr+G*Xkp*P=-r1&eA&mUN?jwOt8Zv=Pg=ezl< z7LHH8ysw+0jj3&QDQQ`8eQdiFy-ZcPP$c+S+yF&o_A)t6K>ZS%kaIwkywq;@dR@)Y zC*Ph%_m{)`OzLr&5ER2v)UvqocNrQXehHepZ6_Psxn27fR9$x1wue`UsbeYUNP=8} zI)|EMig3cXDv>uHaj!$8u1pf%1*`Nt4Y~pw;toGC>r`&#n;N7H3*0hexwp9!^&iyC zsHz9A5fw0-FG~JS=iOfA{5(Sz>{b#f?HD8chrGOmxd-WH{ArE_`Vf`YlU8OW*B&43 zDo3>AWngR9RzJ^FH8%9#+78kh2T}6bQ+a6hgU24NjrOaW^>SdpZ0;rFTFIA-Zk0RK%)%x+OzO3lenZSFCA)z!nJaO_6j>9 z_D?trgSjVz;N%zGU-a2Va_RVYJdgWEr#j7ftNs&@lj-iY0-q1d>uZ%Sm7|PN{zD%{ z=iW7~;kDE(hy02HHShuaz0xWv-n5BCP8BA>%W&dU1MfSpDXnU z`l}fI39Th-P`*!Ubo}e0thw?ii(-66V*Pi%8_q`z_CD%l19Poin}(wU)}L{LUhK-D z>2cq#ArV8y0W_1aT_w_GbZY&l`H2Nt5me78r~S2vKl$Xj5+3H(mhfMm^cBM5;6rmePG0Vy++8^}p~xSk{Dw#XN=PO!N{;+*Uc_WQtnfAmh-JrDi(0 zK}2O(c|*gCC`Pa3$?XrDxtKSyeM|Mi?KKr)-K^{%y*f|Y3ZG=ZxyKqkBtScSs#a|A zWJuMH@xw^Glx708nayWHs^D*wAx`t*;fI4T%)YJRcaNOmsRx{OZw%ZMD`j~SYA5j) z;V%WNtl9XKxfXJxsfoGXfvMbm&Anfvus5pE=P9>}$;|}mp-hFK1a8&aoJk7azJ{r; z$<3iZF zxf>SsVtjsPG3a4KB5N;uSg3^0>tDx|3}dU}1VithD_;nU7VuRbT9OOdco*?o^4OKX ze2Y7`35=rH3naR2@6lf>@3lyXu$FSmjel87piWvUNgQ_c>EWF*Iz8FSs`Ni*alJnb zk7-vyb+Y$9$f-?9%*Wu@mMocR z%t_H2qMXXlL_B<6jILCyi&yP=Qw}83R6Y37t7-UZDXXl*{8iX}rnMD@GP0 z=!)S*hdQmMSo6y#yG-s(p8PQ?TGk_u{Pj#OaFQgLKHkiA5$Qx6tMEX&WN#q#Iy|*w zUdGwE8hSv4$5*T~E~lz@#N$Z(y(VJ9q8+Vk4L43Bu72%7*?28sGs!B7)3|ffXz6*y zz4ud@G{=AaJ`EANGnP=kSb58`#57eb`+)Vvt9Fie1NT(|d`Ux4{em?6qJ*rvRu8R~ z2lWN~dMJnFe8j2}oo`yx)Vr7#E~IBC7m8GwlRQ89l`dS`jw#E0y|gTwrnsYq_<3Kn zX5qv)@0Xg%uZQl{=KU)h)Ty|==>xpv9kkw`RQpL6=Umyb`rhW^0g;l7KenM6Tu>vi*|L4yRA`rYuZ^TB{&{Wq^^R+x=%Im%pf$y_cwD_mf58af( zI;{h0*F7_WEk#<^tQ2+d(VRt)$>#^Jj82zKpC-y0uYdHjeU}*hT5QdxAzCI0vC@P2hQNOpVS2NG*+GNZNF~0IlZT$gTvca*?qxm>Eo4l$=uD#PS zEmmyL=g972F;K}$*GZBRgSBDplQ-uH}DZQYa(JYeyb@bp-L_Af*vKj&!$Kw-5hk=ALjBc_UhEjPnLC^ej0VP zanBA?dmUUX90}#UCR8uKmZC663w}Pm<3hmVvwOpCkAQ&wc4jAIF!dMwJGo_9|CLu= z7N>lI#eP~cuBZ@(-Tv-DctfOomKe_3}FGJ%2Qu3_p+R_ga)lvXM~*l$J$=r&co8(rLd`q zO`6hajXKk$e*1@{2>RffJ6#An9l3k@T<*d~avhY;iQbAq1k;PLK?fIl#ptE={C*T$ zC~sviAYoSml<&4R#g+QY6sZfyQwxrYwbJ&%QE71tq>{a))#uiyHW!Ys zS1q~JTTpwx8;ry2zQ3VX6Dywzw@dSqi~Yvt%26-b-0@EHC!TN$<9uV5`>6lu zu%7?Tk7E~z9a9*?!%PWrAsGJ?-Gl~qZi4BNn)3B|r+QAej;AT8yy{hJCXIZm{cqb* zvg!N|kx^O+##k6DsWj?Cw=GG;XlDH7EEH7gwzNybX%xkVC0|$j80n<3Q}{Vu-0U`KvL+_0H8VRAdd48YRK>Kth?#wbcFczaK?yyeca{@1M?!eof?blem+i6>G zFWV}nUWI?WMLx>R-3obcP`aA2J&dBu4E4VKZFrfb%d{qBw1f8HwrvL41$Lp8#~Hh; z%5!ppanr#;fp4!j`g4rFTvvHW)zca%AQ2EZF1?T>b?jN`qUApQ+vdAo^<{oYJ!SoO$? zVTk}S5%A;#*4 zn~pt2JzwXLqb9K~=9-=lm=0wqw!{O