Example #1
0
        private void ArrangeInCircle(Transform top, List <ObjectStateManager> items, float radius, bool isInit)
        {
            var allMovers = new IEnumerator[items.Count];

            for (var index = 0; index < items.Count; index++)
            {
                var(nPos, nRot)  = GetCirclePosAndRot(top.position, index, items.Count, radius);
                allMovers[index] = th.MoveRotateScale(this, items[index].transform, nPos, nRot, cs.DownScale, 0.3f);
            }
            StartCoroutine(OrderElements(allMovers, () =>
            {
                if (isInit)
                {
                    var transform2 = transform;
                    var fwd        = transform2.forward;
                    CarouselArranged?.Invoke(
                        ShowMeshBounds.CalculateLocalBounds(transform2).extents,
                        transform.position + fwd * cs.Radius,
                        -fwd
                        );
                }
                SetGlobalVars(items);
                _arrangementDone = true;
            }));
        }
Example #2
0
        private void ArrangeToCircle12(Transform carouselCenter, List <ObjectStateManager> items, float radius, bool isInit)
        {
            _totalItems = carouselItems.Count;
            deltaAngle  = 360.0f / _totalItems;

            _ltd.Threshold = deltaAngle;
            var centerPos = carouselCenter.position;
            var idx       = 0;
            var allMovers = new IEnumerator[items.Count];

            foreach (var item in items)
            {
                var angle        = idx * Mathf.PI * 2 / _totalItems;
                var x            = Mathf.Sin(angle) * radius;
                var z            = Mathf.Cos(angle) * radius;
                var pos          = centerPos + new Vector3(x, 0, z);
                var angleDegrees = -angle * Mathf.Rad2Deg;
                var rot          = Quaternion.Euler(0, angleDegrees, 0);

                item.transform.rotation = rot;
                item.transform.SetParent(carouselCenter);

                item.imc.MoveToIdle();

                allMovers[idx++] = th.MoveScale(this, item.transform, pos, cs.DownScale, 0.3f);
            }

            StartCoroutine(OrderElements(allMovers, () =>
            {
                var transform2 = transform;
                var fwd        = transform2.forward;
                if (CarouselArranged != null && isInit)
                {
                    CarouselArranged.Invoke(
                        ShowMeshBounds.CalculateLocalBounds(transform2).extents,
                        transform.position + fwd * cs.Radius,
                        -fwd
                        );
                }
                _arrangementDone = true;
            }));
        }