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; } } }
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); } }
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; } } }
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; } } }