// the parms specified will be the default overrides for all sounds started on this emitter. null is acceptable for parms public virtual void UpdateEmitter(Vector3 origin, int listenerId, SoundShaderParms parms) { if (parms == null) { common.Error("SoundEmitterLocal::UpdateEmitter: null parms"); } if (soundWorld != null && soundWorld.writeDemo != null) { soundWorld.writeDemo.WriteInt((int)VFileDemo.DS.SOUND); soundWorld.writeDemo.WriteInt((int)SCMD.UPDATE); soundWorld.writeDemo.WriteInt(index); soundWorld.writeDemo.WriteVec3(origin); soundWorld.writeDemo.WriteInt(listenerId); soundWorld.writeDemo.WriteFloat(parms.minDistance); soundWorld.writeDemo.WriteFloat(parms.maxDistance); soundWorld.writeDemo.WriteFloat(parms.volume); soundWorld.writeDemo.WriteFloat(parms.shakes); soundWorld.writeDemo.WriteInt(parms.soundShaderFlags); soundWorld.writeDemo.WriteInt(parms.soundClass); } this.origin = origin; this.listenerId = listenerId; this.parms = parms; // FIXME: change values on all channels? }
public void OverrideParms(SoundShaderParms base_, SoundShaderParms over, out SoundShaderParms o) { if (over == null) { o = base_; return; } o = new SoundShaderParms { minDistance = over.minDistance != 0 ? over.minDistance : base_.minDistance, maxDistance = over.maxDistance != 0 ? over.maxDistance : base_.maxDistance, shakes = over.shakes != 0 ? over.shakes : base_.shakes, volume = over.volume != 0 ? over.volume : base_.volume, soundClass = over.soundClass != 0 ? over.soundClass : base_.soundClass, soundShaderFlags = base_.soundShaderFlags | over.soundShaderFlags }; }
// can pass SCHANNEL_ANY public virtual void ModifySound(int channel, SoundShaderParms parms) { if (parms == null) { common.Error("SoundEmitterLocal::ModifySound: null parms"); } if (SoundSystemLocal.s_showStartSound.Integer != 0) { common.Printf($"ModifySound({index},{channel})\n"); } if (soundWorld != null && soundWorld.writeDemo != null) { soundWorld.writeDemo.WriteInt((int)VFileDemo.DS.SOUND); soundWorld.writeDemo.WriteInt((int)SCMD.MODIFY); soundWorld.writeDemo.WriteInt(index); soundWorld.writeDemo.WriteInt(channel); soundWorld.writeDemo.WriteFloat(parms.minDistance); soundWorld.writeDemo.WriteFloat(parms.maxDistance); soundWorld.writeDemo.WriteFloat(parms.volume); soundWorld.writeDemo.WriteFloat(parms.shakes); soundWorld.writeDemo.WriteInt(parms.soundShaderFlags); soundWorld.writeDemo.WriteInt(parms.soundClass); } for (var i = 0; i < SoundSystemLocal.SOUND_MAX_CHANNELS; i++) { var chan = channels[i]; if (!chan.triggerState) { continue; } if (channel != ISoundSystem.SCHANNEL_ANY && chan.triggerChannel != channel) { continue; } OverrideParms(chan.parms, parms, out chan.parms); if (chan.parms.shakes > 0f && chan.soundShader != null) { chan.soundShader.CheckShakesAndOgg(); } } }