//======================================== // Self-Define //------------------------------ //---------------------- // Public Functions /// <summary> /// Initialize the focus selector /// </summary> /// <param name="rbs"></param> public void SetFocusSelector(JCS_RollSelectorButton rbs) { // if still animating disabled. if (mAnimating) { return; } // record down the last focus buttons index. mLastScrollIndex = mFocusBtn.ScrollIndex; // assign new focus button! this.mFocusBtn = rbs; foreach (JCS_RollSelectorButton btn in mButtons) { btn.SetInteractable(false); } // only enable this mFocusBtn.SetInteractable(true); // show in front. JCS_Utility.MoveToTheLastChild(mFocusBtn.transform); // Active anim, so can set the focused button to center. FindScrollIndex(); }
/// <summary> /// Initialize all the buttons' scale size. /// </summary> private void InitAsympScale() { // if not this effect, return it. if (!mAsympEffect) { return; } JCS_RollSelectorButton currentBtn = null; int centerIndex = JCS_Mathf.FindMiddleIndex(mButtons.Length); // initialzie the scroll index. for (int index = 0; index < mButtons.Length; ++index) { currentBtn = mButtons[index]; Vector3 scale = Vector3.zero; if (index <= centerIndex) { scale = (mAsympDiffScale * index) + mAsympDiffScale; } else { scale = (mAsympDiffScale * (index - ((index - centerIndex) * 2))) + mAsympDiffScale; } if (mPanelRoot != null) { scale.x /= mPanelRoot.PanelDeltaWidthRatio; scale.y /= mPanelRoot.PanelDeltaHeightRatio; } JCS_ScaleEffect se = currentBtn.GetScaleEffect(); if (se == null) { JCS_Debug.LogError( "JCS_ScaleEffect are null but we still want the effect. plz make sure all the button have JCS_ScaleEffet component!"); // close the effect. mAsympEffect = false; return; } se.RecordScale += scale; // the change value plus the original scale. // so it will keep the original setting form the // level designer. se.TowardScale += scale + se.GetScaleValue(); se.JCS_OnMouseOver(); } }
/// <summary> /// /// </summary> /// <param name="diffIndex"></param> private void ApplyTargetForAnim(int diffIndex) { JCS_RollSelectorButton currentBtn = null; JCS_RollSelectorButton targetBtn = null; Vector3[] newTargetPosHolder = new Vector3[mButtons.Length]; int[] scrollIndexHolder = new int[mButtons.Length]; // asymp scale effect Vector3[] newRecordScaleHolder = new Vector3[mButtons.Length]; Vector3[] newTowardScaleHolder = new Vector3[mButtons.Length]; for (int index = 0; index < mButtons.Length; ++index) { int overflowIndex = JCS_Mathf.OverFlowIndex(index + diffIndex, mButtons.Length); currentBtn = mButtons[index]; targetBtn = mButtons[overflowIndex]; if (currentBtn == null || targetBtn == null) { JCS_Debug.LogError("Missing `JCS_Button` assign in the inspector..."); continue; } Vector3 newTargetPos = currentBtn.SimpleTrackAction.TargetPosition; newTargetPos = targetBtn.SimpleTrackAction.TargetPosition; newTargetPosHolder[index] = newTargetPos; scrollIndexHolder[index] = targetBtn.ScrollIndex; if (mAsympEffect) { newRecordScaleHolder[index] = targetBtn.GetScaleEffect().RecordScale; newTowardScaleHolder[index] = targetBtn.GetScaleEffect().TowardScale; } } for (int index = 0; index < mButtons.Length; ++index) { currentBtn = mButtons[index]; currentBtn.SimpleTrackAction.TargetPosition = newTargetPosHolder[index]; currentBtn.ScrollIndex = scrollIndexHolder[index]; if (mAsympEffect) { JCS_ScaleEffect se = currentBtn.GetScaleEffect(); se.RecordScale = newRecordScaleHolder[index]; se.TowardScale = newTowardScaleHolder[index]; se.Active(); } } }
//---------------------- // Protected Functions //---------------------- // Private Functions /// <summary> /// Initilaize the buttons in the array. /// </summary> private void InitButton() { JCS_RollSelectorButton currentBtn = null; int indexCounter = 0; JCS_RollSelectorButton[] buttons = new JCS_RollSelectorButton[mButtons.Length]; for (int index = 0; index < mButtons.Length; ++index) { currentBtn = mButtons[index]; if (currentBtn == null) { JCS_Debug.LogError( "Missing jcs_button assign in the inspector..."); continue; } // set to array object to know this handler. currentBtn.SetRollSelector(this); Vector3 newPos = this.transform.localPosition; bool isEven = JCS_Mathf.IsEven(index); if (index != 0) { currentBtn.SetInteractable(false); } else { // the first one (center) mFocusBtn = currentBtn; JCS_Utility.MoveToTheLastChild(mFocusBtn.transform); currentBtn.SetInteractable(true); mLastScrollIndex = currentBtn.ScrollIndex; } if (!isEven) { ++indexCounter; } float intervalDistance = mSpacing * indexCounter; switch (mDimension) { case JCS_2DDimensions.VERTICAL: { if (mPanelRoot != null) { intervalDistance /= mPanelRoot.PanelDeltaWidthRatio; } if (isEven) { newPos.y += intervalDistance; } else { newPos.y -= intervalDistance; } } break; case JCS_2DDimensions.HORIZONTAL: { if (mPanelRoot != null) { intervalDistance /= mPanelRoot.PanelDeltaHeightRatio; } if (isEven) { newPos.x += intervalDistance; } else { newPos.x -= intervalDistance; } } break; } currentBtn.GetRectTransfom().localPosition = newPos; // set friction. currentBtn.SimpleTrackAction.Friction = mScrollFriction; // set tracking currentBtn.SetTrackPosition(); // get the correct order int correctIndex = 0; if (isEven) { correctIndex = ((mButtons.Length - 1) - index) / 2; } else { correctIndex = ((mButtons.Length) + index) / 2; } buttons[correctIndex] = currentBtn; } mButtons = buttons; // initialzie the scroll index. for (int index = 0; index < mButtons.Length; ++index) { currentBtn = mButtons[index]; // set index. currentBtn.ScrollIndex = index; } }
/// <summary> /// Check if the object is the same object. /// </summary> /// <param name="btn"></param> /// <returns></returns> public bool IsFoucsed(JCS_RollSelectorButton btn) { return(this.mFocusBtn == btn); }