554 lines
14 KiB
C#
554 lines
14 KiB
C#
using cfg.UIInterfaceBannerGoToCfg;
|
|
using Cysharp.Threading.Tasks;
|
|
using Gameplay;
|
|
using Gameplay.Net;
|
|
using PhxhSDK;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using Framework;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
/// <summary>
|
|
/// 公告UI
|
|
/// </summary>
|
|
public class UI_NoticeController : UIWindow
|
|
{
|
|
/// <summary>
|
|
/// 打开公告界面
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public static async UniTask<UIWindow> Open(E_NoticeType noticeType = E_NoticeType.Activity)
|
|
{
|
|
await CommonUtils.CaptureScreenshot(); // 截取当前屏幕截图
|
|
|
|
return await UIManager.Instance.CreateAndOpenWindow(UINameConst.UI_Notice, noticeType);
|
|
}
|
|
|
|
#region Temp 临时
|
|
|
|
/// <summary>
|
|
/// 公告类型
|
|
/// </summary>
|
|
public enum E_NoticeType
|
|
{
|
|
None = 0,
|
|
|
|
/// <summary>
|
|
/// 活动
|
|
/// </summary>
|
|
Activity = 1,
|
|
|
|
/// <summary>
|
|
/// 系统
|
|
/// </summary>
|
|
System = 2,
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 类
|
|
|
|
/// <summary>
|
|
/// 公告类型页签
|
|
/// </summary>
|
|
private class NoticeTypeTab : UIGameObjectWrapper
|
|
{
|
|
/// <summary>
|
|
/// 选中按钮
|
|
/// </summary>
|
|
private Button buttonChoose;
|
|
|
|
/// <summary>
|
|
/// 未选中按钮
|
|
/// </summary>
|
|
private Button buttonNormal;
|
|
|
|
/// <summary>
|
|
/// 公告类型
|
|
/// </summary>
|
|
private readonly E_NoticeType noticeType;
|
|
|
|
/// <summary>
|
|
/// 点击回调
|
|
/// </summary>
|
|
private readonly Action<E_NoticeType> clickAction;
|
|
|
|
/// <summary>
|
|
/// 是否选中
|
|
/// </summary>
|
|
public bool IsSelect
|
|
{
|
|
set
|
|
{
|
|
buttonChoose.gameObject.IsScaleShow(value);
|
|
buttonNormal.gameObject.IsScaleShow(!value);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 公告类型
|
|
/// </summary>
|
|
public E_NoticeType NoticeType
|
|
{
|
|
get { return noticeType; }
|
|
}
|
|
|
|
public NoticeTypeTab(GameObject root, E_NoticeType noticeType, Action<E_NoticeType> click) : base(root, true)
|
|
{
|
|
this.noticeType = noticeType;
|
|
clickAction = click;
|
|
|
|
buttonChoose = GetComponent<Button>("ButtonChoose");
|
|
buttonNormal = GetComponent<Button>("ButtonNormal");
|
|
|
|
IsSelect = false;
|
|
|
|
BindButton(buttonChoose, OnClick);
|
|
BindButton(buttonNormal, OnClick);
|
|
}
|
|
|
|
private void OnClick()
|
|
{
|
|
clickAction?.Invoke(noticeType);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 公告页签
|
|
/// </summary>
|
|
private class NoticeTab : UIGameObjectWrapper
|
|
{
|
|
#region UI
|
|
|
|
/// <summary>
|
|
/// 选中状态按钮
|
|
/// </summary>
|
|
private Button buttonChoose;
|
|
|
|
/// <summary>
|
|
/// 非选中状态按钮
|
|
/// </summary>
|
|
private Button buttonNormal;
|
|
|
|
/// <summary>
|
|
/// 选中状态标题
|
|
/// </summary>
|
|
private TMP_Text textSelectTitle;
|
|
|
|
/// <summary>
|
|
/// 选中状态日
|
|
/// </summary>
|
|
private TMP_Text textSelectDay;
|
|
|
|
/// <summary>
|
|
/// 选中状态月
|
|
/// </summary>
|
|
private TMP_Text textSelectWeek;
|
|
|
|
/// <summary>
|
|
/// 选中状态星期
|
|
/// </summary>
|
|
private TMP_Text textSelectMonth;
|
|
|
|
/// <summary>
|
|
/// 未选中状态标题
|
|
/// </summary>
|
|
private TMP_Text textTitle;
|
|
|
|
/// <summary>
|
|
/// 未选中状态日
|
|
/// </summary>
|
|
private TMP_Text textDay;
|
|
|
|
/// <summary>
|
|
/// 未选中状态月
|
|
/// </summary>
|
|
private TMP_Text textWeek;
|
|
|
|
/// <summary>
|
|
/// 未选中状态星期
|
|
/// </summary>
|
|
private TMP_Text textMonth;
|
|
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// 选中回调
|
|
/// </summary>
|
|
private readonly Action<NoticeTab> selectAction;
|
|
|
|
private DataUIBanner uiBanner;
|
|
private NoticeInfo noticeInfo;
|
|
|
|
/// <summary>
|
|
/// 是否选中
|
|
/// </summary>
|
|
public bool IsSelect
|
|
{
|
|
set
|
|
{
|
|
buttonChoose.gameObject.IsScaleShow(value);
|
|
buttonNormal.gameObject.IsScaleShow(!value);
|
|
}
|
|
}
|
|
|
|
/*public int ID
|
|
{
|
|
get { return uiBanner.Index; }
|
|
}*/
|
|
|
|
public int ID;
|
|
|
|
public DataUIBanner UIBanner
|
|
{
|
|
get { return uiBanner; }
|
|
}
|
|
|
|
public NoticeInfo NoticeInfo
|
|
{
|
|
get { return noticeInfo; }
|
|
}
|
|
|
|
|
|
public NoticeTab(GameObject root, Action<NoticeTab> select) : base(root)
|
|
{
|
|
selectAction = select;
|
|
|
|
buttonChoose = GetComponent<Button>("ButtonChoose");
|
|
buttonNormal = GetComponent<Button>("ButtonNormal");
|
|
textSelectTitle = GetComponent<TMP_Text>("ButtonChoose/TextTitle");
|
|
textSelectDay = GetComponent<TMP_Text>("ButtonChoose/TextDay");
|
|
textSelectWeek = GetComponent<TMP_Text>("ButtonChoose/TextWeek");
|
|
textSelectMonth = GetComponent<TMP_Text>("ButtonChoose/TextMonth");
|
|
textTitle = GetComponent<TMP_Text>("ButtonNormal/TextTitle");
|
|
textDay = GetComponent<TMP_Text>("ButtonNormal/TextDay");
|
|
textWeek = GetComponent<TMP_Text>("ButtonNormal/TextWeek");
|
|
textMonth = GetComponent<TMP_Text>("ButtonNormal/TextMonth");
|
|
|
|
IsSelect = false;
|
|
|
|
BindButton(buttonChoose, OnClick);
|
|
BindButton(buttonNormal, OnClick);
|
|
}
|
|
|
|
/*public void SetInfo(DataUIBanner dataUIBanner)
|
|
{
|
|
uiBanner = dataUIBanner;
|
|
|
|
IsScaleShow = true;
|
|
}*/
|
|
|
|
public void SetInfo(NoticeInfo noticeInfo, int id)
|
|
{
|
|
ID = id;
|
|
if (noticeInfo == null)
|
|
{
|
|
IsScaleShow = false;
|
|
return;
|
|
}
|
|
|
|
this.noticeInfo = noticeInfo;
|
|
textSelectTitle.text = noticeInfo.Title;
|
|
textTitle.text = noticeInfo.Title;
|
|
|
|
IsScaleShow = true;
|
|
}
|
|
|
|
|
|
private void OnClick()
|
|
{
|
|
selectAction?.Invoke(this);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 公告内容
|
|
/// </summary>
|
|
private class NoticeContent : UIGameObjectWrapper
|
|
{
|
|
/// <summary>
|
|
/// 活动名
|
|
/// </summary>
|
|
private TMP_Text textActivityName;
|
|
|
|
/// <summary>
|
|
/// 内容
|
|
/// </summary>
|
|
private TMP_Text textContent;
|
|
|
|
/// <summary>
|
|
/// 横幅
|
|
/// </summary>
|
|
private Image imageBanner;
|
|
|
|
public NoticeContent(GameObject root) : base(root)
|
|
{
|
|
textActivityName = GetComponent<TMP_Text>("ImageTitle/TextActivityName");
|
|
textContent = GetComponent<TMP_Text>("TextContent");
|
|
imageBanner = GetComponent<Image>("ImageBanner");
|
|
}
|
|
|
|
//TODO 暂不走表
|
|
/*public async void SetInfo(DataUIBanner dataUIBanner)
|
|
{
|
|
var sprite = await LoadAssetAsync<Sprite>(dataUIBanner.BannerImgPath);
|
|
|
|
if (sprite != null)
|
|
imageBanner.sprite = sprite;
|
|
|
|
IsScaleShow = true;
|
|
}*/
|
|
|
|
public void SetInfo(NoticeInfo noticeInfo)
|
|
{
|
|
if (noticeInfo == null)
|
|
{
|
|
IsScaleShow = false;
|
|
return;
|
|
}
|
|
|
|
textActivityName.text = noticeInfo.Title;
|
|
textContent.text = noticeInfo.Content;
|
|
|
|
IsScaleShow = true;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// 关闭按钮
|
|
/// </summary>
|
|
private Button buttonClose;
|
|
|
|
/// <summary>
|
|
/// 页签循环列表
|
|
/// </summary>
|
|
private RecycleView tabRecycleView;
|
|
|
|
/// <summary>
|
|
/// 高斯模糊遮罩
|
|
/// </summary>
|
|
private RawImage rawImageGaussianBlurMask;
|
|
|
|
/*/// <summary>
|
|
/// 活动公告数据
|
|
/// </summary>
|
|
private readonly List<DataUIBanner> listUIBanner = TableManager.Instance.Tables.bannerCfg.DataList;*/
|
|
/// <summary>
|
|
/// 系统公告数据
|
|
/// </summary>
|
|
private readonly List<NoticeInfo> listNoticeInfo = AppConfig.Instance.NoticeInfos;
|
|
|
|
/// <summary>
|
|
/// 公告类型页签字典
|
|
/// </summary>
|
|
private readonly Dictionary<E_NoticeType, NoticeTypeTab> dicNoticeTypeTab = new();
|
|
|
|
/// <summary>
|
|
/// 页签字典
|
|
/// </summary>
|
|
private readonly Dictionary<int, NoticeTab> dicNoticeTap = new();
|
|
|
|
/// <summary>
|
|
/// 页签内容
|
|
/// </summary>
|
|
private NoticeContent noticeContent;
|
|
|
|
/// <summary>
|
|
/// 当前选中的公告类型
|
|
/// </summary>
|
|
private E_NoticeType curSelectNoticeType = E_NoticeType.None;
|
|
|
|
/// <summary>
|
|
/// 当前选择的页签
|
|
/// </summary>
|
|
private NoticeTab curSelectTab;
|
|
|
|
public override void OnInit()
|
|
{
|
|
buttonClose = GetComponent<Button>("Image_NoticeBG/Button_Close");
|
|
tabRecycleView = GetComponent<RecycleView>("Image_NoticeBG/Tabs");
|
|
rawImageGaussianBlurMask = GetComponent<RawImage>("GaussianBlurMask");
|
|
|
|
dicNoticeTypeTab.Add(E_NoticeType.Activity,
|
|
new NoticeTypeTab(FindObj("Image_NoticeBG/Notices/ActivityNotice"), E_NoticeType.Activity,
|
|
OnNoticeTypeTab));
|
|
dicNoticeTypeTab.Add(E_NoticeType.System,
|
|
new NoticeTypeTab(FindObj("Image_NoticeBG/Notices/SystemNotice"), E_NoticeType.System, OnNoticeTypeTab));
|
|
|
|
noticeContent = new(FindObj("Image_NoticeBG/ContentRoot/Viewport/Content"));
|
|
|
|
rawImageGaussianBlurMask.texture = CommonUtils.GetScreenTexture2D();
|
|
tabRecycleView.Init(OnRefreshTab);
|
|
|
|
BindButton(buttonClose, OnClose);
|
|
}
|
|
|
|
protected override void OnShowWindow(object data = null)
|
|
{
|
|
if (data is E_NoticeType noticeType)
|
|
OnNoticeTypeTab(noticeType);
|
|
else
|
|
OnNoticeTypeTab(E_NoticeType.Activity); // 默认选中活动公告
|
|
}
|
|
|
|
public override void OnRelease()
|
|
{
|
|
noticeContent.Dispose();
|
|
noticeContent = null;
|
|
|
|
base.OnRelease();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取要显示的页签数量
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private int GetShowTabCount()
|
|
{
|
|
return curSelectNoticeType switch
|
|
{
|
|
/*E_NoticeType.Activity => listUIBanner.Count,*/
|
|
E_NoticeType.Activity => listNoticeInfo.Count,
|
|
//TODO 暂时做空
|
|
/*E_NoticeType.System => listNoticeInfo.Count,*/
|
|
E_NoticeType.System => 1,
|
|
_ => 0,
|
|
};
|
|
}
|
|
|
|
#region 回调方法
|
|
|
|
/// <summary>
|
|
/// 刷新页签
|
|
/// </summary>
|
|
/// <param name="cell"></param>
|
|
/// <param name="index"></param>
|
|
private void OnRefreshTab(GameObject cell, int index)
|
|
{
|
|
if (!dicNoticeTap.TryGetValue(cell.GetInstanceID(), out NoticeTab noticeTab))
|
|
{
|
|
noticeTab = new NoticeTab(cell, OnNoticeTab);
|
|
dicNoticeTap[cell.GetInstanceID()] = noticeTab;
|
|
}
|
|
|
|
switch (curSelectNoticeType)
|
|
{
|
|
case E_NoticeType.Activity:
|
|
{
|
|
if (listNoticeInfo == null)
|
|
return;
|
|
|
|
if (listNoticeInfo.Count < 0 || index >= listNoticeInfo.Count)
|
|
{
|
|
DebugUtil.LogWarning("索引错误");
|
|
return;
|
|
}
|
|
|
|
noticeTab.SetInfo(listNoticeInfo[index], index);
|
|
if (curSelectTab == null) // 默认选中一个
|
|
OnNoticeTab(noticeTab);
|
|
else if (noticeTab.ID == curSelectTab.ID)
|
|
OnNoticeTab(noticeTab);
|
|
else
|
|
noticeTab.IsSelect = false;
|
|
}
|
|
break;
|
|
case E_NoticeType.System:
|
|
{
|
|
noticeTab.SetInfo(null, index);
|
|
OnNoticeTab(noticeTab);
|
|
/*if (listNoticeInfo == null)
|
|
return;
|
|
|
|
if (listNoticeInfo.Count < 0 || index >= listNoticeInfo.Count)
|
|
{
|
|
DebugUtil.LogWarning("索引错误");
|
|
return;
|
|
}
|
|
|
|
noticeTab.SetInfo(listNoticeInfo[index]);
|
|
if (curSelectTab == null) // 默认选中一个
|
|
OnNoticeTab(noticeTab);
|
|
else if (noticeTab.ID == curSelectTab.ID)
|
|
OnNoticeTab(noticeTab);
|
|
else
|
|
noticeTab.IsSelect = false;*/
|
|
}
|
|
break;
|
|
default:
|
|
{
|
|
noticeTab.IsSelect = false;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 关闭
|
|
/// </summary>
|
|
private void OnClose()
|
|
{
|
|
CloseWindow();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 公告类型页签
|
|
/// </summary>
|
|
private void OnNoticeTypeTab(E_NoticeType noticeType)
|
|
{
|
|
if (curSelectNoticeType == noticeType)
|
|
return;
|
|
|
|
if (dicNoticeTypeTab.TryGetValue(curSelectNoticeType, out NoticeTypeTab tab))
|
|
tab.IsSelect = false;
|
|
|
|
curSelectNoticeType = noticeType;
|
|
curSelectTab = null;
|
|
|
|
if (dicNoticeTypeTab.TryGetValue(curSelectNoticeType, out tab))
|
|
tab.IsSelect = true;
|
|
|
|
tabRecycleView.ShowList(GetShowTabCount());
|
|
}
|
|
|
|
/// <summary>
|
|
/// 公告页签
|
|
/// </summary>
|
|
private void OnNoticeTab(NoticeTab tab)
|
|
{
|
|
if (curSelectTab != null)
|
|
{
|
|
/*if (curSelectTab.ID == tab.ID)
|
|
{
|
|
return;
|
|
}*/
|
|
|
|
curSelectTab.IsSelect = false;
|
|
}
|
|
|
|
curSelectTab = tab;
|
|
curSelectTab.IsSelect = true;
|
|
|
|
switch (curSelectNoticeType)
|
|
{
|
|
case E_NoticeType.Activity:
|
|
/*noticeContent.SetInfo(curSelectTab.UIBanner);*/
|
|
noticeContent.SetInfo(curSelectTab.NoticeInfo);
|
|
break;
|
|
case E_NoticeType.System:
|
|
{
|
|
noticeContent.SetInfo(null);
|
|
break;
|
|
}
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
} |