using DG.Tweening;
|
using Snxxz.UI;
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using System.Linq;
|
using TableConfig;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace Snxxz.UI
|
{
|
public class GetWingsPathTips : MonoBehaviour
|
{
|
#region TopUI
|
[SerializeField]
|
Button closeBtn;
|
[SerializeField]
|
GameObject putOnIcon;
|
[SerializeField]
|
Text titleText;
|
[SerializeField]
|
Text equipScoreDes;
|
[SerializeField]
|
Text equipScoreValue;
|
[SerializeField]
|
Text conditionText;
|
[SerializeField]
|
Image conditionValueText;
|
[SerializeField]
|
Text dateText;
|
[SerializeField]
|
ItemCell itemCell;
|
#endregion
|
|
#region MidUI
|
[SerializeField]
|
RectTransform attrContent;
|
[SerializeField]
|
ScrollRect scrollRect;
|
[SerializeField]
|
LayoutElement scrollLayout;
|
|
[SerializeField]
|
GameObject basicAttr;
|
[SerializeField]
|
Text basicTitleText;
|
[SerializeField]
|
Text basicAttrDes;
|
[SerializeField]
|
GameObject legendAttr;
|
[SerializeField]
|
Text legendTitleText;
|
[SerializeField]
|
Text legendCntPreview;
|
[SerializeField]
|
Text legendAttrDes;
|
|
[SerializeField] List<GameObject> attrCutLinelist = new List<GameObject>();
|
#endregion
|
[SerializeField]
|
protected RectTransform _itemInfoTips;
|
|
[SerializeField] RectTransform getWaysTips;
|
|
[SerializeField]
|
protected CanvasGroup _getWaysTipsAlpha;
|
|
[SerializeField]
|
private ScrollerController _waysCtrl;
|
|
[SerializeField]
|
private Transform waysLineCell;
|
|
[SerializeField]
|
private Button _closeWaysBtn;
|
|
[SerializeField]
|
[Header("移动时间")]
|
protected float _moveTime = 0.3f;
|
|
[SerializeField]
|
protected CanvasGroup tipAlpha;
|
|
[SerializeField] GameObject equipTipsObj;
|
#region BottomUI
|
[SerializeField]
|
GameObject bottomPart;
|
[SerializeField]
|
private Button _getItemBtn;
|
#endregion
|
|
ItemTipsModel _itemTipsModel;
|
ItemTipsModel itemTipsModel
|
{
|
get
|
{
|
return _itemTipsModel ?? (_itemTipsModel = ModelCenter.Instance.GetModel<ItemTipsModel>());
|
}
|
}
|
|
PackModelInterface _modelInterface;
|
PackModelInterface modelInterface
|
{
|
get { return _modelInterface ?? (_modelInterface = ModelCenter.Instance.GetModel<PackModelInterface>()); }
|
}
|
|
ItemAttrData itemAttrData;
|
private int curAttrTypeNum = 0;
|
|
public void InitModel(ItemAttrData attrData)
|
{
|
curAttrTypeNum = 0;
|
KnapsackTimeCDMgr.Instance.RefreshItemOverdueTimeAct += RefreshRemainTime;
|
itemAttrData = attrData;
|
InitUI();
|
closeBtn.AddListener(OnClickCloseBtn);
|
_waysCtrl.OnRefreshCell += RefreshWayCell;
|
_getItemBtn.onClick.AddListener(OnClickGetItemBtn);
|
_closeWaysBtn.onClick.AddListener(OnClickCloseBtn);
|
}
|
|
private void OnEnable()
|
{
|
bottomPart.gameObject.SetActive(false);
|
StartCoroutine(SetScrollSize());
|
}
|
|
IEnumerator SetScrollSize()
|
{
|
yield return null;
|
yield return null;
|
attrContent.anchoredPosition3D = new Vector3(attrContent.anchoredPosition3D.x, 0, 0);
|
SetMidUIHeight(attrContent.rect.height);
|
StartCoroutine(ShowBottomPart());
|
}
|
|
IEnumerator ShowBottomPart()
|
{
|
yield return null;
|
bottomPart.gameObject.SetActive(true);
|
StartCoroutine(SetPanelScale());
|
}
|
|
IEnumerator SetPanelScale()
|
{
|
yield return null;
|
itemTipsModel.SetCurTips(this.GetComponent<RectTransform>());
|
SetGetWaysPos();
|
//_itemInfoTips.localPosition = Vector3.zero;
|
tipAlpha.alpha = 1;
|
}
|
public void SetGetWaysPos()
|
{
|
if (itemTipsModel.compareAttrData != null)
|
{
|
getWaysTips.anchoredPosition3D = Vector3.zero;
|
}
|
else
|
{
|
getWaysTips.anchoredPosition3D = new Vector3(this.GetComponent<RectTransform>().sizeDelta.x / 2, 0, 0);
|
}
|
}
|
private void InitUI()
|
{
|
#region 设置TopUI
|
titleText.text = itemTipsModel.GetItemTipsTitle(itemAttrData);
|
titleText.color = UIHelper.GetUIColor(modelInterface.GetItemQuality(itemAttrData.itemId, itemAttrData.useDataDict));
|
ItemCellModel cellModel = new ItemCellModel(itemAttrData.itemId, itemAttrData.isPreview, (ulong)itemAttrData.count, itemAttrData.isBind,
|
itemAttrData.guid, itemAttrData.packType, itemAttrData.isCompare, itemAttrData.useDataDict);
|
itemCell.Init(cellModel);
|
if (itemAttrData.packType == PackType.rptEquip)
|
{
|
putOnIcon.SetActive(true);
|
}
|
else
|
{
|
putOnIcon.SetActive(false);
|
}
|
|
equipScoreDes.text = Language.Get("EquipWin_EquipPointText_1");
|
equipScoreValue.text = itemAttrData.score.ToString();
|
if (itemAttrData.isHavePutLimit)
|
{
|
conditionText.gameObject.SetActive(true);
|
conditionValueText.gameObject.SetActive(true);
|
var _realmLv = itemAttrData.itemConfig.RealmLimit;
|
var _realmCfg = Config.Instance.Get<RealmConfig>(_realmLv);
|
if (PlayerDatas.Instance.baseData.realmLevel < _realmLv)
|
{
|
conditionText.text = UIHelper.GetTextColorByItemColor(TextColType.Red, Language.Get("RealmLimit1"));
|
if (_realmLv != 0)
|
{
|
conditionValueText.SetSprite(_realmCfg.Img);
|
}
|
else
|
{
|
conditionText.gameObject.SetActive(false);
|
conditionValueText.gameObject.SetActive(false);
|
}
|
}
|
else
|
{
|
if (_realmLv != 0)
|
{
|
conditionText.text = StringUtility.Contact("<color=#FFF4CDFF>", Language.Get("RealmLimit1"), "</color>");
|
conditionValueText.SetSprite(_realmCfg.Img);
|
}
|
else
|
{
|
conditionText.gameObject.SetActive(false);
|
conditionValueText.gameObject.SetActive(false);
|
}
|
}
|
}
|
else
|
{
|
conditionText.gameObject.SetActive(false);
|
conditionValueText.gameObject.SetActive(false);
|
}
|
|
|
if (itemAttrData.itemConfig.ExpireTime > 0)
|
{
|
List<int> itemEffectTime = itemAttrData.GetUseDataModel((int)ItemUseDataKey.Def_IudetCreateTime);
|
if (itemEffectTime != null && itemEffectTime[0] != 0 && itemAttrData.guid != "")
|
{
|
RefreshRemainTime(itemAttrData.guid);
|
}
|
else
|
{
|
SetDateLimitUI(itemAttrData.itemConfig.ExpireTime);
|
}
|
}
|
else
|
{
|
dateText.gameObject.SetActive(false);
|
}
|
#endregion
|
|
#region 设置MidUI
|
SetBasicAttrUI();
|
SetLegendAttrUI();
|
for (int i = 0; i < attrCutLinelist.Count; i++)
|
{
|
if (i == curAttrTypeNum - 1)
|
{
|
attrCutLinelist[curAttrTypeNum - 1].SetActive(false);
|
}
|
else
|
{
|
attrCutLinelist[i].SetActive(true);
|
}
|
}
|
#endregion
|
}
|
|
private void OnDisable()
|
{
|
KnapsackTimeCDMgr.Instance.RefreshItemOverdueTimeAct -= RefreshRemainTime;
|
}
|
|
private void RefreshRemainTime(string guid)
|
{
|
if (guid != itemAttrData.guid)
|
{
|
return;
|
}
|
ItemCDCool cool = KnapsackTimeCDMgr.Instance.GetItemCoolById(guid);
|
if (cool != null)
|
{
|
SetDateLimitUI(cool.GetRemainTime());
|
}
|
else
|
{
|
SetDateLimitUI(0);
|
}
|
}
|
|
private void SetDateLimitUI(double time)
|
{
|
dateText.gameObject.SetActive(true);
|
TimeSpan t = TimeSpan.FromSeconds(time);
|
if (t.TotalDays > 1)
|
{
|
dateText.text = Language.Get("EquipInfo_OverdueDay", (int)t.TotalDays);
|
}
|
else if (t.TotalHours > 1)
|
{
|
dateText.text = Language.Get("EquipInfo_OverdueHour", (int)t.TotalHours);
|
}
|
else if (t.TotalMinutes > 1)
|
{
|
dateText.text = Language.Get("EquipInfo_OverdueMin", (int)t.TotalMinutes);
|
}
|
else if (t.TotalMinutes > 0)
|
{
|
dateText.text = Language.Get("EquipInfo_OverdueMin", 1);
|
}
|
else if (t.TotalSeconds <= 0)
|
{
|
dateText.text = Language.Get("EquipInfo_Overdued");
|
}
|
}
|
|
#region 设置属性UI
|
private void SetBasicAttrUI()
|
{
|
basicAttr.SetActive(true);
|
basicTitleText.text = Language.Get("RolePanel_BaseAttrText_1");
|
basicAttrDes.text = itemTipsModel.GetBasicAttr(itemAttrData);
|
curAttrTypeNum = 1;
|
}
|
|
private void SetLegendAttrUI()
|
{
|
if (itemAttrData.legendDataDict == null)
|
{
|
legendAttr.SetActive(false);
|
return;
|
}
|
curAttrTypeNum = 2;
|
legendAttr.SetActive(true);
|
legendTitleText.text = Language.Get("EquipWin_LegendPropObj_Text_1");
|
legendAttrDes.text = itemTipsModel.GetLegendAttr(itemAttrData);
|
|
if (itemAttrData.isPreview)
|
{
|
legendCntPreview.gameObject.SetActive(true);
|
legendCntPreview.text = itemTipsModel.GetWingsLegendAttrCntPreview(itemAttrData);
|
}
|
else
|
{
|
legendCntPreview.gameObject.SetActive(false);
|
}
|
}
|
|
private void SetMidUIHeight(float midHeight)
|
{
|
scrollRect.enabled = false;
|
|
if (midHeight < itemTipsModel.equipMidHeights[0])
|
{
|
scrollLayout.preferredHeight = itemTipsModel.equipMidHeights[0];
|
}
|
else if (midHeight > itemTipsModel.equipMidHeights[1])
|
{
|
scrollRect.enabled = true;
|
scrollLayout.preferredHeight = itemTipsModel.equipMidHeights[1];
|
}
|
else
|
{
|
scrollLayout.preferredHeight = midHeight;
|
}
|
}
|
#endregion
|
|
private void OnClickGetItemBtn()
|
{
|
if (_getWaysTipsAlpha.alpha <= 0)
|
{
|
Vector3 pos = Vector3.zero;
|
if (itemTipsModel.compareAttrData != null)
|
{
|
equipTipsObj.SetActive(false);
|
pos = new Vector3(0, 0, 0);
|
}
|
else
|
{
|
pos = new Vector3(this.GetComponent<RectTransform>().sizeDelta.x, 0, 0);
|
}
|
_itemInfoTips.DOAnchorPos3D(pos, _moveTime);
|
_getWaysTipsAlpha.DOFade(1, _moveTime);
|
closeBtn.gameObject.SetActive(false);
|
|
CreateWayCell();
|
}
|
else
|
{
|
_itemInfoTips.DOAnchorPos3D(new Vector3(this.GetComponent<RectTransform>().sizeDelta.x, 0, 0), _moveTime);
|
_getWaysTipsAlpha.DOFade(0, _moveTime);
|
closeBtn.gameObject.SetActive(true);
|
if (itemTipsModel.compareAttrData != null)
|
{
|
equipTipsObj.SetActive(true);
|
}
|
}
|
|
}
|
|
private void OnClickCloseBtn()
|
{
|
closeBtn.onClick.RemoveAllListeners();
|
KnapSackEventMgr.Instance.HideItemPopWin();
|
}
|
|
#region getWaysTips逻辑
|
private List<GetItemWaysConfig> getWayslist;
|
protected virtual void CreateWayCell()
|
{
|
getWayslist = itemTipsModel.GetWaysList(itemAttrData);
|
_waysCtrl.Refresh();
|
int i = 0;
|
int remain = getWayslist.Count % waysLineCell.childCount;
|
int line = (int)getWayslist.Count / waysLineCell.childCount;
|
if (remain > 0)
|
{
|
line += 1;
|
}
|
|
for (i = 0; i < line; i++)
|
{
|
_waysCtrl.AddCell(ScrollerDataType.Header, i);
|
}
|
_waysCtrl.Restart();
|
}
|
|
private void RefreshWayCell(ScrollerDataType type, CellView cell)
|
{
|
int i = 0;
|
for (i = 0; i < cell.transform.childCount; i++)
|
{
|
WayCell wayCell = cell.transform.GetChild(i).GetComponent<WayCell>();
|
if (wayCell == null)
|
wayCell = cell.transform.GetChild(i).gameObject.AddComponent<WayCell>();
|
|
int index = (cell.transform.childCount) * cell.index + i;
|
if (index <= getWayslist.Count - 1)
|
{
|
cell.transform.GetChild(i).gameObject.SetActive(true);
|
GetItemWaysConfig itemWaysModel = getWayslist[index];
|
wayCell.icon.SetSprite(itemWaysModel.Icon);
|
wayCell.wayName.text = itemWaysModel.Text;
|
wayCell.funcName.text = itemWaysModel.name;
|
wayCell.wayButton.RemoveAllListeners();
|
wayCell.wayButton.AddListener(() => {
|
ClickWayCell(itemWaysModel);
|
});
|
}
|
else
|
{
|
cell.transform.GetChild(i).gameObject.SetActive(false);
|
}
|
}
|
}
|
|
public void ClickWayCell(GetItemWaysConfig itemWaysModel)
|
{
|
OnClickCloseBtn();
|
ModelCenter.Instance.GetModel<GetItemPathModel>().ClickGetWay(itemAttrData.itemId, itemWaysModel);
|
}
|
|
#endregion
|
|
}
|
}
|
|
|