X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Ftarget_music.qc;h=b1957038eb4eb9b7c1a97574713ceed3e42bf2e4;hb=e0c1470ac5fcae5caeea336e35909475880357df;hp=0d8b1062660862ad4537bac496bfd23dfc5c1dec;hpb=18f3145c8cb1d73026741111785e0a6785899768;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/target_music.qc b/qcsrc/client/target_music.qc index 0d8b10626..b1957038e 100644 --- a/qcsrc/client/target_music.qc +++ b/qcsrc/client/target_music.qc @@ -1,14 +1,16 @@ +float music_disabled; entity music_default; entity music_target; entity music_trigger; .float state; +.float lastvol; void TargetMusic_Advance() { // run AFTER all the thinks! entity best, e; - float s0; + float vol, vol0; best = music_default; if(music_target && time < music_target.lifetime) best = music_target; @@ -16,16 +18,16 @@ void TargetMusic_Advance() best = music_trigger; for(e = world; (e = findfloat(e, enttype, ENT_CLIENT_TRIGGER_MUSIC)); ) if(e.noise) { - s0 = e.state; + vol0 = e.lastvol; if(getsoundtime(e, CHAN_VOICE) < 0) { - s0 = -1; + vol0 = -1; } if(e == best) { // increase volume if(e.fade_time > 0) - e.state = min(1, e.state + frametime / e.fade_time); + e.state = bound(0, e.state + frametime / e.fade_time, 1); else e.state = 1; } @@ -33,25 +35,32 @@ void TargetMusic_Advance() { // decrease volume if(e.fade_rate > 0) - e.state = max(0, e.state - frametime / e.fade_rate); + e.state = bound(0, e.state - frametime / e.fade_rate, 1); else e.state = 0; } - if(e.state != s0) + vol = e.state * e.volume * cvar("bgmvolume"); + if(vol != vol0) { - if(s0 < 0) - sound(e, CHAN_VOICE, e.noise, e.volume * e.state * cvar("bgmvolume"), ATTN_NONE); // restart + if(vol0 < 0) + sound(e, CHAN_VOICE, e.noise, vol, ATTN_NONE); // restart else - sound(e, CHAN_VOICE, "", e.volume * e.state * cvar("bgmvolume"), ATTN_NONE); + sound(e, CHAN_VOICE, "", vol, ATTN_NONE); + e.lastvol = vol; } } music_trigger = world; + + if(best) + bgmtime = getsoundtime(best, CHAN_VOICE); + else + bgmtime = gettime(GETTIME_CDTRACK); } void Net_TargetMusic() { float vol, fai, fao, tim, id; - string noi, s; + string noi; entity e; id = ReadShort(); @@ -70,13 +79,13 @@ void Net_TargetMusic() { e = spawn(); e.enttype = ENT_CLIENT_TRIGGER_MUSIC; + e.count = id; } - s = e.noise; - if(e.noise) - strunzone(e.noise); - e.noise = strzone(noi); - if(e.noise != s) + if(e.noise != noi) { + if(e.noise) + strunzone(e.noise); + e.noise = strzone(noi); precache_sound(e.noise); sound(e, CHAN_VOICE, e.noise, 0, ATTN_NONE); if(getsoundtime(e, CHAN_VOICE) < 0) @@ -94,6 +103,12 @@ void Net_TargetMusic() if(tim == 0) { music_default = e; + if(!music_disabled) + { + e.state = 2; + localcmd("cd stop\n"); // just in case + music_disabled = 1; + } } else {