//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Friday, August 17, 2018
|
//--------------------------------------------------------
|
using UnityEngine;
|
using System.Collections;
|
using UnityEngine.UI;
|
using System.Collections.Generic;
|
using System;
|
//神兽强化右侧材料吸收列表
|
namespace Snxxz.UI
|
{
|
public class GodBeastBagClass
|
{
|
public int ItemId;//ID
|
public int Index;//下标
|
public int IsEquipment;//是否装备0水晶,1装备
|
public int Color;//品质颜色
|
public int Star;//星级
|
public int LV;//等级
|
public int Proficiency;//熟练度
|
public int EquipScore;//装备评分
|
public int Part;//装备位
|
public int Count;//数量
|
}
|
|
public class GodBeastSlidingList : MonoBehaviour
|
{
|
[SerializeField] ScrollerController m_ScrollerController;
|
|
[SerializeField] Text m_Label;
|
[SerializeField] Button m_Arrow;
|
[SerializeField] GameObject m_ScrollViewFirst;
|
[SerializeField] Button m_ButtonAll;//所有
|
[SerializeField] Button m_ButtonCrystal;//水晶
|
[SerializeField] Button m_ButtonBlue;//蓝
|
[SerializeField] Button m_ButtonPurple;//紫色
|
[SerializeField] Button m_ButtonOrange;//橙色
|
|
[SerializeField] Toggle m_ToggleAll;
|
public int LINE = 10;
|
private List<GodBeastBagClass> GodBeastBagList = new List<GodBeastBagClass>();
|
private List<int> DeleteIndexList = new List<int>();
|
private int Quality = 10;
|
private int GetJumpIndex = 0;//获取跳转下标
|
PackModel _playerPack;
|
PackModel playerPack { get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel<PackModel>()); } }
|
GodBeastModel godBeastModel { get { return ModelCenter.Instance.GetModel<GodBeastModel>(); } }
|
private void Awake()
|
{
|
|
}
|
private void Start()
|
{
|
m_Arrow.AddListener(OnClickArrow);
|
m_ButtonAll.AddListener(() =>
|
{
|
OnClickSwith(10);
|
if (m_ToggleAll.isOn)
|
{
|
m_ToggleAll.isOn = false;
|
}
|
GetGodBeastBag();//获取神兽背包数据排序
|
FilterQuality();//分类筛选
|
godBeastModel.AbsorbEventUpdate();
|
m_ScrollerController.m_Scorller.RefreshActiveCellViews();//刷新可见
|
});
|
m_ButtonCrystal.AddListener(() =>
|
{
|
OnClickSwith(0);
|
if (m_ToggleAll.isOn)
|
{
|
m_ToggleAll.isOn = false;
|
}
|
GetGodBeastBag();//获取神兽背包数据排序
|
FilterQuality();//分类筛选
|
godBeastModel.AbsorbEventUpdate();
|
m_ScrollerController.m_Scorller.RefreshActiveCellViews();//刷新可见
|
});
|
m_ButtonBlue.AddListener(() =>
|
{
|
OnClickSwith(2);
|
if (m_ToggleAll.isOn)
|
{
|
m_ToggleAll.isOn = false;
|
}
|
GetGodBeastBag();//获取神兽背包数据排序
|
FilterQuality();//分类筛选
|
godBeastModel.AbsorbEventUpdate();
|
m_ScrollerController.m_Scorller.RefreshActiveCellViews();//刷新可见
|
});
|
m_ButtonPurple.AddListener(() =>
|
{
|
OnClickSwith(3);
|
if (m_ToggleAll.isOn)
|
{
|
m_ToggleAll.isOn = false;
|
}
|
GetGodBeastBag();//获取神兽背包数据排序
|
FilterQuality();//分类筛选
|
godBeastModel.AbsorbEventUpdate();
|
m_ScrollerController.m_Scorller.RefreshActiveCellViews();//刷新可见
|
});
|
m_ButtonOrange.AddListener(() =>
|
{
|
OnClickSwith(4);
|
if (m_ToggleAll.isOn)
|
{
|
m_ToggleAll.isOn = false;
|
}
|
GetGodBeastBag();//获取神兽背包数据排序
|
FilterQuality();//分类筛选
|
godBeastModel.AbsorbEventUpdate();
|
m_ScrollerController.m_Scorller.RefreshActiveCellViews();//刷新可见
|
});
|
m_ToggleAll.onValueChanged.AddListener(OnClickToggle);
|
}
|
private void OnEnable()
|
{
|
DTC0721_tagMakeItemAnswer.MakeItemAnswerEvent += MakeItemAnswerEvent;
|
godBeastModel.AbsorbEvent += AbsorbEvent;
|
playerPack.itemCntAddEvent += RefreshItemCountAct;
|
}
|
|
|
|
private void OnDisable()
|
{
|
DTC0721_tagMakeItemAnswer.MakeItemAnswerEvent -= MakeItemAnswerEvent;
|
godBeastModel.AbsorbEvent -= AbsorbEvent;
|
playerPack.itemCntAddEvent -= RefreshItemCountAct;
|
}
|
|
|
|
public void Init()
|
{
|
Quality = 10;
|
LINE = Mathf.CeilToInt((float)100 / 3);
|
ContentSelect(Quality);
|
if (m_ScrollViewFirst.activeSelf)
|
{
|
m_ScrollViewFirst.SetActive(false);
|
}
|
if (m_ToggleAll.isOn)
|
{
|
m_ToggleAll.isOn = false;
|
}
|
GetGodBeastBag();//获取神兽背包数据排序
|
FilterQuality();//分类筛选
|
godBeastModel.AbsorbEventUpdate();
|
m_ScrollerController.OnRefreshCell += OnRefreshGridCell;
|
OnCreateGridLineCell(m_ScrollerController);
|
|
}
|
|
public void Unit()
|
{
|
m_ScrollerController.OnRefreshCell -= OnRefreshGridCell;
|
}
|
private void MakeItemAnswerEvent(H0721_tagMakeItemAnswer obj)
|
{
|
if ((int)obj.MakeType == (int)MakeType.DogzEquipPlus)
|
{
|
|
}
|
}
|
private void RefreshItemCountAct(PackType arg1, int arg2, int arg3)
|
{
|
if (arg1 == PackType.DogzItem)
|
{
|
if (m_ToggleAll.isOn)
|
{
|
m_ToggleAll.isOn = false;
|
}
|
GetGodBeastBag();
|
FilterQuality();
|
godBeastModel.AbsorbEventUpdate();
|
m_ScrollerController.m_Scorller.RefreshActiveCellViews();//刷新可见
|
}
|
}
|
private void AbsorbEvent()
|
{
|
m_ScrollerController.m_Scorller.RefreshActiveCellViews();//刷新可见
|
}
|
private void GetGodBeastBag()//获取神兽背包数据排序
|
{
|
GodBeastBagList.Clear();
|
if (playerPack.GetSinglePack(PackType.DogzItem) == null)
|
{
|
return;
|
}
|
Dictionary<int, ItemModel> BackpackDic = playerPack.GetSinglePack(PackType.DogzItem).GetAllItems();
|
foreach (var key in BackpackDic.Keys)
|
{
|
var itemModel = BackpackDic[key];
|
GodBeastBagClass godBeastBagClass = new GodBeastBagClass();
|
godBeastBagClass.ItemId = itemModel.itemId;
|
if (itemModel.itemId == 5417)
|
{
|
continue;
|
}
|
godBeastBagClass.Index = key;
|
if (itemModel.config.Type != 70)
|
{
|
godBeastBagClass.IsEquipment = 1;
|
}
|
else
|
{
|
godBeastBagClass.IsEquipment = 0;
|
}
|
godBeastBagClass.Color = itemModel.config.ItemColor;
|
godBeastBagClass.Star = itemModel.config.StarLevel;
|
godBeastBagClass.EquipScore = itemModel.score;
|
godBeastBagClass.Part = itemModel.config.EquipPlace;
|
godBeastBagClass.Count = itemModel.count;
|
var IudetDogzEquipPlus = itemModel.GetUseData((int)ItemUseDataKey.dogzEquipPlus);// 神兽装备强化信息列表 [强化等级, 强化熟练度]
|
if (IudetDogzEquipPlus == null)
|
{
|
godBeastBagClass.LV = 0;
|
godBeastBagClass.Proficiency = 0;
|
|
}
|
else
|
{
|
godBeastBagClass.LV = IudetDogzEquipPlus[0];
|
godBeastBagClass.Proficiency = IudetDogzEquipPlus[1];
|
}
|
|
GodBeastBagList.Add(godBeastBagClass);
|
}
|
GodBeastBagList.Sort(Compare);
|
}
|
int Compare(GodBeastBagClass x, GodBeastBagClass y)
|
{
|
if (x.IsEquipment.CompareTo(y.IsEquipment) != 0)//是否强化水晶
|
{
|
return x.IsEquipment.CompareTo(y.IsEquipment);
|
}
|
if (x.Proficiency.CompareTo(y.Proficiency) != 0)//强化熟练度
|
{
|
return -x.Proficiency.CompareTo(y.Proficiency);
|
}
|
if (x.Color.CompareTo(y.Color) != 0)//品质
|
{
|
return -x.Color.CompareTo(y.Color);
|
}
|
if (x.Star.CompareTo(y.Star) != 0)//星级
|
{
|
return -x.Star.CompareTo(y.Star);
|
}
|
if (x.Part.CompareTo(y.Part) != 0)//装备位
|
{
|
return x.Part.CompareTo(y.Part);
|
}
|
if (x.EquipScore.CompareTo(y.EquipScore) != 0)//装备评分
|
{
|
return x.EquipScore.CompareTo(y.EquipScore);
|
}
|
return 1;
|
}
|
|
private void FilterQuality()//分类筛选
|
{
|
DeleteIndexList.Clear();
|
godBeastModel.Absorption_Dic.Clear();
|
for (int i = 0; i < GodBeastBagList.Count; i++)
|
{
|
if (Quality <= 0)//只有水晶
|
{
|
if (GodBeastBagList[i].IsEquipment != 0)
|
{
|
int type = i;
|
DeleteIndexList.Add(type);
|
}
|
}
|
else
|
{
|
if (Quality < 10 && (GodBeastBagList[i].IsEquipment != 1 || GodBeastBagList[i].Color > Quality))//过滤掉只剩所选品质装备
|
{
|
int type = i;
|
DeleteIndexList.Add(type);
|
}
|
}
|
}
|
for (int j = DeleteIndexList.Count; j > 0; j--)
|
{
|
int Inedex = DeleteIndexList[j - 1];
|
if (Inedex <= GodBeastBagList.Count - 1)
|
{
|
GodBeastBagList.RemoveAt(Inedex);
|
}
|
}
|
if (m_ToggleAll.isOn)
|
{
|
for (int k = 0; k < GodBeastBagList.Count; k++)
|
{
|
for (int j = 0; j < GodBeastBagList[k].Count; j++)
|
{
|
if (!godBeastModel.IsFullLevel())
|
{
|
if (!godBeastModel.Absorption_Dic.ContainsKey(GodBeastBagList[k].Index))
|
{
|
godBeastModel.Absorption_Dic.Add(GodBeastBagList[k].Index, 1);
|
}
|
else
|
{
|
int Type = j + 1;
|
godBeastModel.Absorption_Dic[GodBeastBagList[k].Index] = Type;
|
}
|
}
|
else
|
{
|
return;
|
}
|
}
|
}
|
}
|
}
|
|
private void OnClickArrow()
|
{
|
m_ScrollViewFirst.SetActive(!m_ScrollViewFirst.activeSelf);
|
}
|
|
private void OnClickToggle(bool IsBool)
|
{
|
if (IsBool)
|
{
|
|
}
|
else
|
{
|
if (godBeastModel.Absorption_Dic.Count != 0)
|
{
|
godBeastModel.Absorption_Dic.Clear();
|
}
|
}
|
GetGodBeastBag();
|
FilterQuality();
|
godBeastModel.AbsorbEventUpdate();
|
m_ScrollerController.m_Scorller.RefreshActiveCellViews();//刷新可见
|
}
|
private void OnClickSwith(int Type)
|
{
|
Quality = Type;
|
if (m_ScrollViewFirst.activeSelf)
|
{
|
m_ScrollViewFirst.SetActive(false);
|
}
|
ContentSelect(Quality);
|
}
|
private void ContentSelect(int Type)
|
{
|
switch (Type)
|
{
|
case 0:
|
m_Label.text = Language.Get("Crystal_SH");
|
break;
|
case 2:
|
m_Label.text = Language.Get("BelowBlue_SH");
|
break;
|
case 3:
|
m_Label.text = Language.Get("BelowPurple_SH");
|
break;
|
case 4:
|
m_Label.text = Language.Get("BelowOrange_SH");
|
break;
|
case 10:
|
m_Label.text = Language.Get("All_SH");
|
break;
|
default:
|
break;
|
}
|
|
}
|
void OnCreateGridLineCell(ScrollerController gridCtrl)
|
{
|
gridCtrl.Refresh();
|
int code = 0;
|
for (code = 0; code < LINE; code++)
|
{
|
gridCtrl.AddCell(ScrollerDataType.Header, code);
|
}
|
gridCtrl.Restart();
|
}
|
private void OnRefreshGridCell(ScrollerDataType type, CellView cell)
|
{
|
int gridlineIndex = cell.index;
|
int childCode = 0;
|
for (childCode = 0; childCode < cell.transform.childCount; childCode++)
|
{
|
int ItemPos = childCode + 1;
|
GodBeastChildNodes GodBeastChildNodes = cell.transform.GetChild(childCode).GetComponent<GodBeastChildNodes>();
|
int cellCount = (cell.transform.childCount) * gridlineIndex + (childCode + 1);
|
if (cellCount > 100)
|
{
|
GodBeastChildNodes.gameObject.SetActive(false);
|
continue;
|
}
|
GodBeastChildNodes.gameObject.SetActive(true);
|
GodBeastChildNodes.ItemCell.gameObject.SetActive(false);
|
GodBeastChildNodes.ChoosenImg.SetActive(false);
|
GodBeastChildNodes.TextNumber.gameObject.SetActive(false);
|
GodBeastChildNodes.NumberNow.gameObject.SetActive(false);
|
GodBeastChildNodes.ButtonDown.RemoveAllListeners();
|
if (cellCount - 1 < GodBeastBagList.Count)
|
{
|
int index = cellCount - 1;
|
GodBeastChildNodes.ItemCell.gameObject.SetActive(true);
|
GodBeastBagClass godBeastBagClass = GodBeastBagList[index];
|
ItemModel itemModel = playerPack.GetItemByIndex(PackType.DogzItem, godBeastBagClass.Index);
|
if (itemModel == null)
|
{
|
return;
|
}
|
|
if (godBeastModel.Absorption_Dic.ContainsKey(godBeastBagClass.Index))
|
{
|
GodBeastChildNodes.ChoosenImg.SetActive(true);
|
if (itemModel.config.EquipPlace <= 0 && itemModel.count > 1)
|
{
|
GodBeastChildNodes.NumberNow.gameObject.SetActive(true);
|
GodBeastChildNodes.NumberNow.text = godBeastModel.Absorption_Dic[godBeastBagClass.Index].ToString() + "/" + itemModel.count;
|
}
|
}
|
else
|
{
|
if (itemModel.config.EquipPlace <= 0 && itemModel.count > 1)
|
{
|
GodBeastChildNodes.NumberNow.gameObject.SetActive(true);
|
GodBeastChildNodes.NumberNow.text = itemModel.count.ToString();
|
}
|
}
|
GodBeastChildNodes.GetGodBeastIndex(godBeastBagClass.Index);
|
GodBeastChildNodes.ButtonDown.AddListener(() =>
|
{
|
if (itemModel.config.EquipPlace > 0)//选中的物品为装备
|
{
|
if (godBeastModel.Absorption_Dic.ContainsKey(godBeastBagClass.Index))
|
{
|
godBeastModel.Absorption_Dic.Remove(godBeastBagClass.Index);
|
}
|
else
|
{
|
godBeastModel.Absorption_Dic.Add(godBeastBagClass.Index, 1);
|
}
|
m_ScrollerController.m_Scorller.RefreshActiveCellViews();//刷新可见
|
}
|
else//选中的物品为水晶
|
{
|
if (itemModel.count <= 1)
|
{
|
if (godBeastModel.Absorption_Dic.ContainsKey(godBeastBagClass.Index))
|
{
|
godBeastModel.Absorption_Dic.Remove(godBeastBagClass.Index);
|
}
|
else
|
{
|
godBeastModel.Absorption_Dic.Add(godBeastBagClass.Index, 1);
|
}
|
m_ScrollerController.m_Scorller.RefreshActiveCellViews();//刷新可见
|
}
|
else
|
{
|
godBeastModel.Crystal_ItemModel = itemModel;
|
godBeastModel.ItemInde = godBeastBagClass.Index;
|
GetJumpIndex = godBeastBagClass.Index;
|
m_ScrollerController.JumpIndex(JumpIndex());
|
godBeastModel.ItemPos = ItemPos;
|
WindowCenter.Instance.Open<CrystalSelectionWin>();
|
}
|
}
|
godBeastModel.AbsorbEventUpdate();
|
});
|
}
|
}
|
}
|
private int JumpIndex()
|
{
|
int jumpIndex = 0;
|
for (int i = 0; i < GodBeastBagList.Count; i++)
|
{
|
if (GodBeastBagList[i].Index == GetJumpIndex)
|
{
|
jumpIndex= Mathf.CeilToInt((float)(i+1) / 3);
|
}
|
}
|
if (jumpIndex >= 1)
|
{
|
jumpIndex -= 1;
|
}
|
return jumpIndex;
|
}
|
}
|
|
}
|
|
|
|