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