private void Start()
        {
            if (line.positionCount < 3)
            {
                return;
            }
            Vector3[] positions = new Vector3[line.positionCount];
            List <Vector2AnimationData> datas = new List <Vector2AnimationData>();

            for (int i = 1; i < line.positionCount - 1; i++)
            {
                int     index             = i;
                Vector2 rndVector         = Random.insideUnitCircle.normalized * offset;
                Vector2 start             = (Vector2)line.GetPosition(index) + rndVector;
                Vector2 end               = (Vector2)line.GetPosition(index) - rndVector;
                Vector2AnimationData data = new Vector2AnimationData {
                    AnimationMode = BosAnimationMode.PingPong,
                    Duration      = time,
                    StartValue    = start,
                    EndValue      = end,
                    EaseType      = EaseType.EaseInOutQuad,
                    Target        = gameObject,
                    OnStart       = (v, go) => line.SetPosition(index, v),
                    OnUpdate      = (v, t, go) => line.SetPosition(index, v),
                    OnEnd         = (v, go) => line.SetPosition(index, v)
                };
                datas.Add(data);
            }

            animator.StartAnimation(datas);
        }
Example #2
0
        public static void CreateWorkEffect(Transform mechanic, GameObject effectPrefab) {
            GameObject inst = Instantiate<GameObject>(effectPrefab);
            RectTransform effectRect = inst.GetComponent<RectTransform>();
            effectRect.SetParent(mechanic.parent, false);
            effectRect.anchoredPosition = mechanic.GetComponent<RectTransform>().anchoredPosition + new Vector2(0, 120);

            var colorData = AnimUtils.GetColorAnimData(Color.white, Color.white.ChangeAlpha(0), 2, EaseType.EaseInOutQuad, effectRect);
            var rotateData = new FloatAnimationData {
                StartValue = -40,
                EndValue = 40,
                Duration = 0.5f,
                EaseType = EaseType.EaseInOutQuad,
                OnStart = effectRect.UpdateZRotation(),
                OnUpdate = effectRect.UpdateZRotationTimed(),
                OnEnd = effectRect.UpdateZRotation(),
                Target = inst,
                AnimationMode = BosAnimationMode.PingPong
            };
            var posData = new Vector2AnimationData {
                StartValue = effectRect.anchoredPosition,
                EndValue = effectRect.anchoredPosition + new Vector2(0, 250),
                Duration = 2,
                EaseType = EaseType.EaseInOutQuad,
                OnStart = effectRect.UpdatePositionFunctor(),
                OnUpdate = effectRect.UpdatePositionTimedFunctor(),
                OnEnd = effectRect.UpdatePositionFunctor()
            };
            inst.GetOrAdd<ColorAnimator>().StartAnimation(colorData);
            inst.GetOrAdd<FloatAnimator>().StartAnimation(rotateData);
            inst.GetOrAdd<Vector2Animator>().StartAnimation(posData);
            Destroy(inst, 2);
        }
Example #3
0
        private IEnumerator MoveInPlaceImpl(MechanicAnimObject mechanicView, TempMechanicInfo info)
        {
            yield return(new WaitForSeconds(.2f));

            Vector3Animator scaleAnimator    = mechanicView.gameObject.GetOrAdd <Vector3Animator>();
            Vector2Animator positionAnimator = mechanicView.gameObject.GetOrAdd <Vector2Animator>();
            FloatAnimator   rotateAnimator   = mechanicView.gameObject.GetOrAdd <FloatAnimator>();

            RectTransform rectTransform = mechanicView.GetComponent <RectTransform>();

            Vector2 startPosition = rectTransform.anchoredPosition;
            Vector2 endPosition   = mechanicView.leftPosition;

            Vector2AnimationData positionData = new Vector2AnimationData {
                StartValue = startPosition,
                EndValue   = endPosition,
                Duration   = .3f,
                EaseType   = EaseType.EaseInOutQuad,
                Target     = mechanicView.gameObject,
                OnStart    = rectTransform.UpdatePositionFunctor(),
                OnUpdate   = rectTransform.UpdatePositionTimedFunctor(),
                OnEnd      = rectTransform.UpdatePositionFunctor(() => {
                    Debug.Log($"setup temp mechanic on state => {info.State}");
                    mechanicView.Setup(info);
                    mechanicViews.Add(mechanicView.TempMechanic.Id, mechanicView);
                    animatedViews.Remove(mechanicView.TempMechanic.Id);
                })
            };
            Vector3AnimationData scaleData = new Vector3AnimationData {
                StartValue = 2f * Vector3.one,
                EndValue   = Vector3.one,
                Duration   = .3f,
                EaseType   = EaseType.EaseInOutQuad,
                Target     = mechanicView.gameObject,
                OnStart    = rectTransform.UpdateScaleFunctor(),
                OnUpdate   = rectTransform.UpdateScaleTimedFunctor(),
                OnEnd      = rectTransform.UpdateScaleFunctor()
            };

            FloatAnimationData rotateData = new FloatAnimationData {
                StartValue = rectTransform.localRotation.eulerAngles.z,
                EndValue   = 0,
                Duration   = .3f,
                EaseType   = EaseType.EaseInOutQuad,
                Target     = mechanicView.gameObject,
                OnStart    = rectTransform.UpdateZRotation(),
                OnUpdate   = rectTransform.UpdateZRotationTimed(),
                OnEnd      = rectTransform.UpdateZRotation()
            };

            positionAnimator.StartAnimation(positionData);
            scaleAnimator.StartAnimation(scaleData);
            rotateAnimator.StartAnimation(rotateData);
        }
        public void MoveTo(PlanetImagePositionSize positionSize, float duration)
        {
            Vector2 currentPosition = RectTransform.anchoredPosition;
            Vector2 currentSize     = RectTransform.sizeDelta;

            Vector2AnimationData positionData = new Vector2AnimationData {
                StartValue = currentPosition,
                EndValue   = positionSize.position,
                Duration   = duration,
                EaseType   = EaseType.EaseInOutCubic,
                OnStart    = (pos, obj) => {
                    RectTransform.anchoredPosition = pos;
                    if (parent.IsActiveIndex(CurrentIndex))
                    {
                        RectTransform.gameObject.Activate();
                    }
                },
                OnUpdate = (pos, t, obj) => RectTransform.anchoredPosition = pos,
                OnEnd    = (pos, obj) => {
                    RectTransform.anchoredPosition = pos;
                    SetIndex(positionSize.index);
                    if (!parent.IsActiveIndex(positionSize.index))
                    {
                        RectTransform.gameObject.Deactivate();
                    }
                }
            };

            Vector2AnimationData sizeData = new Vector2AnimationData {
                StartValue = currentSize,
                EndValue   = positionSize.size,
                Duration   = duration,
                EaseType   = EaseType.EaseInOutCubic,
                OnStart    = (size, obj) => {
                    RectTransform.sizeDelta = size;
                },
                OnUpdate = (size, t, obj) => {
                    RectTransform.sizeDelta = size;
                },
                OnEnd = (size, obj) => {
                    RectTransform.sizeDelta = size;
                }
            };

            StartCoroutine(MoveToImpl(new List <Vector2AnimationData> {
                positionData, sizeData
            }));
        }
Example #5
0
        private IEnumerator ShowMoveTextFailImpl(UnofficialTransferCashInfo info)
        {
            yield return(new WaitForSeconds(interval));

            GameObject textPrefab   = Services.ResourceService.Prefabs.GetPrefab("movetext");
            GameObject textInstance = Instantiate(textPrefab);

            Text text = textInstance.GetComponent <Text>();

            text.text = $"-{BosUtils.GetCurrencyString(info.LooseValue.ToCurrencyNumber(), "", "")}";
            //text.SetAllDirty();

            RectTransform textTransform = textInstance.GetComponent <RectTransform>();

            textTransform.SetParent(transform, false);
            textTransform.anchoredPosition = endObject.anchoredPosition;
            textTransform.localScale       = new Vector3(2, 2, 1);
            Color startColor = Color.red;
            Color endColor   = Color.red.ChangeAlpha(0.1f);
            var   colorData  = AnimUtils.GetColorAnimData(startColor, endColor, 1.5f, EaseType.EaseOutQuintic,
                                                          textTransform, BosAnimationMode.Single,
                                                          () => { });
            var positionData = new Vector2AnimationData()
            {
                StartValue = textTransform.anchoredPosition,
                EndValue   = textTransform.anchoredPosition - new Vector2(0, 300),
                Duration   = 1.5f,
                EaseType   = EaseType.EaseOutQuintic,
                Target     = textInstance,
                OnStart    = (p, o) => textTransform.anchoredPosition = p,
                OnUpdate   = (p, t, o) => textTransform.anchoredPosition = p,
                OnEnd      = (p, o) => {
                    textTransform.anchoredPosition = p;
                    Destroy(textInstance);
                }
            };
            ColorAnimator   colorAnimator    = textInstance.GetComponent <ColorAnimator>();
            Vector2Animator positionAnimator = textInstance.GetComponent <Vector2Animator>();

            colorAnimator.StartAnimation(colorData);
            positionAnimator.StartAnimation(positionData);
            Sounds.PlayOneShot(SoundName.slotFail);
            ViewService.ShowDelayed(ViewType.TransferWarningView, 0.5f, new ViewData {
                ViewDepth = ViewService.NextViewDepth,
                UserData  = info.LooseValue
            });
            animObjects.Add(textInstance);
        }
Example #6
0
    private void TryCompleteEvents(int index, Vector2 value, float normTimer, Vector2AnimationData data)
    {
        List <AnimationEventInfo <Vector2> > dataEvents = events[index];

        foreach (AnimationEventInfo <Vector2> evt in dataEvents)
        {
            if ((evt.Event.Mode == AnimationEventMode.Single && !evt.IsCompleted) || (evt.Event.Mode == AnimationEventMode.Multiple))
            {
                if (evt.Event.IsValid?.Invoke(value, normTimer, data.Target) ?? false)
                {
                    evt.Event.OnEvent?.Invoke(value, normTimer, data.Target);
                    evt.IsCompleted = true;
                }
            }
        }
    }
        private void ScaleOut()
        {
            Vector2AnimationData data = new Vector2AnimationData {
                StartValue = 0.95f * Vector2.one,
                EndValue   = Vector2.one,
                Target     = gameObject,
                EaseType   = EaseType.EaseInOutCubic,
                Duration   = 0.15f,
                OnStart    = (s, o) => { o.GetComponent <RectTransform>().localScale = new Vector3(s.x, s.y, 1); },
                OnUpdate   = (s, t, o) => { o.GetComponent <RectTransform>().localScale = new Vector3(s.x, s.y, 1); },
                OnEnd      = (s, o) => { o.GetComponent <RectTransform>().localScale = new Vector3(s.x, s.y, 1); }
            };

            GetComponent <Vector2Animator>().StartAnimation(new List <Vector2AnimationData> {
                data
            });
        }
        public static void MoveFromTo(this RectTransform transform,
                                      Vector2 startPosition, Vector2 endPosition, float duration, EaseType easeType, Action onComplete = null)
        {
            Vector2Animator      animator = transform.gameObject.GetOrAdd <Vector2Animator>();
            Vector2AnimationData data     = new Vector2AnimationData {
                StartValue    = startPosition,
                EndValue      = endPosition,
                Duration      = duration,
                EaseType      = easeType,
                AnimationMode = BosAnimationMode.Single,
                Target        = transform.gameObject,
                OnStart       = transform.UpdatePositionFunctor(),
                OnUpdate      = transform.UpdatePositionTimedFunctor(),
                OnEnd         = transform.UpdatePositionFunctor(onComplete)
            };

            animator.StartAnimation(data);
        }
