public override void AnimateShow(Action callback) { base.AnimateShow(callback); if (m_Dialog != null) { LayoutRebuilder.ForceRebuildLayoutImmediate(m_Dialog.rectTransform); m_Dialog.rectTransform.anchoredPosition = GetSlidePosition(m_SlideInDirection); m_Dialog.rectTransform.localScale = Vector3.one; TweenManager.TweenVector2(v2 => { if (this != null && m_Dialog != null) { m_Dialog.rectTransform.anchoredPosition = v2; } }, m_Dialog.rectTransform.anchoredPosition, Vector2.zero, m_AnimationDuration, 0, callback, false, m_SlideInTweenType); } }
protected override void TweenIndicator(int targetTab, bool animate = true) { if (m_Indicator == null || m_Tabs == null) { return; } float targetPosition = m_ForceSameTabSize || m_Tabs.Length <= targetTab || targetTab < 0 || m_Tabs[targetTab] == null ? targetTab * m_TabWidth : m_Tabs[targetTab].rectTransform.anchoredPosition.x - (m_Tabs[targetTab].rectTransform.GetProperSize().x / 2); float targetSize = m_ForceSameTabSize || m_Tabs.Length <= targetTab || targetTab < 0 || m_Tabs[targetTab] == null ? m_TabWidth : m_Tabs[targetTab].rectTransform.GetProperSize().x; TweenManager.EndTween(m_IndicatorSizeTweener); TweenManager.EndTween(m_IndicatorTweener); if (animate) { if (!m_ForceSameTabSize) { m_IndicatorSizeTweener = TweenManager.TweenFloat(value => m_Indicator.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, value), m_Indicator.GetProperSize().x, targetSize, 0.5f); } m_IndicatorTweener = TweenManager.TweenVector2(vector2 => m_Indicator.anchoredPosition = vector2, m_Indicator.anchoredPosition, new Vector2(targetPosition, 0), 0.5f); } else { if (!m_ForceSameTabSize) { m_Indicator.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, targetSize); } m_Indicator.anchoredPosition = new Vector2(targetPosition, 0); } }
protected virtual void TweenTabsContainer(int index, bool animate = true) { if (m_TabsContainer == null) { return; } var useSameSizeCalculation = /*m_ForceSameTabSize ||*/ m_Tabs.Length <= index || index < 0 || m_Tabs[index] == null; float targetPosition = 0; if (useSameSizeCalculation) { targetPosition += rectTransform.GetProperSize().x / 2; targetPosition = Mathf.Clamp(targetPosition, -LayoutUtility.GetPreferredWidth(m_TabsContainer) + rectTransform.GetProperSize().x, 0); } else { targetPosition = m_Tabs[index].rectTransform.anchoredPosition.x + (m_Tabs[index].rectTransform.GetProperSize().x / 2); } TweenManager.EndTween(m_TabsContainerTweener); if (animate) { m_TabsContainerTweener = TweenManager.TweenVector2( vector2 => m_TabsContainer.anchoredPosition = vector2, m_TabsContainer.anchoredPosition, new Vector2(targetPosition, 0), 0.5f); } else { m_TabsContainer.anchoredPosition = new Vector2(targetPosition, 0); } }
/// <summary> /// Animates the slider to the 'off' state. /// </summary> private void AnimateOff() { TweenManager.EndTween(m_HandleSizeTweener); TweenManager.EndTween(m_PopupScaleTweener); TweenManager.EndTween(m_HandlePositionYTweener); TweenManager.EndTween(m_PopupTextColorTweener); if (m_HasPopup) { m_HandlePositionYTweener = TweenManager.TweenFloat( f => handleGraphicTransform.anchoredPosition = new Vector2(handleGraphicTransform.anchoredPosition.x, f), handleGraphicTransform.anchoredPosition.y, MaterialUIScaler.GetRootScaler(transform).canvas.pixelPerfect ? 1f : 0f, m_AnimationDuration, 0, null, false, Tween.TweenType.EaseOutCubed); m_PopupScaleTweener = TweenManager.TweenVector3(vector3 => m_PopupTransform.localScale = vector3, m_PopupTransform.localScale, Vector3.zero, m_AnimationDuration); } m_HandleSizeTweener = TweenManager.TweenVector2(vector2 => handleGraphicTransform.sizeDelta = vector2, handleGraphicTransform.sizeDelta, new Vector2(16, 16), m_AnimationDuration, 0, null, false, Tween.TweenType.EaseOutSept); m_PopupTextColorTweener = TweenManager.TweenColor(color => m_PopupText.color = color, m_PopupText.color, m_PopupText.color.WithAlpha(0f), m_AnimationDuration * 0.25f); }
/// <summary> /// Animates the slider to the 'on' state. /// </summary> private void AnimateOn() { TweenManager.EndTween(m_HandleSizeTweener); TweenManager.EndTween(m_PopupScaleTweener); TweenManager.EndTween(m_HandlePositionYTweener); TweenManager.EndTween(m_PopupTextColorTweener); if (m_HasPopup) { m_HandleSizeTweener = TweenManager.TweenVector2(vector2 => handleGraphicTransform.sizeDelta = vector2, handleGraphicTransform.sizeDelta, new Vector2(38, 38), m_AnimationDuration, 0f, null, false, Tween.TweenType.SoftEaseOutQuint); m_HandlePositionYTweener = TweenManager.TweenFloat( f => handleGraphicTransform.anchoredPosition = new Vector2(handleGraphicTransform.anchoredPosition.x, f), handleGraphicTransform.anchoredPosition.y, slider.wholeNumbers && m_HasDots ? 36 : 30, m_AnimationDuration, 0, null, false, Tween.TweenType.EaseOutSept); m_PopupScaleTweener = TweenManager.TweenVector3(vector3 => m_PopupTransform.localScale = vector3, m_PopupTransform.localScale, Vector3.one, m_AnimationDuration, 0, null, false, Tween.TweenType.EaseOutSept); } else { m_HandleSizeTweener = TweenManager.TweenVector2(vector2 => handleGraphicTransform.sizeDelta = vector2, handleGraphicTransform.sizeDelta, new Vector2(24, 24), m_AnimationDuration, 0, null, false, Tween.TweenType.SoftEaseOutQuint); } m_PopupTextColorTweener = TweenManager.TweenColor(color => m_PopupText.color = color, () => m_PopupText.color, () => m_PopupText.color.WithAlpha(1f), m_AnimationDuration * 0.66f, m_AnimationDuration * 0.33f); }
private void TweenPagesContainer(int index, bool animate = true) { if (m_PagesContainer == null) { return; } if (pages == null) { pages = new List <TabPage>(); } for (int i = 0; i < pages.Count; i++) { int smaller = Mathf.Min(m_CurrentPage, index); int bigger = Mathf.Max(m_CurrentPage, index); //if (i >= smaller - 1 && i <= bigger + 1) if (i == smaller || i == bigger) { pages[i].gameObject.SetActive(true); } else { pages[i].DisableIfAllowed(); } } float targetPosition = -(index * m_PageSize.x); targetPosition = Mathf.Clamp(targetPosition, -(pages.Count * m_PageSize.x), 0); TweenManager.EndTween(m_PagesContainerTweener); m_CurrentPage = index; if (animate) { m_PagesContainerTweener = TweenManager.TweenVector2(vector2 => m_PagesContainer.anchoredPosition = vector2, m_PagesContainer.anchoredPosition, new Vector2(targetPosition, 0), 0.5f, 0, OnPagesTweenEnd); } else { m_PagesContainer.anchoredPosition = new Vector2(targetPosition, 0); OnPagesTweenEnd(); } }
private void TweenIndicator(int targetTab, bool animate = true) { float targetPosition = targetTab * m_TabWidth; TweenManager.EndTween(m_IndicatorTweener); if (animate) { m_IndicatorTweener = TweenManager.TweenVector2(vector2 => m_Indicator.anchoredPosition = vector2, m_Indicator.anchoredPosition, new Vector2(targetPosition, 0), 0.5f); } else { m_Indicator.anchoredPosition = new Vector2(targetPosition, 0); } }
private void TweenTabsContainer(int index, bool animate = true) { float targetPosition = -(index * m_TabWidth); targetPosition += rectTransform.GetProperSize().x / 2; targetPosition -= m_TabWidth / 2; targetPosition = Mathf.Clamp(targetPosition, -LayoutUtility.GetPreferredWidth(m_TabsContainer) + rectTransform.GetProperSize().x, 0); TweenManager.EndTween(m_TabsContainerTweener); if (animate) { m_TabsContainerTweener = TweenManager.TweenVector2( vector2 => m_TabsContainer.anchoredPosition = vector2, m_TabsContainer.anchoredPosition, new Vector2(targetPosition, 0), 0.5f); } else { m_TabsContainer.anchoredPosition = new Vector2(targetPosition, 0); } }
public override void AnimateHide(Action callback) { base.AnimateHide(callback); if (m_Dialog != null) { TweenManager.TweenVector2( v2 => { if (this != null && m_Dialog != null) { m_Dialog.rectTransform.anchoredPosition = v2; } }, m_Dialog.rectTransform.anchoredPosition, GetSlidePosition(m_SlideOutDirection), m_AnimationDuration, 0, callback, false, m_SlideOutTweenType); } }
private void TweenPagesContainer(int index, bool animate = true) { for (int i = 0; i < m_Pages.Length; i++) { int smaller = Mathf.Min(m_CurrentPage, index); int bigger = Mathf.Max(m_CurrentPage, index); if (i >= smaller - 1 && i <= bigger + 1) { m_Pages[i].gameObject.SetActive(true); } else { m_Pages[i].DisableIfAllowed(); } } float targetPosition = -(index * m_PageSize.x); targetPosition = Mathf.Clamp(targetPosition, -(m_Pages.Length * m_PageSize.x), 0); TweenManager.EndTween(m_PagesContainerTweener); m_CurrentPage = index; if (animate) { m_PagesContainerTweener = TweenManager.TweenVector2(vector2 => m_PagesContainer.anchoredPosition = vector2, m_PagesContainer.anchoredPosition, new Vector2(targetPosition, 0), 0.5f); } else { m_PagesContainer.anchoredPosition = new Vector2(targetPosition, 0); OnPagesTweenEnd(); } }
/// <summary> /// Instantiates the dropdown object and expands it. /// </summary> public void Show() { Canvas rootCanvas = m_BaseTransform.GetRootCanvas(); rootCanvas.CopySettingsToOtherCanvas(m_DropdownCanvas); m_DropdownCanvas.pixelPerfect = true; m_DropdownCanvas.sortingOrder = 30000; m_DropdownPanel = PrefabManager.InstantiateGameObject(PrefabManager.ResourcePrefabs.dropdownPanel, m_DropdownCanvas.transform).GetComponent <RectTransform>(); m_PanelLayer = m_DropdownPanel.GetChildByName <RectTransform>("PanelLayer"); m_DropdownCanvasGroup = m_DropdownPanel.GetComponent <CanvasGroup>(); m_ShadowCanvasGroup = m_DropdownPanel.GetChildByName <CanvasGroup>("Shadow"); m_DropdownPanel.GetRootCanvas().scaleFactor = rootCanvas.scaleFactor; m_CancelPanel = m_DropdownPanel.GetChildByName <RectTransform>("Cancel Panel"); m_CancelPanel.sizeDelta = scaler.canvas.pixelRect.size * 2; DropdownTrigger trigger = m_DropdownPanel.gameObject.GetChildByName <DropdownTrigger>("Cancel Panel"); trigger.index = -1; trigger.dropdown = this; m_DropdownPanel.gameObject.GetChildByName <Image>("ScrollRect").color = m_PanelColor; m_ListItemTemplate = new DropdownListItem(); m_ListItemTemplate.rectTransform = m_DropdownPanel.GetChildByName <RectTransform>("Item"); m_ListItemTemplate.canvasGroup = m_ListItemTemplate.rectTransform.GetComponent <CanvasGroup>(); m_ListItemTemplate.text = m_ListItemTemplate.rectTransform.GetChildByName <Text>("Text"); if (m_OptionDataList.imageType == ImageDataType.Sprite) { m_ListItemTemplate.image = m_ListItemTemplate.rectTransform.GetChildByName <Image>("Icon"); Destroy(m_ListItemTemplate.rectTransform.GetChildByName <VectorImage>("Icon").gameObject); } else { m_ListItemTemplate.image = m_ListItemTemplate.rectTransform.GetChildByName <VectorImage>("Icon"); Destroy(m_ListItemTemplate.rectTransform.GetChildByName <Image>("Icon").gameObject); } m_ListItems = new List <DropdownListItem>(); for (int i = 0; i < m_OptionDataList.options.Count; i++) { m_ListItems.Add(CreateItem(m_OptionDataList.options[i], i)); } for (int i = 0; i < m_ListItems.Count; i++) { Selectable selectable = m_ListItems[i].rectTransform.GetComponent <Selectable>(); Navigation navigation = new Navigation(); navigation.mode = Navigation.Mode.Explicit; if (i > 0) { navigation.selectOnUp = m_ListItems[i - 1].rectTransform.GetComponent <Selectable>(); } if (i < m_ListItems.Count - 1) { navigation.selectOnDown = m_ListItems[i + 1].rectTransform.GetComponent <Selectable>(); } selectable.navigation = navigation; } if (m_BaseSelectable != null) { if (m_ListItems.Count > 0) { Navigation navigation = Navigation.defaultNavigation; navigation.selectOnDown = m_ListItems[0].rectTransform.GetComponent <Selectable>(); m_BaseSelectable.navigation = navigation; } } float maxWidth = CalculateMaxItemWidth(); float buttonWidth = m_BaseTransform.rect.width; m_FullHeight = m_OptionDataList.options.Count * LayoutUtility.GetPreferredHeight(m_ListItemTemplate.rectTransform) + 16; m_ExpandedSize = new Vector2(Mathf.Max(maxWidth, buttonWidth), m_FullHeight); m_TempMaxHeight = m_MaxHeight; if (m_TempMaxHeight == 0) { m_TempMaxHeight = MaterialUIScaler.GetRootScaler(m_DropdownPanel).canvas.GetComponent <RectTransform>().rect.height - 32; } if (m_ExpandedSize.y > m_TempMaxHeight) { m_ExpandedSize.y = m_TempMaxHeight; } else { m_DropdownPanel.GetChildByName <Image>("Handle").gameObject.SetActive(false); } Destroy(m_ListItemTemplate.rectTransform.gameObject); m_DropdownPanel.position = m_BaseTransform.GetPositionRegardlessOfPivot(); if (m_ExpandStartType == ExpandStartType.ExpandFromBaseTransformWidth) { if (m_VerticalPivotType == VerticalPivotType.BelowBase) { m_DropdownPanel.position = new Vector3(m_DropdownPanel.position.x, m_DropdownPanel.position.y - m_BaseTransform.GetProperSize().y / 2, m_DropdownPanel.position.z); } else if (m_VerticalPivotType == VerticalPivotType.AboveBase) { m_DropdownPanel.position = new Vector3(m_DropdownPanel.position.x, m_DropdownPanel.position.y + m_BaseTransform.GetProperSize().y / 2, m_DropdownPanel.position.z); } } m_ExpandedPosition = CalculatedPosition(); m_ExpandedPosition.z = m_BaseTransform.position.z; m_DropdownCanvasGroup.alpha = 0f; m_ShadowCanvasGroup.alpha = 0f; if (m_ExpandStartType == ExpandStartType.ExpandFromBaseTransformWidth) { m_DropdownPanel.sizeDelta = new Vector2(m_BaseTransform.rect.size.x, 0f); } else if (m_ExpandStartType == ExpandStartType.ExpandFromBaseTransformHeight) { m_DropdownPanel.sizeDelta = new Vector2(0f, m_BaseTransform.rect.size.y); } else if (m_ExpandStartType == ExpandStartType.ExpandFromBaseTransformSize) { m_DropdownPanel.sizeDelta = m_BaseTransform.rect.size; } else { m_DropdownPanel.sizeDelta = Vector2.zero; } m_DropdownPanel.gameObject.SetActive(true); for (int i = 0; i < m_ListItemAutoTweeners.Count; i++) { TweenManager.EndTween(m_ListItemAutoTweeners[i]); } m_AutoTweeners = new List <int>(); m_ListItemAutoTweeners = new List <int>(); m_AutoTweeners.Add(TweenManager.TweenFloat(f => m_DropdownCanvasGroup.alpha = f, m_DropdownCanvasGroup.alpha, 1f, m_AnimationDuration * 0.66f, 0, null, false, Tween.TweenType.Linear)); m_AutoTweeners.Add(TweenManager.TweenFloat(f => m_ShadowCanvasGroup.alpha = f, m_ShadowCanvasGroup.alpha, 1f, m_AnimationDuration * 0.66f, 0, null, false, Tween.TweenType.Linear)); m_AutoTweeners.Add(TweenManager.TweenVector2(vector2 => m_DropdownPanel.sizeDelta = vector2, m_DropdownPanel.sizeDelta, m_ExpandedSize, m_AnimationDuration, m_AnimationDuration / 3, null, false, Tween.TweenType.EaseInOutQuint)); m_AutoTweeners.Add(TweenManager.TweenVector3(UpdateDropdownPos, m_DropdownPanel.position, m_ExpandedPosition, m_AnimationDuration, m_AnimationDuration / 3, () => { if (m_BaseSelectable != null && m_IsExapanded) { m_BaseSelectable.interactable = false; } Vector2 tempVector2 = m_PanelLayer.anchoredPosition; tempVector2.x = Mathf.RoundToInt(tempVector2.x); tempVector2.y = Mathf.RoundToInt(tempVector2.y); m_PanelLayer.anchoredPosition = tempVector2; }, false, Tween.TweenType.EaseInOutQuint)); for (int i = 0; i < m_ListItems.Count; i++) { int i1 = i; CanvasGroup canvasGroup = m_ListItems[i].canvasGroup; m_ListItemAutoTweeners.Add(TweenManager.TweenFloat(f => canvasGroup.alpha = f, canvasGroup.alpha, 1f, m_AnimationDuration * 1.66f, (i1 * (m_AnimationDuration / 6) + m_AnimationDuration) - m_ScrollPosOffset / 800, null, false, Tween.TweenType.Linear)); } if (m_FullHeight > m_TempMaxHeight) { m_DropdownPanel.GetChildByName <ScrollRect>("ScrollRect").gameObject.AddComponent <RectMask2D>(); } m_IsExapanded = true; m_TimeShown = Time.unscaledTime; }