Exemple #1
0
    protected override void DoSparkHandler(IEvent e)
    {
        base.DoSparkHandler(e);
        VisionSpark spark = e.data as VisionSpark;

        if (spark.type == VisionSparkType.Sprinkle)
        {
            GameObject quadgo = new GameObject(string.Format("quad_{0}_{1}_sprinkle", data.row, data.column));
            quadgo.transform.parent = transform.parent;
            quadgo.layer            = Layer.Effect;
            QuadView quadView = quadgo.AddComponent <QuadView>();
            quadView.data                  = data.Clone();
            quadView.data.localAlpha       = data.localAlpha;
            quadView.data.parentAlpha      = data.parentAlpha;
            quadView.data.localPosition    = data.localPosition + new Vector3(0, 0, -0.001f);
            quadView.data.localEulerAngles = data.localEulerAngles;
            quadView.data.localScale       = data.localScale;
            quadView.data.touchEnable      = false;
            quadView.data.material         = VisionMaterial.Unlit;
            quadView.data.uvOffsets        = new Vector2[] { new Vector2(0, 0.25f), new Vector2(0, 0.25f) };
            quadgo.SetActive(false);
            Tween    t1       = DOTween.To(() => quadView.data.localScale, x => quadView.data.localScale = x, quadView.data.localScale * Style.QuadSprinkleScale, Style.QuadSprinkleDuration).SetEase(Ease.OutCubic);
            Tween    t2       = DOTween.To(() => quadView.data.localAlpha, x => quadView.data.localAlpha = x, 0f, Style.QuadSprinkleDuration).SetEase(Ease.OutCubic);
            Sequence sequence = DOTween.Sequence();
            sequence.AppendInterval(spark.delay)
            .AppendCallback(() => quadgo.SetActive(true))
            .Append(t1)
            .Join(t2)
            .OnComplete(() => GameObject.Destroy(quadView.gameObject));
        }
    }
Exemple #2
0
 public void Spark(VisionSpark spark)
 {
     DispatchEvent(new VisionEvent(VisionEvent.DoSpark, spark));
 }
Exemple #3
0
 public void Spark(VisionSpark spark)
 {
     DispatchEvent(new VisionEvent(VisionEvent.DoSpark, spark));
 }
