//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Friday, March 08, 2019
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace vnxbqy.UI
|
{
|
|
public class EquipTrainWin : Window
|
{
|
|
[SerializeField] RectTransform m_LevelContainer;
|
[SerializeField] ScrollRect m_LevelScrollRect;
|
[SerializeField] RectTransform m_OperateContainer;
|
[SerializeField] RectTransform m_EmptyContainer;
|
[SerializeField] Text m_MaxTrainLevel;
|
[SerializeField] ItemCell m_TargetEquip;
|
[SerializeField] Text m_EquipStar;
|
[SerializeField] RectTransform m_EquipEmpty;
|
|
[SerializeField] MaterialCell m_MaterialCell;
|
[SerializeField] InevitableMaterialCell m_InevitableMaterial;
|
|
[SerializeField] RectTransform m_UnTrainableContainer;
|
[SerializeField] RectTransform m_TrainableContainer;
|
[SerializeField] Text m_TrainLevel;
|
[SerializeField] EquipTrainPropertyBarBehaviour[] m_PropertyBarBehaviours;
|
[SerializeField] RectTransform m_MaxLevelContainer;
|
|
[SerializeField] UIEffect m_EffectNormal;
|
[SerializeField] UIEffect m_EffectMust;
|
|
[SerializeField] Button m_Train;
|
[SerializeField] Text m_AutoTrain;
|
[SerializeField] Button m_Save;
|
[SerializeField] Button m_GiveUp;
|
[SerializeField] Button m_UpdateLevel;
|
|
List<EquipTrainLevelBehaviour> levelBehaviours = new List<EquipTrainLevelBehaviour>();
|
|
EquipTrainModel model { get { return ModelCenter.Instance.GetModel<EquipTrainModel>(); } }
|
EquipStarModel starModel { get { return ModelCenter.Instance.GetModel<EquipStarModel>(); } }
|
EquipModel equipModel { get { return ModelCenter.Instance.GetModel<EquipModel>(); } }
|
PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
|
|
#region Built-in
|
protected override void BindController()
|
{
|
|
}
|
|
|
protected override void AddListeners()
|
{
|
m_Train.SetListener(Train);
|
//m_Save.SetListener(Save);
|
//m_GiveUp.SetListener(GiveUp);
|
m_UpdateLevel.SetListener(UpdateLevel);
|
}
|
|
protected override void OnPreOpen()
|
{
|
model.autoTrain = false;
|
packModel.refreshItemCountEvent += OnItemCountRefresh;
|
if (model.selectedLevel.value == 0)
|
{
|
var equipPosition = model.GetRecommendEquipPosition();
|
model.SelectLevel(equipPosition.x);
|
}
|
}
|
|
protected override void OnAfterOpen()
|
{
|
}
|
|
protected override void OnPreClose()
|
{
|
packModel.refreshItemCountEvent -= OnItemCountRefresh;
|
StopAllCoroutines();
|
model.autoTrain = false;
|
}
|
|
protected override void OnAfterClose()
|
{
|
model.ResetOperateParams();
|
}
|
|
protected override void OnActived()
|
{
|
base.OnActived();
|
|
DisplayBaseInfo();
|
DisplayDynamicInfo(true);
|
}
|
|
protected override void LateUpdate()
|
{
|
base.LateUpdate();
|
DisplayDynamicInfo(false);
|
}
|
|
#endregion
|
|
private void OnItemCountRefresh(PackType type, int index, int itemId)
|
{
|
|
if (type == PackType.Item && itemId == 5303)
|
{
|
var material = model.material.Fetch();
|
m_MaterialCell.Display(material.x, packModel.GetItemCountByID(PackType.Item, 5303), material.z);
|
}
|
|
if (type == PackType.Item && itemId == 5412)
|
{
|
model.inevitableMaterialCount.dirty = true;
|
}
|
|
}
|
|
|
|
private void DisplayBaseInfo()
|
{
|
CreateLevelBehaviours();
|
}
|
|
private void DisplayDynamicInfo(bool force)
|
{
|
if (force || model.selectedLevel.dirty)
|
{
|
model.autoTrain = false;
|
DisplayCandidateSlots(model.selectedLevel.Fetch(), force);
|
}
|
|
if (force || model.selectedPlace.dirty)
|
{
|
model.autoTrain = false;
|
var place = model.selectedPlace.Fetch();
|
if (place == 0)
|
{
|
m_OperateContainer.SetActive(false);
|
m_EmptyContainer.SetActive(true);
|
}
|
else
|
{
|
m_OperateContainer.SetActive(true);
|
m_EmptyContainer.SetActive(false);
|
|
var equipPosition = new Int2(model.selectedLevel.value, model.selectedPlace.Fetch());
|
var equipGuid = equipModel.GetEquip(equipPosition);
|
var equip = packModel.GetItemByGuid(equipGuid);
|
if (equip != null)
|
{
|
m_EquipEmpty.SetActive(false);
|
m_TargetEquip.SetActive(true);
|
m_TargetEquip.Init(equip);
|
m_TargetEquip.button.SetListener(ViewEquipTip);
|
|
var starLevel = starModel.GetEquipStarLevel(equipPosition);
|
m_EquipStar.SetActive(true);
|
m_EquipStar.text = starLevel >= 1 ? Language.Get("EquipStarLevel", starLevel) : "";
|
}
|
else
|
{
|
m_EquipEmpty.SetActive(true);
|
m_TargetEquip.SetActive(false);
|
m_EquipStar.SetActive(false);
|
}
|
}
|
|
}
|
|
if (force || model.equipTrainLevel.dirty)
|
{
|
var trainLevel = model.equipTrainLevel.Fetch();
|
m_TrainLevel.text = Language.Get("EquipWash1", Mathf.Clamp(trainLevel, 0, int.MaxValue));
|
}
|
|
if (force || model.equipTrainMaxLevel.dirty)
|
{
|
var equipPosition = new Int2(model.selectedLevel.value, model.selectedPlace.value);
|
var maxTrain = model.equipTrainMaxLevel.Fetch();
|
|
if (maxTrain < 0)
|
{
|
m_MaxTrainLevel.text = Language.Get("EquipWash2");
|
}
|
else if (maxTrain >= 0)
|
{
|
var star = starModel.GetEquipStarLevel(equipPosition);
|
m_MaxTrainLevel.text = Language.Get("EquipWash3", star, maxTrain);
|
}
|
else
|
{
|
m_MaxTrainLevel.text = Language.Get("EquipWash4");
|
}
|
}
|
|
if (force || model.trainLimit.dirty)
|
{
|
m_MaxLevelContainer.SetActive(model.trainLimit.Fetch());
|
}
|
|
if (force || model.material.dirty)
|
{
|
DisplayMaterial(model.material.Fetch());
|
}
|
|
if (force || model.inevitableMaterialCount.dirty)
|
{
|
var equipPosition = new Int2(model.selectedLevel.value, model.selectedPlace.value);
|
DisplayInevitableMaterial(equipPosition, model.inevitableMaterialCount.Fetch());
|
}
|
|
if (force || model.operateType.dirty)
|
{
|
DisplayOperateButton(model.operateType.Fetch());
|
}
|
|
if (force || model.propertyBars.dirty)
|
{
|
DisplayProperty(model.propertyBars.Fetch());
|
}
|
|
if (force || model.trainEffect.dirty)
|
{
|
DisplayTrainEffect(model.trainEffect.Fetch());
|
}
|
|
}
|
|
private void DisplayCandidateSlots(int selectedLevel, bool resetPosition)
|
{
|
for (var i = 0; i < levelBehaviours.Count; i++)
|
{
|
var behaviour = levelBehaviours[i];
|
if (behaviour.level != selectedLevel)
|
{
|
behaviour.Dispose();
|
}
|
}
|
|
RectTransform selectedBehaviour = null;
|
for (var i = 0; i < levelBehaviours.Count; i++)
|
{
|
var behaviour = levelBehaviours[i];
|
if (behaviour.level == selectedLevel)
|
{
|
behaviour.Display();
|
selectedBehaviour = behaviour.transform as RectTransform;
|
}
|
}
|
|
//if (resetPosition && selectedBehaviour != null)
|
//{
|
// var height = 0f;
|
// var totalHeight = 0f;
|
// var index = selectedBehaviour.GetSiblingIndex();
|
// var childCount = m_LevelContainer.childCount;
|
|
// for (var i = 0; i < childCount; i++)
|
// {
|
// var child = m_LevelContainer.GetChild(i);
|
// if (i < index)
|
// {
|
// height += (child as RectTransform).rect.height;
|
// }
|
|
// totalHeight += (child as RectTransform).rect.height;
|
// }
|
|
// var viewRect = (m_LevelScrollRect.transform as RectTransform).rect;
|
// if (totalHeight > viewRect.height)
|
// {
|
// m_LevelScrollRect.verticalNormalizedPosition = 1 - height / (totalHeight - viewRect.height);
|
// }
|
// else
|
// {
|
// m_LevelScrollRect.verticalNormalizedPosition = 1;
|
// }
|
//}
|
}
|
|
private void DisplayMaterial(Int3 material)
|
{
|
m_MaterialCell.Display(material.x, material.y, material.z);
|
}
|
|
private void DisplayInevitableMaterial(Int2 equipPosition, int need)
|
{
|
var trainable = model.GetEquipPlaceTrainState(equipPosition) == EquipTrainModel.TrainState.Allowable;
|
if (trainable && need > 0)
|
{
|
var own = packModel.GetItemCountByID(PackType.Item, GeneralDefine.equipTrainMustItemId);
|
var diamond = (need - own) * model.GetInevitableMaterialPrice();
|
m_InevitableMaterial.Display(false, need, own, diamond);
|
}
|
else
|
{
|
m_InevitableMaterial.Display(true, 0, 0, 0);
|
}
|
}
|
|
private void DisplayProperty(List<EquipTrainPropertyBar> propertyBars)
|
{
|
var isTrainable = !propertyBars.IsNullOrEmpty();
|
if (isTrainable)
|
{
|
m_UnTrainableContainer.SetActive(false);
|
m_TrainableContainer.SetActive(true);
|
for (int i = 0; i < m_PropertyBarBehaviours.Length; i++)
|
{
|
var behaviour = m_PropertyBarBehaviours[i];
|
if (i < propertyBars.Count)
|
{
|
behaviour.SetActive(true);
|
behaviour.Display(propertyBars[i]);
|
}
|
else
|
{
|
behaviour.SetActive(false);
|
}
|
}
|
}
|
else
|
{
|
m_UnTrainableContainer.SetActive(true);
|
m_TrainableContainer.SetActive(false);
|
}
|
}
|
|
private void DisplayOperateButton(EquipTrainModel.TrainOperateType opreateType)
|
{
|
if (opreateType == EquipTrainModel.TrainOperateType.Train||opreateType == EquipTrainModel.TrainOperateType.Save)
|
{
|
m_Train.SetActive(true);
|
|
}
|
else
|
{
|
m_Train.SetActive(false);
|
model.autoTrain = false;
|
}
|
//自动保存
|
if (opreateType == EquipTrainModel.TrainOperateType.Save)
|
{
|
StartCoroutine("Co_SaveTrain");
|
}
|
else
|
{
|
StopCoroutine("Co_SaveTrain");
|
}
|
if (model.autoTrain && opreateType == EquipTrainModel.TrainOperateType.Train)
|
{
|
//自动洗炼
|
TrainEx();
|
}
|
if (model.autoTrain)
|
{
|
m_AutoTrain.text = Language.Get("equipAutoTrain2");
|
}
|
else
|
{
|
m_AutoTrain.text = Language.Get("equipAutoTrain1");
|
}
|
m_Save.SetActive(false);
|
m_GiveUp.SetActive(false);
|
m_UpdateLevel.SetActive(opreateType == EquipTrainModel.TrainOperateType.LevelUp);
|
}
|
|
private void DisplayTrainEffect(int value)
|
{
|
switch (value)
|
{
|
case 1:
|
m_EffectNormal.Play();
|
break;
|
case 2:
|
m_EffectMust.Play();
|
break;
|
}
|
}
|
|
private void Train()
|
{
|
if (model.autoTrain)
|
{
|
model.autoTrain = false;
|
m_AutoTrain.text = Language.Get("equipAutoTrain1");
|
return;
|
}
|
TrainEx();
|
}
|
private void TrainEx()
|
{
|
var equipPosition = new Int2(model.selectedLevel.value, model.selectedPlace.value);
|
var inevitables = new bool[3];
|
for (int i = 0; i < 3; i++)
|
{
|
inevitables[i] = model.propertyBars[i].inevitable.value;
|
}
|
model.Train(equipPosition, inevitables);
|
}
|
|
IEnumerator Co_SaveTrain()
|
{
|
yield return new WaitForSeconds(0.2f);
|
var equipPosition = new Int2(model.selectedLevel.value, model.selectedPlace.value);
|
model.Save(equipPosition);
|
}
|
|
private void GiveUp()
|
{
|
//var equipPosition = new Int2(model.selectedLevel.value, model.selectedPlace.value);
|
//model.GiveUp(equipPosition);
|
}
|
|
private void UpdateLevel()
|
{
|
var equipPosition = new Int2(model.selectedLevel.value, model.selectedPlace.value);
|
model.UpdateLevel(equipPosition);
|
}
|
|
private void ViewEquipTip()
|
{
|
var level = model.selectedLevel.value;
|
var place = model.selectedPlace.value;
|
var equipPosition = new Int2(level, place);
|
var equipGuid = equipModel.GetEquip(equipPosition);
|
|
ItemTipUtility.Show(equipGuid);
|
}
|
|
private void CreateLevelBehaviours()
|
{
|
var levels = equipModel.GetUnLockedEquipSetsByFuncID(91);
|
var gap = levels.Count - levelBehaviours.Count;
|
for (var i = 0; i < gap; i++)
|
{
|
var instance = UIUtility.CreateWidget("EquipTrainLevelBehaviour", "EquipTrainLevelBehaviour");
|
var behaviour = instance.GetComponent<EquipTrainLevelBehaviour>();
|
behaviour.transform.SetParentEx(m_LevelContainer, Vector3.zero, Quaternion.identity, Vector3.one);
|
levelBehaviours.Add(behaviour);
|
}
|
|
for (var i = 0; i < levelBehaviours.Count; i++)
|
{
|
var behaviour = levelBehaviours[i];
|
if (i < levels.Count)
|
{
|
behaviour.SetActive(true);
|
behaviour.UnInit();
|
behaviour.Init(levels[i]);
|
}
|
else
|
{
|
behaviour.UnInit();
|
behaviour.SetActive(false);
|
}
|
}
|
}
|
|
[Serializable]
|
public class MaterialCell
|
{
|
public RectTransform m_LockContainer;
|
public ItemBehaviour m_Material;
|
public Text m_MaterialCount;
|
|
public void Display(int itemId, int own, int need)
|
{
|
if (itemId > 0)
|
{
|
m_LockContainer.SetActive(false);
|
m_Material.SetActive(true);
|
m_MaterialCount.SetActive(true);
|
m_Material.SetItem(itemId, 1);
|
var enough = own >= need;
|
m_MaterialCount.text = string.Format("{0}/{1}", UIHelper.AppendColor(enough ? TextColType.Green : TextColType.Red, own.ToString(), true), need);
|
}
|
else
|
{
|
m_LockContainer.SetActive(true);
|
m_Material.SetActive(false);
|
m_MaterialCount.SetActive(false);
|
}
|
}
|
}
|
|
[Serializable]
|
public class InevitableMaterialCell
|
{
|
public RectTransform m_LockContainer;
|
public ItemBehaviour m_InevitableMaterial;
|
public Text m_InevitableMaterialCount;
|
public RectTransform m_DiamondContainer;
|
public Text m_DiamondCount;
|
|
public void Display(bool locked, int need, int own, int diamond)
|
{
|
if (locked)
|
{
|
m_LockContainer.SetActive(true);
|
m_InevitableMaterial.SetActive(false);
|
m_InevitableMaterialCount.SetActive(false);
|
m_DiamondContainer.SetActive(false);
|
}
|
else
|
{
|
m_LockContainer.SetActive(false);
|
m_InevitableMaterial.SetActive(true);
|
m_InevitableMaterialCount.SetActive(true);
|
|
m_InevitableMaterial.SetItem(GeneralDefine.equipTrainMustItemId, 1);
|
var enough = own >= need;
|
|
m_InevitableMaterialCount.text = string.Format("{0}/{1}",
|
UIHelper.AppendColor(enough ? TextColType.Green : TextColType.Red, own.ToString(), true), need);
|
|
if (diamond > 0)
|
{
|
m_DiamondContainer.SetActive(true);
|
m_DiamondCount.text = diamond.ToString();
|
}
|
else
|
{
|
m_DiamondContainer.SetActive(false);
|
}
|
}
|
|
}
|
}
|
|
}
|
|
}
|