private void ForceStartSlideOut(Button button, bool force) { MenuItem item = FindItemFrom(button); if (item == null) { Debug.LogError("StartSlideOut fail " + button.name); return; } if (!force && firstCircleItem != item) { Debug.LogWarning("StartSlideOut not selected " + button.name); return; } AnimSlideOut a = new AnimSlideOut(); if (a.StartAnim(item)) { lock (animParallel) { animParallel.Add(a); } } }
public void StartRotate(Button button) { // update circle MenuItem selected = FindItemFrom(button); if (firstCircleItem == selected) { Debug.LogWarning("StartRotate cancel " + button.name); return; } // if (firstCircleItem != null) // { // ForceStartSlideIn(firstCircleItem.button, true); // } firstCircleItem = selected; MenuItem parent = FindParentFrom(button); float offsetAngle = parent != null ? parent.angle : 0; float localAngle = Vector3.SignedAngle(button.transform.localPosition, Vector3.right, Vector3.back); float deltaAngle = 90 - localAngle + offsetAngle; List <MenuItem> list = FindSiblingFrom(button); foreach (MenuItem child in list) { localAngle = Vector3.SignedAngle(child.button.transform.localPosition, Vector3.right, Vector3.back); child.startAngle = localAngle; child.endAngle = localAngle + deltaAngle; child.angle = child.endAngle - offsetAngle; if (child == firstCircleItem) { LinkedList <Anim> sequence = new LinkedList <Anim>(); AnimRotate rotate = new AnimRotate(); if (rotate.StartAnim(child)) { sequence.AddLast(rotate); } AnimSlideOut slideOut = new AnimSlideOut(); if (slideOut.StartAnim(child)) { sequence.AddLast(slideOut); } lock (animParallelSequence) { animParallelSequence.Add(sequence); } } else { AnimRotate a = new AnimRotate(); if (a.StartAnim(child)) { lock (animParallel) { animParallel.Add(a); } } ForceStartSlideIn(child.button, true); } } }