コード例 #1
0
ファイル: Sound_Emitter.cs プロジェクト: bclnet/DroidNet
        // 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?
        }
コード例 #2
0
ファイル: Sound_Emitter.cs プロジェクト: bclnet/DroidNet
 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
     };
 }
コード例 #3
0
ファイル: Sound_Emitter.cs プロジェクト: bclnet/DroidNet
        // 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();
                }
            }
        }