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.
 
 
 
 
 
 

616 lines
21 KiB

using IVDataFormat;
using IVServerFormat;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UI;
public class QuestMgr : MonoBehaviour
{
#region Const
private static QuestMgr curMgr = null;
#endregion
#region UI
[SerializeField]
private TextMeshProUGUI txtMainT;
private GameObject goMainBadge;
[SerializeField]
private Canvas canvasUi;
private TextMeshProUGUI txtTitle;
private TextMeshProUGUI txtDaily, txtRepeat;
private TextMeshProUGUI txtReset;
private RectTransform rtftabWrapTop;
private RectTransform rtfDailyQuest;
private RectTransform rtfRepeatQuest;
private RectTransform rtfDailyQuestLast;
private Button btnTabDaily, btnTabRepeat;
// 최상단 퀘스트
private TextMeshProUGUI txtCond;
private TextMeshProUGUI txtBtnGet;
private TextMeshProUGUI txtClearRate;
private TextMeshProUGUI txtGoodsCnt;
private TextMeshProUGUI txtBtnAllGet;
private Image imgGoodsIcon;
private Image imgCover;
private Slider sldClearRate;
private Button btnGet;
private Button btnAllget;
private RectTransform allGetBadge, dailyTopBadge, dailyBadge, repeatBadge;
[SerializeField]
private EScrController EScrDailyQuest;
[SerializeField]
private EScrController EScrRepeatQuest;
#endregion
#region Variables
private int iLoading = -1;
private int iSelectedTab = -1;
private bool bReLocalize = true;
private bool bReLocalizeDaily = true;
private bool bReLocalizeRepeat = true;
private EnhancedUI.SmallList<int>
dailyList = new EnhancedUI.SmallList<int>(),
repeatList = new EnhancedUI.SmallList<int>();
private nIdCnt SVQuestRequestCnt = new nIdCnt();
private nIdLv SVQuestRequest = new nIdLv();
private nIdCnts SVQuestRequests = new nIdCnts();
#endregion
#region Base
private void Awake()
{
curMgr = this;
}
public static void SLocalize(bool bmain)
{
if (curMgr != null)
curMgr.Localize(bmain);
}
public void Localize(bool bmain)
{
if (bmain)
{
txtMainT.text = LocalizationText.GetText("quest_title");
goMainBadge = txtMainT.transform.parent.Find("badge").gameObject;
txtTitle = canvasUi.transform.Find("txtT").GetComponent<TextMeshProUGUI>();
txtTitle.text = LocalizationText.GetText("quest_title");
}
else
{
txtTitle.text = LocalizationText.GetText("quest_title");
txtMainT.text = LocalizationText.GetText("quest_title");
rtftabWrapTop = canvasUi.transform.Find("tabWrapTop").GetComponent<RectTransform>();
btnTabDaily = rtftabWrapTop.GetChild(0).Find("tabDaily").GetComponent<Button>();
btnTabRepeat = rtftabWrapTop.GetChild(0).Find("tabRepeat").GetComponent<Button>();
txtDaily = rtftabWrapTop.GetChild(0).Find("tabDaily").Find("txt").GetComponent<TextMeshProUGUI>();
txtRepeat = rtftabWrapTop.GetChild(0).Find("tabRepeat").Find("txt").GetComponent<TextMeshProUGUI>();
rtfDailyQuest = canvasUi.transform.Find("DailyQuest").GetComponent<RectTransform>();
txtReset = rtfDailyQuest.transform.Find("txtReset").GetComponent<TextMeshProUGUI>();
rtfRepeatQuest = canvasUi.transform.Find("RepeatQuest").GetComponent<RectTransform>();
rtfDailyQuestLast = rtfDailyQuest.Find("DailyQuestLast").GetComponent<RectTransform>();
dailyBadge = btnTabDaily.transform.Find("badge").GetComponent<RectTransform>();
repeatBadge = btnTabRepeat.transform.Find("badge").GetComponent<RectTransform>();
txtCond = rtfDailyQuestLast.Find("txtCond").GetComponent<TextMeshProUGUI>();
btnGet = rtfDailyQuestLast.Find("btnGet").GetComponent<Button>();
btnAllget = canvasUi.transform.Find("btnAllGet").GetComponent<Button>();
txtBtnGet = btnGet.transform.Find("txt").GetComponent<TextMeshProUGUI>();
txtBtnAllGet = btnAllget.transform.Find("txt").GetComponent<TextMeshProUGUI>();
imgCover = btnGet.transform.Find("cover").GetComponent<Image>();
imgGoodsIcon = rtfDailyQuestLast.Find("ImgIconBack").GetChild(0).GetComponent<Image>();
txtGoodsCnt = rtfDailyQuestLast.Find("ImgIconBack").GetChild(1).GetComponent<TextMeshProUGUI>();
sldClearRate = rtfDailyQuestLast.Find("sldClearRate").GetComponent<Slider>();
txtClearRate = sldClearRate.transform.Find("txtValue").GetComponent<TextMeshProUGUI>();
txtReset.text = LocalizationText.GetText("reset_day_explain");
txtDaily.text = LocalizationText.GetText("all_daily");
txtRepeat.text = LocalizationText.GetText("all_repeat");
txtCond.text = FormatString.TextCondition(DataHandler.GetDailyQuest(1).condType, DataHandler.GetDailyQuest(1).condValue);
txtBtnGet.text = LocalizationText.GetText("all_get");
txtBtnAllGet.text = LocalizationText.GetText("all_getall");
dailyTopBadge = btnGet.transform.Find("badge").GetComponent<RectTransform>();
allGetBadge = btnAllget.transform.Find("badge").GetComponent<RectTransform>();
bReLocalize = false;
}
}
public static void SReLocalize()
{
curMgr.Localize(true);
curMgr.bReLocalize = true;
curMgr.bReLocalizeDaily = true;
curMgr.bReLocalizeRepeat = true;
}
#endregion
#region UI
public void OpenQuest()
{
if (iLoading > 0)
return;
iLoading++;
canvasUi.enabled = true;
SoundMgr.PlaySfx(SoundName.BtnPress);
if (bReLocalize)
Localize(false);
if(iSelectedTab < 0)
{
tabDaily();
}
else
{
tabRepeat();
}
}
public void tabDaily()
{
dailyList.Clear();
rtfDailyQuest.gameObject.SetActive(true);
rtfRepeatQuest.gameObject.SetActive(false);
btnTabDaily.interactable = false;
btnTabRepeat.interactable = true;
Dictionary<int, dQuest> datas = DataHandler.GetDailyQuests();
for(int i = 1; i<datas.Count; i++)
{
dailyList.Add(i + 1);
}
iSelectedTab = 0;
EScrDailyQuest.SetType(0);
EScrDailyQuest.LoadDatas(dailyList);
refreshQuest();
SoundMgr.PlaySfx(SoundName.BtnPress);
}
public void tabRepeat()
{
repeatList.Clear();
rtfRepeatQuest.gameObject.SetActive(true);
rtfDailyQuest.gameObject.SetActive(false);
btnTabDaily.interactable = true;
btnTabRepeat.interactable = false;
Dictionary<int, dQuest> datas = DataHandler.GetRepeatQuests();
for (int i = 0; i < datas.Count; i++)
{
repeatList.Add(i + 1);
}
iSelectedTab = 1;
EScrRepeatQuest.SetType(1);
EScrRepeatQuest.LoadDatas(repeatList);
refreshQuest();
SoundMgr.PlaySfx(SoundName.BtnPress);
}
public static bool SCloseMenu()
{
return curMgr.CloseMenu();
}
private bool CloseMenu()
{
if (canvasUi.enabled)
{
CloseQuest();
return true;
}
return false;
}
public void CloseQuest()
{
if (!canvasUi.enabled)
return;
if (iLoading < 0)
return;
iLoading--;
iSelectedTab = -1;
canvasUi.enabled = false;
SoundMgr.PlaySfx(SoundName.BtnPress);
}
public static void SRefreshQuest()
{
curMgr.refreshQuest();
}
public void refreshQuest()
{
if(iSelectedTab == -1)
{
return;
}
SetBadge();
if (iSelectedTab == 0)
{
SetDailyQuestAll();
EScrDailyQuest.scroller.RefreshActiveCellViews();
}
else
{
SetRepeatQuestAll();
EScrRepeatQuest.scroller.RefreshActiveCellViews();
}
}
public static bool setMainBadge()
{
if(curMgr.dailyBadge.gameObject.activeSelf)
return true;
if (curMgr.repeatBadge.gameObject.activeSelf)
return true;
return false;
}
public static void SSetBadge()
{
curMgr.SetBadge();
}
public bool SetBadge()
{
bool bflag = false;
if (SetDailyBadge())
{
bflag = true;
goMainBadge.SetActive(true);
}
if (SetRepeatBadge())
{
bflag = true;
goMainBadge.SetActive(true);
}
if(!bflag)
goMainBadge.SetActive(false);
return bflag;
}
public bool SetDailyBadge()
{
for(int i =0;i < DataHandler.GetDailyQuests().Count; i++)
{
nAchivement achive = new nAchivement(DataHandler.GetDailyQuest(i+1), eContentType.DailyQuest);
if (DataHandler.isClearAchievements(achive) >= 1 && DataHandler.GetDailyQuestPlay(i + 1).cond != 2)
{
if(dailyBadge != null)
dailyBadge.gameObject.SetActive(true);
return true;
}
}
if (dailyBadge != null)
dailyBadge.gameObject.SetActive(false);
return false;
}
public bool SetRepeatBadge()
{
for (int i = 0; i < DataHandler.GetRepeatQuests().Count; i++)
{
nAchivement achive = new nAchivement(DataHandler.GetRepeatQuest(i + 1), eContentType.RepeatQuest);
if (DataHandler.isClearAchievements(achive) >= 1)
{
if(repeatBadge != null)
repeatBadge.gameObject.SetActive(true);
return true;
}
}
if (repeatBadge != null)
repeatBadge.gameObject.SetActive(false);
return false;
}
public void SetDailyQuestAll()
{
// 일일퀘스트 최상단 퀘스트
imgGoodsIcon.sprite = AddressableMgr.GetGoodsIcon(DataHandler.GetDailyQuest(1).rewards[0].rewardId);
txtBtnGet.text = DataHandler.GetDailyQuestPlay(1).cond < 2 ? LocalizationText.GetText("all_get") : LocalizationText.GetText("all_comp");
btnGet.image.color = DataHandler.GetDailyQuestPlay(1).cond < 2 ? new Color(255f / 255f, 255f / 255f, 255f / 255f) : new Color(63f / 255f, 161f / 255f, 161f / 252f, 0f/255f);
txtGoodsCnt.text = DataHandler.GetDailyQuest(1).rewards[0].rewardCount.ToString();
nAchivement achive = new nAchivement(DataHandler.GetDailyQuest(1), eContentType.DailyQuest);
int inum;
txtClearRate.text = FormatString.TextCntPer((inum = DataHandler.GetAchievementValue(achive) >= achive.condValue ? achive.condValue : DataHandler.GetAchievementValue(achive)).ToString(), achive.condValue.ToString());
sldClearRate.value = (float)DataHandler.GetAchievementValue(achive) / achive.condValue;
btnGet.interactable = DataHandler.isClearAchievements(achive) > 0 && DataHandler.GetDailyQuestPlay(1).cond < 2 ? true : false;
dailyTopBadge.gameObject.SetActive(btnGet.interactable);
imgCover.gameObject.SetActive(DataHandler.isClearAchievements(achive) > 0 ? false : true);
txtBtnGet.color = imgCover.gameObject.activeSelf ? new Color(150f/255f, 150f / 255f, 150f / 255f) : Global.CLR_White;
bReLocalize = false;
// 하단 모두 받기 버튼
for(int i = 0; i < DataHandler.GetDailyQuests().Count; i++)
{
nAchivement _achive = new nAchivement(DataHandler.GetDailyQuest(i+1), eContentType.DailyQuest);
if (DataHandler.isClearAchievements(_achive) >= 1 && DataHandler.GetDailyQuestPlay(i + 1).cond != 2) // == true
{
btnAllget.interactable = true;
if(allGetBadge != null)
allGetBadge.gameObject.SetActive(true);
return;
}
}
btnAllget.interactable = false;
if (allGetBadge != null)
allGetBadge.gameObject.SetActive(false);
}
public void SetRepeatQuestAll()
{
for (int i = 0; i < DataHandler.GetRepeatQuests().Count; i++)
{
nAchivement _achive = new nAchivement(DataHandler.GetRepeatQuest(i + 1), eContentType.RepeatQuest);
if (DataHandler.isClearAchievements(_achive) >= 1) // == true
{
btnAllget.interactable = true;
if (allGetBadge != null)
allGetBadge.gameObject.SetActive(true);
return;
}
}
btnAllget.interactable = false;
if (allGetBadge != null)
allGetBadge.gameObject.SetActive(false);
}
public void btnTab(int idx)
{
if (idx == 0)
{
tabDaily();
}
else
tabRepeat();
SoundMgr.PlaySfx(SoundName.BtnPress);
}
public void btnClearAll()
{
SoundMgr.PlaySfx(SoundName.BtnPress);
//daily
if (iSelectedTab == 0)
{
ClearDailyQuestAll();
}
//repeat
else
{
ClearRepeatQuestAll();
}
}
public void btnDailylast()
{
SoundMgr.PlaySfx(SoundName.BtnPress);
ClearDailyQuest(1);
}
#endregion
#region QuestClear
public static void SSClearDailyQuest(int id)
{
if (DataHandler.IsNeedDataSave)
SingleMgr.SaveDataDQuest(id);
// 서버에 저장할 필요가 없는 경우는 바로 사용 통신 진행.
else
SClearDailyQuest(id);
}
public static void SClearDailyQuest(int id)
{
curMgr.ClearDailyQuest(id);
}
public void ClearDailyQuest(int id)
{
CoverCamera.Hold();
SVQuestRequest = new nIdLv(id);
SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.QuestDaily), typeof(QuestDailyReturn), AQuestDailyClearSucc, AQuestDailyClearFail, SVQuestRequest, true);
}
public static void SSClearRepeatQuest(int id, int cnt)
{
if (DataHandler.IsNeedDataSave)
SingleMgr.SaveDataRQuest(id, cnt);
// 서버에 저장할 필요가 없는 경우는 바로 사용 통신 진행.
else
SClearRepeatQuest(id, cnt);
}
public static void SClearRepeatQuest(int id, int icnt)
{
curMgr.ClearRepeatQuest(id, icnt);
}
public void ClearRepeatQuest(int id, int icnt)
{
CoverCamera.Hold();
SVQuestRequestCnt = new nIdCnt(id, icnt);
SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.QuestRepeat), typeof(QuestRepeatReturn), AQuestRepeatClearSucc, AQuestRepeatClearFail, SVQuestRequestCnt, true);
}
public void ClearDailyQuestAll()
{
int cnt = 0;
for (int i = 0; i < DataHandler.GetDailyQuests().Count; i++)
{
nAchivement _achive = new nAchivement(DataHandler.GetDailyQuest(i + 1), eContentType.DailyQuest);
if (DataHandler.isClearAchievements(_achive) >= 1 && DataHandler.GetDailyQuestPlay(i + 1).cond != 2) // == true
cnt++;
}
CoverCamera.Hold();
int []arrIds = new int[cnt];
int idx = 0;
for (int i = 0; i < DataHandler.GetDailyQuests().Count; i++)
{
nAchivement _achive = new nAchivement(DataHandler.GetDailyQuest(i + 1), eContentType.DailyQuest);
if (DataHandler.isClearAchievements(_achive) >= 1 && DataHandler.GetDailyQuestPlay(i + 1).cond != 2) // == true
{
arrIds[idx] = DataHandler.GetDailyQuest(i + 1).id;
idx++;
}
}
SVQuestRequests = new nIdCnts(arrIds);
if(idx != 0)
SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.QuestDailyAll), typeof(QuestDailyAllReturn), AQuestDailyClearAllSucc, AQuestDailyClearAllFail, SVQuestRequests, true);
}
public void ClearRepeatQuestAll()
{
int cnt = 0;
for (int i = 0; i < DataHandler.GetRepeatQuests().Count; i++)
{
nAchivement _achive = new nAchivement(DataHandler.GetRepeatQuest(i + 1), eContentType.RepeatQuest);
if (DataHandler.isClearAchievements(_achive) >= 1) // == true
cnt++;
}
CoverCamera.Hold();
int[] arrIds = new int[cnt];
int[] arrCnts = new int[cnt];
int idx = 0;
for (int i = 0; i < DataHandler.GetRepeatQuests().Count; i++)
{
nAchivement _achive = new nAchivement(DataHandler.GetRepeatQuest(i + 1), eContentType.RepeatQuest);
if (DataHandler.isClearAchievements(_achive) >= 1) // == true
{
arrIds[idx] = DataHandler.GetRepeatQuest(i + 1).id;
arrCnts[idx] = DataHandler.isClearAchievements(_achive);
idx++;
}
}
SVQuestRequests = new nIdCnts(arrIds, arrCnts);
SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.QuestRepeatAll), typeof(QuestRepeatAllReturn), AQuestRepeatClearAllSucc, AQuestRepeatClearAllFail, SVQuestRequests, true);
}
#endregion
#region SV
// 일일퀘스트 클리어
private void AQuestDailyClearSucc(object result, object request)
{
QuestDailyReturn data = result as QuestDailyReturn;
if(data == null)
{
AQuestDailyClearFail(new SvError(eErrorCode.NULL_OR_EMPTY), request);
return;
}
DataHandler.SetDailyQuestPlay(data.playQuestDaily);
DataHandler.AddRecord(eCondition.DailyQuestClear);
int rewardCnt = data.playCurrency.diaFree - DataHandler.Goods.diaFree;
nGoods[] goods = new nGoods[1] { new nGoods { propertyType = cGoods.TCurrency, propertyId = cGoods.CDiaF, propertyCount = rewardCnt } };
DataHandler.SetGoods(data.playCurrency, true);
GameUIMgr.SOpenPopupGoods(goods);
SingleMgr.CheckSaveData(true);
refreshQuest();
CoverCamera.Release();
}
private void AQuestDailyClearFail(SvError error, object request)
{
CoverCamera.Release();
}
// 모든 일일퀘스트 클리어
private void AQuestDailyClearAllSucc(object result, object request)
{
QuestDailyAllReturn data = result as QuestDailyAllReturn;
if(data == null)
{
AQuestDailyClearAllFail(new SvError(eErrorCode.NULL_OR_EMPTY), request);
}
int rewardCnt = data.playCurrency.diaFree - DataHandler.Goods.diaFree;
int sum = 0;
for(int i = 0; i<data.playQuestDaily.Length; i++)
{
if (data.playQuestDaily[i].cond == 2)
sum++;
}
DataHandler.GetDailyRecord().clearDailyQuest = sum;
DataHandler.SetGoods(data.playCurrency, true);
DataHandler.SetDailyQuestAllPlay(data.playQuestDaily);
nGoods[] goods = new nGoods[1] { new nGoods { propertyType = cGoods.TCurrency, propertyId = cGoods.CDiaF, propertyCount = rewardCnt } };
GameUIMgr.SOpenPopupGoods(goods);
SingleMgr.CheckSaveData(true);
refreshQuest();
CoverCamera.Release();
}
private void AQuestDailyClearAllFail(SvError error, object request)
{
CoverCamera.Release();
}
// 반복퀘스트 클리어
private void AQuestRepeatClearSucc(object result, object request)
{
QuestRepeatReturn data = result as QuestRepeatReturn;
if (data == null)
{
AQuestRepeatClearFail(new SvError(eErrorCode.NULL_OR_EMPTY), request);
return;
}
int rewardCnt = data.playCurrency.diaFree - DataHandler.Goods.diaFree;
DataHandler.SetGoods(data.playCurrency, true);
DataHandler.SetRepeatQuestPlay(data.playQuestRepeat);
nGoods[] goods = new nGoods[1] { new nGoods { propertyType = cGoods.TCurrency, propertyId = cGoods.CDiaF, propertyCount = rewardCnt } };
GameUIMgr.SOpenPopupGoods(goods);
SingleMgr.CheckSaveData(true);
refreshQuest();
CoverCamera.Release();
}
private void AQuestRepeatClearFail(SvError error, object request)
{
CoverCamera.Release();
}
private void AQuestRepeatClearAllSucc(object result, object request)
{
QuestRepeatAllReturn data = result as QuestRepeatAllReturn;
if(data == null)
{
AQuestRepeatClearAllFail(new SvError(eErrorCode.NULL_OR_EMPTY), request);
}
int rewardCnt = data.playCurrency.diaFree - DataHandler.Goods.diaFree;
DataHandler.SetGoods(data.playCurrency, true);
DataHandler.SetRepeatQuestAllPlay(data.playQuestRepeat);
nGoods[] goods = new nGoods[1] { new nGoods { propertyType = cGoods.TCurrency, propertyId = cGoods.CDiaF, propertyCount = rewardCnt } };
GameUIMgr.SOpenPopupGoods(goods);
SingleMgr.CheckSaveData(true);
refreshQuest();
CoverCamera.Release();
}
private void AQuestRepeatClearAllFail(SvError error, object request)
{
CoverCamera.Release();
}
#endregion
}