Example #9
0
        private IEnumerator ShowGirlImpl()
        {
            yield return(new WaitForSeconds(0.3f));

            Vector2Animator      posAnimator = girlTransform.gameObject.GetOrAdd <Vector2Animator>();
            Vector2AnimationData posData     = new Vector2AnimationData()
            {
                StartValue = new Vector2(-650, -110),
                EndValue   = new Vector2(-360, -110),
                Duration   = .2f,
                EaseType   = EaseType.EaseInOutQuad,
                Target     = girlTransform.gameObject,
                OnStart    = girlTransform.UpdatePositionFunctor(),
                OnUpdate   = girlTransform.UpdatePositionTimedFunctor(),
                OnEnd      = girlTransform.UpdatePositionFunctor(() => { /*StartCoroutine(ShowBubbleImpl());*/
                    StartCoroutine(ShowOkButtonImpl());
                })
            };

            posAnimator.StartAnimation(posData);
        }
Example #10
0
        public static Vector2AnimationData GetScaleAnimData(float start, float end,
                                                            float duration,
                                                            EaseType easeType, RectTransform target,
                                                            System.Action onEnd = null)
        {
            Vector2AnimationData data = new Vector2AnimationData {
                StartValue = new Vector2(start, start),
                EndValue   = new Vector2(end, end),
                Duration   = duration,
                Target     = target.gameObject,
                EaseType   = easeType,
                OnStart    = (s, o) => target.localScale = new Vector3(s.x, s.y, 1),
                OnUpdate   = (s, t, o) => target.localScale = new Vector3(s.x, s.y, 1),
                OnEnd      = (s, o) => {
                    target.localScale = new Vector3(s.x, s.y, 1);
                    onEnd?.Invoke();
                }
            };

            return(data);
        }
Example #11
0
        public override void Start()
        {
            base.Start();

            if (debugButton != null)
            {
                debugButton.SetListener(() => ViewService.Show(ViewType.DebugView));
            }



            gameScroll = FindObjectOfType <GameScrollView>();
            totalCountActiveGenerators = gameScroll.GetComponentsInChildren <PlanetGeneratorView>().Length;
            if (totalCountActiveGenerators == 0)
            {
                totalCountActiveGenerators = 1;
            }
            //Debug.Log($"founded total count of active generators => {totalCountActiveGenerators}".BoldItalic().Colored(ConsoleTextColor.navy));

            Color startColor = rectangularBackgroundImage.color;

            leftModuleFrameInData = new Vector2AnimationData {
                StartValue = new Vector2(-641, -380),
                EndValue   = new Vector2(-1056, -380),
                Duration   = duration * 0.5f,
                EaseType   = easeType,
                Target     = leftModuleTransform.gameObject,
                OnStart    = (pos, go) => leftModuleTransform.anchoredPosition = pos,
                OnEnd      = (pos, go) => {
                    leftModuleTransform.anchoredPosition = pos;
                    Vector2AnimationData smallData = new Vector2AnimationData {
                        StartValue = new Vector2(-1053, -253.4f),
                        EndValue   = new Vector2(-903, -253.4f),
                        Duration   = duration * 0.5f,
                        EaseType   = easeType,
                        Target     = leftModuleSmallTransform.gameObject,
                        OnStart    = (pos2, go2) => leftModuleSmallTransform.anchoredPosition = pos2,
                        OnEnd      = (pos2, go2) => leftModuleSmallTransform.anchoredPosition = pos2,
                        OnUpdate   = (pos2, t2, go2) => leftModuleSmallTransform.anchoredPosition = pos2
                    };
                    leftModuleSmallTransform.GetComponent <Vector2Animator>().StartAnimation(new List <Vector2AnimationData> {
                        smallData
                    });
                },
                OnUpdate = (pos, t, go) => leftModuleTransform.anchoredPosition = pos
            };

            leftModuleFrameSmallOutData = new Vector2AnimationData {
                StartValue = new Vector2(-903, -253.4f),
                EndValue   = new Vector2(-1053, -253.4f),
                Duration   = duration * 0.5f,
                EaseType   = easeType,
                Target     = leftModuleSmallTransform.gameObject,
                OnStart    = (pos, go) => leftModuleSmallTransform.anchoredPosition = pos,
                OnEnd      = (pos, go) => {
                    leftModuleSmallTransform.anchoredPosition = pos;
                    Vector2AnimationData leftData = new Vector2AnimationData {
                        StartValue = new Vector2(-1056, -380),
                        EndValue   = new Vector2(-641, -380),
                        EaseType   = EaseType.EaseOutCubic,
                        Duration   = duration,
                        OnStart    = (pos2, go2) => leftModuleTransform.anchoredPosition = pos2,
                        OnEnd      = (pos2, go2) => leftModuleTransform.anchoredPosition = pos2,
                        OnUpdate   = (pos2, t2, go2) => leftModuleTransform.anchoredPosition = pos2
                    };
                    leftModuleTransform.GetComponent <Vector2Animator>().StartAnimation(new List <Vector2AnimationData> {
                        leftData
                    });
                },
                OnUpdate = (pos, t, go) => leftModuleSmallTransform.anchoredPosition = pos,
            };

            rightPlanetFrameInData = new Vector2AnimationData {
                StartValue = new Vector2(640, -380),
                EndValue   = new Vector2(1050, -380),
                Duration   = duration * 0.5f,
                EaseType   = easeType,
                OnStart    = (pos, go) => rightPlanetFrameTransform.anchoredPosition = pos,
                OnEnd      = (pos, go) => {
                    rightPlanetFrameTransform.anchoredPosition = pos;
                    Vector2AnimationData smallData = new Vector2AnimationData {
                        StartValue = new Vector2(1056, -253.4f),
                        EndValue   = new Vector2(900, -253.4f),
                        Duration   = 0.5f * duration,
                        EaseType   = easeType,
                        OnStart    = (pos2, go2) => rightPlanetSmallTransform.anchoredPosition = pos2,
                        OnEnd      = (pos2, go2) => rightPlanetSmallTransform.anchoredPosition = pos2,
                        OnUpdate   = (pos2, t2, go2) => rightPlanetSmallTransform.anchoredPosition = pos2,
                        Target     = rightPlanetSmallTransform.gameObject
                    };
                    rightPlanetSmallTransform.GetComponent <Vector2Animator>().StartAnimation(new List <Vector2AnimationData> {
                        smallData
                    });
                },
                OnUpdate = (pos, t, go) => rightPlanetFrameTransform.anchoredPosition = pos,
                Target   = rightPlanetFrameTransform.gameObject
            };



            rightPlanetFrameSmallOutData = new Vector2AnimationData {
                StartValue = new Vector2(900, -253.4f),
                EndValue   = new Vector2(1056, -253.4f),
                Duration   = 0.5f * duration,
                EaseType   = easeType,
                OnStart    = (pos2, gos2) => rightPlanetSmallTransform.anchoredPosition = pos2,
                OnEnd      = (pos2, go2) => {
                    rightPlanetSmallTransform.anchoredPosition = pos2;
                    Vector2AnimationData rightData = new Vector2AnimationData {
                        StartValue = new Vector2(1050, -380),
                        EndValue   = new Vector2(640, -380),
                        Duration   = duration,
                        EaseType   = EaseType.EaseOutCubic,
                        Target     = rightPlanetFrameTransform.gameObject,
                        OnStart    = (pos, go) => rightPlanetFrameTransform.anchoredPosition = pos,
                        OnEnd      = (pos, go) => rightPlanetFrameTransform.anchoredPosition = pos,
                        OnUpdate   = (pos, t, go) => rightPlanetFrameTransform.anchoredPosition = pos
                    };
                    rightPlanetFrameTransform.GetComponent <Vector2Animator>().StartAnimation(new List <Vector2AnimationData> {
                        rightData
                    });
                },
                OnUpdate = (pos2, t2, go2) => rightPlanetSmallTransform.anchoredPosition = pos2
            };



            rectangularBackgroundInData = new Vector2AnimationData {
                StartValue = new Vector2(0, 0),
                EndValue   = new Vector2(0, 383),
                Duration   = duration,
                EaseType   = easeType,
                Target     = rectangularBackgroundTransform.gameObject,
                OnStart    = (pos, go) => {
                    rectangularBackgroundTransform.anchoredPosition = pos;
                    rightPlanetFrameTransform.GetComponent <Vector2Animator>().StartAnimation(new List <Vector2AnimationData> {
                        rightPlanetFrameInData
                    });
                    leftModuleTransform.GetComponent <Vector2Animator>().StartAnimation(new List <Vector2AnimationData> {
                        leftModuleFrameInData
                    });
                },
                OnEnd = (pos, go) => {
                    State       = HeaderState.Collapsed;
                    isAnimating = false;
                    rectangularBackgroundTransform.anchoredPosition = pos;
                },
                OnUpdate = (pos, t, go) => {
                    rectangularBackgroundTransform.anchoredPosition = pos;
                },
                Events = new List <AnimationEvent <Vector2> > {
                    new AnimationEvent <Vector2> {
                        Mode    = AnimationEventMode.Single,
                        IsValid = (pos, t, go) => {
                            if (pos.y >= 0f)
                            {
                                return(true);
                            }
                            return(false);
                        },
                        OnEvent = (pos, t, go) => {
                            Color sourceColor            = rectangularBackgroundImage.color;
                            ColorAnimationData colorData = new ColorAnimationData {
                                Duration   = duration * Mathf.Clamp01(60 / rectangularBackgroundTransform.sizeDelta.y) * 0.2f,
                                EaseType   = easeType,
                                StartValue = sourceColor,
                                EndValue   = new Color(sourceColor.r, sourceColor.g, sourceColor.b, 0),
                                Target     = rectangularBackgroundImage.gameObject,
                                OnStart    = (c, go2) => rectangularBackgroundImage.color = c,
                                OnEnd      = (c, go2) => rectangularBackgroundImage.color = c,
                                OnUpdate   = (c, t2, go2) => rectangularBackgroundImage.color = c
                            };
                            rectangularBackgroundImage.GetComponent <ColorAnimator>().StartAnimation(new List <ColorAnimationData> {
                                colorData
                            });
                        }
                    }
                }
            };

            rectangularBackgroundOutData = new Vector2AnimationData {
                StartValue = new Vector2(0, 383),
                EndValue   = new Vector2(0, 0),
                Duration   = duration,
                EaseType   = easeType,
                OnStart    = (pos, go) => {
                    rectangularBackgroundTransform.anchoredPosition = pos;

                    /*
                     * rightPlanetFrameTransform.GetComponent<Vector2Animator>().StartAnimation(new List<Vector2AnimationData> {
                     *  rightPlanetFrameOutData
                     * });*/
                    rightPlanetSmallTransform.GetComponent <Vector2Animator>().StartAnimation(new List <Vector2AnimationData> {
                        rightPlanetFrameSmallOutData
                    });
                    leftModuleSmallTransform.GetComponent <Vector2Animator>().StartAnimation(new List <Vector2AnimationData> {
                        leftModuleFrameSmallOutData
                    });
                },
                OnEnd = (pos, go) => {
                    State       = HeaderState.Expanded;
                    isAnimating = false;
                    rectangularBackgroundTransform.anchoredPosition = pos;
                },
                OnUpdate = (pos, t, go) => rectangularBackgroundTransform.anchoredPosition = pos,
                Target   = rectangularBackgroundTransform.gameObject,
                Events   = new List <AnimationEvent <Vector2> > {
                    new AnimationEvent <Vector2> {
                        Mode    = AnimationEventMode.Single,
                        IsValid = (pos, t, go) => {
                            if (pos.y <= 60)
                            {
                                return(true);
                            }
                            return(false);
                        },
                        OnEvent = (pos, t, go) => {
                            ColorAnimationData colorData = new ColorAnimationData {
                                Duration   = (1.0f - t) * duration,
                                EaseType   = easeType,
                                StartValue = new Color(0, 0, 0, 0),
                                EndValue   = startColor,
                                Target     = rectangularBackgroundImage.gameObject,
                                OnStart    = (c, go2) => rectangularBackgroundImage.color = c,
                                OnEnd      = (c, go2) => rectangularBackgroundImage.color = c,
                                OnUpdate   = (c, t2, go2) => rectangularBackgroundImage.color = c
                            };
                            rectangularBackgroundImage.GetComponent <ColorAnimator>().StartAnimation(new List <ColorAnimationData> {
                                colorData
                            });
                        }
                    }
                }
            };

            updateTimer.Setup(0.4f, (delta) => {
                if (gameScroll.VerticalNormalizedPosition >= MaxVerticalNormalizedPositionWhenEnableHiding)
                {
                    if (State == HeaderState.Collapsed && !isAnimating)
                    {
                        Expand();
                    }
                }
                else
                {
                    if (State == HeaderState.Expanded && !isAnimating)
                    {
                        Collapse();
                    }
                }
            }, true);
        }
