using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
using vnxbqy.UI;
|
|
public class CelestialPalaceShopWin : Window
|
{
|
[SerializeField] ImageEx imgMoneyIcon1;
|
[SerializeField] ImageEx imgMoneyIcon2;
|
[SerializeField] RawImage imgModel;
|
[SerializeField] ImageEx imgItem;
|
[SerializeField] TextEx txtExpenditureAmount;
|
[SerializeField] TextEx txtItemName;
|
[SerializeField] RichText txtItemInfo;
|
[SerializeField] TextEx txtTotalAmount;
|
[SerializeField] ScrollerController scroller;
|
[SerializeField] GetWayTrigger getWayTrigger;
|
StoreModel storeModel { get { return ModelCenter.Instance.GetModel<StoreModel>(); } }
|
ItemTipsModel tipsModel { get { return ModelCenter.Instance.GetModel<ItemTipsModel>(); } }
|
FashionDressModel fashionDressModel { get { return ModelCenter.Instance.GetModel<FashionDressModel>(); } }
|
CelestialPalaceModel model { get { return ModelCenter.Instance.GetModel<CelestialPalaceModel>(); } }
|
List<StoreModel.StoreData> shoplist;
|
int chooseGoodId = 0;
|
protected override void BindController()
|
{
|
|
}
|
|
protected override void OnPreOpen()
|
{
|
storeModel.storeFuncType = (StoreFunc)model.StoreType;
|
scroller.OnRefreshCell += OnRefreshCell;
|
storeModel.RefreshBuyShopLimitEvent += RefreshStore;
|
PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataRefreshEvent;
|
model.SelectedShopCellClickedEvent += OnSelectedShopCellClickedEvent;
|
model.UpdateUseMoneyTotalInfoEvent += OnUpdateUseMoneyTotalInfoEvent;
|
Display();
|
}
|
|
private void OnUpdateUseMoneyTotalInfoEvent()
|
{
|
Display();
|
}
|
|
protected override void OnPreClose()
|
{
|
scroller.OnRefreshCell -= OnRefreshCell;
|
storeModel.RefreshBuyShopLimitEvent -= RefreshStore;
|
PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataRefreshEvent;
|
model.SelectedShopCellClickedEvent -= OnSelectedShopCellClickedEvent;
|
model.UpdateUseMoneyTotalInfoEvent -= OnUpdateUseMoneyTotalInfoEvent;
|
}
|
|
private void OnSelectedShopCellClickedEvent()
|
{
|
scroller.m_Scorller.RefreshActiveCellViews();
|
UpdateShow(model.currentSelectedShopGoodId);
|
}
|
|
void RefreshStore()
|
{
|
scroller.m_Scorller.RefreshActiveCellViews();
|
}
|
|
void OnPlayerDataRefreshEvent(PlayerDataType type)
|
{
|
if (type == PlayerDataType.default39)
|
{
|
Display();
|
}
|
}
|
|
protected override void OnAfterOpen()
|
{
|
CreateScroller();
|
}
|
|
void CreateScroller()
|
{
|
shoplist = storeModel.TryGetStoreDatas(storeModel.storeFuncType);
|
if (shoplist == null)
|
{
|
DebugEx.Log("商店数据为空");
|
return;
|
}
|
shoplist.Sort(CmpStore);
|
model.currentSelectedShopGoodId = shoplist[0].shopId;
|
scroller.Refresh();
|
if (shoplist.Count > 0)
|
{
|
int cellsPerRow = 2;
|
int numberOfRows = Mathf.CeilToInt((float)shoplist.Count / cellsPerRow);
|
for (int i = 0; i < numberOfRows; i++)
|
{
|
scroller.AddCell(ScrollerDataType.Header, i);
|
}
|
}
|
scroller.Restart();
|
}
|
protected override void OnAfterClose()
|
{
|
|
}
|
|
void Display()
|
{
|
getWayTrigger.SetItemId(model.moneyItemId);
|
imgMoneyIcon1.SetIconWithMoneyType(model.MoneyType);
|
imgMoneyIcon2.SetIconWithMoneyType(model.MoneyType);
|
txtTotalAmount.text = UIHelper.GetMoneyCnt(model.MoneyType).ToString();
|
txtExpenditureAmount.text = model.GetAllCostCount().ToString();
|
}
|
|
void UpdateShow(int goodId)
|
{
|
if (!StoreConfig.Has(goodId)) return;
|
int itemId = StoreConfig.Get(goodId).ItemID;
|
if (!ItemConfig.Has(itemId)) return;
|
ItemConfig itemConfig = ItemConfig.Get(itemId);
|
txtItemName.text = itemConfig.ItemName;
|
txtItemInfo.text = itemConfig.Description;
|
txtItemName.color = UIHelper.GetUIColor(itemConfig.ItemColor, true);
|
txtTotalAmount.text = UIHelper.GetMoneyCnt(model.MoneyType).ToString();
|
ShowModel(itemId);
|
}
|
public void ShowModel(int itemId)
|
{
|
UI3DTreasureExhibition.Instance.Stop();
|
var itemConfig = ItemConfig.Get(itemId);
|
imgModel.SetActive(false);
|
imgItem.SetActive(false);
|
switch (itemConfig.Type)
|
{
|
//!!! 参考灵器
|
case 113://翅膀
|
imgModel.SetActive(true);
|
var config = SpiritWeaponConfig.Get(itemId);
|
UI3DModelExhibition.Instance.ShowWing(config.NPCID, imgModel);
|
break;
|
case 114://守护1
|
case 115://守护2
|
imgModel.SetActive(true);
|
config = SpiritWeaponConfig.Get(itemId);
|
UI3DModelExhibition.Instance.ShowNPC(config.NPCID, Vector3.zero, imgModel, false, false);
|
break;
|
case 116://绝世武器
|
case 117://绝世副手
|
imgModel.SetActive(true);
|
config = SpiritWeaponConfig.Get(itemId);
|
UI3DModelExhibition.Instance.ShowEquipment(itemConfig.ChangeOrd, config.Rotation, config.scale, imgModel, true);
|
break;
|
case 41://坐骑碎片
|
imgModel.SetActive(true);
|
var horseId = HorseConfig.GetItemUnLockHorse(itemId);
|
HorseConfig _model = HorseConfig.Get(horseId);
|
UI3DModelExhibition.Instance.ShowHourse(_model.Model, imgModel);
|
break;
|
case 26://灵兽碎片
|
imgModel.SetActive(true);
|
var petId = PetInfoConfig.GetItemUnLockPet(itemId);
|
var npcConfig = NPCConfig.Get(petId);
|
UI3DModelExhibition.Instance.ShowNPC(petId, npcConfig.UIModeLOffset, npcConfig.UIModelRotation, imgModel);
|
break;
|
case 82://时装碎片
|
case 83://时装激活道具
|
imgModel.SetActive(true);
|
if (itemConfig != null)
|
{
|
var fashionType = 0;
|
var fashionId = 0;
|
var isFashion = tipsModel.TryGetItemFashionData(itemConfig.ID, out fashionType, out fashionId);
|
if (isFashion)
|
{
|
List<int> fashionIds = null;
|
fashionDressModel.TryGetFashionIds(fashionType, out fashionIds);
|
if (fashionIds != null && fashionIds.Count > 0)
|
{
|
UI3DModelExhibition.Instance.ShowPlayer(imgModel, SetFashionDressData(fashionIds));
|
}
|
}
|
|
}
|
break;
|
default:
|
imgItem.SetActive(true);
|
imgItem.SetSprite(itemConfig.IconKey);
|
break;
|
}
|
}
|
UI3DPlayerExhibitionData SetFashionDressData(List<int> fashionIds)
|
{
|
var job = PlayerDatas.Instance.baseData.Job;
|
var fashionClothesId = 0;
|
var fashionWeaponId = 0;
|
var fashionSecondaryId = 0;
|
foreach (var fashionId in fashionIds)
|
{
|
FashionDress fashionDress = null;
|
var isFashion = fashionDressModel.TryGetFashionDress(fashionId, out fashionDress);
|
if (isFashion)
|
{
|
int itemId = fashionDress.requireLevelUpItem;
|
var itemConfig = ItemConfig.Get(itemId);
|
switch (fashionDress.fashionDressType)
|
{
|
case 1:
|
fashionClothesId = fashionDress.GetEquipItemId();
|
break;
|
case 2:
|
fashionWeaponId = fashionDress.GetEquipItemId();
|
break;
|
case 3:
|
fashionSecondaryId = fashionDress.GetEquipItemId();
|
break;
|
}
|
}
|
|
}
|
|
var data = new UI3DPlayerExhibitionData()
|
{
|
job = job,
|
fashionClothesId = fashionClothesId,
|
fashionWeaponId = fashionWeaponId,
|
fashionSecondaryId = fashionSecondaryId,
|
isDialogue = false,
|
};
|
|
return data;
|
}
|
protected override void AddListeners()
|
{
|
|
}
|
void OnRefreshCell(ScrollerDataType type, CellView cell)
|
{
|
int cellsPerRow = 2;
|
int length = cell.transform.childCount;
|
|
for (int i = 0; i < length; i++)
|
{
|
int cellIndex = cell.index * cellsPerRow + i;
|
var shopCell = cell.transform.GetChild(i).GetComponent<CelestialPalaceShopCell>();
|
|
if (cellIndex < shoplist.Count)
|
{
|
shopCell.SetActive(true);
|
shopCell.SetDisplay(shoplist[cellIndex].storeConfig);
|
}
|
else
|
{
|
shopCell.SetActive(false);
|
}
|
}
|
}
|
|
//售罄商品排在最后
|
int CmpStore(StoreModel.StoreData a, StoreModel.StoreData b)
|
{
|
bool isSellOutA = BuyItemController.Instance.IsSellOut(a.storeConfig.ID, 0);
|
bool isSellOutB = BuyItemController.Instance.IsSellOut(b.storeConfig.ID, 0);
|
|
if (isSellOutA != isSellOutB)
|
return isSellOutA.CompareTo(isSellOutB);
|
|
|
return a.storeConfig.ShopSort.CompareTo(b.storeConfig.ShopSort);
|
|
}
|
}
|