//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, November 19, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { [XLua.Hotfix] public class AutoHammerWin : Window { [SerializeField] Text m_Level; [SerializeField] LongPressButton m_Reduce; [SerializeField] LongPressButton m_Add; [SerializeField] Text m_TargetLevel; [SerializeField] Text m_Cost; [SerializeField] Button m_Confirm; [SerializeField] Button m_Cancel; [SerializeField] Button m_Close; [SerializeField] Button m_OpenNumkeyboard; [SerializeField] NumKeyBoard m_NumKeyBoard; [SerializeField] ClickScreenOtherSpace m_ClickSpace; MagicianModel model { get { return ModelCenter.Instance.GetModel(); } } public static event Action onConfirm; public static int selectGodWeaponType = 1; private int targetLevel = 0; private int cost = 0; private int minLevel = 1; #region Built-in protected override void BindController() { } protected override void AddListeners() { m_Reduce.onClick.AddListener(Reduce); m_Reduce.onPress.AddListener(PressReduce); m_Add.onClick.AddListener(Add); m_Add.onPress.AddListener(PressAdd); m_Confirm.AddListener(Confirm); m_Cancel.AddListener(CloseClick); m_Close.AddListener(CloseClick); m_OpenNumkeyboard.AddListener(OpenNumkeyboard); m_NumKeyBoard.onValueChange.AddListener(OnValueChange); m_NumKeyBoard.onConfirm.AddListener(OnNumConfirm); m_ClickSpace.AddListener(OnClickSpace); } protected override void OnPreOpen() { var godWeaponInfo = model.GetGodWeaponInfo(selectGodWeaponType); m_NumKeyBoard.min = 1; if (godWeaponInfo != null) { var configs = GodWeaponConfig.GetConfigs(selectGodWeaponType); var maxLevel = configs[configs.Count - 1].Lv; m_NumKeyBoard.max = (uint)maxLevel; minLevel = godWeaponInfo.level + 1; GetTargetLevel(minLevel); } m_NumKeyBoard.gameObject.SetActive(false); DisplayLevel(); DisplayTargetLevel(); } protected override void OnAfterOpen() { } protected override void OnPreClose() { } protected override void OnAfterClose() { } #endregion private void GetTargetLevel(int level) { Dictionary skillDict = null; var minLevel = 0; if (model.TryGetGodWeaponSkills(selectGodWeaponType, out skillDict)) { foreach (var key in skillDict.Keys) { if (key >= level) { minLevel = key; break; } } } targetLevel = Mathf.Max(level, minLevel); } private void DisplayLevel() { GodWeaponInfo godWeaponInfo = model.GetGodWeaponInfo(selectGodWeaponType); if (godWeaponInfo != null) { var config = GodWeaponConfig.GetConfig(selectGodWeaponType, 1); if (config != null) { m_Level.text = StringUtility.Contact(config.Name, Language.Get("GodWeaponLevel", godWeaponInfo.level)); } } } private void DisplayTargetLevel() { m_TargetLevel.text = Language.Get("MagicWin_10", targetLevel); DisplayCost(); } private void Add() { if (targetLevel + 1 <= m_NumKeyBoard.max) { targetLevel += 1; DisplayTargetLevel(); } } private void PressAdd() { if (targetLevel + 10 <= m_NumKeyBoard.max) { targetLevel += 10; DisplayTargetLevel(); } else if (targetLevel < m_NumKeyBoard.max) { targetLevel = (int)m_NumKeyBoard.max; DisplayTargetLevel(); } } private void Reduce() { if (targetLevel - 1 >= minLevel) { targetLevel -= 1; DisplayTargetLevel(); } } private void PressReduce() { if (targetLevel - 10 >= minLevel) { targetLevel -= 10; DisplayTargetLevel(); } else if (targetLevel > minLevel) { targetLevel = minLevel; DisplayTargetLevel(); } } private void OpenNumkeyboard() { if (!m_NumKeyBoard.gameObject.activeSelf) { m_NumKeyBoard.gameObject.SetActive(true); } } private void DisplayCost() { var godWeaponInfo = model.GetGodWeaponInfo(selectGodWeaponType); var requireExp = 0; if (godWeaponInfo != null) { for (int i = godWeaponInfo.level; i < targetLevel; i++) { var config = GodWeaponConfig.GetConfig(selectGodWeaponType, i); if (config != null) { requireExp += config.NeedExp; } } requireExp -= (int)godWeaponInfo.exp; requireExp = Mathf.Max(0, requireExp); } AutoHammerCost autoHammerCost; if (model.TryGetAutoHammerCost(selectGodWeaponType, out autoHammerCost)) { var count = Mathf.CeilToInt((float)requireExp / autoHammerCost.exp); count = Mathf.Max(1, count); cost = count * autoHammerCost.cost; m_Cost.text = cost.ToString(); } } private void Confirm() { if (PlayerDatas.Instance.baseData.diamond < cost) { WindowCenter.Instance.Open(); return; } model.autoHammerLevel = targetLevel; //var config = GodWeaponConfig.GetConfig(selectGodWeaponType, 1); //ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), // Language.Get("AutoHammerConfirm", cost, config.Name, targetLevel), (bool isOk) => // { // if (isOk) // { // // } // }); if (onConfirm != null) { onConfirm(true); } CloseImmediately(); } private void OnNumConfirm(bool isOk) { UpdateHammerLevel(); m_NumKeyBoard.gameObject.SetActive(false); } private void OnClickSpace() { UpdateHammerLevel(); } private void UpdateHammerLevel() { var godWeaponInfo = model.GetGodWeaponInfo(selectGodWeaponType); var minLevel = godWeaponInfo == null ? 1 : (godWeaponInfo.level + 1); var level = targetLevel; int.TryParse(m_NumKeyBoard.Value, out level); if (level >= m_NumKeyBoard.max) { level = (int)m_NumKeyBoard.max; } else if (level < minLevel) { level = minLevel; } targetLevel = level; DisplayTargetLevel(); } private void OnValueChange() { var level = targetLevel; int.TryParse(m_NumKeyBoard.Value, out level); if (level >= m_NumKeyBoard.max) { level = (int)m_NumKeyBoard.max; } targetLevel = level; DisplayTargetLevel(); } } }