| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657 | 
							- using UnityEngine;
 
- using FairyGUI.Utils;
 
- namespace FairyGUI
 
- {
 
-     /// <summary>
 
-     /// GButton class.
 
-     /// </summary>
 
-     public class GButton : GComponent, IColorGear
 
-     {
 
-         /// <summary>
 
-         /// Play sound when button is clicked.
 
-         /// </summary>
 
-         public NAudioClip sound;
 
-         /// <summary>
 
-         /// Volume of the click sound. (0-1)
 
-         /// </summary>
 
-         public float soundVolumeScale;
 
-         /// <summary>
 
-         /// For radio or checkbox. if false, the button will not change selected status on click. Default is true.
 
-         /// 如果为true,对于单选和多选按钮,当玩家点击时,按钮会自动切换状态。设置为false,则不会。默认为true。
 
-         /// </summary>
 
-         public bool changeStateOnClick;
 
-         /// <summary>
 
-         /// Show a popup on click.
 
-         /// 可以为按钮设置一个关联的组件,当按钮被点击时,此组件被自动弹出。
 
-         /// </summary>
 
-         public GObject linkedPopup;
 
-         protected GObject _titleObject;
 
-         protected GObject _iconObject;
 
-         protected Controller _relatedController;
 
-         protected string _relatedPageId;
 
-         ButtonMode _mode;
 
-         bool _selected;
 
-         string _title;
 
-         string _icon;
 
-         string _selectedTitle;
 
-         string _selectedIcon;
 
-         Controller _buttonController;
 
-         int _downEffect;
 
-         float _downEffectValue;
 
-         bool _downScaled;
 
-         bool _down;
 
-         bool _over;
 
-         EventListener _onChanged;
 
-         public const string UP = "up";
 
-         public const string DOWN = "down";
 
-         public const string OVER = "over";
 
-         public const string SELECTED_OVER = "selectedOver";
 
-         public const string DISABLED = "disabled";
 
-         public const string SELECTED_DISABLED = "selectedDisabled";
 
-         public GButton()
 
-         {
 
-             sound = UIConfig.buttonSound;
 
-             soundVolumeScale = UIConfig.buttonSoundVolumeScale;
 
-             changeStateOnClick = true;
 
-             _downEffectValue = 0.8f;
 
-             _title = string.Empty;
 
-         }
 
-         /// <summary>
 
-         /// Dispatched when the button status was changed.
 
-         /// 如果为单选或多选按钮,当按钮的选中状态发生改变时,此事件触发。
 
-         /// </summary>
 
-         public EventListener onChanged
 
-         {
 
-             get { return _onChanged ?? (_onChanged = new EventListener(this, "onChanged")); }
 
-         }
 
-         /// <summary>
 
-         /// Icon of the button.
 
-         /// </summary>
 
-         override public string icon
 
-         {
 
-             get
 
-             {
 
-                 return _icon;
 
-             }
 
-             set
 
-             {
 
-                 _icon = value;
 
-                 value = (_selected && _selectedIcon != null) ? _selectedIcon : _icon;
 
-                 if (_iconObject != null)
 
-                     _iconObject.icon = value;
 
-                 UpdateGear(7);
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// Title of the button
 
-         /// </summary>
 
-         public string title
 
-         {
 
-             get
 
-             {
 
-                 return _title;
 
-             }
 
-             set
 
-             {
 
-                 _title = value;
 
-                 if (_titleObject != null)
 
-                     _titleObject.text = (_selected && _selectedTitle != null) ? _selectedTitle : _title;
 
-                 UpdateGear(6);
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// Same of the title.
 
-         /// </summary>
 
-         override public string text
 
-         {
 
-             get { return this.title; }
 
-             set { this.title = value; }
 
-         }
 
-         /// <summary>
 
-         /// Icon value on selected status.
 
-         /// </summary>
 
-         public string selectedIcon
 
-         {
 
-             get
 
-             {
 
-                 return _selectedIcon;
 
-             }
 
-             set
 
-             {
 
-                 _selectedIcon = value;
 
-                 value = (_selected && _selectedIcon != null) ? _selectedIcon : _icon;
 
-                 if (_iconObject != null)
 
-                     _iconObject.icon = value;
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// Title value on selected status.
 
-         /// </summary>
 
-         public string selectedTitle
 
-         {
 
-             get
 
-             {
 
-                 return _selectedTitle;
 
-             }
 
-             set
 
-             {
 
-                 _selectedTitle = value;
 
-                 if (_titleObject != null)
 
-                     _titleObject.text = (_selected && _selectedTitle != null) ? _selectedTitle : _title;
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// Title color.
 
-         /// </summary>
 
-         public Color titleColor
 
-         {
 
-             get
 
-             {
 
-                 GTextField tf = GetTextField();
 
-                 if (tf != null)
 
-                     return tf.color;
 
-                 else
 
-                     return Color.black;
 
-             }
 
-             set
 
-             {
 
-                 GTextField tf = GetTextField();
 
-                 if (tf != null)
 
-                 {
 
-                     tf.color = value;
 
-                     UpdateGear(4);
 
-                 }
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         public Color color
 
-         {
 
-             get { return this.titleColor; }
 
-             set { this.titleColor = value; }
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         public int titleFontSize
 
-         {
 
-             get
 
-             {
 
-                 GTextField tf = GetTextField();
 
-                 if (tf != null)
 
-                     return tf.textFormat.size;
 
-                 else
 
-                     return 0;
 
-             }
 
-             set
 
-             {
 
-                 GTextField tf = GetTextField();
 
-                 if (tf != null)
 
-                 {
 
-                     TextFormat format = tf.textFormat;
 
-                     format.size = value;
 
-                     tf.textFormat = format;
 
-                 }
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// If the button is in selected status.
 
-         /// </summary>
 
-         public bool selected
 
-         {
 
-             get
 
-             {
 
-                 return _selected;
 
-             }
 
-             set
 
-             {
 
-                 if (_mode == ButtonMode.Common)
 
-                     return;
 
-                 if (_selected != value)
 
-                 {
 
-                     _selected = value;
 
-                     SetCurrentState();
 
-                     if (_selectedTitle != null && _titleObject != null)
 
-                         _titleObject.text = _selected ? _selectedTitle : _title;
 
-                     if (_selectedIcon != null)
 
-                     {
 
-                         string str = _selected ? _selectedIcon : _icon;
 
-                         if (_iconObject != null)
 
-                             _iconObject.icon = str;
 
-                     }
 
-                     if (_relatedController != null
 
-                         && parent != null
 
-                         && !parent._buildingDisplayList)
 
-                     {
 
-                         if (_selected)
 
-                         {
 
-                             _relatedController.selectedPageId = _relatedPageId;
 
-                             if (_relatedController.autoRadioGroupDepth)
 
-                                 parent.AdjustRadioGroupDepth(this, _relatedController);
 
-                         }
 
-                         else if (_mode == ButtonMode.Check && _relatedController.selectedPageId == _relatedPageId)
 
-                             _relatedController.oppositePageId = _relatedPageId;
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// Button mode.
 
-         /// </summary>
 
-         /// <seealso cref="ButtonMode"/>
 
-         public ButtonMode mode
 
-         {
 
-             get
 
-             {
 
-                 return _mode;
 
-             }
 
-             set
 
-             {
 
-                 if (_mode != value)
 
-                 {
 
-                     if (value == ButtonMode.Common)
 
-                         this.selected = false;
 
-                     _mode = value;
 
-                 }
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// A controller is connected to this button, the activate page of this controller will change while the button status changed.
 
-         /// 对应编辑器中的单选控制器。
 
-         /// </summary>
 
-         public Controller relatedController
 
-         {
 
-             get
 
-             {
 
-                 return _relatedController;
 
-             }
 
-             set
 
-             {
 
-                 if (value != _relatedController)
 
-                 {
 
-                     _relatedController = value;
 
-                     _relatedPageId = null;
 
-                 }
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         public string relatedPageId
 
-         {
 
-             get
 
-             {
 
-                 return _relatedPageId;
 
-             }
 
-             set
 
-             {
 
-                 _relatedPageId = value;
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// Simulates a click on this button.
 
-         /// 模拟点击这个按钮。
 
-         /// </summary>
 
-         /// <param name="downEffect">If the down effect will simulate too.</param>
 
-         public void FireClick(bool downEffect, bool clickCall = false)
 
-         {
 
-             if (downEffect && _mode == ButtonMode.Common)
 
-             {
 
-                 SetState(OVER);
 
-                 Timers.inst.Add(0.1f, 1, (object param) => { SetState(DOWN); });
 
-                 Timers.inst.Add(0.2f, 1,
 
-                     (object param) =>
 
-                     {
 
-                         SetState(UP);
 
-                         if (clickCall)
 
-                         {
 
-                             onClick.Call();
 
-                         }
 
-                     }
 
-                 );
 
-             }
 
-             else
 
-             {
 
-                 if (clickCall)
 
-                 {
 
-                     onClick.Call();
 
-                 }
 
-             }
 
-             __click();
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public GTextField GetTextField()
 
-         {
 
-             if (_titleObject is GTextField)
 
-                 return (GTextField)_titleObject;
 
-             else if (_titleObject is GLabel)
 
-                 return ((GLabel)_titleObject).GetTextField();
 
-             else if (_titleObject is GButton)
 
-                 return ((GButton)_titleObject).GetTextField();
 
-             else
 
-                 return null;
 
-         }
 
-         protected void SetState(string val)
 
-         {
 
-             if (_buttonController != null)
 
-                 _buttonController.selectedPage = val;
 
-             if (_downEffect == 1)
 
-             {
 
-                 int cnt = this.numChildren;
 
-                 if (val == DOWN || val == SELECTED_OVER || val == SELECTED_DISABLED)
 
-                 {
 
-                     Color color = new Color(_downEffectValue, _downEffectValue, _downEffectValue);
 
-                     for (int i = 0; i < cnt; i++)
 
-                     {
 
-                         GObject obj = this.GetChildAt(i);
 
-                         if ((obj is IColorGear) && !(obj is GTextField))
 
-                             ((IColorGear)obj).color = color;
 
-                     }
 
-                 }
 
-                 else
 
-                 {
 
-                     for (int i = 0; i < cnt; i++)
 
-                     {
 
-                         GObject obj = this.GetChildAt(i);
 
-                         if ((obj is IColorGear) && !(obj is GTextField))
 
-                             ((IColorGear)obj).color = Color.white;
 
-                     }
 
-                 }
 
-             }
 
-             else if (_downEffect == 2)
 
-             {
 
-                 if (val == DOWN || val == SELECTED_OVER || val == SELECTED_DISABLED)
 
-                 {
 
-                     if (!_downScaled)
 
-                     {
 
-                         _downScaled = true;
 
-                         SetScale(this.scaleX * _downEffectValue, this.scaleY * _downEffectValue);
 
-                     }
 
-                 }
 
-                 else
 
-                 {
 
-                     if (_downScaled)
 
-                     {
 
-                         _downScaled = false;
 
-                         SetScale(this.scaleX / _downEffectValue, this.scaleY / _downEffectValue);
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-         protected void SetCurrentState()
 
-         {
 
-             if (this.grayed && _buttonController != null && _buttonController.HasPage(DISABLED))
 
-             {
 
-                 if (_selected)
 
-                     SetState(SELECTED_DISABLED);
 
-                 else
 
-                     SetState(DISABLED);
 
-             }
 
-             else
 
-             {
 
-                 if (_selected)
 
-                     SetState(_over ? SELECTED_OVER : DOWN);
 
-                 else
 
-                     SetState(_over ? OVER : UP);
 
-             }
 
-         }
 
-         override public void HandleControllerChanged(Controller c)
 
-         {
 
-             base.HandleControllerChanged(c);
 
-             if (_relatedController == c)
 
-                 this.selected = _relatedPageId == c.selectedPageId;
 
-         }
 
-         override protected void HandleGrayedChanged()
 
-         {
 
-             if (_buttonController != null && _buttonController.HasPage(DISABLED))
 
-             {
 
-                 if (this.grayed)
 
-                 {
 
-                     if (_selected)
 
-                         SetState(SELECTED_DISABLED);
 
-                     else
 
-                         SetState(DISABLED);
 
-                 }
 
-                 else
 
-                 {
 
-                     if (_selected)
 
-                         SetState(DOWN);
 
-                     else
 
-                         SetState(UP);
 
-                 }
 
-             }
 
-             else
 
-                 base.HandleGrayedChanged();
 
-         }
 
-         override protected void ConstructExtension(ByteBuffer buffer)
 
-         {
 
-             buffer.Seek(0, 6);
 
-             _mode = (ButtonMode)buffer.ReadByte();
 
-             string str = buffer.ReadS();
 
-             if (str != null)
 
-                 sound = UIPackage.GetItemAssetByURL(str) as NAudioClip;
 
-             soundVolumeScale = buffer.ReadFloat();
 
-             _downEffect = buffer.ReadByte();
 
-             _downEffectValue = buffer.ReadFloat();
 
-             if (_downEffect == 2)
 
-                 SetPivot(0.5f, 0.5f, this.pivotAsAnchor);
 
-             _buttonController = GetController("button");
 
-             _titleObject = GetChild("title");
 
-             _iconObject = GetChild("icon");
 
-             if (_titleObject != null)
 
-                 _title = _titleObject.text;
 
-             if (_iconObject != null)
 
-                 _icon = _iconObject.icon;
 
-             if (_mode == ButtonMode.Common)
 
-                 SetState(UP);
 
-             displayObject.onRollOver.Add(__rollover);
 
-             displayObject.onRollOut.Add(__rollout);
 
-             displayObject.onTouchBegin.Add(__touchBegin);
 
-             displayObject.onTouchEnd.Add(__touchEnd);
 
-             displayObject.onRemovedFromStage.Add(__removedFromStage);
 
-             displayObject.onClick.Add(__click);
 
-         }
 
-         override public void Setup_AfterAdd(ByteBuffer buffer, int beginPos)
 
-         {
 
-             base.Setup_AfterAdd(buffer, beginPos);
 
-             if (!buffer.Seek(beginPos, 6))
 
-                 return;
 
-             if ((ObjectType)buffer.ReadByte() != packageItem.objectType)
 
-                 return;
 
-             string str;
 
-             str = buffer.ReadS();
 
-             if (str != null)
 
-                 this.title = str;
 
-             str = buffer.ReadS();
 
-             if (str != null)
 
-                 this.selectedTitle = str;
 
-             str = buffer.ReadS();
 
-             if (str != null)
 
-                 this.icon = str;
 
-             str = buffer.ReadS();
 
-             if (str != null)
 
-                 this.selectedIcon = str;
 
-             if (buffer.ReadBool())
 
-                 this.titleColor = buffer.ReadColor();
 
-             int iv = buffer.ReadInt();
 
-             if (iv != 0)
 
-                 this.titleFontSize = iv;
 
-             iv = buffer.ReadShort();
 
-             if (iv >= 0)
 
-                 _relatedController = parent.GetControllerAt(iv);
 
-             _relatedPageId = buffer.ReadS();
 
-             str = buffer.ReadS();
 
-             if (str != null)
 
-                 sound = UIPackage.GetItemAssetByURL(str) as NAudioClip;
 
-             if (buffer.ReadBool())
 
-                 soundVolumeScale = buffer.ReadFloat();
 
-             this.selected = buffer.ReadBool();
 
-         }
 
-         private void __rollover()
 
-         {
 
-             if (_buttonController == null || !_buttonController.HasPage(OVER))
 
-                 return;
 
-             _over = true;
 
-             if (_down)
 
-                 return;
 
-             if (this.grayed && _buttonController.HasPage(DISABLED))
 
-                 return;
 
-             SetState(_selected ? SELECTED_OVER : OVER);
 
-         }
 
-         private void __rollout()
 
-         {
 
-             if (_buttonController == null || !_buttonController.HasPage(OVER))
 
-                 return;
 
-             _over = false;
 
-             if (_down)
 
-                 return;
 
-             if (this.grayed && _buttonController.HasPage(DISABLED))
 
-                 return;
 
-             SetState(_selected ? DOWN : UP);
 
-         }
 
-         private void __touchBegin(EventContext context)
 
-         {
 
-             if (context.inputEvent.button != 0)
 
-                 return;
 
-             _down = true;
 
-             context.CaptureTouch();
 
-             if (_mode == ButtonMode.Common)
 
-             {
 
-                 if (this.grayed && _buttonController != null && _buttonController.HasPage(DISABLED))
 
-                     SetState(SELECTED_DISABLED);
 
-                 else
 
-                     SetState(DOWN);
 
-             }
 
-             if (linkedPopup != null)
 
-             {
 
-                 if (linkedPopup is Window)
 
-                     ((Window)linkedPopup).ToggleStatus();
 
-                 else
 
-                     this.root.TogglePopup(linkedPopup, this);
 
-             }
 
-         }
 
-         private void __touchEnd()
 
-         {
 
-             if (_down)
 
-             {
 
-                 _down = false;
 
-                 if (_mode == ButtonMode.Common)
 
-                 {
 
-                     if (this.grayed && _buttonController != null && _buttonController.HasPage(DISABLED))
 
-                         SetState(DISABLED);
 
-                     else if (_over)
 
-                         SetState(OVER);
 
-                     else
 
-                         SetState(UP);
 
-                 }
 
-                 else
 
-                 {
 
-                     if (!_over
 
-                         && _buttonController != null
 
-                         && (_buttonController.selectedPage == OVER || _buttonController.selectedPage == SELECTED_OVER))
 
-                     {
 
-                         SetCurrentState();
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-         private void __removedFromStage()
 
-         {
 
-             if (_over)
 
-                 __rollout();
 
-         }
 
-         private void __click()
 
-         {
 
-             if (sound != null && sound.nativeClip != null)
 
-                 Stage.inst.PlayOneShotSound(sound.nativeClip, soundVolumeScale);
 
-             if (_mode == ButtonMode.Check)
 
-             {
 
-                 if (changeStateOnClick)
 
-                 {
 
-                     this.selected = !_selected;
 
-                     DispatchEvent("onChanged", null);
 
-                 }
 
-             }
 
-             else if (_mode == ButtonMode.Radio)
 
-             {
 
-                 if (changeStateOnClick && !_selected)
 
-                 {
 
-                     this.selected = true;
 
-                     DispatchEvent("onChanged", null);
 
-                 }
 
-             }
 
-             else
 
-             {
 
-                 if (_relatedController != null)
 
-                     _relatedController.selectedPageId = _relatedPageId;
 
-             }
 
-         }
 
-     }
 
- }
 
 
  |