internal AudioCategory( string name, float volume, byte maxInstances, int maxBehavior, ushort fadeInMS, ushort fadeOutMS, int fadeType ) { INTERNAL_name = name; INTERNAL_volume = new PrimitiveInstance <float>(volume); activeCues = new List <Cue>(); cueInstanceCounts = new Dictionary <string, int>(); maxCueInstances = maxInstances; maxCueBehavior = (MaxInstanceBehavior)maxBehavior; maxFadeInMS = fadeInMS; maxFadeOutMS = fadeOutMS; crossfadeType = (CrossfadeType)fadeType; fading = new PrimitiveInstance <bool>(false); fadingCue = new PrimitiveInstance <Cue>(null); queuedCue = new PrimitiveInstance <Cue>(null); fadingCueVolume = new PrimitiveInstance <float>(0.0f); fadeTimer = new Stopwatch(); }
internal void INTERNAL_update() { /* Believe it or not, someone might run the update on a thread. * So, we're going to give a lock to this method. * -flibit */ lock (activeCues) { if (fading.Value) { float fadeOutPerc = (maxFadeOutMS - fadeTimer.ElapsedMilliseconds) / (float)maxFadeOutMS; float fadeInPerc = fadeTimer.ElapsedMilliseconds / (float)maxFadeInMS; if (fadeInPerc >= 1.0f && fadeOutPerc <= 0.0f) { fadingCue.Value.Stop(AudioStopOptions.Immediate); queuedCue.Value.SetVariable("Volume", INTERNAL_volume.Value); fadingCue = null; queuedCue = null; fading.Value = false; fadeTimer.Stop(); } if (fadeOutPerc > 0.0f) { fadingCue.Value.SetVariable( "Volume", fadingCueVolume.Value * fadeOutPerc ); } if (fadeInPerc < 1.0f) { queuedCue.Value.SetVariable( "Volume", INTERNAL_volume.Value * fadeInPerc ); } } for (int i = 0; i < activeCues.Count; i += 1) { if (!activeCues[i].INTERNAL_update()) { cueInstanceCounts[activeCues[i].Name] -= 1; activeCues.RemoveAt(i); i -= 1; } } foreach (Cue curCue in activeCues) { curCue.SetVariable( "NumCueInstances", cueInstanceCounts[curCue.Name] ); } } }
internal AudioCategory( string name, float volume, byte maxInstances, int maxBehavior, ushort fadeInMS, ushort fadeOutMS, int fadeType ) { INTERNAL_name = name; INTERNAL_volume = new PrimitiveInstance<float>(volume); activeCues = new List<Cue>(); cueInstanceCounts = new Dictionary<string, int>(); maxCueInstances = maxInstances; maxCueBehavior = (MaxInstanceBehavior) maxBehavior; maxFadeInMS = fadeInMS; maxFadeOutMS = fadeOutMS; crossfadeType = (CrossfadeType) fadeType; }