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

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
}