Exemple #1
0
 private void KillCue()
 {
     INTERNAL_timer.Stop();
     INTERNAL_timer.Reset();
     if (INTERNAL_activeSound != null)
     {
         if (INTERNAL_waveBankNames.Count > 0)                 // AKA !SoundBank.IsDisposed
         {
             INTERNAL_activeSound.Dispose(
                 INTERNAL_baseEngine,
                 INTERNAL_waveBankNames
                 );
         }
         INTERNAL_activeSound = null;
     }
     INTERNAL_category.INTERNAL_removeActiveCue(this);
 }
Exemple #2
0
        private bool INTERNAL_calculateNextSound()
        {
            if (INTERNAL_activeSound != null)
            {
                INTERNAL_activeSound.Dispose(
                    INTERNAL_baseEngine,
                    INTERNAL_waveBankNames
                    );
                INTERNAL_activeSound = null;
            }

            INTERNAL_playWaveEventBySound.Clear();

            // Pick a sound based on a Cue instance variable
            if (INTERNAL_data.IsUserControlled)
            {
                INTERNAL_userControlledPlaying = true;
                if (INTERNAL_baseEngine.INTERNAL_isGlobalVariable(INTERNAL_data.UserControlVariable))
                {
                    INTERNAL_controlledValue = INTERNAL_baseEngine.GetGlobalVariable(
                        INTERNAL_data.UserControlVariable
                        );
                }
                else
                {
                    INTERNAL_controlledValue = GetVariable(
                        INTERNAL_data.UserControlVariable
                        );
                }
                for (int i = 0; i < INTERNAL_data.Probabilities.Length / 2; i += 1)
                {
                    if (INTERNAL_controlledValue <= INTERNAL_data.Probabilities[i, 0] &&
                        INTERNAL_controlledValue >= INTERNAL_data.Probabilities[i, 1])
                    {
                        INTERNAL_activeSound = INTERNAL_data.Sounds[i].GenInstance(
                            INTERNAL_baseEngine,
                            INTERNAL_waveBankNames
                            );
                        return(true);
                    }
                }

                /* This should only happen when the
                 * UserControlVariable is none of the sound
                 * probabilities, in which case we are just
                 * silent. But, we are still claiming to be
                 * "playing" in the meantime.
                 * -flibit
                 */
                return(false);
            }

            // Randomly pick a sound
            double max = 0.0;

            for (int i = 0; i < INTERNAL_data.Probabilities.GetLength(0); i += 1)
            {
                max += INTERNAL_data.Probabilities[i, 0] - INTERNAL_data.Probabilities[i, 1];
            }
            double next = random.NextDouble() * max;

            for (int i = INTERNAL_data.Probabilities.GetLength(0) - 1; i >= 0; i -= 1)
            {
                if (next > max - (INTERNAL_data.Probabilities[i, 0] - INTERNAL_data.Probabilities[i, 1]))
                {
                    INTERNAL_activeSound = INTERNAL_data.Sounds[i].GenInstance(
                        INTERNAL_baseEngine,
                        INTERNAL_waveBankNames
                        );
                    break;
                }
                max -= INTERNAL_data.Probabilities[i, 0] - INTERNAL_data.Probabilities[i, 1];
            }

            return(true);
        }