Esempio n. 1
0
        private void RebuildCardPosition()
        {
            float step      = 1.0f / _cards.Count;
            int   cardIndex = 0;

            var offsetCenter = _arc.p1 + Vector3.down * 2000;

            var sortedCard = _cards.OrderBy(card => card.transform.position.x).ToList();

            sortedCard.ForEach(card => card.DOKill());

            for (float t = 0; t < 1; t += step, cardIndex++)
            {
                var point = Math.CalculateCubicBezierPoint(t, _arc);
                var angle = Vector3.Angle(point + offsetCenter, Vector3.down);

                if (t > 0.5f)
                {
                    angle = -angle;
                }

                // Debug.DrawLine(O, point, Color.red, 10);
                // Debug.DrawRay(O, Vector3.left * 1000, Color.green, 10);
                // Debug.Log("point " + point + " angle " + angle);

                point = Arc3Root.TransformPoint(point);

                var lDirection = new Vector3(0, Mathf.Sin(Mathf.Deg2Rad * angle), Mathf.Cos(Mathf.Deg2Rad * angle));

                sortedCard[cardIndex].transform.DOMove(point, 0.25f);
                sortedCard[cardIndex].transform.DORotate(lDirection, 0.25f);

                // _cards[cardIndex].transform.position = point;
                // _cards[cardIndex].transform.Rotate(Vector3.forward, angle);
            }
        }