/**************************************************************************** * Copyright (c) 2016 ~ 2024 liangxie * * https://qframework.cn * https://github.com/liangxiegame/QFramework * https://gitee.com/liangxiegame/QFramework ****************************************************************************/ using System; using UnityEngine; namespace QFramework { public class PlaySoundAction : AbstractAction { public enum Modes { ByName, ByClip } private Modes mMode; private string mSoundName; private AudioClip mAudioClip; private Action mOnFinish; public static PlaySoundAction Allocate(string soundName,Action onFinish = null) { var playSoundAction = Allocate(); playSoundAction.mMode = Modes.ByName; playSoundAction.mSoundName = soundName; playSoundAction.mOnFinish = onFinish; return playSoundAction; } public static PlaySoundAction Allocate(AudioClip sound,Action onFinish = null) { var playSoundAction = Allocate(); playSoundAction.mMode = Modes.ByClip; playSoundAction.mAudioClip = sound; playSoundAction.mOnFinish = onFinish; return playSoundAction; } public override void OnStart() { if (mMode == Modes.ByName) { AudioKit.PlaySound(mSoundName,callBack:player => this.Finish()); } else if (mMode == Modes.ByClip) { AudioKit.PlaySound(mAudioClip,callBack:player => this.Finish()); } } public override void OnFinish() { mOnFinish?.Invoke(); } protected override void OnDeinit() { mSoundName = null; mAudioClip = null; mOnFinish = null; } } public static class PlaySoundExtension { public static ISequence PlaySound(this ISequence self, string soundName) { return self.Append(QFramework.PlaySoundAction.Allocate(soundName)); } public static ISequence PlaySound(this ISequence self,AudioClip clip) { return self.Append(QFramework.PlaySoundAction.Allocate(clip)); } } }