//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Monday, November 19, 2018
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace vnxbqy.UI
|
{
|
|
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<MagicianModel>(); }
|
}
|
|
public static event Action<bool> 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.SetActive(false);
|
DisplayLevel();
|
DisplayTargetLevel();
|
}
|
|
protected override void OnAfterOpen()
|
{
|
}
|
|
protected override void OnPreClose()
|
{
|
}
|
|
protected override void OnAfterClose()
|
{
|
}
|
#endregion
|
|
private void GetTargetLevel(int level)
|
{
|
Dictionary<int, int> 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.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<RechargeTipWin>();
|
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.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();
|
}
|
}
|
}
|
|
|
|
|