using System;
|
using System.Collections.Generic;
|
using UnityEngine;
|
|
public class PhantasmPavilionModelWin : UIBase
|
{
|
[SerializeField] float modelSize;
|
[SerializeField] float lhSize;
|
[SerializeField] ButtonEx btnAllAdd;
|
[Header("二级标签页")]
|
[SerializeField] GroupButtonEx btnTabType1;
|
[SerializeField] GroupButtonEx btnTabType2;
|
|
[Header("选中项展示")]
|
//当前气泡
|
[SerializeField] Transform lhframe;
|
[SerializeField] UIHeroController heroIh;
|
[SerializeField] UIHeroController heroModel;
|
[SerializeField] UIEffectPlayer heroAddStar;
|
|
[Header("属性展示")]
|
[SerializeField] TextEx txtName;
|
[SerializeField] TextEx txtGetWayString;
|
[SerializeField] TextEx txtAddInfo;
|
[SerializeField] TextEx txtUnLockInfo;
|
[SerializeField] TextEx txtNoInfo;
|
[SerializeField] ScrollerController scrInfo;
|
|
[Header("滚动列表")]
|
[SerializeField] ScrollerController scrModel;
|
|
[Header("按钮")]
|
[SerializeField] PhantasmPavilionUnlockButton btnUnlock;
|
[SerializeField] PhantasmPavilionPutOnButton btnPutOn1;
|
[SerializeField] PhantasmPavilionPutOnButton btnPutOn2;
|
[SerializeField] PhantasmPavilionAddStarButton btnAddStar;
|
[SerializeField] TextEx txtRemainingTime1;
|
[SerializeField] TextEx txtRemainingTime2;
|
|
PhantasmPavilionManager manager { get { return PhantasmPavilionManager.Instance; } }
|
protected override void InitComponent()
|
{
|
base.InitComponent();
|
btnTabType1.AddListener(() => { SelectTeamFunc(PhantasmPavilionType.Model, 0); });
|
btnTabType2.AddListener(() => { SelectTeamFunc(PhantasmPavilionType.Model, 1); });
|
btnAllAdd.AddListener(() => { AttributeManager.Instance.OpenTotalAttributeWin(manager.GetTotalAttr()); });
|
}
|
|
protected override void OnPreOpen()
|
{
|
base.OnPreOpen();
|
scrInfo.OnRefreshCell += OnRefreshInfoCell;
|
scrModel.OnRefreshCell += OnRefreshModelCell;
|
manager.OnSelectItemIdChange += OnSelectItemIdChange;
|
PackManager.Instance.RefreshItemEvent += OnRefreshItemEvent;
|
GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
|
PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataRefreshEvent;
|
manager.OnUpdateModelInfoEvent += OnUpdateModelInfoEvent;
|
manager.OnTimeOut += OnTimeOut;
|
manager.OnUpdateModelStarAdd += OnUpdateModelStarAdd;
|
InitRedPoint();
|
TabSetActive();
|
SelectTiltleBtn();
|
}
|
|
protected override void OnPreClose()
|
{
|
base.OnPreClose();
|
scrInfo.OnRefreshCell -= OnRefreshInfoCell;
|
scrModel.OnRefreshCell -= OnRefreshModelCell;
|
manager.OnSelectItemIdChange -= OnSelectItemIdChange;
|
PackManager.Instance.RefreshItemEvent -= OnRefreshItemEvent;
|
GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
|
PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataRefreshEvent;
|
manager.OnUpdateModelInfoEvent -= OnUpdateModelInfoEvent;
|
manager.OnTimeOut -= OnTimeOut;
|
manager.OnUpdateModelStarAdd -= OnUpdateModelStarAdd;
|
}
|
|
private void OnTimeOut()
|
{
|
RefreshAll(manager.nowType, functionOrder + 1);
|
}
|
|
private void OnUpdateModelInfoEvent()
|
{
|
RefreshAll(manager.nowType, functionOrder + 1);
|
}
|
|
private void OnUpdateModelStarAdd()
|
{
|
heroAddStar.Play();
|
}
|
|
void InitRedPoint()
|
{
|
btnTabType1.redpoint.redpointId = manager.GetRedpointId(PhantasmPavilionRepointType.ModelNormal);
|
btnTabType2.redpoint.redpointId = manager.GetRedpointId(PhantasmPavilionRepointType.ModelEvent);
|
}
|
|
void SelectTiltleBtn()
|
{
|
functionOrder = 0;
|
btnTabType1.SelectBtn();
|
SelectTeamFunc(PhantasmPavilionType.Model, 0);
|
}
|
|
void SelectTeamFunc(PhantasmPavilionType type, int order)
|
{
|
manager.SetSelectItemId(type, order + 1);
|
manager.nowType = type;
|
functionOrder = order;
|
CreateAll();
|
}
|
|
private void OnPlayerDataRefreshEvent(PlayerDataType type)
|
{
|
if (type != PlayerDataType.ModelMark)
|
return;
|
RefreshAll(manager.nowType, functionOrder + 1, false);
|
}
|
|
private void OnSecondEvent()
|
{
|
bool isLimitedTime = manager.IsLimitTime(manager.nowType, manager.selectId);
|
if (isLimitedTime)
|
{
|
UpdateTimer(manager.nowType, manager.selectId);
|
}
|
}
|
|
private void OnRefreshItemEvent(PackType type, int arg2, int arg3)
|
{
|
if (type != PackType.Item)
|
return;
|
DisplayButton(manager.nowType, manager.selectId);
|
}
|
|
private void OnSelectItemIdChange(int id)
|
{
|
RefreshAll(manager.nowType, functionOrder + 1, false);
|
}
|
|
private void RefreshAll(PhantasmPavilionType type, int tabType, bool isJump = true)
|
{
|
scrModel.m_Scorller.RefreshActiveCellViews();
|
if (isJump)
|
{
|
scrModel.JumpIndex(manager.GetJumpIndex(type, tabType));
|
}
|
CreateInfoScroller();
|
DisplayButton(type, manager.selectId);
|
DisplayInfo(type, manager.selectId);
|
}
|
|
void CreateAll()
|
{
|
CreateModelScroller();
|
CreateInfoScroller();
|
DisplayButton(manager.nowType, manager.selectId);
|
DisplayInfo(manager.nowType, manager.selectId);
|
}
|
|
private void OnRefreshInfoCell(ScrollerDataType type, CellView cell)
|
{
|
var _cell = cell.GetComponent<PhantasmPavilionInfoCell>();
|
_cell?.Display(cell.index, cell);
|
}
|
|
private void OnRefreshModelCell(ScrollerDataType type, CellView cell)
|
{
|
var _cell = cell.GetComponent<PhantasmPavilionModelCell>();
|
_cell?.Display(cell.index, cell);
|
}
|
|
public void DisplayInfo(PhantasmPavilionType type, int id)
|
{
|
if (!ModelConfig.HasKey(id))
|
return;
|
ModelConfig model = ModelConfig.Get(id);
|
int skinID = model.SkinID;
|
lhframe.transform.localScale = new Vector3(lhSize, lhSize, lhSize);
|
heroIh.Create(skinID, motionName: "", isLh: true);
|
heroModel.Create(skinID, modelSize);
|
|
PhantasmPavilionState state = manager.GetUnLockState(type, id);
|
|
bool isCanStarAdd = manager.HasStarAddAttr(type, id);
|
string name = manager.GetName(type, id);
|
if (isCanStarAdd && manager.TryGetInfo(type, id, out var info) &&
|
state == PhantasmPavilionState.Activated && info.Star > 0)
|
{
|
txtName.text = StringUtility.Contact(name, " ", Language.Get("L1113", info.Star));
|
}
|
else
|
{
|
txtName.text = name;
|
}
|
|
txtGetWayString.text = Language.Get("PhantasmPavilion06", manager.GetGetWayString(type, id));
|
|
bool isHasAttr = manager.HasInitAttr(type, id); // 是否有解锁属性
|
txtAddInfo.SetActive(state == PhantasmPavilionState.Activated);
|
txtUnLockInfo.SetActive(state != PhantasmPavilionState.Activated);
|
txtNoInfo.SetActive(!isHasAttr);
|
CreateInfoScroller();
|
}
|
|
public void DisplayButton(PhantasmPavilionType type, int id)
|
{
|
PhantasmPavilionState state = manager.GetUnLockState(type, id);
|
bool isCanStarAdd = manager.HasStarAddAttr(type, id);
|
bool isUsing = manager.IsUsing(type, id);
|
btnUnlock.SetActive(state != PhantasmPavilionState.Activated);
|
btnAddStar.SetActive(state == PhantasmPavilionState.Activated && isCanStarAdd);
|
btnPutOn1.SetActive(state == PhantasmPavilionState.Activated && !isCanStarAdd && !isUsing);
|
btnPutOn2.SetActive(state == PhantasmPavilionState.Activated && isCanStarAdd && !isUsing);
|
btnUnlock.Display(id);
|
btnAddStar.Display(id);
|
btnPutOn1.Display(id);
|
btnPutOn2.Display(id);
|
|
|
UpdateTimer(type, id);
|
}
|
|
|
|
private void CreateInfoScroller()
|
{
|
PhantasmPavilionType type = manager.nowType;
|
int id = manager.selectId;
|
if (!manager.Has(type, id))
|
return;
|
scrInfo.Refresh();
|
int[] attrIDList = manager.GetAttrIDList(type, id);
|
int[] initAttrValueList = manager.GetInitAttrValueList(type, id);
|
if (!attrIDList.IsNullOrEmpty() && !initAttrValueList.IsNullOrEmpty() && attrIDList.Length == initAttrValueList.Length)
|
{
|
for (int i = 0; i < attrIDList.Length; i++)
|
{
|
CellInfo cellInfo = new CellInfo();
|
cellInfo.infoInt1 = id;
|
scrInfo.AddCell(ScrollerDataType.Header, i, cellInfo);
|
}
|
}
|
scrInfo.Restart();
|
}
|
|
public void TabSetActive()
|
{
|
var list = manager.ShowItemList(PhantasmPavilionType.Model, 1);
|
btnTabType1.SetActive(!list.IsNullOrEmpty());
|
list = manager.ShowItemList(PhantasmPavilionType.Model, 2);
|
btnTabType2.SetActive(!list.IsNullOrEmpty());
|
}
|
|
private void CreateModelScroller()
|
{
|
PhantasmPavilionType type = PhantasmPavilionType.Model;
|
scrModel.Refresh();
|
int tabType = functionOrder + 1;
|
List<int> showItemList = manager.ShowItemList(PhantasmPavilionType.Model, tabType);
|
if (!showItemList.IsNullOrEmpty() && manager.TryGetRowCountMax(type, out int rowCountMax))
|
{
|
int rowCount = (int)Math.Ceiling((double)showItemList.Count / rowCountMax);
|
for (int i = 0; i < rowCount; i++)
|
{
|
CellInfo cellInfo = new CellInfo();
|
cellInfo.infoInt1 = tabType;
|
scrModel.AddCell(ScrollerDataType.Header, i, cellInfo);
|
}
|
}
|
scrModel.Restart();
|
|
scrModel.JumpIndex(manager.GetJumpIndex(type, tabType));
|
|
}
|
|
public void UpdateTimer(PhantasmPavilionType type, int id)
|
{
|
bool isUnlock = manager.IsUnlock(type, id);
|
bool isLimitTime = manager.IsLimitTime(type, id);
|
if (!isUnlock || !isLimitTime || !manager.TryGetInfo(type, id, out var info) || info.EndTime <= 0)
|
{
|
txtRemainingTime1.SetActive(false);
|
txtRemainingTime2.SetActive(false);
|
return;
|
}
|
|
PhantasmPavilionState state = manager.GetUnLockState(type, id);
|
bool isCanStarAdd = manager.HasStarAddAttr(type, id);
|
|
DateTime endDateTime = TimeUtility.OriginalTime.AddSeconds(info.EndTime);
|
TimeSpan remainingTime = endDateTime - TimeUtility.ServerNow;
|
int remainingSeconds = (int)remainingTime.TotalSeconds;
|
txtRemainingTime1.SetActive(state == PhantasmPavilionState.Activated && !isCanStarAdd && remainingSeconds > 0);
|
txtRemainingTime2.SetActive(state == PhantasmPavilionState.Activated && isCanStarAdd && remainingSeconds > 0);
|
if (remainingSeconds > 0)
|
{
|
string countdownText = TimeUtility.SecondsToShortDHMS(remainingSeconds);
|
txtRemainingTime1.text = Language.Get("PhantasmPavilion10", UIHelper.AppendColor(TextColType.DarkGreen, countdownText));
|
txtRemainingTime2.text = Language.Get("PhantasmPavilion10", UIHelper.AppendColor(TextColType.DarkGreen, countdownText));
|
}
|
|
}
|
|
|
}
|