You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
256 lines
6.4 KiB
256 lines
6.4 KiB
using IVDataFormat;
|
|
using IVServerFormat;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
|
|
public class NoticeMgr : MonoBehaviour
|
|
{
|
|
#region Const
|
|
private static NoticeMgr curMgr = null;
|
|
#endregion Const
|
|
|
|
#region Notice UI
|
|
[Header("Notice UI")]
|
|
[SerializeField]
|
|
private GameObject goBtnNotice;
|
|
//private GameObject goBadgeNotice;
|
|
|
|
[SerializeField]
|
|
private Canvas canvasNoticeUI;
|
|
private TextMeshProUGUI txtNoticeTitle;
|
|
private GameObject goList, goDetail;
|
|
private GameObject goBtnClose, goBtnBack;
|
|
private TextMeshProUGUI txtDesc, txtNoNotice, txtBigTitle;
|
|
|
|
[SerializeField]
|
|
private EScrController escrNotice;
|
|
#endregion UI
|
|
|
|
#region Variables
|
|
private int iLoading = 1;
|
|
private bool bReLocalize = true;
|
|
private bool bInitNeedNotice = true;
|
|
private bool bRefreshNotice = false;
|
|
|
|
EnhancedUI.SmallList<int> notices;
|
|
#endregion Variables
|
|
|
|
#region Base
|
|
public static void SLocalize(bool bmain)
|
|
{
|
|
if (curMgr != null)
|
|
curMgr.Localize(bmain);
|
|
}
|
|
|
|
// 번역.
|
|
private void Localize(bool bmain)
|
|
{
|
|
if (bmain)
|
|
{
|
|
goBtnNotice.transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("notice_title");
|
|
//goBadgeNotice = goBtnNotice.transform.Find("badge").gameObject;
|
|
}
|
|
else
|
|
{
|
|
bReLocalize = false;
|
|
Transform trfcanvas = canvasNoticeUI.transform;
|
|
|
|
txtNoticeTitle = trfcanvas.Find("txtT").GetComponent<TextMeshProUGUI>();
|
|
goList = trfcanvas.Find("SvNotice").gameObject;
|
|
goDetail = trfcanvas.Find("SvDetail").gameObject;
|
|
goBtnClose = trfcanvas.Find("btnClose").gameObject;
|
|
goBtnBack = trfcanvas.Find("btnBack").gameObject;
|
|
txtDesc = goDetail.transform.Find("txtDesc").GetComponent<TextMeshProUGUI>();
|
|
txtNoNotice = trfcanvas.Find("txtNoNotice").GetComponent<TextMeshProUGUI>();
|
|
txtBigTitle = trfcanvas.Find("SvDetailTitle").GetComponent<TextMeshProUGUI>();
|
|
|
|
txtNoNotice.text = LocalizationText.GetText("no_notice");
|
|
}
|
|
}
|
|
|
|
// 설정에서 언어 변경 시 처리.
|
|
public static void SReLocalize()
|
|
{
|
|
curMgr.Localize(true);
|
|
curMgr.bReLocalize = true;
|
|
curMgr.bRefreshNotice = true;
|
|
}
|
|
|
|
// 백버튼 처리.
|
|
public static bool SCloseMenu()
|
|
{
|
|
return curMgr.CloseMenu();
|
|
}
|
|
|
|
private bool CloseMenu()
|
|
{
|
|
// 공지.
|
|
if (canvasNoticeUI.enabled)
|
|
{
|
|
CloseNotice();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private void Awake()
|
|
{
|
|
curMgr = this;
|
|
}
|
|
|
|
void Start()
|
|
{
|
|
iLoading--;
|
|
}
|
|
#endregion Base
|
|
|
|
#region Notice UI
|
|
public static void SOpenNotice()
|
|
{
|
|
if (curMgr != null)
|
|
curMgr.OpenNotice();
|
|
}
|
|
|
|
// 공지사항 열기.
|
|
public void OpenNotice()
|
|
{
|
|
if (iLoading > 0) return;
|
|
iLoading++;
|
|
|
|
if (bReLocalize)
|
|
Localize(false);
|
|
if (bInitNeedNotice)
|
|
{
|
|
bInitNeedNotice = false;
|
|
CloseDetail();
|
|
dNotice[] datas = DataHandler.GetNotices();
|
|
notices = new EnhancedUI.SmallList<int>();
|
|
for (int i = 0; i < datas.Length; i++)
|
|
{
|
|
notices.Add(i);
|
|
}
|
|
escrNotice.LoadDatas(notices);
|
|
}
|
|
|
|
if (bRefreshNotice)
|
|
{
|
|
bRefreshNotice = false;
|
|
RefreshNotice();
|
|
}
|
|
canvasNoticeUI.enabled = true;
|
|
|
|
if (DataHandler.GetNotices().Length == 0)
|
|
{
|
|
txtNoNotice.gameObject.SetActive(true);
|
|
}
|
|
else
|
|
{
|
|
txtNoNotice.gameObject.SetActive(false);
|
|
}
|
|
|
|
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
|
|
|
|
iLoading--;
|
|
}
|
|
|
|
// 공지사항 닫기.
|
|
public void CloseNotice()
|
|
{
|
|
if (!canvasNoticeUI.enabled)
|
|
return;
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
canvasNoticeUI.enabled = false;
|
|
CloseDetail();
|
|
|
|
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
|
|
|
|
iLoading--;
|
|
}
|
|
|
|
public static void SOpenDetail(int index)
|
|
{
|
|
curMgr.OpenDetail(index);
|
|
}
|
|
|
|
private void OpenDetail(int index)
|
|
{
|
|
if (!DataHandler.TryGetNotice(index, out dNotice targetNotice)) return;
|
|
txtBigTitle.gameObject.SetActive(true);
|
|
txtBigTitle.text = targetNotice.GetTitle();
|
|
txtDesc.text = targetNotice.GetMsg();
|
|
|
|
goList.SetActive(false);
|
|
goDetail.SetActive(true);
|
|
goBtnClose.SetActive(false);
|
|
goBtnBack.SetActive(true);
|
|
}
|
|
|
|
public void CloseDetail()
|
|
{
|
|
goList.SetActive(true);
|
|
goDetail.SetActive(false);
|
|
goBtnClose.SetActive(true);
|
|
goBtnBack.SetActive(false);
|
|
txtBigTitle.gameObject.SetActive(false);
|
|
txtNoticeTitle.text = LocalizationText.GetText("notice_title");
|
|
}
|
|
#endregion Notice UI
|
|
|
|
|
|
#region Notice Refresh
|
|
public static void SRefreshNotice()
|
|
{
|
|
if (curMgr != null)
|
|
curMgr.RefreshNotice();
|
|
}
|
|
|
|
// 공지사항 갱신.
|
|
public void RefreshNotice()
|
|
{
|
|
iLoading++;
|
|
SvConnectManager.Instance.RequestSvGet(true, 0, UrlApi.GetUrl(UrlApi.Notice), typeof(dNoticeDatas), ANoticeSucc, ANoticeFail, false);
|
|
}
|
|
|
|
// 공지사항 통신 실패.
|
|
private void ANoticeFail(SvError error)
|
|
{
|
|
iLoading--;
|
|
}
|
|
|
|
// 공지사항 통신 성공.
|
|
private void ANoticeSucc(object result)
|
|
{
|
|
dNoticeDatas data = (dNoticeDatas)result;
|
|
if (data.sysNotice == null)
|
|
{
|
|
ANoticeFail(new SvError(eErrorCode.NULL_OR_EMPTY));
|
|
return;
|
|
}
|
|
DataHandler.SetNewNotices(data.sysNotice);
|
|
|
|
if (!bInitNeedNotice)
|
|
{
|
|
if (notices.Count != data.sysNotice.Length)
|
|
{
|
|
while (notices.Count > data.sysNotice.Length)
|
|
{
|
|
notices.RemoveEnd();
|
|
}
|
|
while (notices.Count < data.sysNotice.Length)
|
|
{
|
|
notices.Add(notices.Count);
|
|
}
|
|
escrNotice.scroller.ReloadData();
|
|
}
|
|
else
|
|
{
|
|
escrNotice.scroller.RefreshActiveCellViews();
|
|
}
|
|
}
|
|
iLoading--;
|
|
}
|
|
#endregion Notice Refresh
|
|
}
|