예제 #1
0
        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();
        }
예제 #2
0
 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]
                 );
         }
     }
 }
예제 #3
0
		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;
		}