Exemplo n.º 1
0
        public virtual void TryPlay(SoundInfo info)
        {
            if (this.resolvedGrains.Count == 0)
            {
                Log.Error(string.Concat(new object[]
                {
                    "Cannot play ",
                    this.parentDef,
                    " (subSound ",
                    this,
                    "_: No resolved grains."
                }), false);
                return;
            }
            if (!Find.SoundRoot.oneShotManager.CanAddPlayingOneShot(this.parentDef, info))
            {
                return;
            }
            ResolvedGrain      resolvedGrain      = this.RandomizedResolvedGrain();
            ResolvedGrain_Clip resolvedGrain_Clip = resolvedGrain as ResolvedGrain_Clip;

            if (resolvedGrain_Clip != null)
            {
                if (SampleOneShot.TryMakeAndPlay(this, resolvedGrain_Clip.clip, info) == null)
                {
                    return;
                }
                SoundSlotManager.Notify_Played(this.parentDef.slot, resolvedGrain_Clip.clip.length);
            }
            if (this.distinctResolvedGrainsCount > 1)
            {
                if (this.repeatMode == RepeatSelectMode.NeverLastHalf)
                {
                    while (this.recentlyPlayedResolvedGrains.Count >= this.numToAvoid)
                    {
                        this.recentlyPlayedResolvedGrains.Dequeue();
                    }
                    if (this.recentlyPlayedResolvedGrains.Count < this.numToAvoid)
                    {
                        this.recentlyPlayedResolvedGrains.Enqueue(resolvedGrain);
                    }
                }
                else if (this.repeatMode == RepeatSelectMode.NeverTwice)
                {
                    this.lastPlayedResolvedGrain = resolvedGrain;
                }
            }
        }
Exemplo n.º 2
0
        public static void PlayOneShot(this SoundDef soundDef, SoundInfo info)
        {
            if (!UnityData.IsInMainThread)
            {
                return;
            }
            if (soundDef == null)
            {
                Log.Error("Tried to PlayOneShot with null SoundDef. Info=" + info);
                return;
            }
            DebugSoundEventsLog.Notify_SoundEvent(soundDef, info);
            if (soundDef == null)
            {
                return;
            }
            if (soundDef.isUndefined)
            {
                if (Prefs.DevMode && Find.WindowStack.IsOpen(typeof(EditWindow_DefEditor)))
                {
                    DefDatabase <SoundDef> .Clear();

                    DefDatabase <SoundDef> .AddAllInMods();

                    SoundDef soundDef2 = SoundDef.Named(soundDef.defName);
                    if (!soundDef2.isUndefined)
                    {
                        soundDef2.PlayOneShot(info);
                    }
                }
                return;
            }
            if (soundDef.sustain)
            {
                Log.Error("Tried to play sustainer SoundDef " + soundDef + " as a one-shot sound.");
                return;
            }
            if (!SoundSlotManager.CanPlayNow(soundDef.slot))
            {
                return;
            }
            for (int i = 0; i < soundDef.subSounds.Count; i++)
            {
                soundDef.subSounds[i].TryPlay(info);
            }
        }
Exemplo n.º 3
0
        public virtual void TryPlay(SoundInfo info)
        {
            ResolvedGrain resolvedGrain;

            if (this.resolvedGrains.Count == 0)
            {
                Log.Error("Cannot play " + this.parentDef + " (subSound " + this + "_: No resolved grains.");
            }
            else if (Find.SoundRoot.oneShotManager.CanAddPlayingOneShot(this.parentDef, info))
            {
                resolvedGrain = this.RandomizedResolvedGrain();
                ResolvedGrain_Clip resolvedGrain_Clip = resolvedGrain as ResolvedGrain_Clip;
                if (resolvedGrain_Clip != null)
                {
                    SampleOneShot sampleOneShot = SampleOneShot.TryMakeAndPlay(this, resolvedGrain_Clip.clip, info);
                    if (sampleOneShot != null)
                    {
                        SoundSlotManager.Notify_Played(this.parentDef.slot, resolvedGrain_Clip.clip.length);
                        goto IL_00a6;
                    }
                    return;
                }
                goto IL_00a6;
            }
            return;

IL_00a6:
            if (this.distinctResolvedGrainsCount > 1)
            {
                if (this.repeatMode == RepeatSelectMode.NeverLastHalf)
                {
                    while (this.recentlyPlayedResolvedGrains.Count >= this.numToAvoid)
                    {
                        this.recentlyPlayedResolvedGrains.Dequeue();
                    }
                    if (this.recentlyPlayedResolvedGrains.Count < this.numToAvoid)
                    {
                        this.recentlyPlayedResolvedGrains.Enqueue(resolvedGrain);
                    }
                }
                else if (this.repeatMode == RepeatSelectMode.NeverTwice)
                {
                    this.lastPlayedResolvedGrain = resolvedGrain;
                }
            }
        }
Exemplo n.º 4
0
 public virtual void TryPlay(SoundInfo info)
 {
     if (resolvedGrains.Count == 0)
     {
         //Log.Error("Cannot play " + parentDef + " (subSound " + this + "_: No resolved grains.");
         //Log.Message("Cannot play " + parentDef + " (subSound " + this + "_: No resolved grains.");
     }
     else
     {
         if (!Find.SoundRoot.oneShotManager.CanAddPlayingOneShot(parentDef, info) || (Current.Game != null && !gameSpeedRange.Includes((int)Find.TickManager.CurTimeSpeed)))
         {
             return;
         }
         ResolvedGrain      resolvedGrain      = RandomizedResolvedGrain();
         ResolvedGrain_Clip resolvedGrain_Clip = resolvedGrain as ResolvedGrain_Clip;
         if (resolvedGrain_Clip != null)
         {
             if (SampleOneShot.TryMakeAndPlay(this, resolvedGrain_Clip.clip, info) == null)
             {
                 return;
             }
             SoundSlotManager.Notify_Played(parentDef.slot, resolvedGrain_Clip.clip.length);
         }
         if (distinctResolvedGrainsCount <= 1)
         {
             return;
         }
         if (repeatMode == RepeatSelectMode.NeverLastHalf)
         {
             while (recentlyPlayedResolvedGrains.Count >= numToAvoid)
             {
                 recentlyPlayedResolvedGrains.Dequeue();
             }
             if (recentlyPlayedResolvedGrains.Count < numToAvoid)
             {
                 recentlyPlayedResolvedGrains.Enqueue(resolvedGrain);
             }
         }
         else if (repeatMode == RepeatSelectMode.NeverTwice)
         {
             lastPlayedResolvedGrain = resolvedGrain;
         }
     }
 }