using System; using UnityEngine; [ExecuteInEditMode] [AddComponentMenu("NGUI/Interaction/NGUI Scroll Bar")] public class UIScrollBar : UISlider { [Obsolete("Use 'value' instead")] public float scrollValue { get { return base.value; } set { base.value = value; } } public float barSize { get { return this.mSize; } set { float num = Mathf.Clamp01(value); if (this.mEnableFixSize) { float num2; if (base.isHorizontal) { num2 = this.mFG.localSize.x; } else { num2 = this.mFG.localSize.y; } num = this.mFixSizePixcel / num2; } if (this.mSize != num) { this.mSize = num; this.mIsDirty = true; if (NGUITools.GetActive(this)) { if (UIProgressBar.current == null && this.onChange != null) { UIProgressBar.current = this; EventDelegate.Execute(this.onChange); UIProgressBar.current = null; } this.ForceUpdate(); } } } } protected override void Upgrade() { if (this.mDir != UIScrollBar.Direction.Upgraded) { this.mValue = this.mScroll; if (this.mDir == UIScrollBar.Direction.Horizontal) { this.mFill = ((!this.mInverted) ? UIProgressBar.FillDirection.LeftToRight : UIProgressBar.FillDirection.RightToLeft); } else { this.mFill = ((!this.mInverted) ? UIProgressBar.FillDirection.TopToBottom : UIProgressBar.FillDirection.BottomToTop); } this.mDir = UIScrollBar.Direction.Upgraded; } } protected override void OnStart() { base.OnStart(); if (this.mFG != null && this.mFG.gameObject != base.gameObject) { if (!(this.mFG.GetComponent() != null) && !(this.mFG.GetComponent() != null)) { return; } UIEventListener uieventListener = UIEventListener.Get(this.mFG.gameObject); UIEventListener uieventListener2 = uieventListener; uieventListener2.onPress = (UIEventListener.BoolDelegate)Delegate.Combine(uieventListener2.onPress, new UIEventListener.BoolDelegate(base.OnPressForeground)); UIEventListener uieventListener3 = uieventListener; uieventListener3.onDrag = (UIEventListener.VectorDelegate)Delegate.Combine(uieventListener3.onDrag, new UIEventListener.VectorDelegate(base.OnDragForeground)); this.mFG.autoResizeBoxCollider = true; } } protected override float LocalToValue(Vector2 localPos) { if (!(this.mFG != null)) { return base.LocalToValue(localPos); } float num = Mathf.Clamp01(this.mSize) * 0.5f; float num2 = num; float num3 = 1f - num; Vector3[] localCorners = this.mFG.localCorners; if (base.isHorizontal) { num2 = Mathf.Lerp(localCorners[0].x, localCorners[2].x, num2); num3 = Mathf.Lerp(localCorners[0].x, localCorners[2].x, num3); float num4 = num3 - num2; if (num4 == 0f) { return base.value; } return (!base.isInverted) ? ((localPos.x - num2) / num4) : ((num3 - localPos.x) / num4); } else { num2 = Mathf.Lerp(localCorners[0].y, localCorners[1].y, num2); num3 = Mathf.Lerp(localCorners[3].y, localCorners[2].y, num3); float num5 = num3 - num2; if (num5 == 0f) { return base.value; } return (!base.isInverted) ? ((localPos.y - num2) / num5) : ((num3 - localPos.y) / num5); } } public override void ForceUpdate() { if (this.mFG != null) { this.mIsDirty = false; float num = Mathf.Clamp01(this.mSize) * 0.5f; float num2 = Mathf.Lerp(num, 1f - num, base.value); float num3 = num2 - num; float num4 = num2 + num; if (base.isHorizontal) { this.mFG.drawRegion = ((!base.isInverted) ? new Vector4(num3, 0f, num4, 1f) : new Vector4(1f - num4, 0f, 1f - num3, 1f)); } else { this.mFG.drawRegion = ((!base.isInverted) ? new Vector4(0f, num3, 1f, num4) : new Vector4(0f, 1f - num4, 1f, 1f - num3)); } if (this.thumb != null) { Vector4 drawingDimensions = this.mFG.drawingDimensions; Vector3 position = new Vector3(Mathf.Lerp(drawingDimensions.x, drawingDimensions.z, 0.5f), Mathf.Lerp(drawingDimensions.y, drawingDimensions.w, 0.5f)); base.SetThumbPosition(this.mFG.cachedTransform.TransformPoint(position)); } } else { base.ForceUpdate(); } } [HideInInspector] [SerializeField] protected float mSize = 1f; [HideInInspector] [SerializeField] private float mScroll; [HideInInspector] [SerializeField] private UIScrollBar.Direction mDir = UIScrollBar.Direction.Upgraded; public bool mEnableFixSize; public float mFixSizePixcel = 0.1f; private enum Direction { Horizontal, Vertical, Upgraded } }