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.
2151 lines
75 KiB
2151 lines
75 KiB
using IVDataFormat;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.AddressableAssets;
|
|
using UnityEngine.ResourceManagement.AsyncOperations;
|
|
using UnityEngine.UI;
|
|
using IVServerFormat;
|
|
using DG.Tweening;
|
|
using System;
|
|
|
|
public class EventMgr : MonoBehaviour
|
|
{
|
|
#region Const
|
|
private static EventMgr curMgr = null;
|
|
#endregion Const
|
|
|
|
#region UI
|
|
[SerializeField]
|
|
Canvas canvasUI;
|
|
TextMeshProUGUI txtT;
|
|
[SerializeField]
|
|
RectTransform eventPopUp;
|
|
private GameObject goBtnEventClose;
|
|
TextMeshProUGUI eventTitle;
|
|
Image imgEventPopUpBg;
|
|
Image imgEventPopUp;
|
|
|
|
[SerializeField]
|
|
EventTab[] tabEvent;
|
|
|
|
TextMeshProUGUI txtEventTitle;
|
|
TextMeshProUGUI txtEventExplain;
|
|
GameObject objSingleTimer;
|
|
TextMeshProUGUI txtSingleTimer;
|
|
GameObject objDoubleTimer;
|
|
TextMeshProUGUI txtDoubleTimer;
|
|
TextMeshProUGUI txtDoubleTimerShop;
|
|
|
|
|
|
[Header("RewardEvent")]
|
|
[SerializeField]
|
|
private Canvas rewardCanvas;
|
|
private GoodsItem[] openGoods;
|
|
private TextMeshProUGUI txtOpenMain, txtOpenDesc, txtOpenDue;
|
|
private TextMeshProUGUI[] txtOpenReward;
|
|
private Button btnRewardEventGet;
|
|
#endregion
|
|
|
|
#region EventNewAttend
|
|
//[SerializeField]
|
|
//GameObject tabNewAttend;
|
|
//TextMeshProUGUI txtNewTabTitle;
|
|
//TextMeshProUGUI txtNewTabExplain;
|
|
//GameObject bgTimeNewAttend;
|
|
//TextMeshProUGUI txtNewTabLimitTime;
|
|
[SerializeField]
|
|
TextMeshProUGUI txtNewExplain;
|
|
|
|
//[SerializeField]
|
|
//GameObject bgNew;
|
|
//TextMeshProUGUI txtbgNewTabTitle;
|
|
//TextMeshProUGUI txtbgNewTabExplain;
|
|
//TextMeshProUGUI txtbgNewTabLimitTime;
|
|
#endregion
|
|
|
|
#region EventMarimoAtt
|
|
//[SerializeField]
|
|
//GameObject tabMarimo;
|
|
//TextMeshProUGUI txtMarimoTabTitle;
|
|
//TextMeshProUGUI txtMarimoTabExplain;
|
|
//GameObject bgTimeMarimoAttend;
|
|
//TextMeshProUGUI txtMarimoTabLimitTime;
|
|
[SerializeField]
|
|
TextMeshProUGUI txtMarimoExplain;
|
|
|
|
//[SerializeField]
|
|
//GameObject bgMarimo;
|
|
//TextMeshProUGUI txtMarimobgTabTitle;
|
|
//TextMeshProUGUI txtMarimobgTabExplain;
|
|
//TextMeshProUGUI txtMarimobgTabLimitTime;
|
|
#endregion
|
|
|
|
#region EventHotTime
|
|
[SerializeField]
|
|
GameObject canvasHotTimeUI;
|
|
TextMeshProUGUI txtHotTimeWarning;
|
|
//[SerializeField]
|
|
//GameObject tabHotTime;
|
|
//TextMeshProUGUI txtHotTimeTitle;
|
|
//TextMeshProUGUI txtHotTimeExplain;
|
|
//GameObject bgTimeHotTime;
|
|
//TextMeshProUGUI txtHotTimeLimitTime;
|
|
|
|
//[SerializeField]
|
|
//GameObject bgHotTime;
|
|
//TextMeshProUGUI txtbgHotTimeTitle;
|
|
//TextMeshProUGUI txtbgHotTimeExplain;
|
|
//TextMeshProUGUI txtbgHotTimeLimitTime;
|
|
|
|
[SerializeField]
|
|
GameObject[] hotTimeBox;
|
|
TextMeshProUGUI txtHotTimeTime;
|
|
TextMeshProUGUI[] txtHotTimeGain;
|
|
TextMeshProUGUI[] txtHotTimeGainRate;
|
|
#endregion
|
|
|
|
#region EventGrowQuest
|
|
[SerializeField]
|
|
EScrController escrEventQuest;
|
|
[SerializeField]
|
|
GameObject canvasGrowMissionUI;
|
|
TextMeshProUGUI txtGrowQuestExplain;
|
|
ButtonIV[] growQuestDayPanel;
|
|
GameObject[] dayLock;
|
|
TextMeshProUGUI[] txtDayPanel;
|
|
GameObject[] dayPanelBadge;
|
|
|
|
private TextMeshProUGUI txtCond;
|
|
private TextMeshProUGUI txtBtnGet;
|
|
private TextMeshProUGUI txtClearRate;
|
|
private TextMeshProUGUI txtGoodsCnt;
|
|
private Image imgGoodsIcon;
|
|
private Image imgCover;
|
|
private Slider sldClearRate;
|
|
private Button btnGet;
|
|
private GameObject dayAllBadge;
|
|
private Button btnAllget;
|
|
private RectTransform allGetBadge;
|
|
private GameObject allGetCover;
|
|
private TextMeshProUGUI txtAllGet;
|
|
#endregion
|
|
|
|
#region EventMarimoExchange
|
|
[SerializeField]
|
|
GameObject canvasMarimoExchangeUI;
|
|
TextMeshProUGUI txtExchangeExplain;
|
|
GameObject exchangeTitleAndCount;
|
|
TextMeshProUGUI txtExchangeList;
|
|
GameObject coinCount;
|
|
TextMeshProUGUI txtExchangeCoin;
|
|
|
|
|
|
[SerializeField]
|
|
EScrController escrEventTradeRow;
|
|
#endregion
|
|
|
|
#region Event Roulette
|
|
[SerializeField]
|
|
private GameObject goCanvasRouletteUI;
|
|
private Image imgRouletteBg, imgRouletteJelly, imgRoulettePanel;
|
|
private RectTransform rtrfRoulettePanel;
|
|
private ButtonIV btnRoulette1, btnRoulette10;
|
|
private TextMeshProUGUI txtRouletteCount, txtRouletteHave, txtRoulettePrice1, txtRoulettePrice10;
|
|
private GameObject[] goRouletteDones;
|
|
private Image[] imgRouletteRewards, imgRouletteRewardCs;
|
|
private TextMeshProUGUI[] txtRouletteConds, txtRouletteCounts, txtRouletteCountCs;
|
|
private GameObject[] objBadge;
|
|
private ButtonIV[] btnRouletteGet;
|
|
private Animator spinRouletteBulletEffect;
|
|
private ParticleSystem spinRouletteGlowEffect;
|
|
#endregion Event Roulette
|
|
|
|
#region Event Raise
|
|
[SerializeField]
|
|
private EScrController escrRaise;
|
|
[SerializeField]
|
|
private GameObject goCanvasRaiseUI;
|
|
private Image imgRaiseBack, imgRaiseFront;
|
|
private ParticleSystem raisingEvent;
|
|
private ButtonIV btnRaise1, btnRaise10;
|
|
private TextMeshProUGUI txtRaiseHave, txtRaisePrice1, txtRaisePrice30;
|
|
private DOTweenAnimation marimoGrow;
|
|
#endregion Event Raise
|
|
|
|
#region Variables
|
|
private bool bReLocalize = true;
|
|
private bool bInitNeed = true;
|
|
private int iLoading = 1;
|
|
|
|
private AsyncOperationHandle<Sprite> handleRouletteBg, handleRouletteJelly, handleRoulettePanel;
|
|
|
|
private EnhancedUI.SmallList<int> raiseIdRows = new EnhancedUI.SmallList<int>();
|
|
private List<int> raiseIdList;
|
|
private AsyncOperationHandle<Sprite> handleRaiseBack, handleRaiseFront;
|
|
#endregion Variables
|
|
|
|
[SerializeField]
|
|
GameObject MainEventBadge;
|
|
[SerializeField]
|
|
GameObject[] TabEventBadge;
|
|
|
|
#region Base
|
|
public static void SLocalize(bool bmain)
|
|
{
|
|
if (curMgr != null)
|
|
curMgr.Localize(bmain);
|
|
}
|
|
|
|
private void Localize(bool bmain)
|
|
{
|
|
if (bmain)
|
|
{
|
|
|
|
}
|
|
else
|
|
{
|
|
bReLocalize = false;
|
|
txtT.text = LocalizationText.GetText("event_title");
|
|
eventTitle.text = LocalizationText.GetText("event_title");
|
|
txtNewExplain.text = LocalizationText.GetText("reset_day_explain");
|
|
txtMarimoExplain.text = LocalizationText.GetText("reset_day_explain");
|
|
|
|
//핫타임
|
|
txtHotTimeWarning.text = LocalizationText.GetText("event_hot_time_warning");
|
|
txtHotTimeTime.text = LocalizationText.GetText("event_hot_time_time");
|
|
txtHotTimeGain[0].text = LocalizationText.GetText("event_hot_time_gold");
|
|
txtHotTimeGain[1].text = LocalizationText.GetText("event_hot_time_exp");
|
|
txtHotTimeGain[2].text = LocalizationText.GetText("event_hot_time_chest");
|
|
|
|
txtExchangeList.text = LocalizationText.GetText("event_exchange_list");
|
|
txtExchangeExplain.text = LocalizationText.GetText("event_exchange_warning");
|
|
}
|
|
}
|
|
|
|
// 설정에서 언어 변경 시 처리.
|
|
public static void SReLocalize()
|
|
{
|
|
GrowQuestEventRelocalize();
|
|
//교환
|
|
curMgr.firstTimeOpen = true;
|
|
//룰렛
|
|
curMgr.imgRouletteRewards = null;
|
|
//키우기
|
|
curMgr.raiseIdList = null;
|
|
curMgr.Localize(true);
|
|
curMgr.bReLocalize = true;
|
|
}
|
|
|
|
// 백버튼 처리.
|
|
public static bool SCloseMenu()
|
|
{
|
|
return curMgr.CloseMenu();
|
|
}
|
|
|
|
private bool CloseMenu()
|
|
{
|
|
// 게임 시작 후 열린적 없음.
|
|
if (bInitNeed)
|
|
return false;
|
|
|
|
if (eventPopUp.gameObject.activeSelf)
|
|
{
|
|
CloseEventWindow();
|
|
return true;
|
|
}
|
|
|
|
if (canvasUI.enabled)
|
|
{
|
|
CloseEvent();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private void Awake()
|
|
{
|
|
curMgr = this;
|
|
}
|
|
|
|
void Start()
|
|
{
|
|
BadgeCheck();
|
|
iLoading--;
|
|
Init();
|
|
}
|
|
|
|
private void Init()
|
|
{
|
|
txtT = canvasUI.transform.Find("txtT").GetComponent<TextMeshProUGUI>();
|
|
//eventPopUp = canvasUI.transform.Find("EventPopUp").GetComponent<RectTransform>();
|
|
|
|
imgEventPopUpBg = eventPopUp.Find("bg (1)").GetComponent<Image>();
|
|
goBtnEventClose = eventPopUp.Find("btnClose").gameObject;
|
|
eventTitle = eventPopUp.Find("txtT").GetComponent<TextMeshProUGUI>();
|
|
|
|
txtEventTitle = imgEventPopUpBg.transform.Find("txtTabTitle").GetComponent<TextMeshProUGUI>();
|
|
txtEventExplain = imgEventPopUpBg.transform.Find("txtTabExplain").GetComponent<TextMeshProUGUI>();
|
|
imgEventPopUp = imgEventPopUpBg.transform.Find("EventImage").GetComponent<Image>();
|
|
objSingleTimer = imgEventPopUpBg.transform.Find("bgTime").gameObject;
|
|
txtSingleTimer = objSingleTimer.transform.Find("txtTabLimitTime").GetComponent<TextMeshProUGUI>();
|
|
objDoubleTimer = imgEventPopUpBg.transform.Find("bgDoubleTime").gameObject;
|
|
txtDoubleTimer = objDoubleTimer.transform.Find("txtTabLimitTime").GetComponent<TextMeshProUGUI>();
|
|
txtDoubleTimerShop = objDoubleTimer.transform.Find("txtTabLimitShopTime").GetComponent<TextMeshProUGUI>();
|
|
|
|
|
|
txtHotTimeWarning = canvasHotTimeUI.transform.Find("txtExplain").GetComponent<TextMeshProUGUI>();
|
|
//핫타임 전용
|
|
txtHotTimeTime = hotTimeBox[0].transform.Find("txtExplain").GetComponent<TextMeshProUGUI>();
|
|
|
|
txtHotTimeGain = new TextMeshProUGUI[3];
|
|
txtHotTimeGainRate = new TextMeshProUGUI[3];
|
|
|
|
for (int i = 0; i < 3; i++)
|
|
{
|
|
|
|
txtHotTimeGain[i] = hotTimeBox[i + 1].transform.Find("txtExplain").GetComponent<TextMeshProUGUI>();
|
|
txtHotTimeGainRate[i] = hotTimeBox[i + 1].transform.Find("txtMultiful").GetComponent<TextMeshProUGUI>();
|
|
}
|
|
|
|
txtExchangeExplain = canvasMarimoExchangeUI.transform.Find("txtExplain").GetComponent<TextMeshProUGUI>();
|
|
exchangeTitleAndCount = canvasMarimoExchangeUI.transform.Find("txtListTitleAndGoodCount").gameObject;
|
|
txtExchangeList = exchangeTitleAndCount.transform.Find("txtList").GetComponent<TextMeshProUGUI>();
|
|
coinCount = exchangeTitleAndCount.transform.Find("imgGoodsCount").gameObject;
|
|
txtExchangeCoin = coinCount.transform.Find("txtGoodsIcon").GetComponent<TextMeshProUGUI>();
|
|
|
|
// 오픈 보상 ui
|
|
txtOpenMain = rewardCanvas.transform.Find("txtT").GetComponent<TextMeshProUGUI>();
|
|
txtOpenDesc = rewardCanvas.transform.Find("txtDesc").GetComponent<TextMeshProUGUI>();
|
|
txtOpenDue = rewardCanvas.transform.Find("txtDue").GetComponent<TextMeshProUGUI>();
|
|
txtOpenReward = new TextMeshProUGUI[4];
|
|
openGoods = new GoodsItem[4];
|
|
txtOpenReward = rewardCanvas.transform.Find("RewardText").GetComponentsInChildren<TextMeshProUGUI>();
|
|
openGoods = rewardCanvas.transform.Find("Goods").GetComponentsInChildren<GoodsItem>();
|
|
btnRewardEventGet = rewardCanvas.transform.Find("btnGet").GetComponent<Button>();
|
|
}
|
|
#endregion Base
|
|
|
|
//임시방편 코드. 이벤트 뱃지 전용
|
|
#region Badge
|
|
public static void SBadgeCheck()
|
|
{
|
|
curMgr.BadgeCheck();
|
|
}
|
|
|
|
void BadgeCheck()
|
|
{
|
|
MainEventBadge.SetActive(false);
|
|
AttendMgr.TrySvAttendBadgeCheck(AttendMgr.AttendType.AttendTen);
|
|
BadgeGrowMainTabCheck();
|
|
BadgeExchange();
|
|
BadgeRoulette();
|
|
BadgeRaise();
|
|
}
|
|
|
|
public static void BadgeEventAttendCheck(bool isAttendOk, AttendMgr.AttendType atType)
|
|
{
|
|
if (isAttendOk && !curMgr.MainEventBadge.activeSelf)
|
|
{
|
|
curMgr.MainEventBadge.SetActive(true);
|
|
}
|
|
if (isAttendOk && atType == AttendMgr.AttendType.AttendTen)
|
|
{
|
|
curMgr.TabEventBadge[0].SetActive(true);
|
|
}
|
|
}
|
|
|
|
public static void BadgeGrowMainTabCheck()
|
|
{
|
|
curMgr.TabEventBadge[1].SetActive(false);
|
|
for (int i = 0; i < Mathf.Min(DataHandler.GetPlayEventQuestAttendPlay().day, 7); i++)
|
|
{
|
|
if(curMgr.BadgeGrowCheck(i + 1))
|
|
{
|
|
curMgr.MainEventBadge.SetActive(true);
|
|
curMgr.TabEventBadge[1].SetActive(true);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void BadgeExchange()
|
|
{
|
|
curMgr.TabEventBadge[2].SetActive(false);
|
|
|
|
if (DataHandler.GetPlayEventTrade().item >= 10)
|
|
{
|
|
curMgr.MainEventBadge.SetActive(true);
|
|
curMgr.TabEventBadge[2].SetActive(true);
|
|
}
|
|
}
|
|
|
|
public static void BadgeRoulette()
|
|
{
|
|
curMgr.TabEventBadge[4].SetActive(false);
|
|
|
|
if (DataHandler.GetPlayEventRoulette().item >= DataHandler.GetSysEventRoulette().price)
|
|
{
|
|
curMgr.MainEventBadge.SetActive(true);
|
|
curMgr.TabEventBadge[4].SetActive(true);
|
|
}
|
|
}
|
|
|
|
public static void BadgeRaise()
|
|
{
|
|
curMgr.TabEventBadge[5].SetActive(false);
|
|
|
|
if (DataHandler.GetPlayEventRaise().item >= DataHandler.GetSysEventRaise().price)
|
|
{
|
|
curMgr.MainEventBadge.SetActive(true);
|
|
curMgr.TabEventBadge[5].SetActive(true);
|
|
}
|
|
}
|
|
|
|
public static void AttendTenBadgeOff()
|
|
{
|
|
curMgr.TabEventBadge[0].SetActive(false);
|
|
}
|
|
#endregion
|
|
|
|
//메인메뉴에서 오른쪽 이벤트창 열기
|
|
#region EventTab OnOff
|
|
public void OpenEvent()//오른쪽 이벤트 창 열기
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
int ilen = DataHandler.GetEvents().Count;
|
|
if (bInitNeed)
|
|
{
|
|
bInitNeed = false;
|
|
Init();
|
|
|
|
int index = 0;
|
|
Dictionary<int, dEvent> eventdatas = DataHandler.GetEvents();
|
|
foreach (var evn in eventdatas.Values)
|
|
{
|
|
tabEvent[index].gameObject.SetActive(true);
|
|
tabEvent[index].CurrentEvent = evn;
|
|
tabEvent[index].FirstOpen();
|
|
index++;
|
|
}
|
|
|
|
for (int i = index; i < tabEvent.Length; i++)
|
|
{
|
|
tabEvent[i].gameObject.SetActive(false);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (int i = 0; i < tabEvent.Length; i++)
|
|
{
|
|
if (i < ilen)
|
|
{
|
|
tabEvent[i].SecondOpen();
|
|
}
|
|
else
|
|
{
|
|
tabEvent[i].gameObject.SetActive(false);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (bReLocalize)
|
|
Localize(false);
|
|
canvasUI.enabled = true;
|
|
|
|
iLoading--;
|
|
}
|
|
|
|
public void CloseEvent()//왼쪽 이벤트 창 닫기
|
|
{
|
|
int ilen = DataHandler.GetEvents().Count;
|
|
for (int i = 0; i < tabEvent.Length; i++)
|
|
{
|
|
if (i < ilen)
|
|
{
|
|
tabEvent[i].Close();
|
|
}
|
|
}
|
|
|
|
BadgeCheck();
|
|
canvasUI.enabled = false;
|
|
}
|
|
|
|
void AllClosePopUp()//팝업 이벤트 닫기
|
|
{
|
|
AttendMgr.CloseAttendSeven();
|
|
AttendMgr.CloseAttendTen();
|
|
canvasHotTimeUI.SetActive(false);
|
|
canvasMarimoExchangeUI.SetActive(false);
|
|
canvasGrowMissionUI.SetActive(false);
|
|
|
|
if (goCanvasRouletteUI.activeSelf)
|
|
CloseRoulette();
|
|
|
|
if (goCanvasRaiseUI.activeSelf)
|
|
CloseRaise();
|
|
}
|
|
|
|
void MiddleEventTap()//일반사이즈와 큰 사이즈(룰렛)
|
|
{
|
|
eventPopUp.sizeDelta = new Vector2(844, 628);
|
|
}
|
|
|
|
void LargeEventTap()
|
|
{
|
|
eventPopUp.sizeDelta = new Vector2(844, 628);
|
|
}
|
|
#endregion
|
|
|
|
//이벤트 창에서 세부이벤트 열기
|
|
#region Open Event Window
|
|
public static void SOpenEvent(int key, Sprite sprimg, Color clrbg, string strtitle, string strexplain, string strlefttime, string strmargintime, bool bsingle)
|
|
{
|
|
curMgr.OpenEvent(key, sprimg, clrbg, strtitle, strexplain, strlefttime, strmargintime, bsingle);
|
|
}
|
|
|
|
// 컨텐츠 세부 페이지로 이동.
|
|
private void OpenEvent(int key, Sprite sprimg, Color clrbg, string strtitle, string strexplain, string strlefttime, string strmargintime, bool bsingle)
|
|
{
|
|
dEvent eventdata = DataHandler.GetEvent(key);
|
|
switch (eventdata.moveType)
|
|
{
|
|
case eEventMoveType.Pass:
|
|
if (PassMgr.SOpenPassEvent())
|
|
CloseEvent();
|
|
return;
|
|
|
|
case eEventMoveType.Shop:
|
|
if (ShopMgr.SOpenShopEvent())
|
|
CloseEvent();
|
|
return;
|
|
}
|
|
|
|
txtEventTitle.text = strtitle;
|
|
txtEventExplain.text = strexplain;
|
|
imgEventPopUp.sprite = sprimg;
|
|
imgEventPopUpBg.color = clrbg;
|
|
if (bsingle)
|
|
{
|
|
objSingleTimer.SetActive(true);
|
|
objDoubleTimer.SetActive(false);
|
|
curMgr.txtSingleTimer.text = strlefttime;
|
|
}
|
|
else
|
|
{
|
|
objSingleTimer.SetActive(false);
|
|
objDoubleTimer.SetActive(true);
|
|
curMgr.txtDoubleTimer.text = strlefttime;
|
|
curMgr.txtDoubleTimerShop.text = strmargintime;
|
|
}
|
|
|
|
switch (eventdata.moveType)
|
|
{
|
|
case eEventMoveType.Attend7:
|
|
AttendMgr.OpenAttendSeven();
|
|
break;
|
|
|
|
case eEventMoveType.Attend10:
|
|
AttendMgr.OpenAttendTen();
|
|
break;
|
|
|
|
case eEventMoveType.Mission:
|
|
OpenGrowQuest();
|
|
break;
|
|
|
|
case eEventMoveType.Exchange:
|
|
OpenMarimoExchange();
|
|
break;
|
|
|
|
case eEventMoveType.Hottime:
|
|
OpenHotTime();
|
|
break;
|
|
|
|
case eEventMoveType.Roulette:
|
|
OpenRoulette();
|
|
break;
|
|
|
|
case eEventMoveType.Raise:
|
|
OpenRaise();
|
|
break;
|
|
}
|
|
}
|
|
|
|
public static void OpenEventWindow()//이벤트 팝업 열기.이벤트 출석과 이벤트에서 사용
|
|
{
|
|
curMgr.eventPopUp.gameObject.SetActive(true);
|
|
}
|
|
|
|
public void CloseEventWindow()//이벤트 팝업 닫기. 닫을 때 알람도 확인한다.
|
|
{
|
|
AllClosePopUp();
|
|
MiddleEventTap();
|
|
BadgeGrowMainTabCheck();
|
|
BadgeExchange();
|
|
BadgeRoulette();
|
|
BadgeRaise();
|
|
eventPopUp.gameObject.SetActive(false);
|
|
}
|
|
|
|
// 10일 출석(신규 출석).
|
|
public void OpenTenAttend()
|
|
{
|
|
AttendMgr.OpenAttendTen();
|
|
}
|
|
|
|
// 7일 출석(마리모 출석).
|
|
public void OpenSevenAttend()
|
|
{
|
|
AttendMgr.OpenAttendSeven();
|
|
}
|
|
#endregion Open Event Window
|
|
|
|
//핫타임
|
|
#region HotTime
|
|
DateTime startDay;
|
|
DateTime endDay;
|
|
|
|
// 핫타임.
|
|
private void OpenHotTime()
|
|
{
|
|
OpenEventWindow();
|
|
canvasHotTimeUI.SetActive(true);
|
|
MiddleEventTap();
|
|
|
|
txtHotTimeGainRate[0].text = FormatString.StringFormat("x {0}", ((float)(DataHandler.GetEvents()[(int)eEventMoveType.Hottime].scale1 + dConst.RateMax) / dConst.RateMax).ToString());
|
|
txtHotTimeGainRate[1].text = FormatString.StringFormat("x {0}", ((float)(DataHandler.GetEvents()[(int)eEventMoveType.Hottime].scale2 + dConst.RateMax) / dConst.RateMax).ToString());
|
|
txtHotTimeGainRate[2].text = FormatString.StringFormat("x {0}", ((float)(DataHandler.GetEvents()[(int)eEventMoveType.Hottime].scale3 + dConst.RateMax) / dConst.RateMax).ToString());
|
|
}
|
|
|
|
//게임을 시작할떄, 날짜가 갱신될때 한번 갱신해줘야 함
|
|
public static void HotTimeTimerSet()
|
|
{
|
|
dEvent eventdata = DataHandler.GetEventByKind(eEventMoveType.Hottime);
|
|
TimeSpan startTime = eventdata.startTime;// new System.TimeSpan(10, 6, 0);
|
|
TimeSpan endTime = eventdata.endTime;// new System.TimeSpan(10, 16, 0);
|
|
|
|
curMgr.startDay = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day,
|
|
startTime.Hours, startTime.Minutes, startTime.Seconds);
|
|
curMgr.endDay = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day,
|
|
endTime.Hours, endTime.Minutes, endTime.Seconds);
|
|
|
|
CheckHotTimeOnOff();
|
|
}
|
|
|
|
//핫타임을 끄고 켜는 부분. 1분마다 확인한다.
|
|
public static void CheckHotTimeOnOff()
|
|
{
|
|
if (DateTime.Compare(curMgr.startDay, DateTime.Now) < 0 && DateTime.Compare(DateTime.Now, curMgr.endDay) < 0)
|
|
{
|
|
GameUIMgr.HotTimeUIOnOff(true);
|
|
HotTimer();
|
|
BuffMgr.Instance.OnHotTime();
|
|
}
|
|
else
|
|
{
|
|
GameUIMgr.HotTimeUIOnOff(false);
|
|
BuffMgr.Instance.OffHotTime();
|
|
}
|
|
}
|
|
|
|
//메인화면의 타이머 세팅
|
|
public static void HotTimer()
|
|
{
|
|
GameUIMgr.HotTimerSetting(FormatString.TextLeftTimeDH_NoLeft(curMgr.endDay));
|
|
}
|
|
|
|
//화면 왼쪽에 있는 핫타임 아이콘을 누를때 나타나는 것.
|
|
public static void HotTimeLeftDownOpen()
|
|
{
|
|
if (curMgr.bInitNeed)
|
|
curMgr.Init();
|
|
if (curMgr.bReLocalize)
|
|
curMgr.Localize(false);
|
|
dEvent eventdata = DataHandler.GetEventByKind(eEventMoveType.Hottime);
|
|
curMgr.txtEventTitle.text = LocalizationText.GetText("event5");
|
|
curMgr.txtEventExplain.text = LocalizationText.GetText("eventdesc5");
|
|
curMgr.txtSingleTimer.text = FormatString.CombineAllString(LocalizationText.GetText("event_time"), " : ", FormatString.TextLeftTimeDH(eventdata.endAt));
|
|
curMgr.objSingleTimer.SetActive(true);
|
|
curMgr.objDoubleTimer.SetActive(false);
|
|
curMgr.OpenHotTime();
|
|
curMgr.BtnEvent(eventdata.id);
|
|
}
|
|
|
|
//핫타임 아이콘을 눌렀을때 이벤트 로딩이 안 되었을때 로딩시킴
|
|
public void BtnEvent(int key)
|
|
{
|
|
dEvent eventdata = DataHandler.GetEvent(key);
|
|
if (eventdata == null)
|
|
return;
|
|
|
|
imgEventPopUpBg.color = new Color(eventdata.bgColor[0] / 255f, eventdata.bgColor[1] / 255f, eventdata.bgColor[2] / 255f);
|
|
SvConnectManager.Instance.RequestEventImage(eventdata.path, (img) => imgEventPopUp.sprite = img);
|
|
}
|
|
#endregion
|
|
|
|
//성장미션
|
|
#region GrowQuest
|
|
// 성장 미션.
|
|
private void OpenGrowQuest()
|
|
{
|
|
OpenEventWindow();
|
|
canvasGrowMissionUI.SetActive(true);
|
|
MiddleEventTap();
|
|
|
|
if (growQuestOpen == false)
|
|
{
|
|
growQuestOpen = true;
|
|
|
|
Transform dayList = canvasGrowMissionUI.transform.Find("dayList");
|
|
Transform Content = dayList.Find("Content");
|
|
|
|
growQuestDayPanel = new ButtonIV[7];
|
|
txtDayPanel = new TextMeshProUGUI[7];
|
|
dayPanelBadge = new GameObject[7];
|
|
dayLock = new GameObject[7];
|
|
|
|
for (int i = 0; i < 7; i++)
|
|
{
|
|
growQuestDayPanel[i] = Content.GetChild(i).GetComponent<ButtonIV>();
|
|
txtDayPanel[i] = growQuestDayPanel[i].transform.Find("txtTabExplain").GetComponent<TextMeshProUGUI>();
|
|
dayLock[i] = growQuestDayPanel[i].transform.Find("Lock").gameObject;
|
|
txtDayPanel[i].text = FormatString.StringFormat(LocalizationText.GetText("event_quest_day"), i + 1);
|
|
dayPanelBadge[i] = growQuestDayPanel[i].transform.Find("badge").gameObject;
|
|
}
|
|
|
|
txtGrowQuestExplain = canvasGrowMissionUI.transform.Find("txtExplain").GetComponent<TextMeshProUGUI>();
|
|
txtGrowQuestExplain.text = LocalizationText.GetText("event_quest_warning");
|
|
|
|
btnAllget = canvasGrowMissionUI.transform.Find("btnAllGet").GetComponent<Button>();
|
|
allGetBadge = btnAllget.transform.Find("badge").GetComponent<RectTransform>();
|
|
txtAllGet = btnAllget.transform.Find("txt").GetComponent<TextMeshProUGUI>();
|
|
txtAllGet.text = LocalizationText.GetText("all_getall");
|
|
allGetCover = btnAllget.transform.Find("cover").gameObject;
|
|
|
|
Transform panelDayMission = canvasGrowMissionUI.transform.Find("PanelDayMission");
|
|
|
|
txtCond = panelDayMission.Find("txtCond").GetComponent<TextMeshProUGUI>();
|
|
btnGet = panelDayMission.Find("btnGet").GetComponent<Button>();
|
|
txtBtnGet = btnGet.transform.Find("txt").GetComponent<TextMeshProUGUI>();
|
|
imgCover = btnGet.transform.Find("cover").GetComponent<Image>();
|
|
imgGoodsIcon = panelDayMission.Find("ImgIconBack").GetChild(0).GetComponent<Image>();
|
|
txtGoodsCnt = panelDayMission.Find("ImgIconBack").GetChild(1).GetComponent<TextMeshProUGUI>();
|
|
sldClearRate = panelDayMission.Find("sldClearRate").GetComponent<Slider>();
|
|
txtClearRate = sldClearRate.transform.Find("txtValue").GetComponent<TextMeshProUGUI>();
|
|
dayAllBadge = btnGet.transform.Find("badge").gameObject;
|
|
|
|
SetDayQuestAll(1);
|
|
EScrEventQuestSet();
|
|
}
|
|
else
|
|
{
|
|
for (int i = 0; i < Mathf.Min(DataHandler.GetPlayEventQuestAttendPlay().day, 7); i++)
|
|
{
|
|
PanelDayBadge(i + 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
//성장미션 언어재변경
|
|
public static void GrowQuestEventRelocalize()
|
|
{
|
|
curMgr.growQuestOpen = false;
|
|
}
|
|
|
|
bool growQuestOpen = false;
|
|
int SelectDay = 1;
|
|
|
|
//날짜 패널 점검
|
|
public void BtnDayPanel(int inum)
|
|
{
|
|
if (!dayLock[inum - 1].activeSelf)
|
|
{
|
|
SelectDay = inum;
|
|
SetDayQuestAll(inum);
|
|
EScrEventQuestSet();
|
|
}
|
|
}
|
|
|
|
//각 패널당 보여주는 퀘스트 재사용 스크롤뷰 목록
|
|
public void EScrEventQuestSet()
|
|
{
|
|
for (int i = 0; i < growQuestDayPanel.Length; i++)
|
|
{
|
|
growQuestDayPanel[i].interactable = true;
|
|
}
|
|
growQuestDayPanel[SelectDay - 1].interactable = false;
|
|
|
|
var datas = DataHandler.GetSysEventQuest();
|
|
var titles = new EnhancedUI.SmallList<int>();
|
|
int cnt = 0;
|
|
|
|
for (int i = 0; i < datas.Count; i++)
|
|
{
|
|
if (SelectDay == datas[i + 1].day)
|
|
{
|
|
if (cnt == 0)
|
|
{
|
|
cnt++;
|
|
continue;
|
|
}
|
|
titles.Add(i + 1);
|
|
}
|
|
}
|
|
escrEventQuest.SetType(2);
|
|
escrEventQuest.LoadDatas(titles);
|
|
|
|
for (int i = 0; i < growQuestDayPanel.Length; i++)
|
|
{
|
|
dayLock[i].SetActive(true);
|
|
dayPanelBadge[i].gameObject.SetActive(false);
|
|
}
|
|
|
|
for (int i = 0; i < Mathf.Min(DataHandler.GetPlayEventQuestAttendPlay().day, 7); i++)
|
|
{
|
|
dayLock[i].SetActive(false);
|
|
PanelDayBadge(i + 1);
|
|
}
|
|
}
|
|
|
|
//모두 완료 퀘스트와 모두받기
|
|
public void SetDayQuestAll(int day)
|
|
{
|
|
dQuest allQuest = DataHandler.GetSysEventGetCompleteAllQuest(day);
|
|
// 일일퀘스트 최상단 퀘스트
|
|
imgGoodsIcon.sprite = AddressableMgr.GetGoodsIcon(allQuest.rewards[0].rewardId);
|
|
txtBtnGet.text = DataHandler.GetPlayEventQuestPlay(allQuest.id).cond < 2 ? LocalizationText.GetText("all_get") : LocalizationText.GetText("all_comp");
|
|
btnGet.image.color = DataHandler.GetPlayEventQuestPlay(allQuest.id).cond < 2 ? new Color(255f / 255f, 255f / 255f, 255f / 255f) : new Color(63f / 255f, 161f / 255f, 161f / 252f, 0f / 255f);
|
|
txtGoodsCnt.text = allQuest.rewards[0].rewardCount.ToString();
|
|
nAchivement achive = new nAchivement(allQuest, eContentType.EventQuest);
|
|
int inum;
|
|
txtClearRate.text = FormatString.TextCntPer((inum = DataHandler.GetAchievementValueWithDay(achive, day) >= achive.condValue ? achive.condValue : DataHandler.GetAchievementValueWithDay(achive, day)).ToString(), achive.condValue.ToString());
|
|
sldClearRate.value = (float)DataHandler.GetAchievementValueWithDay(achive, day) / achive.condValue;
|
|
btnGet.interactable = DataHandler.isClearAchievements(achive, day) > 0 && DataHandler.GetPlayEventQuestPlay(allQuest.id).cond < 2 ? true : false;
|
|
dayAllBadge.gameObject.SetActive(btnGet.interactable);
|
|
imgCover.gameObject.SetActive(DataHandler.isClearAchievements(achive, day) > 0 ? false : true);
|
|
txtBtnGet.color = imgCover.gameObject.activeSelf ? new Color(150f / 255f, 150f / 255f, 150f / 255f) : Global.CLR_White;
|
|
bReLocalize = false;
|
|
|
|
txtCond.text = FormatString.TextCondition(allQuest.condType, day);
|
|
|
|
// 하단 모두 받기 버튼
|
|
for (int i = 0; i < DataHandler.GetSysEventQuest().Count; i++)
|
|
{
|
|
if (day == DataHandler.GetSysEventQuest()[i + 1].day)
|
|
{
|
|
nAchivement _achive = new nAchivement(DataHandler.GetSysEventQuest(i + 1), eContentType.EventQuest);
|
|
|
|
if (DataHandler.isClearAchievements(_achive) >= 1 && DataHandler.GetPlayEventQuestPlay(i + 1).cond != 2) // == true
|
|
{
|
|
btnAllget.interactable = true;
|
|
allGetCover.SetActive(false);
|
|
if (allGetBadge != null)
|
|
allGetBadge.gameObject.SetActive(true);
|
|
return;
|
|
}
|
|
}
|
|
|
|
nAchivement achiveAll = new nAchivement(allQuest, eContentType.EventQuest);
|
|
|
|
if (DataHandler.isClearAchievements(achiveAll, day) > 0 && DataHandler.GetPlayEventQuestPlay(allQuest.id).cond < 2)
|
|
{
|
|
btnAllget.interactable = true;
|
|
allGetCover.SetActive(false);
|
|
if (allGetBadge != null)
|
|
allGetBadge.gameObject.SetActive(true);
|
|
return;
|
|
}
|
|
}
|
|
|
|
btnAllget.interactable = false;
|
|
allGetCover.SetActive(true);
|
|
if (allGetBadge != null)
|
|
allGetBadge.gameObject.SetActive(false);
|
|
}
|
|
|
|
//성장미션 달성여부에 따른 알람
|
|
public bool BadgeGrowCheck(int day)
|
|
{
|
|
for (int i = 0; i < DataHandler.GetSysEventQuest().Count; i++)
|
|
{
|
|
if (DataHandler.GetSysEventQuest(i + 1).day == day)
|
|
{
|
|
nAchivement achive = new nAchivement(DataHandler.GetSysEventQuest(i + 1), eContentType.EventQuest);
|
|
if (DataHandler.isClearAchievements(achive) >= 1 && DataHandler.GetPlayEventQuestPlay(i + 1).cond < 2)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
dQuest allQuest = DataHandler.GetSysEventGetCompleteAllQuest(day);
|
|
nAchivement _achive = new nAchivement(allQuest, eContentType.EventQuest);
|
|
|
|
if (DataHandler.isClearAchievements(_achive, day) > 0 && DataHandler.GetPlayEventQuestPlay(allQuest.id).cond < 2)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
//성장미션 달성여부에 따른 날짜 패널 알람
|
|
public bool PanelDayBadge(int day)
|
|
{
|
|
for (int i = 0; i < DataHandler.GetSysEventQuest().Count; i++)
|
|
{
|
|
if (DataHandler.GetSysEventQuest(i + 1).day == day)
|
|
{
|
|
nAchivement achive = new nAchivement(DataHandler.GetSysEventQuest(i + 1), eContentType.EventQuest);
|
|
if (DataHandler.isClearAchievements(achive) >= 1 && DataHandler.GetPlayEventQuestPlay(i + 1).cond < 2)
|
|
{
|
|
if (dayPanelBadge[day - 1] != null)
|
|
dayPanelBadge[day - 1].gameObject.SetActive(true);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
dQuest allQuest = DataHandler.GetSysEventGetCompleteAllQuest(day);
|
|
nAchivement _achive = new nAchivement(allQuest, eContentType.EventQuest);
|
|
|
|
if (DataHandler.isClearAchievements(_achive, day) > 0 && DataHandler.GetPlayEventQuestPlay(allQuest.id).cond < 2)
|
|
{
|
|
if (dayPanelBadge[day - 1] != null)
|
|
dayPanelBadge[day - 1].gameObject.SetActive(true);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
if (dayPanelBadge[day - 1] != null)
|
|
dayPanelBadge[day - 1].gameObject.SetActive(false);
|
|
return false;
|
|
}
|
|
|
|
//전부받기
|
|
public void BtnDayAllComplete()
|
|
{
|
|
dQuest allQuest = DataHandler.GetSysEventGetCompleteAllQuest(SelectDay);
|
|
ClearGrowMissionQuest(allQuest.id);
|
|
}
|
|
|
|
//아래쪽은 서버통신
|
|
nIdLv rewardEvent = null;
|
|
|
|
public static void SSClearGrowMissionQuest(int id)
|
|
{
|
|
if (DataHandler.IsNeedDataSave)
|
|
SingleMgr.SaveDataGQuest(id);
|
|
// 서버에 저장할 필요가 없는 경우는 바로 사용 통신 진행.
|
|
else
|
|
SClearGrowMissionQuest(id);
|
|
}
|
|
|
|
public static void SClearGrowMissionQuest(int id)
|
|
{
|
|
curMgr.ClearGrowMissionQuest(id);
|
|
}
|
|
|
|
public void ClearGrowMissionQuest(int id)
|
|
{
|
|
CoverCamera.Hold();
|
|
rewardEvent = new nIdLv(id);
|
|
SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.QuestEventGrow), typeof(QuestEventReturn), AClearGrowMissionQuestSucc, AClearGrowMissionQuestFail, rewardEvent, true);
|
|
}
|
|
|
|
//성장미션 서버통신이 성공하면 보상을 산정하고 보이는걸 갱신한다.
|
|
private void AClearGrowMissionQuestSucc(object result, object request)
|
|
{
|
|
QuestEventReturn data = result as QuestEventReturn;
|
|
if (data == null)
|
|
{
|
|
AClearGrowMissionQuestFail(new SvError(eErrorCode.NULL_OR_EMPTY), request);
|
|
return;
|
|
}
|
|
DataHandler.SetPlayEventQuestPlay(data.playQuestEvent);
|
|
|
|
nReward[] rewards = DataHandler.GetSysEventQuest()[data.playQuestEvent.sid].rewards;
|
|
|
|
for (int i = 0; i < rewards.Length; i++)
|
|
{
|
|
if (rewards[i].rewardType == cGoods.TCurrency)
|
|
{
|
|
if (rewards[i].rewardId == cGoods.CGold)
|
|
{
|
|
DataHandler.AddGold(rewards[i].rewardCount);
|
|
}
|
|
}
|
|
}
|
|
|
|
nGoods[] goods = new nGoods[1] { new nGoods { propertyType = rewards[0].rewardType, propertyId = rewards[0].rewardId, propertyCount = rewards[0].rewardCount } };
|
|
DataHandler.AddGoods(goods, data.playCurrency, false);
|
|
GameUIMgr.SOpenPopupGoods(goods);
|
|
|
|
escrEventQuest.scroller.RefreshActiveCellViews();
|
|
BtnDayPanel(SelectDay);
|
|
|
|
CoverCamera.Release();
|
|
}
|
|
|
|
private void AClearGrowMissionQuestFail(SvError error, object request)
|
|
{
|
|
CoverCamera.Release();
|
|
}
|
|
|
|
//한번에 받기
|
|
nIdCnts SvGrowMissionRequests = null;
|
|
public void ClearGrowMissionQuestAll()
|
|
{
|
|
int cnt = 0;
|
|
|
|
for (int i = 0; i < DataHandler.GetSysEventQuest().Count; i++)
|
|
{
|
|
if (DataHandler.GetSysEventQuest(i + 1).day == SelectDay)
|
|
{
|
|
nAchivement achive = new nAchivement(DataHandler.GetSysEventQuest(i + 1), eContentType.EventQuest);
|
|
if (DataHandler.isClearAchievements(achive, SelectDay) >= 1 && DataHandler.GetPlayEventQuestPlay(i + 1).cond < 2)
|
|
{
|
|
cnt++;
|
|
}
|
|
}
|
|
}
|
|
|
|
CoverCamera.Hold();
|
|
int[] arrIds = new int[cnt];
|
|
int idx = 0;
|
|
|
|
for (int i = 0; i < DataHandler.GetSysEventQuest().Count; i++)
|
|
{
|
|
if (DataHandler.GetSysEventQuest(i + 1).day == SelectDay)
|
|
{
|
|
nAchivement achive = new nAchivement(DataHandler.GetSysEventQuest(i + 1), eContentType.EventQuest);
|
|
if (DataHandler.isClearAchievements(achive, SelectDay) >= 1 && DataHandler.GetPlayEventQuestPlay(i + 1).cond < 2)
|
|
{
|
|
arrIds[idx] = DataHandler.GetSysEventQuest(i + 1).id;
|
|
idx++;
|
|
}
|
|
}
|
|
}
|
|
|
|
SvGrowMissionRequests = new nIdCnts(arrIds);
|
|
if (idx != 0)
|
|
SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.QuestEventGrowAll), typeof(QuestEventAllReturn), AClearGrowMissionQuestAllSucc, AClearGrowMissionQuestAllFail, SvGrowMissionRequests, true);
|
|
|
|
}
|
|
|
|
private void AClearGrowMissionQuestAllSucc(object result, object request)
|
|
{
|
|
QuestEventAllReturn data = result as QuestEventAllReturn;
|
|
if (data == null)
|
|
{
|
|
AClearGrowMissionQuestAllFail(new SvError(eErrorCode.NULL_OR_EMPTY), request);
|
|
}
|
|
|
|
nReward[] rewards = new nReward[SvGrowMissionRequests.sid.Length];
|
|
|
|
nGoods[] goods = new nGoods[rewards.Length];
|
|
|
|
for (int i = 0; i < rewards.Length; i++)
|
|
{
|
|
rewards[i] = DataHandler.GetSysEventQuest(SvGrowMissionRequests.sid[i]).rewards[0];
|
|
|
|
if (rewards[i].rewardType == cGoods.TCurrency)
|
|
{
|
|
if (rewards[i].rewardId == cGoods.CGold)
|
|
{
|
|
DataHandler.AddGold(rewards[i].rewardCount);
|
|
}
|
|
}
|
|
|
|
goods[i] = new nGoods { propertyType = rewards[i].rewardType, propertyId = rewards[i].rewardId, propertyCount = rewards[i].rewardCount };
|
|
}
|
|
|
|
DataHandler.AddGoods(goods, data.playCurrency, false);
|
|
DataHandler.LoadPlayEventQuestPlay(data.playQuestEvents);
|
|
|
|
GameUIMgr.SOpenPopupGoods(goods);
|
|
|
|
escrEventQuest.scroller.RefreshActiveCellViews();
|
|
BtnDayPanel(SelectDay);
|
|
|
|
CoverCamera.Release();
|
|
}
|
|
|
|
private void AClearGrowMissionQuestAllFail(SvError error, object request)
|
|
{
|
|
CoverCamera.Release();
|
|
}
|
|
#endregion
|
|
|
|
//교환 상점
|
|
#region ExchangeShop
|
|
bool firstTimeOpen = true;
|
|
|
|
// 마리모 교환.
|
|
private void OpenMarimoExchange()
|
|
{
|
|
canvasMarimoExchangeUI.SetActive(true);
|
|
OpenEventWindow();
|
|
OpenExchangeTab();
|
|
LargeEventTap();
|
|
}
|
|
|
|
//이벤트 교환 열기(재사용 스크롤뷰까지)
|
|
public void OpenExchangeTab()
|
|
{
|
|
if (firstTimeOpen)
|
|
{
|
|
int i = 0;
|
|
|
|
firstTimeOpen = false;
|
|
|
|
EnhancedUI.SmallList<int> tradeItem = new EnhancedUI.SmallList<int>();
|
|
|
|
for (i = 0; i < DataHandler.GetSysEventTrade().rewards.Length / 4; i++)
|
|
{
|
|
tradeItem.Add(i);
|
|
}
|
|
if (DataHandler.GetSysEventTrade().rewards.Length % 4 != 0)
|
|
{
|
|
tradeItem.Add(i);
|
|
}
|
|
|
|
escrEventTradeRow.LoadDatas(tradeItem);
|
|
}
|
|
else
|
|
{
|
|
escrEventTradeRow.scroller.RefreshActiveCellViews();
|
|
}
|
|
|
|
txtExchangeCoin.text = DataHandler.GetPlayEventTrade().item.ToString();
|
|
}
|
|
//교환 재화 갱신
|
|
public static void RefreshEventGoods()
|
|
{
|
|
if (curMgr.eventPopUp.gameObject.activeSelf)
|
|
{
|
|
curMgr.txtExchangeCoin.text = DataHandler.GetPlayEventTrade().item.ToString();
|
|
}
|
|
curMgr.escrEventTradeRow.scroller.RefreshActiveCellViews();
|
|
}
|
|
|
|
nIdBuyCnt eventTradeReward = null;
|
|
|
|
int iSelectedCount = 1;
|
|
nRewardLimit Goods;
|
|
|
|
//교환 보상 세팅
|
|
public static void TradeRewardSetting(int itemId, nRewardLimit goods)
|
|
{
|
|
curMgr.eventTradeReward = new nIdBuyCnt();
|
|
|
|
curMgr.eventTradeReward.sid = itemId + 1;
|
|
curMgr.eventTradeReward.buyCnt = 1;
|
|
|
|
curMgr.Goods = goods;
|
|
|
|
nGoods Goods = new nGoods(goods.rewardType, goods.rewardId, goods.rewardCount);
|
|
|
|
curMgr.iSelectedCount = 1;
|
|
|
|
GameUIMgr.SOpenPopupItemBuyCount(Goods, cGoods.TEventTrade, 1, goods.price,
|
|
curMgr.ABuyItemSub, curMgr.ABuyItemAdd, curMgr.ABuyItemMin, curMgr.ABuyItemMax, curMgr.ATryBuyItem, curMgr.ACancelBuyItem, LocalizationText.GetText("shopbuyt"), LocalizationText.GetText(Global.STR_CANCEL));
|
|
GameUIMgr.SSetPopupItemBuyCount(curMgr.iSelectedCount, (int)goods.rewardCount, goods.price);
|
|
}
|
|
|
|
//갯수버튼들
|
|
private void ABuyItemSub()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
if (iSelectedCount <= 1)
|
|
{
|
|
iLoading--;
|
|
return;
|
|
}
|
|
iSelectedCount--;
|
|
int iunit = (int)Goods.rewardCount;
|
|
GameUIMgr.SSetPopupItemBuyCount(iSelectedCount, iunit, Goods.price);
|
|
|
|
iLoading--;
|
|
}
|
|
|
|
private void ABuyItemAdd()
|
|
{
|
|
if (iLoading > 0) return;
|
|
iLoading++;
|
|
|
|
int unit = (int)Goods.rewardCount;
|
|
int limitcount = Goods.limitCnt - DataHandler.GetPlayEventTrade().rewards[curMgr.eventTradeReward.sid - 1].buyCnt;
|
|
int maxcount = DataHandler.GetPlayEventTrade().item / Goods.price;
|
|
if (limitcount > 0 && limitcount < maxcount)
|
|
maxcount = limitcount;
|
|
|
|
if (iSelectedCount >= maxcount)
|
|
{
|
|
iLoading--;
|
|
return;
|
|
}
|
|
iSelectedCount++;
|
|
GameUIMgr.SSetPopupItemBuyCount(iSelectedCount, unit, Goods.price);
|
|
|
|
iLoading--;
|
|
}
|
|
|
|
// 아이템 구매 최소.
|
|
private void ABuyItemMin()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
if (iSelectedCount <= 1)
|
|
{
|
|
iLoading--;
|
|
return;
|
|
}
|
|
iSelectedCount = 1;
|
|
int iunit = (int)Goods.rewardCount;
|
|
GameUIMgr.SSetPopupItemBuyCount(iSelectedCount, iunit, Goods.price);
|
|
|
|
iLoading--;
|
|
}
|
|
|
|
// 아이템 구매 수 최대.
|
|
private void ABuyItemMax()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
int iunit = (int)Goods.rewardCount;
|
|
int ilimitcount = Goods.limitCnt - DataHandler.GetPlayEventTrade().rewards[curMgr.eventTradeReward.sid - 1].buyCnt;
|
|
int imaxcount;
|
|
imaxcount = DataHandler.GetPlayEventTrade().item / Goods.price;
|
|
if (ilimitcount > 0 && ilimitcount < imaxcount)
|
|
imaxcount = ilimitcount;
|
|
|
|
if (iSelectedCount >= imaxcount)
|
|
{
|
|
iLoading--;
|
|
return;
|
|
}
|
|
|
|
iSelectedCount = imaxcount;
|
|
GameUIMgr.SSetPopupItemBuyCount(iSelectedCount, iunit, Goods.price);
|
|
|
|
iLoading--;
|
|
}
|
|
|
|
//취소하면 사는 카운트 초기화
|
|
private void ACancelBuyItem()
|
|
{
|
|
eventTradeReward = null;
|
|
iSelectedCount = 1;
|
|
}
|
|
|
|
// 아이템 구매.
|
|
private void ATryBuyItem()
|
|
{
|
|
if (iLoading > 0) return;
|
|
iLoading++;
|
|
|
|
if (DataHandler.IsNeedDataSave)
|
|
{
|
|
SingleMgr.SaveDataEventTradeConsume();
|
|
}
|
|
else
|
|
{
|
|
curMgr.SVTradeTry();
|
|
}
|
|
}
|
|
|
|
public static void SSVTradeTry()
|
|
{
|
|
curMgr.SVTradeTry();
|
|
}
|
|
|
|
//교환 시도(서버 통신)
|
|
public void SVTradeTry()
|
|
{
|
|
CoverCamera.Hold();
|
|
|
|
curMgr.eventTradeReward.buyCnt = iSelectedCount;
|
|
|
|
SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.EventTrade), typeof(EventServerReturn), ASVTradeTrySucc, ASVTradeTryFail, eventTradeReward, true);
|
|
}
|
|
|
|
private void ASVTradeTryFail(SvError error, object request)
|
|
{
|
|
CoverCamera.Release();
|
|
iLoading--;
|
|
eventTradeReward = null;
|
|
}
|
|
|
|
private void ASVTradeTrySucc(object result, object request)
|
|
{
|
|
EventServerReturn data = result as EventServerReturn;
|
|
if (data == null)
|
|
{
|
|
ASVTradeTryFail(new SvError(eErrorCode.NULL_OR_EMPTY), request);
|
|
return;
|
|
}
|
|
|
|
nGoods[] goods = data.result;
|
|
GameUIMgr.SOpenPopupGoods(goods);
|
|
|
|
DataHandler.SetPlayEventTrade(data.playEventTrade);
|
|
DataHandler.AddGoods(goods, data.playCurrency, false);
|
|
|
|
escrEventTradeRow.scroller.RefreshActiveCellViews();
|
|
RefreshEventGoods();
|
|
eventTradeReward = null;
|
|
|
|
iLoading--;
|
|
CoverCamera.Release();
|
|
}
|
|
#endregion
|
|
|
|
//룰렛
|
|
#region Roulette
|
|
// 마리모 룰렛.
|
|
int gachaCountRoulette = 0;
|
|
|
|
[SerializeField]
|
|
TextMeshProUGUI rouletteTitle;
|
|
|
|
//룰렛 열기
|
|
private void OpenRoulette()
|
|
{
|
|
eventPopUp.anchoredPosition = new Vector2(-266f, 0f);
|
|
goBtnEventClose.gameObject.SetActive(false);
|
|
OpenEventWindow();
|
|
goCanvasRouletteUI.SetActive(true);
|
|
LargeEventTap();
|
|
|
|
// 초기화 필요.
|
|
if (imgRouletteRewards == null)
|
|
{
|
|
Transform trfui = goCanvasRouletteUI.transform;
|
|
trfui.Find("txtExplain").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("reset_day_explain");
|
|
trfui.Find("txtTitle").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("event_roulette_reward");
|
|
rouletteTitle.text = LocalizationText.GetText("event_title");
|
|
|
|
txtRouletteCount = trfui.Find("txtCount").GetComponent<TextMeshProUGUI>();
|
|
|
|
Transform trfleft = trfui.Find("groupLeft");
|
|
int ilen = trfleft.childCount;
|
|
goRouletteDones = new GameObject[ilen];
|
|
imgRouletteRewards = new Image[ilen];
|
|
txtRouletteConds = new TextMeshProUGUI[ilen];
|
|
txtRouletteCounts = new TextMeshProUGUI[ilen];
|
|
objBadge = new GameObject[ilen];
|
|
btnRouletteGet = new ButtonIV[ilen];
|
|
|
|
for (int i = 0; i < ilen; i++)
|
|
{
|
|
nRewardLimit sysRewardInfo = DataHandler.GetSysEventRoulette().rewards[i];
|
|
nIdBuyCnt playRewardInfo = DataHandler.GetPlayEventRoulette().rewards[i];
|
|
|
|
goRouletteDones[i] = trfleft.GetChild(i).Find("close").gameObject;//획득한 체크 창
|
|
imgRouletteRewards[i] = trfleft.GetChild(i).Find("icon").GetComponent<Image>();//보상 이미지
|
|
txtRouletteConds[i] = trfleft.GetChild(i).Find("txtCond").GetComponent<TextMeshProUGUI>();//보상 뽑기 횟수
|
|
txtRouletteCounts[i] = trfleft.GetChild(i).Find("txtCount").GetComponent<TextMeshProUGUI>();//보상 획득량
|
|
objBadge[i] = trfleft.GetChild(i).Find("badge").gameObject;
|
|
btnRouletteGet[i] = trfleft.GetChild(i).GetComponent<ButtonIV>();
|
|
|
|
imgRouletteRewards[i].sprite = AddressableMgr.GetIcon(sysRewardInfo.rewardType, sysRewardInfo.rewardId);
|
|
txtRouletteConds[i].text = FormatString.StringFormat(LocalizationText.GetText("all_trycnt"), sysRewardInfo.cnt);
|
|
txtRouletteCounts[i].text = FormatString.StringFormat(sysRewardInfo.rewardCount.ToString());
|
|
|
|
switch (sysRewardInfo.rewardType)
|
|
{
|
|
case cGoods.TCosWeapon:
|
|
case cGoods.TCosCloth:
|
|
txtRouletteCounts[i].text = null;
|
|
break;
|
|
}
|
|
}//왼쪽
|
|
|
|
Transform trfright = trfui.Find("groupRight");
|
|
imgRouletteBg = trfright.Find("bggold").GetComponent<Image>();
|
|
imgRouletteBg.color = Global.CLR_Trans;
|
|
imgRouletteJelly = trfright.Find("jelly").GetComponent<Image>();
|
|
imgRouletteJelly.color = Global.CLR_Trans;
|
|
imgRoulettePanel = trfright.Find("roulette").GetComponent<Image>();
|
|
spinRouletteBulletEffect = trfright.Find("rouletteBulletEffect").GetComponent<Animator>();
|
|
spinRouletteGlowEffect = trfright.Find("rouletteGlowEffect").GetComponent<ParticleSystem>();
|
|
imgRoulettePanel.color = Global.CLR_Trans;
|
|
rtrfRoulettePanel = imgRoulettePanel.GetComponent<RectTransform>();
|
|
|
|
txtRouletteCountCs = rtrfRoulettePanel.GetComponentsInChildren<TextMeshProUGUI>();
|
|
Image[] imgcs = rtrfRoulettePanel.GetComponentsInChildren<Image>();
|
|
imgRouletteRewardCs = new Image[txtRouletteCountCs.Length];
|
|
|
|
for (int i = 0; i < imgRouletteRewardCs.Length; i++)
|
|
{
|
|
nRewardLimit sysRouletteReward = DataHandler.GetSysEventRoulette().props[i];
|
|
|
|
imgRouletteRewardCs[i] = imgcs[i + 1];
|
|
//@ 나중에 실제 보상 정보 세팅.
|
|
imgRouletteRewardCs[i].sprite = AddressableMgr.GetIcon(sysRouletteReward.rewardType, sysRouletteReward.rewardId);
|
|
txtRouletteCountCs[i].text = sysRouletteReward.rewardCount.ToString();
|
|
}
|
|
|
|
btnRoulette1 = trfright.Find("btnRoulette1").GetComponent<ButtonIV>();
|
|
btnRoulette10 = trfright.Find("btnRoulette10").GetComponent<ButtonIV>();
|
|
btnRoulette1.transform.Find("txt").GetComponent<TextMeshProUGUI>().text = FormatString.StringFormat(LocalizationText.GetText("event_roulette_roll"), 1);
|
|
txtRoulettePrice1 = btnRoulette1.transform.Find("txtPrice").GetComponent<TextMeshProUGUI>();
|
|
txtRoulettePrice1.text = DataHandler.GetSysEventRoulette().price.ToString();
|
|
txtRoulettePrice10 = btnRoulette10.transform.Find("txtPrice").GetComponent<TextMeshProUGUI>();
|
|
txtRouletteHave = trfright.Find("txtHave").GetComponent<TextMeshProUGUI>();
|
|
|
|
//@ 룰렛 연출 효과는 Assets/effect/RouletteEffect 사용.
|
|
}
|
|
|
|
RefreshRouletteCount();
|
|
|
|
CoverCamera.Hold();
|
|
CoverCamera.Hold();
|
|
CoverCamera.Hold();
|
|
Addressables.LoadAssetAsync<Sprite>("event/roulette_bg").Completed += ALoadRouletteBgComp;
|
|
Addressables.LoadAssetAsync<Sprite>("event/roulette_jelly").Completed += ALoadRouletteJellyComp;
|
|
Addressables.LoadAssetAsync<Sprite>("event/roulette_panel").Completed += ALoadRoulettePanelComp;
|
|
}
|
|
|
|
// 룰렛의 버튼 상호작용등을 재화 갯수에 따라 다시 갱신
|
|
void RefreshRouletteCount()
|
|
{
|
|
gachaCountRoulette = Mathf.Min(30, DataHandler.GetPlayEventRoulette().item / DataHandler.GetSysEventRoulette().price);
|
|
|
|
if (gachaCountRoulette < 10)
|
|
{
|
|
btnRoulette10.interactable = false;
|
|
btnRoulette10.transform.Find("txt").GetComponent<TextMeshProUGUI>().text = FormatString.StringFormat(LocalizationText.GetText("event_roulette_roll"), 10);
|
|
txtRoulettePrice10.text = (DataHandler.GetSysEventRoulette().price * 10).ToString();
|
|
}
|
|
else
|
|
{
|
|
btnRoulette10.interactable = true;
|
|
btnRoulette10.transform.Find("txt").GetComponent<TextMeshProUGUI>().text = FormatString.StringFormat(LocalizationText.GetText("event_roulette_roll"), gachaCountRoulette);
|
|
txtRoulettePrice10.text = (gachaCountRoulette * DataHandler.GetSysEventRoulette().price).ToString();
|
|
}
|
|
|
|
btnRoulette1.interactable = DataHandler.GetSysEventRoulette().price <= DataHandler.GetPlayEventRoulette().item;
|
|
|
|
txtRouletteCount.text = FormatString.StringFormat(LocalizationText.GetText("event_roulette_total_count"), Mathf.Min(DataHandler.GetPlayEventRoulette().itemUsed / DataHandler.GetSysEventRoulette().price, DataHandler.GetSysEventRoulette().rewards[DataHandler.GetSysEventRoulette().rewards.Length - 1].cnt), DataHandler.GetSysEventRoulette().rewards[DataHandler.GetSysEventRoulette().rewards.Length - 1].cnt);
|
|
txtRouletteHave.text = DataHandler.GetPlayEventRoulette().item.ToString();
|
|
|
|
for (int i = 0; i < goRouletteDones.Length; i++)
|
|
{
|
|
nRewardLimit sysRewardInfo = DataHandler.GetSysEventRoulette().rewards[i];
|
|
nIdBuyCnt playRewardInfo = DataHandler.GetPlayEventRoulette().rewards[i];
|
|
|
|
if (playRewardInfo.cond > 0)
|
|
{
|
|
goRouletteDones[i].SetActive(true);
|
|
objBadge[i].SetActive(false);
|
|
btnRouletteGet[i].interactable = false;
|
|
}
|
|
else if (sysRewardInfo.cnt <= DataHandler.GetPlayEventRoulette().itemUsed / DataHandler.GetSysEventRoulette().price)
|
|
{
|
|
goRouletteDones[i].SetActive(false);
|
|
objBadge[i].SetActive(true);
|
|
btnRouletteGet[i].interactable = true;
|
|
}
|
|
else
|
|
{
|
|
goRouletteDones[i].SetActive(false);
|
|
objBadge[i].SetActive(false);
|
|
btnRouletteGet[i].interactable = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
//룰렛 닫기. 룰렛은 어드레서블을 사용하기 때문에 갱신을 해제해주는 작업이 필요함
|
|
private void CloseRoulette()
|
|
{
|
|
imgRouletteBg.color = Global.CLR_Trans;
|
|
imgRouletteBg.sprite = null;
|
|
imgRouletteJelly.color = Global.CLR_Trans;
|
|
imgRouletteJelly.sprite = null;
|
|
imgRoulettePanel.color = Global.CLR_Trans;
|
|
imgRoulettePanel.sprite = null;
|
|
|
|
if (handleRouletteBg.IsValid())
|
|
{
|
|
Addressables.Release(handleRouletteBg);
|
|
AddressableMgr.SAddUnload();
|
|
}
|
|
if (handleRouletteJelly.IsValid())
|
|
{
|
|
Addressables.Release(handleRouletteJelly);
|
|
AddressableMgr.SAddUnload();
|
|
}
|
|
if (handleRoulettePanel.IsValid())
|
|
{
|
|
Addressables.Release(handleRoulettePanel);
|
|
AddressableMgr.SAddUnload();
|
|
}
|
|
|
|
goCanvasRouletteUI.SetActive(false);
|
|
goBtnEventClose.gameObject.SetActive(true);
|
|
eventPopUp.anchoredPosition = Vector2.zero;
|
|
}
|
|
|
|
// 어드레서블 룰렛 배경 이미지 불러왔을때 처리.
|
|
private void ALoadRouletteBgComp(AsyncOperationHandle<Sprite> obj)
|
|
{
|
|
imgRouletteBg.sprite = obj.Result;
|
|
imgRouletteBg.color = Global.CLR_White;
|
|
|
|
// 이전 리소스 해제.
|
|
if (handleRouletteBg.IsValid())
|
|
{
|
|
Addressables.Release(handleRouletteBg);
|
|
AddressableMgr.SAddUnload();
|
|
}
|
|
|
|
handleRouletteBg = obj;
|
|
CoverCamera.Release();
|
|
}
|
|
|
|
// 어드레서블 룰렛 젤리 이미지 불러왔을때 처리.
|
|
private void ALoadRouletteJellyComp(AsyncOperationHandle<Sprite> obj)
|
|
{
|
|
imgRouletteJelly.sprite = obj.Result;
|
|
imgRouletteJelly.color = Global.CLR_White;
|
|
|
|
// 이전 리소스 해제.
|
|
if (handleRouletteJelly.IsValid())
|
|
{
|
|
Addressables.Release(handleRouletteJelly);
|
|
AddressableMgr.SAddUnload();
|
|
}
|
|
|
|
handleRouletteJelly = obj;
|
|
CoverCamera.Release();
|
|
}
|
|
|
|
// 어드레서블 룰렛 패널 이미지 불러왔을때 처리.
|
|
private void ALoadRoulettePanelComp(AsyncOperationHandle<Sprite> obj)
|
|
{
|
|
imgRoulettePanel.sprite = obj.Result;
|
|
imgRoulettePanel.color = Global.CLR_White;
|
|
|
|
// 이전 리소스 해제.
|
|
if (handleRoulettePanel.IsValid())
|
|
{
|
|
Addressables.Release(handleRoulettePanel);
|
|
AddressableMgr.SAddUnload();
|
|
}
|
|
|
|
handleRoulettePanel = obj;
|
|
CoverCamera.Release();
|
|
}
|
|
|
|
//룰렛 돌리기 버튼. 돌리면 서버 통신을 시도한다.
|
|
public void BtnRouletteOne()
|
|
{
|
|
SVRouletteTry1();
|
|
}
|
|
|
|
public void BtnRouletteMulti()
|
|
{
|
|
SVRouletteTry10();
|
|
}
|
|
|
|
//룰렛 통신
|
|
public void SVRouletteTry1()
|
|
{
|
|
CoverCamera.Hold();
|
|
|
|
SingleMgr.SaveDataEventRouletteConsume();
|
|
SvConnectManager.Instance.RequestSvGet(true, 0, IVServerFormat.UrlApi.GetUrl(FormatString.StringFormat(IVServerFormat.UrlApi.EventRoulette, 1)), typeof(EventServerReturn), ASVRouletteTrySucc, ASVRouletteTryFail, true);
|
|
}
|
|
|
|
public void SVRouletteTry10()
|
|
{
|
|
CoverCamera.Hold();
|
|
|
|
SingleMgr.SaveDataEventRouletteConsume();
|
|
SvConnectManager.Instance.RequestSvGet(true, 0, IVServerFormat.UrlApi.GetUrl(FormatString.StringFormat(IVServerFormat.UrlApi.EventRoulette, gachaCountRoulette)), typeof(EventServerReturn), ASVRouletteTrySucc, ASVRouletteTryFail, true);
|
|
}
|
|
|
|
private void ASVRouletteTryFail(IVServerFormat.SvError error)
|
|
{
|
|
CoverCamera.Release();
|
|
}
|
|
|
|
//서버통신이 성공하면 룰렛을 돌리고 보상을 정산한다. 연출은 룰렛이 끝나고 나오지만 실제로 보상은 통신 성공 즉시 정산된다.
|
|
private void ASVRouletteTrySucc(object result)
|
|
{
|
|
EventServerReturn data = result as EventServerReturn;
|
|
|
|
DataHandler.LoadPlayEventRoulette(data.playEventRoulette);
|
|
|
|
StartCoroutine(StartRouletteEffect(data));
|
|
|
|
for (int i = 0; i < data.result.Length; i++)
|
|
{
|
|
if (data.result[i].propertyType == cGoods.TCurrency)
|
|
{
|
|
if (data.result[i].propertyId == cGoods.CGold)
|
|
{
|
|
DataHandler.AddGold(data.result[i].propertyCount);
|
|
}
|
|
}
|
|
}
|
|
|
|
DataHandler.AddGoods(data.result, data.playCurrency, false);
|
|
|
|
RefreshRouletteCount();
|
|
|
|
}
|
|
|
|
//룰렛이 돌아 멈추는 방향은 id 에 따라 변환된다. 10 회 이상 뽑았다면 멈추는 방향은 무작위.
|
|
IEnumerator StartRouletteEffect(EventServerReturn data)
|
|
{
|
|
spinRouletteBulletEffect.gameObject.SetActive(false);
|
|
|
|
int prize = 0;
|
|
if (data.result.Length == 1)
|
|
{
|
|
for (int i = 0; i < DataHandler.GetSysEventRoulette().props.Length; i++)
|
|
{
|
|
if (DataHandler.GetSysEventRoulette().props[i].rewardType == data.result[0].propertyType)
|
|
{
|
|
if (DataHandler.GetSysEventRoulette().props[i].rewardId == data.result[0].propertyId)
|
|
{
|
|
if (DataHandler.GetSysEventRoulette().props[i].rewardCount == data.result[0].propertyCount)
|
|
{
|
|
prize = i;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
prize = UnityEngine.Random.Range(0, 8);
|
|
}
|
|
|
|
imgRoulettePanel.transform.DORotate(new Vector3(0f, 0f, imgRoulettePanel.transform.rotation.z - 1800f), 1f, RotateMode.FastBeyond360).SetEase(Ease.InQuint).SetLoops(1);
|
|
|
|
yield return new WaitForSeconds(0.5f);
|
|
|
|
spinRouletteGlowEffect.Play();
|
|
|
|
yield return new WaitForSeconds(0.5f);
|
|
|
|
imgRoulettePanel.transform.DORotate(new Vector3(0f, 0f, imgRoulettePanel.transform.rotation.z - 1800f + (prize * 45)), 1f, RotateMode.FastBeyond360).SetEase(Ease.OutQuint).SetLoops(1);
|
|
|
|
yield return new WaitForSeconds(0.9f);
|
|
|
|
spinRouletteBulletEffect.gameObject.SetActive(true);
|
|
|
|
int currentAnimHash;
|
|
if(data.result.Length > 1)
|
|
currentAnimHash = Animator.StringToHash("MultipleShot");
|
|
else
|
|
currentAnimHash = Animator.StringToHash("SingleShot");
|
|
|
|
spinRouletteBulletEffect.Play(currentAnimHash);
|
|
|
|
while(!spinRouletteBulletEffect.IsComplete(currentAnimHash))
|
|
{
|
|
yield return null;
|
|
}
|
|
|
|
GameUIMgr.SOpenPopupGoods(data.result);
|
|
|
|
yield return new WaitForSeconds(0.1f);
|
|
|
|
CoverCamera.Release();
|
|
}
|
|
|
|
nIdBuyCnt rouletteExchange = null;
|
|
//룰렛 돌린 횟수 보상 선택. 이후는 서버통신
|
|
public void btnRouletteReward(int trySid)
|
|
{
|
|
rouletteExchange = new nIdBuyCnt();
|
|
rouletteExchange.sid = trySid;
|
|
SVRouletteReward();
|
|
}
|
|
|
|
//횟수 보상 통신
|
|
public void SVRouletteReward()
|
|
{
|
|
CoverCamera.Hold();
|
|
|
|
SingleMgr.SaveDataEventRouletteConsume();
|
|
SvConnectManager.Instance.RequestSvPost(true, 0, IVServerFormat.UrlApi.GetUrl(IVServerFormat.UrlApi.EventRouletteCountReward), typeof(EventServerReturn), ASVRouletteRewardSucc, ASVRouletteRewardFail, rouletteExchange, true);
|
|
}
|
|
|
|
private void ASVRouletteRewardFail(IVServerFormat.SvError error, object request)
|
|
{
|
|
CoverCamera.Release();
|
|
rouletteExchange = null;
|
|
}
|
|
|
|
private void ASVRouletteRewardSucc(object result, object request)
|
|
{
|
|
EventServerReturn data = result as EventServerReturn;
|
|
if (data == null)
|
|
{
|
|
ASVRouletteRewardFail(new IVServerFormat.SvError(IVServerFormat.eErrorCode.NULL_OR_EMPTY), request);
|
|
return;
|
|
}
|
|
|
|
nGoods[] goods = data.result;
|
|
|
|
GameUIMgr.SOpenPopupGoods(goods);
|
|
|
|
DataHandler.LoadPlayEventRoulette(data.playEventRoulette);
|
|
|
|
DataHandler.SetGoods(data.playCurrency, false);
|
|
|
|
for (int i = 0; i < data.result.Length; i++)
|
|
{
|
|
if (data.result[i].propertyType == cGoods.TCurrency)
|
|
{
|
|
if (data.result[i].propertyId == cGoods.CGold)
|
|
{
|
|
DataHandler.AddGold(data.result[i].propertyCount);
|
|
}
|
|
}
|
|
}
|
|
DataHandler.AddGoods(goods, data.playCurrency, false);
|
|
|
|
|
|
RefreshRouletteCount();
|
|
//EventMgr.RefreshEventGoods();
|
|
rouletteExchange = null;
|
|
|
|
CoverCamera.Release();
|
|
}
|
|
#endregion Roulette
|
|
|
|
//성장
|
|
#region Raise
|
|
// 마리모 키우기.
|
|
int leftTotalgoods = 0;
|
|
int gachaCountRaise = 0;
|
|
|
|
//성장 열기
|
|
private void OpenRaise()
|
|
{
|
|
var sysEventRaise = DataHandler.GetSysEventRaise();
|
|
var playEventRaise = DataHandler.GetPlayEventRaise();
|
|
|
|
OpenEventWindow();
|
|
goCanvasRaiseUI.SetActive(true);
|
|
MiddleEventTap();
|
|
|
|
// 초기화 필요.
|
|
if (raiseIdList == null)
|
|
{
|
|
Transform trfui = goCanvasRaiseUI.transform;
|
|
imgRaiseBack = trfui.Find("groupLeft").GetChild(0).GetComponent<Image>();
|
|
imgRaiseBack.color = Global.CLR_Trans;
|
|
imgRaiseFront = trfui.Find("groupLeft").GetChild(1).GetComponent<Image>();
|
|
imgRaiseFront.color = Global.CLR_Trans;
|
|
btnRaise1 = trfui.Find("groupLeft").GetChild(2).GetComponent<ButtonIV>();
|
|
btnRaise10 = trfui.Find("groupLeft").GetChild(3).GetComponent<ButtonIV>();
|
|
btnRaise1.transform.Find("txt").GetComponent<TextMeshProUGUI>().text = FormatString.StringFormat(LocalizationText.GetText("event_give"), 1);
|
|
txtRaisePrice1 = btnRaise1.transform.Find("txtPrice").GetComponent<TextMeshProUGUI>();
|
|
txtRaisePrice1.text = sysEventRaise.price.ToString();
|
|
txtRaisePrice30 = btnRaise10.transform.Find("txtPrice").GetComponent<TextMeshProUGUI>();
|
|
txtRaiseHave = trfui.Find("txtHave").GetComponent<TextMeshProUGUI>();
|
|
trfui.Find("txtExplain").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("event_exchange_warning");
|
|
raisingEvent = imgRaiseFront.transform.Find("RaisingEvent").GetComponent<ParticleSystem>();
|
|
marimoGrow = trfui.Find("groupLeft").GetChild(1).GetComponent<DOTweenAnimation>();
|
|
|
|
int len = sysEventRaise.rewards.Length;//보상 목록 수
|
|
const int rowcnt = 2;
|
|
raiseIdList = new List<int>();
|
|
for (int i = 0; i < len; i++)
|
|
{
|
|
if (raiseIdList.Count % rowcnt == 0)
|
|
raiseIdRows.Add(raiseIdRows.Count);
|
|
|
|
raiseIdList.Add(i);
|
|
}
|
|
escrRaise.LoadDatas(raiseIdRows);
|
|
}
|
|
|
|
txtRaiseHave.text = playEventRaise.item.ToString();
|
|
|
|
RefreshGachaButton();
|
|
|
|
CoverCamera.Hold();
|
|
CoverCamera.Hold();
|
|
Addressables.LoadAssetAsync<Sprite>("event/raise_back").Completed += ALoadRaiseBackComp;
|
|
//@ 나중에 마리모 단계에 따라 raise0, raise1, raise2 중에서 맞는 이미지 불러오기.
|
|
|
|
//일정횟수 이상 자라면 성장항목에 표기하는 이미지를 다르게 한다. 일정횟수의 기준은 DB 의 Scale 3.
|
|
#if false
|
|
int grow = (DataHandler.GetPlayEventRaise().itemUsed / DataHandler.GetSysEventRaise().price) / DataHandler.GetEvents()[(int)eEventMoveType.Raise].scale3;
|
|
|
|
switch (grow)
|
|
{
|
|
case 0:
|
|
Addressables.LoadAssetAsync<Sprite>("event/raise0").Completed += ALoadRaiseFrontComp;
|
|
break;
|
|
case 1:
|
|
Addressables.LoadAssetAsync<Sprite>("event/raise1").Completed += ALoadRaiseFrontComp;
|
|
break;
|
|
case 2:
|
|
default:
|
|
Addressables.LoadAssetAsync<Sprite>("event/raise2").Completed += ALoadRaiseFrontComp;
|
|
break;
|
|
}
|
|
#else
|
|
int tryCount = playEventRaise.itemUsed / sysEventRaise.price;
|
|
|
|
if(tryCount >= 2000)
|
|
Addressables.LoadAssetAsync<Sprite>("event/raise2").Completed += ALoadRaiseFrontComp;
|
|
else if(tryCount >= 500)
|
|
Addressables.LoadAssetAsync<Sprite>("event/raise1").Completed += ALoadRaiseFrontComp;
|
|
else
|
|
Addressables.LoadAssetAsync<Sprite>("event/raise0").Completed += ALoadRaiseFrontComp;
|
|
#endif
|
|
}
|
|
|
|
//성장 닫기. 이 역시 어드레서블 필요
|
|
private void CloseRaise()
|
|
{
|
|
imgRaiseBack.color = Global.CLR_Trans;
|
|
imgRaiseBack.sprite = null;
|
|
imgRaiseFront.color = Global.CLR_Trans;
|
|
imgRaiseFront.sprite = null;
|
|
|
|
if (handleRaiseBack.IsValid())
|
|
{
|
|
Addressables.Release(handleRaiseBack);
|
|
AddressableMgr.SAddUnload();
|
|
}
|
|
if (handleRaiseFront.IsValid())
|
|
{
|
|
Addressables.Release(handleRaiseFront);
|
|
AddressableMgr.SAddUnload();
|
|
}
|
|
|
|
goCanvasRaiseUI.SetActive(false);
|
|
}
|
|
|
|
//한번에 뽑을 수 있는 횟수 가변
|
|
public static void PlusLeftGoods()
|
|
{
|
|
for (int i = 0; i < DataHandler.GetSysEventRaise().rewards.Length; i++)
|
|
{
|
|
for (int j = DataHandler.GetSysEventRaise().rewards.Length; j > 0; j--)
|
|
{
|
|
if (DataHandler.GetPlayEventRaise().rewards[j - 1].sid == DataHandler.GetSysEventRaise().rewards[i].id)
|
|
{
|
|
curMgr.leftTotalgoods += DataHandler.GetSysEventRaise().rewards[i].cnt - DataHandler.GetPlayEventRaise().rewards[j - 1].cnt;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (curMgr.leftTotalgoods > 30)
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static int SGetRaiseRewardIndex(int irow, int icolumn)
|
|
{
|
|
return curMgr.GetRaiseRewardIndex(irow, icolumn);
|
|
}
|
|
|
|
// 키우기 보상 인덱스.
|
|
private int GetRaiseRewardIndex(int irow, int icolumn)
|
|
{
|
|
int index = irow * 2 + icolumn;
|
|
|
|
if (index >= raiseIdList.Count)
|
|
return -1;
|
|
return index;
|
|
}
|
|
|
|
public static nGoods SGetRaiseReward(int index)
|
|
{
|
|
//@ 나중에 실제 데이터 수량 검사.
|
|
if (index < 0 || index >= curMgr.raiseIdList.Count)
|
|
return null;
|
|
//@ 나중에 실제 보상 데이터 리턴.
|
|
nRewardLimit reward = DataHandler.GetSysEventRaise().rewards[index];
|
|
return new nGoods(reward);
|
|
}
|
|
|
|
// 어드레서블 키우기 배경 이미지 불러왔을때 처리.
|
|
private void ALoadRaiseBackComp(AsyncOperationHandle<Sprite> obj)
|
|
{
|
|
imgRaiseBack.sprite = obj.Result;
|
|
imgRaiseBack.color = Global.CLR_White;
|
|
|
|
// 이전 리소스 해제.
|
|
if (handleRaiseBack.IsValid())
|
|
{
|
|
Addressables.Release(handleRaiseBack);
|
|
AddressableMgr.SAddUnload();
|
|
}
|
|
|
|
handleRaiseBack = obj;
|
|
CoverCamera.Release();
|
|
}
|
|
|
|
// 어드레서블 키우기 마리모 이미지 불러왔을때 처리.
|
|
private void ALoadRaiseFrontComp(AsyncOperationHandle<Sprite> obj)
|
|
{
|
|
imgRaiseFront.sprite = obj.Result;
|
|
imgRaiseFront.color = Global.CLR_White;
|
|
|
|
// 이전 리소스 해제.
|
|
if (handleRaiseFront.IsValid())
|
|
{
|
|
Addressables.Release(handleRaiseFront);
|
|
AddressableMgr.SAddUnload();
|
|
}
|
|
|
|
handleRaiseFront = obj;
|
|
CoverCamera.Release();
|
|
}
|
|
|
|
//한번 뽑기와 한번에 뽑기. 한번에 뽑는 수량은 10~30회 까지.
|
|
public void BtnRaise1Button()
|
|
{
|
|
SVRaiseTry1();
|
|
}
|
|
|
|
public void BtnRaise30Button()
|
|
{
|
|
SVRaiseTry30();
|
|
}
|
|
|
|
//뽑기버튼을 재설정한다. 한번에 뽑기가 뽑을 수 있는 양을 주로 재설정하며, 10 번 이상 뽑을 수 있어야 기능을 사용할 수 있다.
|
|
void RefreshGachaButton()
|
|
{
|
|
leftTotalgoods = 0;
|
|
|
|
//왼쪽에 남아있는 상품 갯수를 계산한다. 30개 이상 산정되면 계산 종료.
|
|
PlusLeftGoods();
|
|
|
|
//남은 상품과 최대 뽑기수 중 적은 횟수를 고르고, 이후 이 횟수와 뽑을 수 있는 횟수 중 적은 횟수를 고른다.
|
|
gachaCountRaise = Mathf.Min(30, leftTotalgoods);
|
|
gachaCountRaise = Mathf.Min(gachaCountRaise, DataHandler.GetPlayEventRaise().item / DataHandler.GetSysEventRaise().price);
|
|
|
|
if (gachaCountRaise <= 0)//한번도 못 뽑는 상황이라면 둘다 비활성화한다. 한번에 뽑기에 표기되는 횟수는 10회.
|
|
{
|
|
gachaCountRaise = 1;
|
|
|
|
btnRaise1.interactable = false;
|
|
btnRaise10.interactable = false;
|
|
btnRaise10.transform.Find("txt").GetComponent<TextMeshProUGUI>().text = FormatString.StringFormat(LocalizationText.GetText("event_give"), 10);
|
|
txtRaisePrice30.text = (DataHandler.GetSysEventRaise().price * 10).ToString();
|
|
}
|
|
else if (gachaCountRaise < 10)//10 회 미만으로 뽑을 수 있다면 한번에 뽑기만 비활성화한다.
|
|
{
|
|
btnRaise1.interactable = true;
|
|
btnRaise10.interactable = false;
|
|
btnRaise10.transform.Find("txt").GetComponent<TextMeshProUGUI>().text = FormatString.StringFormat(LocalizationText.GetText("event_give"), 10);
|
|
txtRaisePrice30.text = (DataHandler.GetSysEventRaise().price * 10).ToString();
|
|
}
|
|
else//10회 이상 뽑을 수 있다면 모든 버튼이 활성화된다.
|
|
{
|
|
btnRaise1.interactable = true;
|
|
btnRaise10.interactable = true;
|
|
btnRaise10.transform.Find("txt").GetComponent<TextMeshProUGUI>().text = FormatString.StringFormat(LocalizationText.GetText("event_give"), gachaCountRaise);
|
|
txtRaisePrice30.text = (DataHandler.GetSysEventRaise().price * gachaCountRaise).ToString();
|
|
}
|
|
|
|
if (DataHandler.GetPlayEventRaise().item / DataHandler.GetSysEventRaise().price >= 10)
|
|
{
|
|
btnRaise1.interactable = true;
|
|
btnRaise10.interactable = true;
|
|
}
|
|
else if (DataHandler.GetPlayEventRaise().item / DataHandler.GetSysEventRaise().price >= 1)
|
|
{
|
|
btnRaise1.interactable = true;
|
|
btnRaise10.interactable = false;
|
|
}
|
|
}
|
|
//서버 통신
|
|
public void SVRaiseTry1()
|
|
{
|
|
if (leftTotalgoods <= 0)
|
|
{
|
|
GameUIMgr.SOpenToast(LocalizationText.GetText("event_give_no_reward"));
|
|
return;
|
|
}
|
|
|
|
CoverCamera.Hold();
|
|
|
|
SingleMgr.SaveDataEventRaiseConsume();
|
|
SvConnectManager.Instance.RequestSvGet(true, 0, IVServerFormat.UrlApi.GetUrl(FormatString.StringFormat(IVServerFormat.UrlApi.EventRaise, 1)), typeof(EventServerReturn), ASVRaiseTrySucc, ASVRaiseTryFail, true);
|
|
}
|
|
|
|
public void SVRaiseTry30()
|
|
{
|
|
if (leftTotalgoods < 10)
|
|
{
|
|
GameUIMgr.SOpenToast(LocalizationText.GetText("event_give_no_reward"));
|
|
return;
|
|
}
|
|
|
|
CoverCamera.Hold();
|
|
|
|
SingleMgr.SaveDataEventRaiseConsume();
|
|
SvConnectManager.Instance.RequestSvGet(true, 0, IVServerFormat.UrlApi.GetUrl(FormatString.StringFormat(IVServerFormat.UrlApi.EventRaise, gachaCountRaise)), typeof(EventServerReturn), ASVRaiseTrySucc, ASVRaiseTryFail, true);
|
|
}
|
|
|
|
private void ASVRaiseTryFail(IVServerFormat.SvError error)
|
|
{
|
|
CoverCamera.Release();
|
|
}
|
|
|
|
private void ASVRaiseTrySucc(object result)
|
|
{
|
|
EventServerReturn data = result as EventServerReturn;
|
|
|
|
raisingEvent.Play();
|
|
|
|
DataHandler.LoadPlayEventRaise(data.playEventRaise);
|
|
|
|
marimoGrow.DORewind();
|
|
marimoGrow.DOPlay();
|
|
|
|
StartCoroutine(MarimoGrow());
|
|
|
|
for (int i = 0; i < data.result.Length; i++)
|
|
{
|
|
if (data.result[i].propertyType == cGoods.TCurrency)
|
|
{
|
|
if (data.result[i].propertyId == cGoods.CGold)
|
|
{
|
|
DataHandler.AddGold(data.result[i].propertyCount);
|
|
}
|
|
}
|
|
}
|
|
|
|
DataHandler.AddGoods(data.result, data.playCurrency, false);
|
|
|
|
StartCoroutine(GetWindowOn(data));
|
|
}
|
|
//버튼 상호작용할때 성장 연출후에 아이템을 띄워줘야 하므로 아이템은 1.5초 후에 띄워진다.
|
|
IEnumerator GetWindowOn(EventServerReturn data)
|
|
{
|
|
yield return new WaitForSeconds(1.5f);
|
|
GameUIMgr.SOpenPopupGoods(data.result);
|
|
|
|
txtRaiseHave.text = data.playEventRaise.item.ToString();
|
|
escrRaise.scroller.RefreshActiveCellViews();
|
|
|
|
RefreshGachaButton();
|
|
|
|
CoverCamera.Release();
|
|
}
|
|
//성장시켰을때 표시할 마리모.
|
|
IEnumerator MarimoGrow()
|
|
{
|
|
yield return new WaitForSeconds(0.3f);
|
|
|
|
int grow = (DataHandler.GetPlayEventRaise().itemUsed / DataHandler.GetSysEventRaise().price) / DataHandler.GetEvents()[(int)eEventMoveType.Raise].scale3;
|
|
|
|
switch (grow)
|
|
{
|
|
case 0:
|
|
Addressables.LoadAssetAsync<Sprite>("event/raise0").Completed += ALoadRaiseFrontComp;
|
|
break;
|
|
case 1:
|
|
Addressables.LoadAssetAsync<Sprite>("event/raise1").Completed += ALoadRaiseFrontComp;
|
|
break;
|
|
case 2:
|
|
default:
|
|
Addressables.LoadAssetAsync<Sprite>("event/raise2").Completed += ALoadRaiseFrontComp;
|
|
break;
|
|
}
|
|
|
|
CoverCamera.Hold();
|
|
}
|
|
#endregion Raise
|
|
|
|
//오픈 보상
|
|
#region Reward
|
|
public void btnOpenRewardEvent()
|
|
{
|
|
rewardCanvas.enabled = true;
|
|
|
|
dRewardEvent rewardEvent = DataHandler.GetRewardEvent();
|
|
txtOpenMain.text = LocalizationText.GetText("event_open");
|
|
txtOpenDesc.text = LocalizationText.GetText("event_opendesc");
|
|
TimeSpan duration = new TimeSpan(rewardEvent.startAt.Day, rewardEvent.startAt.Hour, rewardEvent.startAt.Minute, rewardEvent.startAt.Second);
|
|
DateTime remainingTime = rewardEvent.endAt.Subtract(duration);
|
|
txtOpenDue.text = FormatString.TextLeftTimeDH(remainingTime);
|
|
btnRewardEventGet.interactable = DataHandler.GetPlayRewardEvent().sid > 0 ? false : true;
|
|
|
|
for (int i = 0; i < openGoods.Length; ++i)
|
|
{
|
|
var reward = rewardEvent.rewards[i];
|
|
|
|
if (reward.rewardType != 0)
|
|
{
|
|
openGoods[i].gameObject.SetActive(true);
|
|
txtOpenReward[i].gameObject.SetActive(true);
|
|
openGoods[i].SetGoods(reward.rewardType, reward.rewardId, reward.rewardCount);
|
|
txtOpenReward[i].text = FormatString.StringFormat(" - {0} {1}", reward, FormatString.StringFormat(LocalizationText.GetText("all_count"), reward.rewardCount));
|
|
}
|
|
else
|
|
{
|
|
openGoods[i].gameObject.SetActive(false);
|
|
txtOpenReward[i].gameObject.SetActive(false);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void btnGetEventReward()
|
|
{
|
|
if(DataHandler.GetPlayRewardEvent().sid == 0)
|
|
{
|
|
CoverCamera.Hold();
|
|
rewardEvent = new nIdLv();
|
|
SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.EventReward), typeof(EventRewardReturn), AGetRewardEventSucc, AGetRewardEventFail, rewardEvent, true);
|
|
}
|
|
}
|
|
|
|
private void AGetRewardEventSucc(object result, object request)
|
|
{
|
|
EventRewardReturn data = result as EventRewardReturn;
|
|
if (data == null)
|
|
{
|
|
AGetRewardEventFail(new IVServerFormat.SvError(IVServerFormat.eErrorCode.NULL_OR_EMPTY), request);
|
|
return;
|
|
}
|
|
dRewardEvent rewardEvent = DataHandler.GetRewardEvent();
|
|
GameUIMgr.SOpenPopup1Button(LocalizationText.GetText("msg_buysuccmail"));
|
|
DataHandler.GetPlayRewardEvent().sid = 1;
|
|
btnRewardEventGet.interactable = false;
|
|
GameUIMgr.SCloseRewardEvent();
|
|
rewardCanvas.enabled = false;
|
|
//int rewardCnt = data.playCurrency.diaFree - DataHandler.Goods.diaFree;
|
|
//nGoods[] goods = new nGoods[1] { new nGoods { propertyType = rewardEvent.rewards[0].rewardType, propertyId = rewardEvent.rewards[0].rewardId, propertyCount = rewardEvent.rewards[0].rewardCount } };
|
|
|
|
DataHandler.SetPlayRewardEvent(data.playEventReward);
|
|
CoverCamera.Release();
|
|
}
|
|
|
|
private void AGetRewardEventFail(IVServerFormat.SvError error, object request)
|
|
{
|
|
CoverCamera.Release();
|
|
Logger.Log("rewardEventFail");
|
|
}
|
|
#endregion
|
|
}
|