|  |  |  |  | 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; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | } |