using IVDataFormat; using IVServerFormat; using TMPro; using UnityEngine; public class AttendMgr : Singleton { public enum AttendType { AttendTen = 0, AttendRepeat = 1, AttendSeven = 2 } #region UI [SerializeField] Canvas canvasAttendRepeatUI; [SerializeField] TextMeshProUGUI txtMain; GameObject attendBox; GoodsAttendItem[] attendList; TextMeshProUGUI title; TextMeshProUGUI timeExplain; [SerializeField] GameObject canvasAttendSevenUI; GameObject attendBoxSeven; GoodsAttendItem[] attendListSeven; [SerializeField] GameObject canvasAttendTenUI; GameObject attendBoxTen; GoodsAttendItem[] attendListTen; [SerializeField] GameObject attendBedge; #endregion private int iLoading = 1; private bool bReLocalize = true; private bool bInitNeed = true; bool bInitNeedRepeat = true; private bool iAttendRepeatOpen = false; private bool iAttendTenOpen = false; private bool iAttendSevenOpen = false; private AttendType currentAttendType; public static AttendType CurrentAttendType => Instance.currentAttendType; public static void AttendReckeck() { Instance.iAttendRepeatOpen = false; Instance.iAttendTenOpen = false; Instance.iAttendSevenOpen = false; } #region Base public static void SLocalize(bool bmain) { if (Instance != null) Instance.Localize(bmain); } private void Localize(bool bmain) { if (bmain) { txtMain.text = LocalizationText.GetText("attend_title"); } else { bReLocalize = false; title.text = LocalizationText.GetText("attend_title"); txtMain.text = LocalizationText.GetText("attend_title"); timeExplain.text = LocalizationText.GetText("reset_day_explain"); for (int i = 0; i < attendList.Length; i++) { attendList[i].SetDay(i + 1); } for (int i = 0; i < attendListSeven.Length; i++) { attendListSeven[i].SetDay(i + 1); } for (int i = 0; i < attendListTen.Length; i++) { attendListTen[i].SetDay(i + 1); } } } // 설정에서 언어 변경 시 처리. public static void SReLocalize() { Instance.Localize(true); Instance.bReLocalize = true; } // 백버튼 처리. public static bool SCloseMenu() { return Instance.CloseMenu(); } private bool CloseMenu() { // 게임 시작 후 열린적 없음. if (!bInitNeedRepeat && canvasAttendRepeatUI.enabled) { CloseAttendRepeat(); return true; } return false; } private void Awake() { _instance = this; } void Start() { iLoading--; OpenAttendRepeat(); } private void Init() { bInitNeed = false; attendBox = canvasAttendRepeatUI.transform.Find("attendanceBox").gameObject; attendList = new GoodsAttendItem[14]; attendList[0] = attendBox.transform.Find("GoodsItemAttent").GetComponent(); for (int i = 1; i < 14; i++) { attendList[i] = attendBox.transform.Find(FormatString.CombineAllString("GoodsItemAttent (", i.ToString(), ")")).GetComponent(); } title = canvasAttendRepeatUI.transform.Find("txtT").GetComponent(); timeExplain = canvasAttendRepeatUI.transform.Find("txtExplain").GetComponent(); attendBoxSeven = canvasAttendSevenUI.transform.Find("attendBox").gameObject; attendListSeven = new GoodsAttendItem[7]; attendListSeven[0] = attendBoxSeven.transform.Find("GoodsItemEventAttent").GetComponent(); for (int i = 1; i < 7; i++) { attendListSeven[i] = attendBoxSeven.transform.Find(FormatString.CombineAllString("GoodsItemEventAttent (", i.ToString(), ")")).GetComponent(); } attendBoxTen = canvasAttendTenUI.transform.Find("attendBox").gameObject; attendListTen = new GoodsAttendItem[10]; attendListTen[0] = attendBoxTen.transform.Find("GoodsItemEventAttent").GetComponent(); for (int i = 1; i < 10; i++) { attendListTen[i] = attendBoxTen.transform.Find(FormatString.CombineAllString("GoodsItemEventAttent (", i.ToString(), ")")).GetComponent(); } } #endregion Base #region AttendOnOff public static void SMoveAttend(eEventMoveType content) { switch (content) { case eEventMoveType.Attend: Instance.OpenAttendRepeat(); break; } } public void OpenAttendRepeat() { if (iLoading > 0) return; iLoading++; currentAttendType = AttendType.AttendRepeat; if (bInitNeed) Init(); if (bReLocalize) Localize(false); if (bInitNeedRepeat) bInitNeedRepeat = false; if (!iAttendRepeatOpen) { iAttendRepeatOpen = true; TrySvAttendCheck(AttendType.AttendRepeat); } else { OpenAttendRepeatReward(); } for (int i = 0; i < attendList.Length; i++) { if (!attendList[i].gameObject.activeSelf) { attendList[i].gameObject.SetActive(true); } } iLoading--; } public void CloseAttendRepeat() { if (Instance.iLoading > 0) return; Instance.iLoading++; MissionMgr.SRefreshMission(); for (int i = 0; i < attendList.Length; i++) { if (attendList[i].GetBadge()) { attendList[i].gameObject.SetActive(false); } } Instance.canvasAttendRepeatUI.enabled = false; Instance.iLoading--; } public static void OpenAttendTen() { if (Instance.iLoading > 0) return; Instance.iLoading++; Instance.currentAttendType = AttendType.AttendTen; if (Instance.bInitNeed) Instance.Init(); if (Instance.bReLocalize) Instance.Localize(false); if (Instance.bInitNeedRepeat) { Instance.bInitNeedRepeat = false; } if (!Instance.iAttendTenOpen) { Instance.iAttendTenOpen = true; TrySvAttendCheck(AttendType.AttendTen); } else { EventMgr.OpenEventWindow(); Instance.canvasAttendTenUI.SetActive(true); } Instance.iLoading--; } public static void CloseAttendTen() { if (Instance.iLoading > 0) return; Instance.iLoading++; Instance.canvasAttendTenUI.SetActive(false); Instance.iLoading--; } public static void OpenAttendSeven() { if (Instance.iLoading > 0) return; Instance.iLoading++; Instance.currentAttendType = AttendType.AttendSeven; if (Instance.bInitNeed) Instance.Init(); if (Instance.bReLocalize) Instance.Localize(false); if (Instance.bInitNeedRepeat) { Instance.bInitNeedRepeat = false; } if (!Instance.iAttendSevenOpen) { Instance.iAttendSevenOpen = true; TrySvAttendCheck(AttendType.AttendSeven); } else { EventMgr.OpenEventWindow(); Instance.canvasAttendSevenUI.SetActive(true); } Instance.iLoading--; } public static void CloseAttendSeven() { if (Instance.iLoading > 0) return; Instance.iLoading++; Instance.canvasAttendSevenUI.SetActive(false); Instance.iLoading--; } public void SettingAttendRepeatReward(bool isNotCkeck, int day) { switch (currentAttendType) { case AttendType.AttendTen: for (int i = 0; i < attendListTen.Length; i++) { attendListTen[i].gameObject.SetActive(false); if (i < DataHandler.GetSysAttend()[(int)AttendType.AttendTen].rewards.Length) { Instance.attendListTen[i].SetGoods(DataHandler.GetSysAttend()[(int)currentAttendType].rewards[i].rewards[0].rewardType, DataHandler.GetSysAttend()[(int)currentAttendType].rewards[i].rewards[0].rewardId, DataHandler.GetSysAttend()[(int)currentAttendType].rewards[i].rewards[0].rewardCount); if (DataHandler.GetSysAttend()[(int)currentAttendType].rewards[i].rewards.Length > 1) { if (DataHandler.GetSysAttend()[(int)currentAttendType].rewards[i].rewards[1] != null) { Instance.attendListTen[i].SetSecendGoods(DataHandler.GetSysAttend()[(int)currentAttendType].rewards[i].rewards[1].rewardType, DataHandler.GetSysAttend()[(int)currentAttendType].rewards[i].rewards[1].rewardId, DataHandler.GetSysAttend()[(int)currentAttendType].rewards[i].rewards[1].rewardCount); } } Instance.attendListTen[i].SetIconWithDay(isNotCkeck, day);//출석여부 판별 attendListTen[i].gameObject.SetActive(true); EventMgr.OpenEventWindow(); canvasAttendTenUI.SetActive(true); } } break; case AttendType.AttendRepeat: int notCheck = 0; for (int i = 0; i < attendList.Length; i++) { attendList[i].gameObject.SetActive(false); if (i < DataHandler.GetSysAttend()[(int)AttendType.AttendRepeat].rewards.Length) { var currentAttendReward = DataHandler.GetSysAttend()[(int)currentAttendType].rewards[i]; Instance.attendList[i].SetGoods( currentAttendReward.rewards[0].rewardType, currentAttendReward.rewards[0].rewardId, currentAttendReward.rewards[0].rewardCount); if (currentAttendReward.rewards.Length > 1 && currentAttendReward.rewards[1] != null) { Instance.attendList[i].SetSecendGoods( currentAttendReward.rewards[1].rewardType, currentAttendReward.rewards[1].rewardId, currentAttendReward.rewards[1].rewardCount); } //출석여부 판별 Instance.attendList[i].SetIconWithDay(isNotCkeck, day); if (isNotCkeck) { notCheck++; } attendList[i].gameObject.SetActive(true); } } if (notCheck > 0) attendBedge.SetActive(true); else attendBedge.SetActive(false); canvasAttendRepeatUI.enabled = true; CloseAttendRepeat(); break; case AttendType.AttendSeven: for (int i = 0; i < attendListSeven.Length; i++) { attendListSeven[i].gameObject.SetActive(false); if (i < DataHandler.GetSysAttend()[(int)AttendType.AttendSeven].rewards.Length) { Instance.attendListSeven[i].SetGoods(DataHandler.GetSysAttend()[(int)currentAttendType].rewards[i].rewards[0].rewardType, DataHandler.GetSysAttend()[(int)currentAttendType].rewards[i].rewards[0].rewardId, DataHandler.GetSysAttend()[(int)currentAttendType].rewards[i].rewards[0].rewardCount); if (DataHandler.GetSysAttend()[(int)currentAttendType].rewards[i].rewards.Length > 1) { if (DataHandler.GetSysAttend()[(int)currentAttendType].rewards[i].rewards[1] != null) { Instance.attendListSeven[i].SetSecendGoods(DataHandler.GetSysAttend()[(int)currentAttendType].rewards[i].rewards[1].rewardType, DataHandler.GetSysAttend()[(int)currentAttendType].rewards[i].rewards[1].rewardId, DataHandler.GetSysAttend()[(int)currentAttendType].rewards[i].rewards[1].rewardCount); } } Instance.attendListSeven[i].SetIconWithDay(isNotCkeck, day);//출석여부 판별 attendListSeven[i].gameObject.SetActive(true); EventMgr.OpenEventWindow(); canvasAttendSevenUI.SetActive(true); } } break; default: break; } } public static void AttendBadgeOff() { Instance.attendBedge.SetActive(false); } public void OpenAttendRepeatReward() { canvasAttendRepeatUI.enabled = true; } #endregion #region Request to server public static void TrySvAttendCheck(AttendType type) { var attendKind = new AttendTypeRequest(); attendKind.attendType = (int)type + 1; CoverCamera.Hold(); SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.Attend), typeof(AttendInfoReturn), AAttendCheckSucc, AAttendCheckFail, attendKind, true); } private static void AAttendCheckSucc(object result, object request) { AttendInfoReturn data = result as AttendInfoReturn; if (data == null) { AAttendCheckFail(new SvError(eErrorCode.NULL_OR_EMPTY), request); return; } data.playAttend.OnAfterDeserialize(); Instance.SettingAttendRepeatReward(data.attend, data.playAttend.day); CoverCamera.Release(); } private static void AAttendCheckFail(SvError error, object request) { CoverCamera.Release(); } public static void TrySvAttendBadgeCheck(AttendType type) { var badge = new AttendTypeRequest(); badge.attendType = (int)type + 1; CoverCamera.Hold(); SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.Attend), typeof(AttendInfoReturn), AAttendBadgeCheckSucc, AAttendBadgeCheckFail, badge, true); } private static void AAttendBadgeCheckSucc(object result, object request) { AttendInfoReturn data = result as AttendInfoReturn; AttendTypeRequest badge = request as AttendTypeRequest; if (data == null) { AAttendBadgeCheckFail(new SvError(eErrorCode.NULL_OR_EMPTY), request); return; } data.playAttend.OnAfterDeserialize(); EventMgr.BadgeEventAttendCheck(data.attend, (AttendType)badge.attendType - 1); CoverCamera.Release(); } private static void AAttendBadgeCheckFail(SvError error, object request) { CoverCamera.Release(); } #endregion }