private static void OnAudioEvent(IntPtr requestInfo) { _info = null; _info = new AudioRequestInfo(requestInfo, true); // requestInfo created natively , C++ will handle destruction so only a copy is needed uint ctrlId = _info.ControlId; var requestResult = _info.RequestResult; var enumFlagsType = _info.SystemEvents; AudioStateType audioState = AudioStateType.Unknown; switch ((ESystemEvents)enumFlagsType) { case ESystemEvents.TriggerExecuted: { audioState = AudioStateType.TriggerStarted; break; } case ESystemEvents.TriggerFinished: { audioState = AudioStateType.TriggerEnded; break; } } string triggerName = GetTriggerName(ctrlId); if (triggerName != null) { Audio.ManagedAudioStateListenerDelegate audioStateListenerDelegate = AudioManager.GetAudioStateListener(triggerName); audioStateListenerDelegate?.Invoke(audioState, triggerName); } }
/// <summary> /// Add an audio trigger state listener for the specified trigger name. Returns true if the trigger is existing and the no listener has been bound to the trigger yet. /// Unlike the C++ audio listener, the listener will be notified based on trigger name (instead of based on all audio triggers) /// </summary> /// <param name="triggerName"></param> /// <param name="requestListener"></param> /// <returns></returns> public static bool AddAudioStateListener(string triggerName, Audio.ManagedAudioStateListenerDelegate requestListener) { bool ret = false; if (!_requestListenersDelegates.ContainsKey(triggerName)) { _requestListenersDelegates.Add(triggerName, requestListener); ret = true; } return(ret); }