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; })); }
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; })); }