Example #12
0
        private void AnimateAuditorObject(SecretaryAnimObject mechanicView, Auditor info)
        {
            Vector3Animator scaleAnimator    = mechanicView.gameObject.GetOrAdd <Vector3Animator>();
            Vector2Animator positionAnimator = mechanicView.gameObject.GetOrAdd <Vector2Animator>();
            ColorAnimator   colorAnimator    = mechanicView.gameObject.GetOrAdd <ColorAnimator>();
            FloatAnimator   rotateAnimator   = mechanicView.gameObject.GetOrAdd <FloatAnimator>();


            RectTransform rectTransform = mechanicView.GetComponent <RectTransform>();
            Image         image         = mechanicView.GetComponent <Image>();

            Vector2 endOffset = Random.insideUnitCircle.normalized * 300;

            if (endOffset.y < 0)
            {
                endOffset.y = -endOffset.y;
            }
            Vector2 startPosition = buyButton.GetComponent <RectTransform>().anchoredPosition;
            Vector2 endPosition   = startPosition + endOffset;

            Vector2AnimationData positionData = new Vector2AnimationData {
                StartValue = startPosition,
                EndValue   = endPosition,
                Duration   = 0.3f,
                EaseType   = EaseType.EaseInOutQuad,
                Target     = mechanicView.gameObject,
                OnStart    = rectTransform.UpdatePositionFunctor(),
                OnUpdate   = rectTransform.UpdatePositionTimedFunctor(),
                OnEnd      = rectTransform.UpdatePositionFunctor(() => {
                    StartCoroutine(MoveInPlaceImpl(mechanicView, info));
                })
            };

            Vector3AnimationData scaleData = new Vector3AnimationData {
                StartValue = Vector3.one,
                EndValue   = 2f * Vector3.one,
                Duration   = .3f,
                EaseType   = EaseType.EaseInOutQuad,
                Target     = mechanicView.gameObject,
                OnStart    = rectTransform.UpdateScaleFunctor(),
                OnUpdate   = rectTransform.UpdateScaleTimedFunctor(),
                OnEnd      = rectTransform.UpdateScaleFunctor()
            };

            ColorAnimationData colorData = new ColorAnimationData {
                StartValue = new Color(1, 1, 1, 0),
                EndValue   = new Color(1, 1, 1, 1),
                Duration   = .1f,
                EaseType   = EaseType.EaseInOutQuad,
                Target     = mechanicView.gameObject,
                OnStart    = image.UpdateColorFunctor(),
                OnUpdate   = image.UpdateColorTimedFunctor(),
                OnEnd      = image.UpdateColorFunctor()
            };

            FloatAnimationData rotateData = new FloatAnimationData {
                StartValue = 0,
                EndValue   = Random.Range(-40, 40),
                Duration   = .3f,
                EaseType   = EaseType.EaseInOutQuad,
                Target     = mechanicView.gameObject,
                OnStart    = rectTransform.UpdateZRotation(),
                OnUpdate   = rectTransform.UpdateZRotationTimed(),
                OnEnd      = rectTransform.UpdateZRotation()
            };

            positionAnimator.StartAnimation(positionData);
            scaleAnimator.StartAnimation(scaleData);
            colorAnimator.StartAnimation(colorData);
            rotateAnimator.StartAnimation(rotateData);
        }
