123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441 |
- using System;
- using System.Collections.Generic;
- using UnityEngine;
- [ExecuteInEditMode]
- [AddComponentMenu("NGUI/Interaction/NGUI Progress Bar")]
- public class UIProgressBar : UIWidgetContainer
- {
- public Transform cachedTransform
- {
- get
- {
- if (this.mTrans == null)
- {
- this.mTrans = base.transform;
- }
- return this.mTrans;
- }
- }
- public Camera cachedCamera
- {
- get
- {
- if (this.mCam == null)
- {
- this.mCam = NGUITools.FindCameraForLayer(base.gameObject.layer);
- }
- return this.mCam;
- }
- }
- public UIWidget foregroundWidget
- {
- get
- {
- return this.mFG;
- }
- set
- {
- if (this.mFG != value)
- {
- this.mFG = value;
- this.mIsDirty = true;
- }
- }
- }
- public UIWidget backgroundWidget
- {
- get
- {
- return this.mBG;
- }
- set
- {
- if (this.mBG != value)
- {
- this.mBG = value;
- this.mIsDirty = true;
- }
- }
- }
- public UIProgressBar.FillDirection fillDirection
- {
- get
- {
- return this.mFill;
- }
- set
- {
- if (this.mFill != value)
- {
- this.mFill = value;
- this.ForceUpdate();
- }
- }
- }
- public float value
- {
- get
- {
- if (this.numberOfSteps > 1)
- {
- return Mathf.Round(this.mValue * (float)(this.numberOfSteps - 1)) / (float)(this.numberOfSteps - 1);
- }
- return this.mValue;
- }
- set
- {
- float num = Mathf.Clamp01(value);
- if (this.mValue != num)
- {
- float value2 = this.value;
- this.mValue = num;
- if (value2 != this.value)
- {
- this.ForceUpdate();
- if (UIProgressBar.current == null && NGUITools.GetActive(this) && EventDelegate.IsValid(this.onChange))
- {
- UIProgressBar.current = this;
- EventDelegate.Execute(this.onChange);
- UIProgressBar.current = null;
- }
- }
- }
- }
- }
- public float alpha
- {
- get
- {
- if (this.mFG != null)
- {
- return this.mFG.alpha;
- }
- if (this.mBG != null)
- {
- return this.mBG.alpha;
- }
- return 1f;
- }
- set
- {
- if (this.mFG != null)
- {
- this.mFG.alpha = value;
- if (this.mFG.GetComponent<Collider>() != null)
- {
- this.mFG.GetComponent<Collider>().enabled = (this.mFG.alpha > 0.001f);
- }
- else if (this.mFG.GetComponent<Collider2D>() != null)
- {
- this.mFG.GetComponent<Collider2D>().enabled = (this.mFG.alpha > 0.001f);
- }
- }
- if (this.mBG != null)
- {
- this.mBG.alpha = value;
- if (this.mBG.GetComponent<Collider>() != null)
- {
- this.mBG.GetComponent<Collider>().enabled = (this.mBG.alpha > 0.001f);
- }
- else if (this.mBG.GetComponent<Collider2D>() != null)
- {
- this.mBG.GetComponent<Collider2D>().enabled = (this.mBG.alpha > 0.001f);
- }
- }
- if (this.thumb != null)
- {
- UIWidget component = this.thumb.GetComponent<UIWidget>();
- if (component != null)
- {
- component.alpha = value;
- if (component.GetComponent<Collider>() != null)
- {
- component.GetComponent<Collider>().enabled = (component.alpha > 0.001f);
- }
- else if (component.GetComponent<Collider2D>() != null)
- {
- component.GetComponent<Collider2D>().enabled = (component.alpha > 0.001f);
- }
- }
- }
- }
- }
- protected bool isHorizontal
- {
- get
- {
- return this.mFill == UIProgressBar.FillDirection.LeftToRight || this.mFill == UIProgressBar.FillDirection.RightToLeft;
- }
- }
- protected bool isInverted
- {
- get
- {
- return this.mFill == UIProgressBar.FillDirection.RightToLeft || this.mFill == UIProgressBar.FillDirection.TopToBottom;
- }
- }
- protected void Start()
- {
- this.Upgrade();
- if (Application.isPlaying)
- {
- if (this.mBG != null)
- {
- this.mBG.autoResizeBoxCollider = true;
- }
- this.OnStart();
- if (UIProgressBar.current == null && this.onChange != null)
- {
- UIProgressBar.current = this;
- EventDelegate.Execute(this.onChange);
- UIProgressBar.current = null;
- }
- }
- this.ForceUpdate();
- }
- protected virtual void Upgrade()
- {
- }
- protected virtual void OnStart()
- {
- }
- protected void Update()
- {
- if (this.mIsDirty)
- {
- this.ForceUpdate();
- }
- }
- protected void OnValidate()
- {
- if (NGUITools.GetActive(this))
- {
- this.Upgrade();
- this.mIsDirty = true;
- float num = Mathf.Clamp01(this.mValue);
- if (this.mValue != num)
- {
- this.mValue = num;
- }
- if (this.numberOfSteps < 0)
- {
- this.numberOfSteps = 0;
- }
- else if (this.numberOfSteps > 20)
- {
- this.numberOfSteps = 20;
- }
- this.ForceUpdate();
- }
- else
- {
- float num2 = Mathf.Clamp01(this.mValue);
- if (this.mValue != num2)
- {
- this.mValue = num2;
- }
- if (this.numberOfSteps < 0)
- {
- this.numberOfSteps = 0;
- }
- else if (this.numberOfSteps > 20)
- {
- this.numberOfSteps = 20;
- }
- }
- }
- protected float ScreenToValue(Vector2 screenPos)
- {
- Transform cachedTransform = this.cachedTransform;
- Plane plane = new Plane(cachedTransform.rotation * Vector3.back, cachedTransform.position);
- Ray ray = this.cachedCamera.ScreenPointToRay(screenPos);
- float distance;
- if (!plane.Raycast(ray, out distance))
- {
- return this.value;
- }
- return this.LocalToValue(cachedTransform.InverseTransformPoint(ray.GetPoint(distance)));
- }
- protected virtual float LocalToValue(Vector2 localPos)
- {
- if (!(this.mFG != null))
- {
- return this.value;
- }
- Vector3[] localCorners = this.mFG.localCorners;
- Vector3 vector = localCorners[2] - localCorners[0];
- if (this.isHorizontal)
- {
- float num = (localPos.x - localCorners[0].x) / vector.x;
- return (!this.isInverted) ? num : (1f - num);
- }
- float num2 = (localPos.y - localCorners[0].y) / vector.y;
- return (!this.isInverted) ? num2 : (1f - num2);
- }
- public virtual void ForceUpdate()
- {
- this.mIsDirty = false;
- if (this.mFG != null)
- {
- UIBasicSprite uibasicSprite = this.mFG as UIBasicSprite;
- if (this.isHorizontal)
- {
- if (uibasicSprite != null && uibasicSprite.type == UIBasicSprite.Type.Filled)
- {
- if (uibasicSprite.fillDirection == UIBasicSprite.FillDirection.Horizontal || uibasicSprite.fillDirection == UIBasicSprite.FillDirection.Vertical)
- {
- uibasicSprite.fillDirection = UIBasicSprite.FillDirection.Horizontal;
- uibasicSprite.invert = this.isInverted;
- }
- uibasicSprite.fillAmount = this.value;
- }
- else
- {
- this.mFG.drawRegion = ((!this.isInverted) ? new Vector4(0f, 0f, this.value, 1f) : new Vector4(1f - this.value, 0f, 1f, 1f));
- this.mFG.enabled = (this.value > 0.001f);
- }
- }
- else if (uibasicSprite != null && uibasicSprite.type == UIBasicSprite.Type.Filled)
- {
- if (uibasicSprite.fillDirection == UIBasicSprite.FillDirection.Horizontal || uibasicSprite.fillDirection == UIBasicSprite.FillDirection.Vertical)
- {
- uibasicSprite.fillDirection = UIBasicSprite.FillDirection.Vertical;
- uibasicSprite.invert = this.isInverted;
- }
- uibasicSprite.fillAmount = this.value;
- }
- else
- {
- this.mFG.drawRegion = ((!this.isInverted) ? new Vector4(0f, 0f, 1f, this.value) : new Vector4(0f, 1f - this.value, 1f, 1f));
- this.mFG.enabled = (this.value > 0.001f);
- }
- }
- if (this.thumb != null && (this.mFG != null || this.mBG != null))
- {
- Vector3[] array = (!(this.mFG != null)) ? this.mBG.localCorners : this.mFG.localCorners;
- Vector4 vector = (!(this.mFG != null)) ? this.mBG.border : this.mFG.border;
- Vector3[] array2 = array;
- int num = 0;
- array2[num].x = array2[num].x + vector.x;
- Vector3[] array3 = array;
- int num2 = 1;
- array3[num2].x = array3[num2].x + vector.x;
- Vector3[] array4 = array;
- int num3 = 2;
- array4[num3].x = array4[num3].x - vector.z;
- Vector3[] array5 = array;
- int num4 = 3;
- array5[num4].x = array5[num4].x - vector.z;
- Vector3[] array6 = array;
- int num5 = 0;
- array6[num5].y = array6[num5].y + vector.y;
- Vector3[] array7 = array;
- int num6 = 1;
- array7[num6].y = array7[num6].y - vector.w;
- Vector3[] array8 = array;
- int num7 = 2;
- array8[num7].y = array8[num7].y - vector.w;
- Vector3[] array9 = array;
- int num8 = 3;
- array9[num8].y = array9[num8].y + vector.y;
- Transform transform = (!(this.mFG != null)) ? this.mBG.cachedTransform : this.mFG.cachedTransform;
- for (int i = 0; i < 4; i++)
- {
- array[i] = transform.TransformPoint(array[i]);
- }
- if (this.isHorizontal)
- {
- Vector3 a = Vector3.Lerp(array[0], array[1], 0.5f);
- Vector3 b = Vector3.Lerp(array[2], array[3], 0.5f);
- this.SetThumbPosition(Vector3.Lerp(a, b, (!this.isInverted) ? this.value : (1f - this.value)));
- }
- else
- {
- Vector3 a2 = Vector3.Lerp(array[0], array[3], 0.5f);
- Vector3 b2 = Vector3.Lerp(array[1], array[2], 0.5f);
- this.SetThumbPosition(Vector3.Lerp(a2, b2, (!this.isInverted) ? this.value : (1f - this.value)));
- }
- }
- }
- protected void SetThumbPosition(Vector3 worldPos)
- {
- Transform parent = this.thumb.parent;
- if (parent != null)
- {
- worldPos = parent.InverseTransformPoint(worldPos);
- worldPos.x = Mathf.Round(worldPos.x);
- worldPos.y = Mathf.Round(worldPos.y);
- worldPos.z = 0f;
- if (Vector3.Distance(this.thumb.localPosition, worldPos) > 0.001f)
- {
- this.thumb.localPosition = worldPos;
- }
- }
- else if (Vector3.Distance(this.thumb.position, worldPos) > 1E-05f)
- {
- this.thumb.position = worldPos;
- }
- }
- public static UIProgressBar current;
- public UIProgressBar.OnDragFinished onDragFinished;
- public Transform thumb;
- [HideInInspector]
- [SerializeField]
- protected UIWidget mBG;
- [HideInInspector]
- [SerializeField]
- protected UIWidget mFG;
- [HideInInspector]
- [SerializeField]
- protected float mValue = 1f;
- [HideInInspector]
- [SerializeField]
- protected UIProgressBar.FillDirection mFill;
- protected Transform mTrans;
- protected bool mIsDirty;
- protected Camera mCam;
- protected float mOffset;
- public int numberOfSteps;
- public List<EventDelegate> onChange = new List<EventDelegate>();
- public enum FillDirection
- {
- LeftToRight,
- RightToLeft,
- BottomToTop,
- TopToBottom
- }
- public delegate void OnDragFinished();
- }
|