Beispiel #1
0
        public static Tween AttrackOutTween(ref Transform tf, ElimlnateEffectParam effectParam, out Vector3 center, float multiplying = 1.5f, float during = 0.2f)
        {
            center = effectParam.EndPosition;
            Vector2 direction = center - tf.position;

            direction.Normalize();

            Vector3 end = tf.position + new Vector3(-direction.x * multiplying, -direction.y * multiplying, 0f);
            Tween   tw  = tf.DOMove(end, during);

            return(tw);
        }
Beispiel #2
0
        private void OnEffect(ElimlnateGrid target, TweenEffectBase <ElimlnateEffectParam> tw, GridEffectParam param)
        {
            //target.StopEffect(GameEffects.EffectChoosen);//, "Glow");

            Transform            tf          = target.GridTrans;
            ElimlnateEffectParam effectParam = param as ElimlnateEffectParam;
            //Vector3 end = GetdAttrackOutTween(ref tf, effectParam, out Vector3 center);
            Tween attracktOut = AttrackOutTween(ref tf, effectParam, out Vector3 center)
                                .SetEase(Ease.OutSine);

            Sequence queue = DOTween.Sequence();

            queue.AppendInterval(0.2f * effectParam.Index);
            queue.Append(attracktOut);
            queue.Append(
                tf.DOMove(center, 0.4f)
                .SetEase(Ease.InSine))
            .OnComplete(() =>
            {
                target.WillDestroy();
                UpperStrata.AfterGridEffectFinished?.Invoke();
                queue.Kill();
            });
        }
Beispiel #3
0
 protected virtual void BeforeFinish(ref Sequence queue, ref ElimlnateGrid target, ref ElimlnateEffectParam param)
 {
 }
Beispiel #4
0
        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();
        }