using System;
|
using System.Collections.Generic;
|
using UnityEngine;
|
|
public class PhantasmPavilionFaceWin : UIBase
|
{
|
[SerializeField] ButtonEx btnAllAdd;
|
[Header("二级标签页")]
|
[SerializeField] GroupButtonEx btnFace;
|
[SerializeField] GroupButtonEx btnFacePic;
|
[SerializeField] GroupButtonEx btnChatBox;
|
|
[Header("选中项展示")]
|
[SerializeField] Transform transNowFace;
|
[SerializeField] Transform transNowFacePic;
|
[SerializeField] Transform transNowChatBox;
|
// 当前头像
|
[SerializeField] EllipseMask maskNowFace;
|
[SerializeField] ImageEx imgNowFaceBg;
|
[SerializeField] ImageEx imgNowFace;
|
[SerializeField] UIFrame uiFrameNowFace;
|
[SerializeField] UIEffectPlayer effectPlayerNowFace;
|
// 当前头像框
|
|
[SerializeField] ImageEx imgNowFacePicFaceBg;
|
[SerializeField] EllipseMask maskNowFacePicFace;
|
[SerializeField] ImageEx imgNowFacePicFace;
|
[SerializeField] UIFrame uiFrameNowFacePicFace;
|
[SerializeField] UIEffectPlayer UIEffectPlayerNowFacePicFace;
|
|
[SerializeField] ImageEx imgNowFacePic;
|
[SerializeField] UIFrame uiFrameNowFacePic;
|
[SerializeField] UIEffectPlayer UIEffectPlayerNowFacePic;
|
|
//当前气泡
|
[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 scrFace;
|
[SerializeField] ScrollerController scrFacePic;
|
[SerializeField] ScrollerController scrChatBox;
|
|
[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();
|
btnFace.AddListener(() => { SelectTeamFunc(PhantasmPavilionType.Face); });
|
btnFacePic.AddListener(() => { SelectTeamFunc(PhantasmPavilionType.FacePic); });
|
btnChatBox.AddListener(() => { SelectTeamFunc(PhantasmPavilionType.ChatBox); });
|
btnAllAdd.AddListener(() => { AttributeManager.Instance.OpenTotalAttributeWin(manager.GetTotalAttr()); });
|
}
|
|
protected override void OnPreOpen()
|
{
|
base.OnPreOpen();
|
scrInfo.OnRefreshCell += OnRefreshInfoCell;
|
scrFace.OnRefreshCell += OnRefreshFaceCell;
|
scrFacePic.OnRefreshCell += OnRefreshFacePicCell;
|
scrChatBox.OnRefreshCell += OnRefreshChatBoxCell;
|
manager.OnSelectItemIdChange += OnSelectItemIdChange;
|
PackManager.Instance.RefreshItemEvent += OnRefreshItemEvent;
|
GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
|
PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataRefreshEvent;
|
manager.OnUpdateChatBoxInfoEvent += OnUpdateChatBoxInfoEvent;
|
manager.OnUpdateFaceInfoEvent += OnUpdateFaceInfoEvent;
|
manager.OnUpdateFacePicInfo += OnUpdateFacePicInfo;
|
manager.OnTimeOut += OnTimeOut;
|
InitRedPoint();
|
SelectTiltleBtn();
|
}
|
|
protected override void OnPreClose()
|
{
|
base.OnPreClose();
|
scrInfo.OnRefreshCell -= OnRefreshInfoCell;
|
scrFace.OnRefreshCell -= OnRefreshFaceCell;
|
scrFacePic.OnRefreshCell -= OnRefreshFacePicCell;
|
scrChatBox.OnRefreshCell -= OnRefreshChatBoxCell;
|
manager.OnSelectItemIdChange -= OnSelectItemIdChange;
|
PackManager.Instance.RefreshItemEvent -= OnRefreshItemEvent;
|
GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
|
PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataRefreshEvent;
|
manager.OnUpdateChatBoxInfoEvent -= OnUpdateChatBoxInfoEvent;
|
manager.OnUpdateFaceInfoEvent -= OnUpdateFaceInfoEvent;
|
manager.OnUpdateFacePicInfo -= OnUpdateFacePicInfo;
|
manager.OnTimeOut -= OnTimeOut;
|
}
|
|
private void OnTimeOut()
|
{
|
RefreshAll(manager.nowType);
|
}
|
|
private void OnUpdateFacePicInfo()
|
{
|
RefreshAll(manager.nowType);
|
}
|
private void OnUpdateFaceInfoEvent()
|
{
|
RefreshAll(manager.nowType);
|
}
|
|
private void OnUpdateChatBoxInfoEvent()
|
{
|
RefreshAll(manager.nowType);
|
}
|
|
void InitRedPoint()
|
{
|
btnFace.redpoint.redpointId = manager.GetRedpointId(PhantasmPavilionRepointType.FaceAvatar);
|
btnFacePic.redpoint.redpointId = manager.GetRedpointId(PhantasmPavilionRepointType.FaceFrame);
|
btnChatBox.redpoint.redpointId = manager.GetRedpointId(PhantasmPavilionRepointType.FaceBubble);
|
}
|
|
void SelectTiltleBtn()
|
{
|
if (functionOrder == 0)
|
{
|
btnFace.SelectBtn();
|
SelectTeamFunc(PhantasmPavilionType.Face);
|
}
|
else if (functionOrder == 1)
|
{
|
btnFacePic.SelectBtn();
|
SelectTeamFunc(PhantasmPavilionType.FacePic);
|
}
|
else if (functionOrder == 2)
|
{
|
btnChatBox.SelectBtn();
|
SelectTeamFunc(PhantasmPavilionType.ChatBox);
|
}
|
}
|
|
void SelectTeamFunc(PhantasmPavilionType type)
|
{
|
manager.SetSelectItemId(type);
|
manager.nowType = type;
|
CreateAll(type);
|
}
|
|
private void OnPlayerDataRefreshEvent(PlayerDataType type)
|
{
|
switch (type)
|
{
|
case PlayerDataType.Face:
|
case PlayerDataType.FacePic:
|
case PlayerDataType.ExAttr10:
|
RefreshAll(manager.nowType, false);
|
break;
|
}
|
}
|
|
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, false);
|
}
|
|
private void RefreshAll(PhantasmPavilionType type, bool isJump = true)
|
{
|
switch (type)
|
{
|
case PhantasmPavilionType.Face:
|
scrFace.m_Scorller.RefreshActiveCellViews();
|
if (isJump)
|
{
|
scrFace.JumpIndex(manager.GetJumpIndex(type));
|
}
|
break;
|
case PhantasmPavilionType.FacePic:
|
scrFacePic.m_Scorller.RefreshActiveCellViews();
|
if (isJump)
|
{
|
scrFacePic.JumpIndex(manager.GetJumpIndex(type));
|
}
|
break;
|
case PhantasmPavilionType.ChatBox:
|
scrChatBox.m_Scorller.RefreshActiveCellViews();
|
if (isJump)
|
{
|
scrChatBox.JumpIndex(manager.GetJumpIndex(type));
|
}
|
break;
|
}
|
CreateInfoScroller();
|
DisplayButton(type, manager.selectId);
|
DisplayInfo(type, manager.selectId);
|
}
|
|
void CreateAll(PhantasmPavilionType type)
|
{
|
transNowFace.SetActive(type == PhantasmPavilionType.Face);
|
transNowFacePic.SetActive(type == PhantasmPavilionType.FacePic);
|
transNowChatBox.SetActive(type == PhantasmPavilionType.ChatBox);
|
|
scrFace.SetActive(type == PhantasmPavilionType.Face);
|
scrFacePic.SetActive(type == PhantasmPavilionType.FacePic);
|
scrChatBox.SetActive(type == PhantasmPavilionType.ChatBox);
|
switch (type)
|
{
|
case PhantasmPavilionType.Face:
|
CreateFaceScroller();
|
break;
|
case PhantasmPavilionType.FacePic:
|
CreateFacePicScroller();
|
break;
|
case PhantasmPavilionType.ChatBox:
|
CreateChatBoxScroller();
|
break;
|
}
|
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 OnRefreshFaceCell(ScrollerDataType type, CellView cell)
|
{
|
var _cell = cell.GetComponent<PhantasmPavilionFaceCell>();
|
_cell?.Display(cell.index);
|
}
|
|
private void OnRefreshFacePicCell(ScrollerDataType type, CellView cell)
|
{
|
var _cell = cell.GetComponent<PhantasmPavilionFacePicCell>();
|
_cell?.Display(cell.index);
|
}
|
|
private void OnRefreshChatBoxCell(ScrollerDataType type, CellView cell)
|
{
|
var _cell = cell.GetComponent<PhantasmPavilionChatBoxCell>();
|
_cell?.Display(cell.index);
|
}
|
|
public void DisplayInfo(PhantasmPavilionType type, int id)
|
{
|
int resourceType = manager.GetResourceType(type, id);
|
string resourceValue = manager.GetResourceValue(type, id);
|
string str = AvatarHelper.GetAvatarBgColorStr(id);
|
switch (type)
|
{
|
case PhantasmPavilionType.Face:
|
manager.ShowFace(imgNowFace, effectPlayerNowFace, uiFrameNowFace, maskNowFace, id);
|
imgNowFaceBg.SetSprite(str);
|
if (resourceType == 1)
|
{
|
imgNowFace.SetNativeSize();
|
}
|
break;
|
case PhantasmPavilionType.FacePic:
|
if (!manager.TryGetNowShowID(PhantasmPavilionType.Face, out int faceID))
|
return;
|
manager.ShowFace(imgNowFacePicFace, UIEffectPlayerNowFacePicFace, uiFrameNowFacePicFace, maskNowFacePicFace, faceID);
|
str = AvatarHelper.GetAvatarBgColorStr(faceID);
|
imgNowFacePicFaceBg.SetSprite(str);
|
manager.Show(imgNowFacePic, UIEffectPlayerNowFacePic, uiFrameNowFacePic, resourceType, resourceValue);
|
if (resourceType == 1)
|
{
|
imgNowFacePicFace.SetNativeSize();
|
imgNowFacePic.SetNativeSize();
|
}
|
|
break;
|
case PhantasmPavilionType.ChatBox:
|
manager.Show(imgNowChatBox, UIEffectPlayerNowChatBox, uiFrameNowChatBox, resourceType, resourceValue);
|
if (resourceType == 1)
|
{
|
imgNowChatBox.SetNativeSize();
|
}
|
break;
|
}
|
|
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);
|
|
btnUnlock.SetActive(state != PhantasmPavilionState.Activated);
|
btnAddStar.SetActive(state == PhantasmPavilionState.Activated && isCanStarAdd);
|
btnPutOn1.SetActive(state == PhantasmPavilionState.Activated && !isCanStarAdd);
|
btnPutOn2.SetActive(state == PhantasmPavilionState.Activated && isCanStarAdd);
|
|
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();
|
}
|
|
private void CreateFaceScroller()
|
{
|
PhantasmPavilionType type = PhantasmPavilionType.Face;
|
scrFace.Refresh();
|
List<int> showItemList = manager.ShowItemList(type);
|
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++)
|
{
|
scrFace.AddCell(ScrollerDataType.Header, i);
|
}
|
}
|
scrFace.Restart();
|
|
int jumpIndex = manager.GetJumpIndex(type);
|
scrFace.JumpIndex(jumpIndex);
|
}
|
|
private void CreateFacePicScroller()
|
{
|
PhantasmPavilionType type = PhantasmPavilionType.FacePic;
|
scrFacePic.Refresh();
|
List<int> showItemList = manager.ShowItemList(type);
|
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++)
|
{
|
scrFacePic.AddCell(ScrollerDataType.Header, i);
|
}
|
}
|
scrFacePic.Restart();
|
|
int jumpIndex = manager.GetJumpIndex(type);
|
scrFacePic.JumpIndex(jumpIndex);
|
}
|
|
private void CreateChatBoxScroller()
|
{
|
PhantasmPavilionType type = PhantasmPavilionType.ChatBox;
|
scrChatBox.Refresh();
|
List<int> showItemList = manager.ShowItemList(type);
|
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++)
|
{
|
scrChatBox.AddCell(ScrollerDataType.Header, i);
|
}
|
}
|
scrChatBox.Restart();
|
|
int jumpIndex = manager.GetJumpIndex(type);
|
scrChatBox.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.LightGreen, countdownText));
|
txtRemainingTime2.text = Language.Get("PhantasmPavilion10", UIHelper.AppendColor(TextColType.LightGreen, countdownText));
|
}
|
|
}
|
|
}
|