private void HandleOnTurnEnd(ITurnBased entity) { // If the last sequence is still in progress - force // it to be complete so we can start the next one. if (slideSequence != null && slideSequence.active) { slideSequence.Complete(true); } // Get the frame of the actor whose turn it just was. TurnOrderUIFrame lastActorFrame = GetLastFrame(); // Duplicate the frame at the start of the order. AddFrame(lastActorFrame.Actor, true); // Slide the order along to hide the actor who just went slideSequence = DOTween.Sequence(); if (horizontal) { slideSequence.Append(slideyBitRectTransform.DOAnchorPosX(FrameSize, slideDuration)); } else { slideSequence.Append(slideyBitRectTransform.DOAnchorPosY(FrameSize, slideDuration)); } slideSequence.AppendCallback(() => { // Get rid of the original previous actor's frame // and reset the position of the slider. DestroyImmediate(lastActorFrame.gameObject); slideyBitRectTransform.anchoredPosition = Vector2.zero; }); }
private TurnOrderUIFrame GetLastFrame() { int childIndex = slideyBit.transform.childCount - 1; Transform lastChild = slideyBit.transform.GetChild(childIndex); TurnOrderUIFrame lastActorFrame = lastChild.GetComponent <TurnOrderUIFrame>(); return(lastActorFrame); }
private void AddFrame(Pawn actor, bool first = false) { // Create as first child TurnOrderUIFrame frame = Instantiate(FramePrefab, slideyBit.transform, false); frame.RectTransform.sizeDelta = Vector2.one * FrameSize; if (first) { frame.transform.SetAsFirstSibling(); } // Set actor frame.SetActor(actor); }