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.
 
 
 
 
 
 

839 lines
27 KiB

using DG.Tweening;
using IVDataFormat;
using IVServerFormat;
using System.Collections;
using TMPro;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.UI;
public class PassMgr : MonoBehaviour
{
#region Const
private static PassMgr curMgr = null;
#endregion Const
#region UI
[Header("UI")]
[SerializeField]
private TextMeshProUGUI txtMainT;
private GameObject goMainBadge;
[SerializeField]
private Canvas canvasUI;
private ButtonIV[] btnTabs;
private GameObject[] goTabBadges;
private ButtonIV[] btnPages;
private GameObject[] goPageBadges;
private ButtonIV btnGetReward;
private ButtonIV btnBuy;
private GameObject goPaidLock;
private TextMeshProUGUI txtTime, txtProgressT, txtProgress, txtDesc1, txtDesc2, txtBuy;
private RectTransform rtrfTime;
[SerializeField]
private EScrController escrPass;
private EScrPass passItemLast;
#endregion UI
#region Variables
private int iLoading = 1;
private bool bReLocalize = true;
private bool bInitNeed = true;
private int iMoveToTab = -1;
private int iSelectedTab = -1;
private int iSelectedType = -1;
private eCondition selectedCond = eCondition.None;
private int iSelectedPage = 0;
private dPass selectedPass = null;
private bool bRefreshNeed = false;
private EnhancedUI.SmallList<int> passList;
private string strPrePath = null;
private AsyncOperationHandle<Sprite> handleImg;
private Sequence seqTime = null;
#endregion Variables
#region Base
public static void SLocalize(bool bmain)
{
if (curMgr != null)
curMgr.Localize(bmain);
}
private void Localize(bool bmain)
{
if (bmain)
{
txtMainT.text = LocalizationText.GetText("pass_title");
goMainBadge = txtMainT.transform.parent.Find("badge").gameObject;
}
else
{
bReLocalize = false;
Transform trfui = canvasUI.transform;
trfui.Find("txtT").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("pass_title");
for (int i = 0; i < btnTabs.Length; i++)
btnTabs[i].transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText(FormatString.CombineAllString("pass", (i + 1).ToString()));
trfui.Find("txtfree").GetComponent<TextMeshProUGUI>().text = FormatString.CombineAll(LocalizationText.GetText("all_free"),LocalizationText.GetText("pass_title"));
trfui.Find("txtpaid").GetComponent<TextMeshProUGUI>().text = FormatString.CombineAll(LocalizationText.GetText("all_paid"), LocalizationText.GetText("pass_title"));
trfui.Find("txtBuyTip").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("shop_refund2");
trfui.Find("txtBuyTip").GetChild(0).GetChild(0).GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_see");
btnGetReward.transform.GetChild(0).GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_getall");
if (selectedCond != eCondition.None)
{
string strcond = ((int)selectedCond).ToString();
txtProgressT.text = LocalizationText.GetText(FormatString.CombineAllString("passcond", strcond));
txtDesc1.text = LocalizationText.GetText(FormatString.CombineAllString("passdesc1_", strcond));
//txtDesc2.text =
}
}
}
// 설정에서 언어 변경 시 처리.
public static void SReLocalize()
{
curMgr.Localize(true);
curMgr.bReLocalize = true;
}
// 백버튼 처리.
public static bool SCloseMenu()
{
return curMgr.CloseMenu();
}
private bool CloseMenu()
{
// 게임 시작 후 열린적 없음.
if (bInitNeed)
return false;
if (canvasUI.enabled)
{
ClosePass();
return true;
}
return false;
}
private void Awake()
{
curMgr = this;
}
void Start()
{
iLoading--;
}
private void Init()
{
Transform trfui = canvasUI.transform;
btnTabs = trfui.Find("tabWrapLeft").GetComponentsInChildren<ButtonIV>(true);
goTabBadges = new GameObject[btnTabs.Length];
for (int i = 0; i < goTabBadges.Length; i++)
goTabBadges[i] = btnTabs[i].transform.Find("badge").gameObject;
btnPages = trfui.Find("pages").GetComponentsInChildren<ButtonIV>(true);
goPageBadges = new GameObject[btnPages.Length];
for (int i = 0; i < goPageBadges.Length; i++)
{
goPageBadges[i] = btnPages[i].transform.Find("badge").gameObject;
btnPages[i].transform.GetChild(0).GetComponent<TextMeshProUGUI>().text = (i + 1).ToString();
}
txtProgressT = trfui.Find("txtProgressT").GetComponent<TextMeshProUGUI>();
txtProgress = txtProgressT.transform.Find("txtProgress").GetComponent<TextMeshProUGUI>();
txtDesc1 = trfui.Find("txtDesc1").GetComponent<TextMeshProUGUI>();
txtDesc2 = trfui.Find("txtDesc2").GetComponent<TextMeshProUGUI>();
txtTime = trfui.Find("txtTime").GetComponent<TextMeshProUGUI>();
rtrfTime = txtTime.transform.GetChild(0).GetComponent<RectTransform>();
goPaidLock = trfui.Find("imgplock").gameObject;
btnBuy = trfui.Find("btnBuy").GetComponent<ButtonIV>();
txtBuy = btnBuy.transform.GetChild(0).GetComponent<TextMeshProUGUI>();
btnGetReward = trfui.Find("btnGetReward").GetComponent<ButtonIV>();
passList = new EnhancedUI.SmallList<int>();
escrPass.LoadDatas(passList);
passItemLast = trfui.Find("PassItem").GetComponent<EScrPass>();
passItemLast.InitCell();
}
#endregion Base
#region UI
public static bool SOpenPassEvent()
{
if (curMgr.iLoading > 0)
return false;
curMgr.iMoveToTab = 0;
curMgr.OpenPass();
return true;
}
public void OpenPass()
{
if (iLoading > 0)
return;
iLoading++;
if (bInitNeed)
{
bInitNeed = false;
Init();
}
if (bReLocalize)
Localize(false);
// 이벤트 패스 존재 여부에 따라서 버튼 표시.
btnTabs[0].gameObject.SetActive(DataHandler.TryGetPass(cGoods.PassTypeEvent, 0, out dPass _));
if (iMoveToTab < 0)
iMoveToTab = 0;
if (iMoveToTab == 0 && !btnTabs[0].gameObject.activeSelf)
iMoveToTab = 1;
if (iMoveToTab != iSelectedTab)
{
if (iMoveToTab == 0)
TabEvent();
else if (iMoveToTab == 1)
TabMonster();
else if (iMoveToTab == 2)
TabLevel();
else if (iMoveToTab == 3)
TabStage();
}
else
{
// 패스 창 열때 이미지 불러오기.
//if (!selectedPass.path.Equals(strPrePath))
//{
// CoverCamera.Hold();
// strPrePath = selectedPass.path;
// Addressables.LoadAssetAsync<Sprite>(selectedPass.path).Completed += ALoadImgComp;
//}
SetBadge(false);
bRefreshNeed = selectedPass.endAt < new System.DateTime(2099, 1, 1) || selectedPass.refreshAt < selectedPass.endAt;
SetSeqTime(false, bRefreshNeed);
escrPass.scroller.RefreshActiveCellViews();
passItemLast.RefreshCellView();
txtProgress.text = FormatString.TextConditionValue(selectedCond, selectedPass.progress);
}
escrPass.SetFloat(1f);
passItemLast.SetFloat(1f);
StartCoroutine(nameof(CoShineEffect));
canvasUI.enabled = true;
GameUIMgr.SSetMainUiOn(false);
BattleMgr.SSetBattleUiOn(false);
BattleMgr.SSetClearFailUiOn(false);
BattleMgr.Instance.SetCameraOn(false);
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
iLoading--;
}
public void ClosePass()
{
if (!canvasUI.enabled)
return;
if (iLoading > 0)
return;
iLoading++;
SetSeqTime(bRefreshNeed, false);
bRefreshNeed = false;
StopCoroutine("CoShineEffect");
canvasUI.enabled = false;
GameUIMgr.SSetMainUiOn(true);
BattleMgr.SSetBattleUiOn(true);
BattleMgr.SSetClearFailUiOn(true);
BattleMgr.Instance.SetCameraOn(true);
// 패스 창 닫을때 리소스 해제.
strPrePath = null;
//imgPass.color = Global.CLR_Trans;
//imgPass.sprite = null;
//if (handleImg.IsValid())
//{
// Addressables.Release(handleImg);
// AddressableMgr.SAddUnload();
//}
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
iLoading--;
}
// 시계 연출.
private void SetSeqTime(bool bprev, bool bnext)
{
if (bprev == bnext)
return;
if (bprev)
{
if (bRefreshNeed)
seqTime.Kill();
}
else
{
Vector3 v3left = new Vector3(0f, 0f, 5f);
Vector3 v3right = new Vector3(0f, 0f, -5f);
seqTime = DOTween.Sequence()
.SetUpdate(true)
.Append(rtrfTime.DOLocalRotate(v3right, 0.05f))
.Append(rtrfTime.DOLocalRotate(v3left, 0.1f))
.Append(rtrfTime.DOLocalRotate(v3right, 0.1f))
.Append(rtrfTime.DOLocalRotate(v3left, 0.1f))
.Append(rtrfTime.DOLocalRotate(v3right, 0.1f))
.Append(rtrfTime.DOLocalRotate(v3left, 0.1f))
.Append(rtrfTime.DOLocalRotate(v3right, 0.1f))
.Append(rtrfTime.DOLocalRotate(v3left, 0.1f))
.Append(rtrfTime.DOLocalRotate(Vector3.zero, 0.05f))
.AppendInterval(1.5f)
.SetLoops(-1)
.Play();
}
}
// 반짝이는 연출.
private IEnumerator CoShineEffect()
{
float fvalue = 1f;
while (true)
{
escrPass.SetFloat(fvalue);
passItemLast.SetFloat(fvalue);
yield return YieldInstructionCache.WaitForSeconds(0.05f);
fvalue -= 0.08f;
if (fvalue < 0f)
{
fvalue = 1f;
yield return YieldInstructionCache.WaitForSeconds(3f);
}
}
}
#endregion UI
#region Tab
// 이벤트 패스.
public void TabEvent()
{
if(DataHandler.TryGetPass(cGoods.PassTypeEvent, 0, out dPass targetPass))
TabPass(0, cGoods.PassTypeEvent, targetPass.condType);
}
// 일회성 패스 - 몬스터 탭.
public void TabMonster()
{
TabPass(1, cGoods.PassTypeOne, eCondition.MonsterCnt);
}
// 일회성 패스 - 레벨 탭.
public void TabLevel()
{
TabPass(2, cGoods.PassTypeOne, eCondition.PlayerLv);
}
// 일회성 패스 - 스테이지 탭.
public void TabStage()
{
TabPass(3, cGoods.PassTypeOne, eCondition.StageClear);
}
// 탭.
private void TabPass(int index, int passtype, eCondition condtype)
{
if (iSelectedTab == index)
return;
if (iSelectedTab >= 0)
{
btnTabs[iSelectedTab].interactable = true;
}
iMoveToTab = index;
iSelectedTab = index;
iSelectedType = passtype;
selectedCond = condtype;
string strcond = ((int)selectedCond).ToString();
btnTabs[iSelectedTab].interactable = false;
DataHandler.TryGetPass(iSelectedType, selectedCond, out selectedPass);
SetBadge(false);
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
txtProgressT.text = LocalizationText.GetText(FormatString.CombineAllString("passcond", strcond));
txtDesc1.text = LocalizationText.GetText(FormatString.CombineAllString("passdesc1_", strcond));
// 페이지 표시.
int imaxpage = selectedPass.levels.Length <= selectedPass.passUnit ? 0 : ((selectedPass.levels.Length - 1) / selectedPass.passUnit + 1);
for (int k = 0; k < btnPages.Length; k++)
{
btnPages[k].gameObject.SetActive(k < imaxpage);
}
// 표시할 페이지 계산.
if (imaxpage > 0)
{
int ipageindex = imaxpage - 1;
for (int k = 0; k < imaxpage; k++)
{
int imaxindexexc = (k + 1) * selectedPass.passUnit;
if (selectedPass.isPaid[k])
{
// 유료패스 활성화 상태이며, 페이지에서 수령한 항목이 페이지의 마지막 항목 이전일 경우.
if (selectedPass.haveLvPaids[k] < imaxindexexc)
{
ipageindex = k;
break;
}
}
else
{
// 페이지에서 수령한 항목이 페이지의 마지막 항목 이전일 경우.
if (selectedPass.haveLvFrees[k] < imaxindexexc)
{
ipageindex = k;
break;
}
}
}
TabPage(ipageindex);
}
else
{
TabPage(0);
}
txtProgress.text = FormatString.TextConditionValue(selectedCond, selectedPass.progress);
// 2099년 이전에 종료되는 패스이거나, 갱신일시가 종료일시보다 이전일 경우에는 남은 시간 표시.
bool brefresh = selectedPass.endAt < new System.DateTime(2099, 1, 1) || selectedPass.refreshAt < selectedPass.endAt;
SetSeqTime(bRefreshNeed, brefresh);
bRefreshNeed = brefresh;
if (bRefreshNeed)
{
txtTime.text = FormatString.TextLeftTimeDHMS(selectedPass.refreshAt);
txtTime.gameObject.SetActive(true);
}
else
{
txtTime.gameObject.SetActive(false);
}
}
#endregion Tab
#region Page
public void TabPage(int index)
{
if (iSelectedPage >= 0)
btnPages[iSelectedPage].interactable = true;
iSelectedPage = index;
if (iSelectedPage >= 0)
btnPages[iSelectedPage].interactable = false;
// 항목 수량 조정.
int iminindexinc = iSelectedPage * selectedPass.passUnit;
int imaxindexexc = (iSelectedPage + 1) * selectedPass.passUnit;
if (imaxindexexc > selectedPass.levels.Length)
imaxindexexc = selectedPass.levels.Length;
int ilen = imaxindexexc - iminindexinc;
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
// 마지막 단계는 제일 우측 고정.
ilen--;
while (passList.Count < ilen)
passList.Add(passList.Count);
while (passList.Count > ilen)
passList.RemoveEnd();
escrPass.scroller.ReloadData();
passItemLast.SetData(ilen);
if (btnPages[0].gameObject.activeSelf)
btnGetReward.interactable = goPageBadges[iSelectedPage].activeSelf;
else
btnGetReward.interactable = goTabBadges[iSelectedTab].activeSelf;
// 유료 패스.
if (selectedPass.isPaid[iSelectedPage])
{
txtBuy.text = LocalizationText.GetText("all_buycomp");
btnBuy.enabled = false;
goPaidLock.SetActive(false);
}
else
{
txtBuy.text = DataHandler.GetShopPrice(selectedPass.shopIds[iSelectedPage], 1);
btnBuy.enabled = true;
goPaidLock.SetActive(true);
}
}
public static dPass SGetPass()
{
return curMgr.selectedPass;
}
public static dPassLevel SGetLevel(int index)
{
return curMgr.GetLevel(index);
}
// 아이템 인덱스를 받아서 현재 페이지-인덱스에 맞는 패스 레벨 정보를 리턴.
private dPassLevel GetLevel(int index)
{
int iaddindex = iSelectedPage * selectedPass.passUnit;
return selectedPass.levels[index + iaddindex];
}
// 현재 선택된 페이지 인덱스 리턴.
public static int SGetPageIndex(int index)
{
return curMgr.iSelectedPage;
}
public static int SGetLevelIndex(int index)
{
return curMgr.GetLevelIndex(index);
}
// 아이템 인덱스를 받아서 현재 페이지-인덱스에 맞는 레벨 인덱스를 리턴.
private int GetLevelIndex(int index)
{
int iaddindex = iSelectedPage * selectedPass.passUnit;
return index + iaddindex;
}
#endregion Page
#region Refresh & Badge
public static void SUpdateOneSec()
{
if (curMgr != null)
curMgr.UpdateOneSec();
}
// 초당 갱신.
private void UpdateOneSec()
{
// 패스 창이 열려있으며, 제한 시간이 있을 경우.
if (bRefreshNeed)
txtTime.text = FormatString.TextLeftTimeDHMS(selectedPass.refreshAt);
}
public static void SResetPass()
{
if (curMgr != null)
curMgr.ResetPass();
}
// 이벤트/반복 패스 갱신.
private void ResetPass()
{
// 패스 창이 열려있지 않으면 메인 뱃지 표시만 갱신.
if (bInitNeed || !canvasUI.enabled)
{
SetBadge(true);
return;
}
iLoading++;
// 이벤트 패스 존재 여부에 따라서 버튼 표시.
btnTabs[0].gameObject.SetActive(DataHandler.TryGetPass(cGoods.PassTypeEvent, 0, out dPass _));
if (iSelectedTab == 0 && !btnTabs[0].gameObject.activeSelf)
TabMonster();
// 유료 패스.
if (selectedPass.isPaid[iSelectedPage])
{
txtBuy.text = LocalizationText.GetText("all_buycomp");
btnBuy.enabled = false;
goPaidLock.SetActive(false);
}
else
{
txtBuy.text = DataHandler.GetShopPrice(selectedPass.shopIds[iSelectedPage], 1);
btnBuy.enabled = true;
goPaidLock.SetActive(true);
}
SetBadge(false);
escrPass.scroller.RefreshActiveCellViews();
passItemLast.RefreshCellView();
iLoading--;
}
// 패스 목록 새로고침.
private void RefreshPass(int passtype, eCondition condtype)
{
if (canvasUI.enabled && !bInitNeed && passtype == iSelectedType && condtype == selectedCond)
{
SetBadge(false, passtype, condtype);
txtProgress.text = FormatString.TextConditionValue(selectedCond, selectedPass.progress);
escrPass.scroller.RefreshActiveCellViews();
passItemLast.RefreshCellView();
}
else
{
SetBadge(true, passtype, condtype);
}
}
public static void SSetBadge(bool bmainonly, int passtype = -1, eCondition condtype = eCondition.None)
{
if (curMgr != null)
curMgr.SetBadge(bmainonly, passtype, condtype);
}
// 뱃지 표시.
private void SetBadge(bool bmainonly, int passtype = -1, eCondition condtype = eCondition.None)
{
// 메인 뱃지만 표시 갱신.
if (bmainonly)
{
// 이벤트 패스가 열려있으며, 전체 갱신이거나 이벤트 갱신일 경우.
if (DataHandler.TryGetPass(cGoods.PassTypeEvent, eCondition.None, out dPass _))
{
DataHandler.CalcPassProgress(cGoods.PassTypeEvent, eCondition.None);
// 획득 가능 상태.
bool brewavail = DataHandler.IsPassRewardAvail(cGoods.PassTypeEvent, eCondition.None);
if (brewavail)
{
goMainBadge.SetActive(true);
return;
}
}
// 일회성 패스.
eCondition[] condtypes = new eCondition[3] { eCondition.MonsterCnt, eCondition.PlayerLv, eCondition.StageClear };
for (int i = 0; i < condtypes.Length; i++)
{
DataHandler.CalcPassProgress(cGoods.PassTypeOne, condtypes[i]);
// 획득 가능 상태.
bool brewavail = DataHandler.IsPassRewardAvail(cGoods.PassTypeOne, condtypes[i]);
if (brewavail)
{
goMainBadge.SetActive(true);
return;
}
}
goMainBadge.SetActive(false);
return;
}
bool bbadge = false;
if (condtype != eCondition.None)
bbadge = goMainBadge.activeSelf;
// 이벤트 패스가 열려있으며, 전체 갱신이거나 이벤트 갱신일 경우.
if (DataHandler.TryGetPass(cGoods.PassTypeEvent, 0, out dPass _) && (passtype < 0 || passtype == cGoods.PassTypeEvent))
{
DataHandler.CalcPassProgress(cGoods.PassTypeEvent, condtype);
bool brewavail = DataHandler.IsPassRewardAvail(cGoods.PassTypeEvent, condtype);
bbadge |= brewavail;
goTabBadges[0].SetActive(brewavail);
}
// 전체 갱신이거나 일회성 패스 갱신일 경우.
if (passtype < 0 || passtype == cGoods.PassTypeOne)
{
eCondition[] condtypes = new eCondition[3] { eCondition.MonsterCnt, eCondition.PlayerLv, eCondition.StageClear };
for (int i = 0; i < condtypes.Length; i++)
{
if (condtype != eCondition.None && condtype != condtypes[i])
continue;
DataHandler.CalcPassProgress(cGoods.PassTypeOne, condtypes[i]);
// 획득 가능 상태 갱신.
bool brewavail = DataHandler.IsPassRewardAvail(cGoods.PassTypeOne, condtypes[i]);
bbadge |= brewavail;
goTabBadges[i + 1].SetActive(brewavail);
}
}
// 세부 페이지가 있을 경우.
if (selectedPass.passUnit < selectedPass.levels.Length)
{
int imaxpage = selectedPass.haveLvFrees.Length;
for (int k = 0; k < imaxpage; k++)
{
goPageBadges[k].SetActive(DataHandler.IsPassRewardAvail(selectedPass.passType, selectedPass.condType, k));
}
btnGetReward.interactable = goPageBadges[iSelectedPage].activeSelf;
}
else
{
btnGetReward.interactable = goTabBadges[iSelectedTab].activeSelf;
}
goMainBadge.SetActive(bbadge);
}
#endregion Refresh & Badge
#region Method Reward
public static void SGetPassReward()
{
curMgr.GetPassReward();
}
// 보상 받기.
public void GetPassReward()
{
if (iLoading > 0)
return;
if (Application.internetReachability == NetworkReachability.NotReachable)
{
GameUIMgr.SOpenPopup1Button(LocalizationText.GetText(Global.STR_CheckNetwork));
return;
}
iLoading++;
CoverCamera.Hold();
// 페이지 별로 보상 받기 기능.
DataHandler.CalcPassProgress(iSelectedType, selectedCond);
txtProgress.text = FormatString.TextConditionValue(selectedCond, selectedPass.progress);
nIdLvInfo data = new nIdLvInfo();
data.sid = selectedPass.id;
data.cnt = iSelectedPage;
data.lv = selectedPass.availLevel;
int imaxindexexc = (iSelectedPage + 1) * selectedPass.passUnit;
if (data.lv > imaxindexexc)
data.lv = imaxindexexc;
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.PassReward), typeof(nPassRewardReturn), APassRewardSucc, APassRewardFail, data, false);
}
// 보상 받기 통신 실패.
private void APassRewardFail(SvError error, object request)
{
CoverCamera.Release();
iLoading--;
}
// 보상 받기 통신 성공.
private void APassRewardSucc(object result, object request)
{
nPassRewardReturn data = result as nPassRewardReturn;
if (data == null)
{
APassRewardFail(new SvError(eErrorCode.NULL_OR_EMPTY), request);
return;
}
DataHandler.AddGoods(data.result, data.playCurrency, true);
int imaxindexexc = (iSelectedPage + 1) * selectedPass.passUnit;
if (imaxindexexc > selectedPass.availLevel)
imaxindexexc = selectedPass.availLevel;
DataHandler.RecvPassReward(iSelectedType, selectedCond, iSelectedPage, imaxindexexc);
SetBadge(false);
escrPass.scroller.RefreshActiveCellViews();
passItemLast.RefreshCellView();
DataHandler.SaveData();
GameUIMgr.SOpenPopupGoods(data.result);
CoverCamera.Release();
iLoading--;
}
#endregion Method Reward
#region Method Buy
// 유료 패스 구매.
public void BuyPass()
{
if (iLoading > 0)
return;
#if VER_CASH_VISIBLE
if (selectedPass.shopIds[iSelectedPage] < 0)
return;
iLoading++;
CoverCamera.Hold();
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
btnBuy.enabled = false;
//nGoods data = new nGoods(cGoods.TPass, selectedPass.id, iSelectedPage);
//SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.Property), typeof(nGoodsGet), AGetPropertySucc, AGetPropertyFail, data, true);
ShopMgr.STryBuy(selectedPass.shopIds[iSelectedPage]);
#else
GameUIMgr.SOpenPopup1Button(LocalizationText.GetText(Global.STR_Prepare));
#endif
}
public static void SSuccBuyPass(int passid, int pageindex)
{
if (curMgr != null)
curMgr.SuccBuyPass(passid, pageindex);
}
// 유료 패스 구매 완료.
private void SuccBuyPass(int passid, int pageindex)
{
txtBuy.text = LocalizationText.GetText("all_buycomp");
btnBuy.enabled = false;
goPaidLock.SetActive(false);
if(DataHandler.TryGetPassById(passid, out dPass pass))
{
DataHandler.BuyPass(pass.passType, pass.condType, pageindex);
RefreshPass(pass.passType, pass.condType);
}
CoverCamera.Release();
iLoading--;
}
public static void SFailBuyPass()
{
if (curMgr != null)
curMgr.FailBuyPass();
}
// 유료 패스 구매 실패.
private void FailBuyPass()
{
btnBuy.enabled = true;
CoverCamera.Release();
iLoading--;
}
#endregion Method Buy
#region Buy Test
// 테스트 재화 획득 통신 실패.
private void AGetPropertyFail(SvError error, object request)
{
FailBuyPass();
}
// 테스트 재화 획득 통신 성공.
private void AGetPropertySucc(object result, object request)
{
nGoodsGet data = result as nGoodsGet;
if (data == null)
{
AGetPropertyFail(new SvError(eErrorCode.NULL_OR_EMPTY), request);
return;
}
nGoods goods = request as nGoods;
SuccBuyPass(goods.propertyId, (int)goods.propertyCount);
}
#endregion Buy Test
}