Exemple #4
0
 private void ResolvePresent(TweenDepot depot, IPuzzle puzzle, IOperation origin, IOperation op, float delay)
 {
     IQuad[] rowQuads = puzzle.GetRowQuads(op.row);
     if ((op.direction & QuadValue.Left) > 0)
     {
         for (int i = op.column - 1; i >= 0; i--)
         {
             // 左舷依次翻转
             IQuad quad = rowQuads[i];
             float qdelay = (Mathf.Abs(quad.column - op.column) - 1) * Style.QuadRollDelay;
             if (quad.value == QuadValue.Block)
             {
                 DOTween.Sequence().AppendInterval(delay + qdelay)
                                   .Append(DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, quad.localEulerAngles + new Vector3(0, Style.QuadShakeAngle, 0), Style.QuadShakeDuration * 0.25f))
                                   .Append(DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, quad.localEulerAngles + new Vector3(0, -Style.QuadShakeAngle, 0), Style.QuadShakeDuration * 0.25f))
                                   .Append(DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, quad.localEulerAngles, Style.QuadShakeDuration * 0.5f)
                                   .SetEase(Ease.OutBack));
                 break;
             }
             else if ((quad.value & (QuadValue.Left | QuadValue.Right | QuadValue.Up | QuadValue.Down)) > 0)
             {
                 VisionSpark spark = new VisionSpark(VisionSparkType.Sprinkle);
                 spark.delay = delay + qdelay;
                 quad.Spark(spark);
                 ResolvePresent(depot, puzzle, origin, new Operation(OpType.TouchClick, quad.row, quad.column, quad.value), delay + qdelay + Style.QuadRollDuration);
                 break;
             }
             else
             {
                 string tid = Style.QuadUnifiedRotateId + "_" + quad.row + "_" + quad.column;
                 TweenInfo lt = depot.GetFirst(tid);
                 if (lt != null && Mathf.Abs(lt.atPosition - delay - qdelay) < Style.QuadRollDuration)
                 {
                     lt.Kill();
                     Tweener t = DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, new Vector3(0, 0, Style.QuadConflictAngle), Style.QuadConflictDuration)
                                        .SetEase(Ease.OutBack)
                                        .SetRelative();
                     depot.Add(delay + qdelay, t);
                 }
                 else
                 {
                     Tweener t = DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, new Vector3(0, Style.QuadRollAngle, 0), Style.QuadRollDuration)
                                     .SetId(tid)
                                     .SetEase(Ease.OutBack)
                                     .SetRelative();
                     depot.Add(delay + qdelay, t);
                 }
             }
         }
     }
     if ((op.direction & QuadValue.Right) > 0)
     {
         for (int i = op.column + 1, len = rowQuads.Length; i < len; i++)
         {
             // 右舷依次翻转
             IQuad quad = rowQuads[i];
             float qdelay = (Mathf.Abs(quad.column - op.column) - 1) * Style.QuadRollDelay;
             if (quad.value == QuadValue.Block)
             {
                 DOTween.Sequence().AppendInterval(delay + qdelay)
                                   .Append(DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, quad.localEulerAngles + new Vector3(0, -Style.QuadShakeAngle, 0), Style.QuadShakeDuration * 0.25f))
                                   .Append(DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, quad.localEulerAngles + new Vector3(0, Style.QuadShakeAngle, 0), Style.QuadShakeDuration * 0.25f))
                                   .Append(DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, quad.localEulerAngles, Style.QuadShakeDuration * 0.5f)
                                   .SetEase(Ease.OutBack));
                 break;
             }
             else if ((quad.value & (QuadValue.Left | QuadValue.Right | QuadValue.Up | QuadValue.Down)) > 0)
             {
                 VisionSpark spark = new VisionSpark(VisionSparkType.Sprinkle);
                 spark.delay = delay + qdelay;
                 quad.Spark(spark);
                 ResolvePresent(depot, puzzle, origin, new Operation(OpType.TouchClick, quad.row, quad.column, quad.value), delay + qdelay + Style.QuadRollDuration);
                 break;
             }
             else
             {
                 string tid = Style.QuadUnifiedRotateId + "_" + quad.row + "_" + quad.column;
                 TweenInfo lt = depot.GetFirst(tid);
                 if (lt != null && Mathf.Abs(lt.atPosition - delay - qdelay) < Style.QuadRollDuration)
                 {
                     lt.Kill();
                     Tweener t = DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, new Vector3(0, 0, -Style.QuadConflictAngle), Style.QuadConflictDuration)
                                        .SetEase(Ease.OutBack)
                                        .SetRelative();
                     depot.Add(delay + qdelay, t);
                 }
                 else
                 {
                     Tweener t = DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, new Vector3(0, -Style.QuadRollAngle, 0), Style.QuadRollDuration)
                                    .SetId(tid)
                                    .SetEase(Ease.OutBack)
                                    .SetRelative();
                     depot.Add(delay + qdelay, t);
                 }
             }
         }
     }
     IQuad[] columnQuads = puzzle.GetColumnQuads(op.column);
     if ((op.direction & QuadValue.Up) > 0)
     {
         for (int i = op.row - 1; i >= 0; i--)
         {
             // 上侧依次翻转
             IQuad quad = columnQuads[i];
             float qdelay = (Mathf.Abs(quad.row - op.row) - 1) * Style.QuadRollDelay;
             if (quad.value == QuadValue.Block)
             {
                 DOTween.Sequence().AppendInterval(delay + qdelay)
                                   .Append(DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, quad.localEulerAngles + new Vector3(-Style.QuadShakeAngle, 0, 0), Style.QuadShakeDuration * 0.25f))
                                   .Append(DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, quad.localEulerAngles + new Vector3(Style.QuadShakeAngle, 0, 0), Style.QuadShakeDuration * 0.25f))
                                   .Append(DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, quad.localEulerAngles, Style.QuadShakeDuration * 0.5f)
                                   .SetEase(Ease.OutBack));
                 break;
             }
             else if ((quad.value & (QuadValue.Left | QuadValue.Right | QuadValue.Up | QuadValue.Down)) > 0)
             {
                 VisionSpark spark = new VisionSpark(VisionSparkType.Sprinkle);
                 spark.delay = delay + qdelay;
                 quad.Spark(spark);
                 ResolvePresent(depot, puzzle, origin, new Operation(OpType.TouchClick, quad.row, quad.column, quad.value), delay + qdelay + Style.QuadRollDuration);
                 break;
             }
             else
             {
                 string tid = Style.QuadUnifiedRotateId + "_" + quad.row + "_" + quad.column;
                 TweenInfo lt = depot.GetFirst(tid);
                 if (lt != null && Mathf.Abs(lt.atPosition - delay - qdelay) < Style.QuadRollDuration)
                 {
                     lt.Kill();
                     Tweener t = DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, new Vector3(0, 0, Style.QuadConflictAngle), Style.QuadConflictDuration)
                                        .SetEase(Ease.OutBack)
                                        .SetRelative();
                     depot.Add(delay + qdelay, t);
                 }
                 else
                 {
                     Tweener t = DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, new Vector3(-Style.QuadRollAngle, 0, 0), Style.QuadRollDuration)
                                    .SetId(tid)
                                    .SetEase(Ease.OutBack)
                                    .SetRelative();
                     depot.Add(delay + qdelay, t);
                 }
             }
         }
     }
     if ((op.direction & QuadValue.Down) > 0)
     {
         for (int i = op.row + 1, len = columnQuads.Length; i < len; i++)
         {
             // 下侧依次翻转
             IQuad quad = columnQuads[i];
             float qdelay = (Mathf.Abs(quad.row - op.row) - 1) * Style.QuadRollDelay;
             if (quad.value == QuadValue.Block)
             {
                 DOTween.Sequence().AppendInterval(delay + qdelay)
                                   .Append(DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, quad.localEulerAngles + new Vector3(Style.QuadShakeAngle, 0, 0), Style.QuadShakeDuration * 0.25f))
                                   .Append(DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, quad.localEulerAngles + new Vector3(-Style.QuadShakeAngle, 0, 0), Style.QuadShakeDuration * 0.25f))
                                   .Append(DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, quad.localEulerAngles, Style.QuadShakeDuration * 0.5f)
                                   .SetEase(Ease.OutBack));
                 break;
             }
             else if ((quad.value & (QuadValue.Left | QuadValue.Right | QuadValue.Up | QuadValue.Down)) > 0)
             {
                 VisionSpark spark = new VisionSpark(VisionSparkType.Sprinkle);
                 spark.delay = delay + qdelay;
                 quad.Spark(spark);
                 ResolvePresent(depot, puzzle, origin, new Operation(OpType.TouchClick, quad.row, quad.column, quad.value), delay + qdelay + Style.QuadRollDuration);
                 break;
             }
             else
             {
                 string tid = Style.QuadUnifiedRotateId + "_" + quad.row + "_" + quad.column;
                 TweenInfo lt = depot.GetFirst(tid);
                 if (lt != null && Mathf.Abs(lt.atPosition - delay - qdelay) < Style.QuadRollDuration)
                 {
                     lt.Kill();
                     Tweener t = DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, new Vector3(0, 0, -Style.QuadConflictAngle), Style.QuadConflictDuration)
                                        .SetEase(Ease.OutBack)
                                        .SetRelative();
                     depot.Add(delay + qdelay, t);
                 }
                 else
                 {
                     Tweener t = DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, new Vector3(Style.QuadRollAngle, 0, 0), Style.QuadRollDuration)
                                    .SetId(tid)
                                    .SetEase(Ease.OutBack)
                                    .SetRelative();
                     depot.Add(delay + qdelay, t);
                 }
             }
         }
     }
 }
Exemple #5
0
 private void ResolvePresent(TweenDepot depot, IPuzzle puzzle, IOperation origin, IOperation op, float delay)
 {
     IQuad[] rowQuads = puzzle.GetRowQuads(op.row);
     if ((op.direction & QuadValue.Left) > 0)
     {
         for (int i = op.column - 1; i >= 0; i--)
         {
             // 左舷依次翻转
             IQuad quad   = rowQuads[i];
             float qdelay = (Mathf.Abs(quad.column - op.column) - 1) * Style.QuadRollDelay;
             if (quad.value == QuadValue.Block)
             {
                 DOTween.Sequence().AppendInterval(delay + qdelay)
                 .Append(DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, quad.localEulerAngles + new Vector3(0, Style.QuadShakeAngle, 0), Style.QuadShakeDuration * 0.25f))
                 .Append(DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, quad.localEulerAngles + new Vector3(0, -Style.QuadShakeAngle, 0), Style.QuadShakeDuration * 0.25f))
                 .Append(DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, quad.localEulerAngles, Style.QuadShakeDuration * 0.5f)
                         .SetEase(Ease.OutBack));
                 break;
             }
             else if ((quad.value & (QuadValue.Left | QuadValue.Right | QuadValue.Up | QuadValue.Down)) > 0)
             {
                 VisionSpark spark = new VisionSpark(VisionSparkType.Sprinkle);
                 spark.delay = delay + qdelay;
                 quad.Spark(spark);
                 ResolvePresent(depot, puzzle, origin, new Operation(OpType.TouchClick, quad.row, quad.column, quad.value), delay + qdelay + Style.QuadRollDuration);
                 break;
             }
             else
             {
                 string    tid = Style.QuadUnifiedRotateId + "_" + quad.row + "_" + quad.column;
                 TweenInfo lt  = depot.GetFirst(tid);
                 if (lt != null && Mathf.Abs(lt.atPosition - delay - qdelay) < Style.QuadRollDuration)
                 {
                     lt.Kill();
                     Tweener t = DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, new Vector3(0, 0, Style.QuadConflictAngle), Style.QuadConflictDuration)
                                 .SetEase(Ease.OutBack)
                                 .SetRelative();
                     depot.Add(delay + qdelay, t);
                 }
                 else
                 {
                     Tweener t = DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, new Vector3(0, Style.QuadRollAngle, 0), Style.QuadRollDuration)
                                 .SetId(tid)
                                 .SetEase(Ease.OutBack)
                                 .SetRelative();
                     depot.Add(delay + qdelay, t);
                 }
             }
         }
     }
     if ((op.direction & QuadValue.Right) > 0)
     {
         for (int i = op.column + 1, len = rowQuads.Length; i < len; i++)
         {
             // 右舷依次翻转
             IQuad quad   = rowQuads[i];
             float qdelay = (Mathf.Abs(quad.column - op.column) - 1) * Style.QuadRollDelay;
             if (quad.value == QuadValue.Block)
             {
                 DOTween.Sequence().AppendInterval(delay + qdelay)
                 .Append(DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, quad.localEulerAngles + new Vector3(0, -Style.QuadShakeAngle, 0), Style.QuadShakeDuration * 0.25f))
                 .Append(DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, quad.localEulerAngles + new Vector3(0, Style.QuadShakeAngle, 0), Style.QuadShakeDuration * 0.25f))
                 .Append(DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, quad.localEulerAngles, Style.QuadShakeDuration * 0.5f)
                         .SetEase(Ease.OutBack));
                 break;
             }
             else if ((quad.value & (QuadValue.Left | QuadValue.Right | QuadValue.Up | QuadValue.Down)) > 0)
             {
                 VisionSpark spark = new VisionSpark(VisionSparkType.Sprinkle);
                 spark.delay = delay + qdelay;
                 quad.Spark(spark);
                 ResolvePresent(depot, puzzle, origin, new Operation(OpType.TouchClick, quad.row, quad.column, quad.value), delay + qdelay + Style.QuadRollDuration);
                 break;
             }
             else
             {
                 string    tid = Style.QuadUnifiedRotateId + "_" + quad.row + "_" + quad.column;
                 TweenInfo lt  = depot.GetFirst(tid);
                 if (lt != null && Mathf.Abs(lt.atPosition - delay - qdelay) < Style.QuadRollDuration)
                 {
                     lt.Kill();
                     Tweener t = DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, new Vector3(0, 0, -Style.QuadConflictAngle), Style.QuadConflictDuration)
                                 .SetEase(Ease.OutBack)
                                 .SetRelative();
                     depot.Add(delay + qdelay, t);
                 }
                 else
                 {
                     Tweener t = DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, new Vector3(0, -Style.QuadRollAngle, 0), Style.QuadRollDuration)
                                 .SetId(tid)
                                 .SetEase(Ease.OutBack)
                                 .SetRelative();
                     depot.Add(delay + qdelay, t);
                 }
             }
         }
     }
     IQuad[] columnQuads = puzzle.GetColumnQuads(op.column);
     if ((op.direction & QuadValue.Up) > 0)
     {
         for (int i = op.row - 1; i >= 0; i--)
         {
             // 上侧依次翻转
             IQuad quad   = columnQuads[i];
             float qdelay = (Mathf.Abs(quad.row - op.row) - 1) * Style.QuadRollDelay;
             if (quad.value == QuadValue.Block)
             {
                 DOTween.Sequence().AppendInterval(delay + qdelay)
                 .Append(DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, quad.localEulerAngles + new Vector3(-Style.QuadShakeAngle, 0, 0), Style.QuadShakeDuration * 0.25f))
                 .Append(DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, quad.localEulerAngles + new Vector3(Style.QuadShakeAngle, 0, 0), Style.QuadShakeDuration * 0.25f))
                 .Append(DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, quad.localEulerAngles, Style.QuadShakeDuration * 0.5f)
                         .SetEase(Ease.OutBack));
                 break;
             }
             else if ((quad.value & (QuadValue.Left | QuadValue.Right | QuadValue.Up | QuadValue.Down)) > 0)
             {
                 VisionSpark spark = new VisionSpark(VisionSparkType.Sprinkle);
                 spark.delay = delay + qdelay;
                 quad.Spark(spark);
                 ResolvePresent(depot, puzzle, origin, new Operation(OpType.TouchClick, quad.row, quad.column, quad.value), delay + qdelay + Style.QuadRollDuration);
                 break;
             }
             else
             {
                 string    tid = Style.QuadUnifiedRotateId + "_" + quad.row + "_" + quad.column;
                 TweenInfo lt  = depot.GetFirst(tid);
                 if (lt != null && Mathf.Abs(lt.atPosition - delay - qdelay) < Style.QuadRollDuration)
                 {
                     lt.Kill();
                     Tweener t = DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, new Vector3(0, 0, Style.QuadConflictAngle), Style.QuadConflictDuration)
                                 .SetEase(Ease.OutBack)
                                 .SetRelative();
                     depot.Add(delay + qdelay, t);
                 }
                 else
                 {
                     Tweener t = DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, new Vector3(-Style.QuadRollAngle, 0, 0), Style.QuadRollDuration)
                                 .SetId(tid)
                                 .SetEase(Ease.OutBack)
                                 .SetRelative();
                     depot.Add(delay + qdelay, t);
                 }
             }
         }
     }
     if ((op.direction & QuadValue.Down) > 0)
     {
         for (int i = op.row + 1, len = columnQuads.Length; i < len; i++)
         {
             // 下侧依次翻转
             IQuad quad   = columnQuads[i];
             float qdelay = (Mathf.Abs(quad.row - op.row) - 1) * Style.QuadRollDelay;
             if (quad.value == QuadValue.Block)
             {
                 DOTween.Sequence().AppendInterval(delay + qdelay)
                 .Append(DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, quad.localEulerAngles + new Vector3(Style.QuadShakeAngle, 0, 0), Style.QuadShakeDuration * 0.25f))
                 .Append(DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, quad.localEulerAngles + new Vector3(-Style.QuadShakeAngle, 0, 0), Style.QuadShakeDuration * 0.25f))
                 .Append(DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, quad.localEulerAngles, Style.QuadShakeDuration * 0.5f)
                         .SetEase(Ease.OutBack));
                 break;
             }
             else if ((quad.value & (QuadValue.Left | QuadValue.Right | QuadValue.Up | QuadValue.Down)) > 0)
             {
                 VisionSpark spark = new VisionSpark(VisionSparkType.Sprinkle);
                 spark.delay = delay + qdelay;
                 quad.Spark(spark);
                 ResolvePresent(depot, puzzle, origin, new Operation(OpType.TouchClick, quad.row, quad.column, quad.value), delay + qdelay + Style.QuadRollDuration);
                 break;
             }
             else
             {
                 string    tid = Style.QuadUnifiedRotateId + "_" + quad.row + "_" + quad.column;
                 TweenInfo lt  = depot.GetFirst(tid);
                 if (lt != null && Mathf.Abs(lt.atPosition - delay - qdelay) < Style.QuadRollDuration)
                 {
                     lt.Kill();
                     Tweener t = DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, new Vector3(0, 0, -Style.QuadConflictAngle), Style.QuadConflictDuration)
                                 .SetEase(Ease.OutBack)
                                 .SetRelative();
                     depot.Add(delay + qdelay, t);
                 }
                 else
                 {
                     Tweener t = DOTween.To(() => quad.localEulerAngles, x => quad.localEulerAngles = x, new Vector3(Style.QuadRollAngle, 0, 0), Style.QuadRollDuration)
                                 .SetId(tid)
                                 .SetEase(Ease.OutBack)
                                 .SetRelative();
                     depot.Add(delay + qdelay, t);
                 }
             }
         }
     }
 }