using System;
|
using System.Collections.Generic;
|
using UnityEngine;
|
|
public class PhantasmPavilionTitleWin : UIBase
|
{
|
[SerializeField] ButtonEx btnAllAdd;
|
[Header("二级标签页")]
|
[SerializeField] GroupButtonEx btnTabType1;
|
[SerializeField] GroupButtonEx btnTabType2;
|
|
|
[Header("选中项展示")]
|
//当前气泡
|
[SerializeField] ImageEx imgNowChatBox;
|
[SerializeField] UIFrame uiFrameNowChatBox;
|
[SerializeField] UIEffectPlayer UIEffectPlayerNowChatBox;
|
|
|
[Header("属性展示")]
|
[SerializeField] TextEx txtName;
|
[SerializeField] TextEx txtGetWayString;
|
[SerializeField] TextEx txtAddInfo;
|
[SerializeField] TextEx txtUnLockInfo;
|
[SerializeField] TextEx txtNoInfo;
|
[SerializeField] ScrollerController scrInfo;
|
|
[Header("滚动列表")]
|
[SerializeField] ScrollerController scrTitle;
|
|
[Header("按钮")]
|
[SerializeField] PhantasmPavilionUnlockButton btnUnlock;
|
[SerializeField] PhantasmPavilionPutOnButton btnPutOn1;
|
[SerializeField] PhantasmPavilionPutOnButton btnPutOn2;
|
[SerializeField] PhantasmPavilionAddStarButton btnAddStar;
|
[SerializeField] ButtonEx btnTakeOff1;
|
[SerializeField] ButtonEx btnTakeOff2;
|
[SerializeField] TextEx txtRemainingTime1;
|
[SerializeField] TextEx txtRemainingTime2;
|
|
int nowTabType = 0; // 0-皇宫 1-活动
|
PhantasmPavilionManager manager { get { return PhantasmPavilionManager.Instance; } }
|
protected override void InitComponent()
|
{
|
base.InitComponent();
|
btnTakeOff1.AddListener(() => { manager.SendOPPack(PhantasmPavilionType.Title, PhantasmPavilionOperation.Remove, (uint)manager.selectId); });
|
btnTakeOff2.AddListener(() => { manager.SendOPPack(PhantasmPavilionType.Title, PhantasmPavilionOperation.Remove, (uint)manager.selectId); });
|
btnTabType1.AddListener(() => { SelectTeamFunc(PhantasmPavilionType.Title, 0); });
|
btnTabType2.AddListener(() => { SelectTeamFunc(PhantasmPavilionType.Title, 1); });
|
btnAllAdd.AddListener(() => { AttributeManager.Instance.OpenTotalAttributeWin(manager.GetTotalAttr()); });
|
}
|
|
protected override void OnPreOpen()
|
{
|
base.OnPreOpen();
|
scrInfo.OnRefreshCell += OnRefreshInfoCell;
|
scrTitle.OnRefreshCell += OnRefreshTitleCell;
|
manager.OnSelectItemIdChange += OnSelectItemIdChange;
|
PackManager.Instance.RefreshItemEvent += OnRefreshItemEvent;
|
GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
|
PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataRefreshEvent;
|
manager.OnUpdateTitleInfoEvent += OnUpdateTitleInfoEvent;
|
manager.OnTimeOut += OnTimeOut;
|
InitRedPoint();
|
TabSetActive();
|
SelectTiltleBtn();
|
}
|
|
protected override void OnPreClose()
|
{
|
base.OnPreClose();
|
scrInfo.OnRefreshCell -= OnRefreshInfoCell;
|
scrTitle.OnRefreshCell -= OnRefreshTitleCell;
|
manager.OnSelectItemIdChange -= OnSelectItemIdChange;
|
PackManager.Instance.RefreshItemEvent -= OnRefreshItemEvent;
|
GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
|
PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataRefreshEvent;
|
manager.OnUpdateTitleInfoEvent -= OnUpdateTitleInfoEvent;
|
manager.OnTimeOut -= OnTimeOut;
|
}
|
|
private void OnUpdateTitleInfoEvent()
|
{
|
RefreshAll(manager.nowType, functionOrder + 1);
|
}
|
|
private void OnTimeOut()
|
{
|
RefreshAll(manager.nowType, functionOrder + 1);
|
}
|
|
void InitRedPoint()
|
{
|
btnTabType1.redpoint.redpointId = manager.GetRedpointId(PhantasmPavilionRepointType.TitlePalace);
|
btnTabType2.redpoint.redpointId = manager.GetRedpointId(PhantasmPavilionRepointType.TitleEvent);
|
}
|
|
void SelectTiltleBtn()
|
{
|
functionOrder = 0;
|
btnTabType1.SelectBtn();
|
SelectTeamFunc(PhantasmPavilionType.Title, 0);
|
}
|
|
void SelectTeamFunc(PhantasmPavilionType type, int order)
|
{
|
manager.SetSelectItemId(type, order + 1);
|
manager.nowType = type;
|
functionOrder = order;
|
CreateTitleScroller();
|
CreateAll();
|
}
|
|
private void OnPlayerDataRefreshEvent(PlayerDataType type)
|
{
|
if (type != PlayerDataType.ExAttr3)
|
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)
|
{
|
scrTitle.m_Scorller.RefreshActiveCellViews();
|
if (isJump)
|
{
|
scrTitle.JumpIndex(manager.GetJumpIndex(type, tabType));
|
}
|
CreateInfoScroller();
|
DisplayButton(type, manager.selectId);
|
DisplayInfo(type, manager.selectId);
|
}
|
|
void CreateAll()
|
{
|
CreateTitleScroller();
|
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 OnRefreshTitleCell(ScrollerDataType type, CellView cell)
|
{
|
var _cell = cell.GetComponent<PhantasmPavilionTitleCell>();
|
_cell?.Display(cell.index, cell);
|
}
|
|
public void DisplayInfo(PhantasmPavilionType type, int id)
|
{
|
int resourceType = manager.GetResourceType(type, id);
|
string resourceValue = manager.GetResourceValue(type, id);
|
manager.Show(imgNowChatBox, UIEffectPlayerNowChatBox, uiFrameNowChatBox, resourceType, resourceValue);
|
if (resourceType == 1)
|
{
|
imgNowChatBox.SetNativeSize();
|
}
|
txtName.text = manager.GetName(type, id);
|
txtGetWayString.text = Language.Get("PhantasmPavilion06", manager.GetGetWayString(type, id));
|
|
PhantasmPavilionState state = manager.GetUnLockState(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);
|
btnTakeOff1.SetActive(state == PhantasmPavilionState.Activated && !isCanStarAdd && isUsing);
|
btnTakeOff2.SetActive(state == PhantasmPavilionState.Activated && isCanStarAdd && isUsing);
|
|
btnUnlock.Display(id);
|
btnAddStar.Display(id);
|
btnPutOn1.Display(id);
|
btnPutOn2.Display(id);
|
|
UpdateTimer(type, id);
|
}
|
|
void RefreshScroller(PhantasmPavilionType type)
|
{
|
scrTitle.m_Scorller.RefreshActiveCellViews();
|
CreateInfoScroller();
|
}
|
|
|
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.Title, 1);
|
btnTabType1.SetActive(!list.IsNullOrEmpty());
|
list = manager.ShowItemList(PhantasmPavilionType.Title, 2);
|
btnTabType2.SetActive(!list.IsNullOrEmpty());
|
}
|
|
private void CreateTitleScroller()
|
{
|
PhantasmPavilionType type = PhantasmPavilionType.Title;
|
scrTitle.Refresh();
|
int tabType = functionOrder + 1;
|
List<int> showItemList = manager.ShowItemList(type, 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;
|
scrTitle.AddCell(ScrollerDataType.Header, i, cellInfo);
|
}
|
}
|
scrTitle.Restart();
|
|
int jumpIndex = manager.GetJumpIndex(type, tabType);
|
scrTitle.JumpIndex(jumpIndex);
|
}
|
|
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));
|
}
|
|
}
|
|
}
|