public SoundPlayCommand GetSlot(ISoundData data)
        {
            // ISoundSlot unusedSlot = _slotPool.IsEmptyPool() ?
            ISoundSlot unusedSlot = _slotPool
                                    .Spawn()
                                    .SetGlobalVolume(_globalVolume_0_1);

            if (data != null)
            {
                AudioClip playClip = data.GetAudioClip(this);
                if (playClip == null)
                {
                    Debug.LogError($"[{_monoOwner.name}.{nameof(GetSlot)}]soundKey:{data.GetSoundKey()} Clip is null", _monoOwner);
                }

                string soundCategory = data.GetSoundCategory();
                string soundKey      = data.GetSoundKey();
                float  localVolume   = CalculateLocalVolume(data, soundCategory, soundKey);
                bool   isMute        = CalculateMute(soundCategory, soundKey);

                unusedSlot.InitSlot(playClip, soundCategory, soundKey);
                unusedSlot.SetLocalVolume(localVolume);
                unusedSlot.SetMute(isMute);
            }

            SoundPlayCommand playCommand = _commandPool.Spawn();

            playCommand.Init(unusedSlot, DespawnCommand);
            OnPlaySound?.Invoke(unusedSlot);

            return(playCommand);
        }
        private void OnEffect(ElimlnateGrid target, TweenEffectBase <ElimlnateEffectParam> tw, ElimlnateEffectParam param)
        {
            Sequence queue = DOTween.Sequence();

#if APPLY_GRID_RANK
            float interval = 0.1f;
            queue.AppendInterval(interval * param.Index);
#endif
#if DO_PUNCH_ROT
            float   z     = Utils.RangeRandom(45f, 90f);
            Vector3 punch = new Vector3(0f, 0f, z);
            queue.Append(target.GridTrans.DOPunchRotation(punch, 0.4f, 15));   //摇晃
            queue.AppendInterval(0.05f * param.Index);                         //摇晃后间隔时间
#endif
            queue.Append(target.GridTrans.DOScale(Vector3.one * 1.2f, 0.18f)); //1.5f, 0.25f
            queue.Append(target.GridTrans.DOScale(Vector3.zero, 0.1f));        //zero, 0.15f

            BeforeFinish(ref queue, ref target, ref param);
#if DIRECT_FINISH
            queue.AppendCallback(Finish);                  //直接结束
#else
            queue.Join(target.GridSprite.DOFade(0f, 0.1f)) //褪为透明
            .OnComplete(Finish);
#endif
            void Finish()
            {
                if (UpperStrata.HasFollowUpEffect)
                {
                    UpperStrata.CheckFollowEffect();
                }
                else
                {
                    UpperStrata.AfterGridEffectFinished?.Invoke();
                    target.WillDestroy();
                    queue.Kill();
                }
            }

            OnPlaySound?.Invoke();
        }
Exemple #3
0
 public static void PlaySound(SoundType obj)
 {
     OnPlaySound?.Invoke(obj);
 }
Exemple #4
0
 public static void RaisePlaySoundEvent(AudioClip soundToPlay) => OnPlaySound?.Invoke(soundToPlay);