using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; using System.Collections; using System; using Games.GlobeDefine; using UnityEngine.Events; public class UINumBoardInput : UIBase { #region param public Text _InputNum; public GameObject _NumBoard; public Button _BtnAdd; public Button _BtnDec; public bool _IsShowInputBoard = true; private static Material _ImageGrayMaterial; protected int _Value; public virtual int Value { get { _Value = int.Parse(_InputNum.text); return _Value; } set { _Value = value; SetNumBtnState(); _InputNum.text = _Value.ToString(); } } protected int _MaxValue = -1; protected int _MinValue = 0; protected int _InitValue = 0; protected int _StepValue = 1; [Serializable] public class NumModifyEvent : UnityEvent { public NumModifyEvent() { } } [SerializeField] private NumModifyEvent _NumModifyEvent; #endregion #region /// /// 初始化数字输入面板 /// /// 初始显示值 /// 最小显示值 /// 最大显示值 public void Init(int initValue, int minValue, int maxValue) { if (_ImageGrayMaterial == null) _ImageGrayMaterial = CommonUtility.LoadSharedMaterial(GlobeVar.grayMaterialName); _InitValue = initValue; _MaxValue = maxValue; _MinValue = minValue; SetValue(initValue); _InputNum.text = Value.ToString(); } public void SetStepValue(int stepValue) { _StepValue = stepValue; } #endregion #region add/dec public void BtnAdd(int stepValue) { int resValue = Value + _StepValue; SetValue(resValue); _NumModifyEvent.Invoke(); //if (resValue == _MaxValue) //{ // GUIData.AddNotifyData(GCGame.Table.StrDictionary.GetClientDictionaryString("#{40113}")); //} } public void BtnDec(int stepValue) { int resValue = Value - _StepValue; SetValue(resValue); _NumModifyEvent.Invoke(); //SetNumBtnState(); //if (resValue == _MinValue) //{ // GUIData.AddNotifyData(GCGame.Table.StrDictionary.GetClientDictionaryString("#{40114}")); //} } protected void SetNumBtnState() { if (_Value == _MaxValue) { _BtnAdd.interactable = (false); _BtnAdd.image.material = _ImageGrayMaterial; } else { _BtnAdd.interactable = (true); _BtnAdd.image.material = null; } if (_Value == _MinValue) { _BtnDec.interactable = (false); _BtnDec.image.material = _ImageGrayMaterial; } else { _BtnDec.interactable = (true); _BtnDec.image.material = null; } } #endregion #region num board private int bkNum; // 数字备份,当点击取消时,用该数字顶替 private int _InputBoardNum = 0; public void OnBtnNumBoardOpen() { if (!_IsShowInputBoard) return; if (_NumBoard.activeSelf) { OnBtnOk(); } else { _NumBoard.SetActive(!_NumBoard.activeSelf); _InputBoardNum = 0; _InputNum.text = "0"; } } public void OnBtnNumInput(int num) { int value = _InputBoardNum * 10 + num; if (value <= 0) return; _InputBoardNum = value; _InputNum.text = value.ToString(); } public void OnBtnNumDelete() { int value = (int)(_InputBoardNum * 0.1f); //if (value >= _MaxValue) //{ // return; //} _InputBoardNum = value; _InputNum.text = value.ToString(); } public void OnBtnMax() { _InputBoardNum = _MaxValue; _InputNum.text = _InputBoardNum.ToString(); } public void OnBtnOk() { if (_InputBoardNum >= _MaxValue) { GUIData.AddNotifyData(GCGame.Table.StrDictionary.GetClientDictionaryString("#{40113}")); _InputBoardNum = _MaxValue; } else if (_InputBoardNum <= _MinValue) { GUIData.AddNotifyData(GCGame.Table.StrDictionary.GetClientDictionaryString("#{40114}")); _InputBoardNum = _MinValue; } SetValue(_InputBoardNum); _NumModifyEvent.Invoke(); _NumBoard.SetActive(!_NumBoard.activeSelf); _InputBoardNum = 0; } public void OnBtnCancel() { SetValue(bkNum); _NumBoard.SetActive(false); } #endregion public void SetValue(int resValue) { Value = Mathf.Clamp(resValue, _MinValue, _MaxValue); bkNum = Value; } }