Example #13
0
 public void StartAnimation(Vector2AnimationData data)
 {
     StartAnimation(new List <Vector2AnimationData> {
         data
     });
 }
        private void Transition(ManagementView.SwipeResultAction transitionAction)
        {
            if (currentRect == null)
            {
                return;
            }

            float distance = Vector2.Distance(currentRect.anchoredPosition, GetTargetPointForCurrentRect(transitionAction));
            float interval = distance / container.TransitionSpeed;

            switch (transitionAction)
            {
            case ManagementView.SwipeResultAction.ReturnToCenter: {
                isCurrentTransitionStarted = true;
                OnTransitionStartedChanged(IsTransitionStarted);
                Vector2AnimationData currentPosData = new Vector2AnimationData {
                    StartValue = currentRect.anchoredPosition,
                    EndValue   = Vector2.zero,
                    Duration   = interval,
                    EaseType   = EaseType.EaseInOutQuad,
                    Target     = currentRect.gameObject,
                    OnStart    = (p, o) => SetPositions(p),
                    OnUpdate   = (p, t, o) => SetPositions(p),
                    OnEnd      = (p, o) => {
                        isCurrentTransitionStarted = false;
                        OnTransitionStartedChanged(IsTransitionStarted);
                        SetPositions(p);
                    }
                };
                currentRect.gameObject.GetOrAdd <Vector2Animator>().StartAnimation(currentPosData);
            }
            break;

            case ManagementView.SwipeResultAction.MoveToLeft: {
                isCurrentTransitionStarted = true;
                isRightTransitionStarted   = true;
                OnTransitionStartedChanged(IsTransitionStarted);
                Vector2AnimationData currentPosData = new Vector2AnimationData {
                    StartValue = currentRect.anchoredPosition,
                    EndValue   = -HORIZONTAL_VECTOR,
                    Duration   = interval,
                    EaseType   = EaseType.EaseInOutQuad,
                    Target     = currentRect.gameObject,
                    OnStart    = (p, o) => SetPositions(p),
                    OnUpdate   = (p, t, o) => SetPositions(p),
                    OnEnd      = (p, o) => {
                        isCurrentTransitionStarted = false;
                        SetPositions(p);
                        isRightTransitionStarted = false;
                        MakeRightAsCurrent();
                        container.OnTransitionCompletedIn(managerId);
                        OnTransitionStartedChanged(IsTransitionStarted);
                    }
                };
                currentRect.gameObject.GetOrAdd <Vector2Animator>().StartAnimation(currentPosData);
            }
            break;

            case ManagementView.SwipeResultAction.MoveToRight: {
                isCurrentTransitionStarted = true;
                isLeftTransitionStarted    = true;
                OnTransitionStartedChanged(IsTransitionStarted);
                Vector2AnimationData currentPosData = new Vector2AnimationData {
                    StartValue = currentRect.anchoredPosition,
                    EndValue   = HORIZONTAL_VECTOR,
                    Duration   = interval,
                    EaseType   = EaseType.EaseInOutQuad,
                    Target     = currentRect.gameObject,
                    OnStart    = (p, o) => SetPositions(p),
                    OnUpdate   = (p, t, o) => SetPositions(p),
                    OnEnd      = (p, o) => {
                        isCurrentTransitionStarted = false;
                        SetPositions(p);
                        isLeftTransitionStarted = false;
                        MakeLeftAsCurrent();
                        container.OnTransitionCompletedIn(managerId);
                        OnTransitionStartedChanged(IsTransitionStarted);
                    }
                };
                currentRect.gameObject.GetOrAdd <Vector2Animator>().StartAnimation(currentPosData);
            }
            break;
            }
        }