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.
 
 
 
 
 
 

951 lines
36 KiB

using IVDataFormat;
using IVServerFormat;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class AdBuffMgr : MonoSingleton<AdBuffMgr>
{
#region Button
[SerializeField]
GameObject buttonWrap;
[SerializeField]
GameObject adbuffBadge;
ButtonIV btnAtk;
ButtonIV btnGold;
ButtonIV btnExp;
TextMeshProUGUI txtTimerAtk;
TextMeshProUGUI txtTimerGold;
TextMeshProUGUI txtTimerExp;
Transform atkOn, goldOn, expOn;
#endregion
#region Buff Window
[SerializeField]
Canvas canvasUI;
[SerializeField]
GameObject bg;
[SerializeField]
GameObject imgAd;
TextMeshProUGUI buffTitle;
GameObject[] buffTabSet = new GameObject[3];
GameObject[] buffIconOn = new GameObject[3];
GameObject[] buffIconOff = new GameObject[3];
TextMeshProUGUI[] txtBuffLevel = new TextMeshProUGUI[3];
TextMeshProUGUI[] txtBuffTitle = new TextMeshProUGUI[3];
TextMeshProUGUI[] txtBuffDesc = new TextMeshProUGUI[3];
ButtonIV[] btnBuffAd = new ButtonIV[3];
TextMeshProUGUI[] txtBuffOn = new TextMeshProUGUI[3];
TextMeshProUGUI[] txtTimer = new TextMeshProUGUI[3];
TextMeshProUGUI[] txtBuffExpNum = new TextMeshProUGUI[3];
Slider[] sldBuffExp = new Slider[3];
ButtonIV[] btnBuffLvUp = new ButtonIV[3];
ParticleSystem[] ptcLevelUp = new ParticleSystem[3];
GameObject[] btnLevelBedge = new GameObject[3];
TextMeshProUGUI[] txtBuffLvUp = new TextMeshProUGUI[3];
GameObject[] timerInf = new GameObject[3];
GameObject[] buffMax = new GameObject[3];
#endregion
#region Variables
public enum AdNumber
{
atk=0,
gold=1,
exp=2
}
private bool bReLocalize = true;
int[] adTimer = new int[3] { -1, -1, -1 };
public static int[] GetAdTImer()
{
return Instance.adTimer;
}
int adTime = 1800;//광고로 인한 추가시간
int atkBuff = 1000000;
int goldDrop = 500000;
int expDrop = 500000;
bool isNoAd = false;
#endregion Variables
#region Base
private void OnApplicationFocus(bool focus)
{
DataHandler.PlayBuff.Save(DataHandler.PlayData.server);
}
private void OnApplicationQuit()
{
DataHandler.PlayBuff.Save(DataHandler.PlayData.server);
}
public static void SLocalize(bool bmain) => Instance?.Localize(bmain);
private void Localize(bool bmain)
{
if (bmain)
{
btnAtk = buttonWrap.transform.Find("buffatk").GetComponent<ButtonIV>();
btnGold = buttonWrap.transform.Find("buffgold").GetComponent<ButtonIV>();
btnExp = buttonWrap.transform.Find("buffexp").GetComponent<ButtonIV>();
txtTimerAtk = btnAtk.transform.Find("timer").GetComponent<TextMeshProUGUI>();
txtTimerGold = btnGold.transform.Find("timer").GetComponent<TextMeshProUGUI>();
txtTimerExp = btnExp.transform.Find("timer").GetComponent<TextMeshProUGUI>();
atkOn = btnAtk.transform.Find("On");
goldOn = btnGold.transform.Find("On");
expOn = btnExp.transform.Find("On");
BadgeActive();
}
else
{
bReLocalize = false;
buffTabSet[(int)AdNumber.atk] = bg.transform.Find("BuffTabSetAtk").gameObject;
buffTabSet[(int)AdNumber.gold] = bg.transform.Find("BuffTabSetGold").gameObject;
buffTabSet[(int)AdNumber.exp] = bg.transform.Find("BuffTabSetExp").gameObject;
buffTitle = bg.transform.Find("txtT").GetComponent<TextMeshProUGUI>();
bg.transform.Find("txtB").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("adbuff_adbuff_effect");
imgAd.transform.Find("imgAd").transform.Find("txtAdTitle").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("adbuff_img_title");
imgAd.transform.Find("imgAd").transform.Find("txtAdDescribe").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("adbuff_img_describe");
imgAd.transform.Find("imgAd").transform.Find("txtAdPurchase").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("adbuff_img_purchase");
buffTitle.text = LocalizationText.GetText("adbuff_title");
for (int i = 0; i < buffTabSet.Length; i++)
{
txtBuffLevel[i] = buffTabSet[i].transform.Find("txtBuffLv").GetComponent<TextMeshProUGUI>();
txtBuffTitle[i] = buffTabSet[i].transform.Find("txtBuffLabel").GetComponent<TextMeshProUGUI>();
txtBuffDesc[i] = buffTabSet[i].transform.Find("txtBuffDesc").GetComponent<TextMeshProUGUI>();
btnBuffAd[i] = buffTabSet[i].transform.Find("btnBuffAd").GetComponent<ButtonIV>();
txtBuffOn[i] = btnBuffAd[i].transform.GetChild(0).GetComponent<TextMeshProUGUI>();
txtTimer[i] = buffTabSet[i].transform.Find("txtTimer").GetComponent<TextMeshProUGUI>();
txtBuffExpNum[i] = buffTabSet[i].transform.Find("txtExpNum").GetComponent<TextMeshProUGUI>();
sldBuffExp[i] = buffTabSet[i].transform.Find("sldExp").GetComponent<Slider>();
btnBuffLvUp[i] = buffTabSet[i].transform.Find("btnBuffLvUp").GetComponent<ButtonIV>();
btnLevelBedge[i] = btnBuffLvUp[i].transform.Find("badge").gameObject;
txtBuffLvUp[i] = buffTabSet[i].transform.Find("txtBuffLvUp").GetComponent<TextMeshProUGUI>();
buffIconOn[i] = buffTabSet[i].transform.Find("imgOnBufficon").gameObject;
buffIconOff[i] = buffTabSet[i].transform.Find("imgOffBufficon").gameObject;
ptcLevelUp[i] = buffTabSet[i].transform.Find("ptcLevelUp").GetComponent<ParticleSystem>();
timerInf[i] = buffTabSet[i].transform.Find("imgTimerInf").gameObject;
buffMax[i] = buffTabSet[i].transform.Find("btnBuffMax").gameObject;
}
for (int i = 0; i < buffTabSet.Length; i++)
{
txtBuffOn[i].text = LocalizationText.GetText("adbuff_playad");
txtBuffLvUp[i].text = LocalizationText.GetText("adbuff_levelup");
switch (i)
{
case (int)AdNumber.atk:
txtBuffTitle[i].text = LocalizationText.GetText("adbuff_atk_buff");
txtBuffDesc[i].text = FormatString.StringFormat("{0} + {1} %", LocalizationText.GetText("adbuff_atk_buff_per"), 100);
break;
case (int)AdNumber.gold:
txtBuffTitle[i].text = LocalizationText.GetText("adbuff_gold_buff");
txtBuffDesc[i].text = FormatString.StringFormat("{0} + {1} %", LocalizationText.GetText("adbuff_gold_buff_per"), 100);
break;
case (int)AdNumber.exp:
txtBuffTitle[i].text = LocalizationText.GetText("adbuff_exp_buff");
txtBuffDesc[i].text = FormatString.StringFormat("{0} + {1} %", LocalizationText.GetText("adbuff_exp_buff_per"), 100);
break;
}
}
}
}
// 설정에서 언어 변경 시 처리.
public static void SReLocalize()
{
Instance.Localize(true);
Instance.bReLocalize = true;
}
//게임을 시작할떄 광고버프가 광고제거가 되어있는지 아닌지를 판별한다.
public static void InitRemainBuff()
{
if (Instance.bReLocalize)
Instance.Localize(false);
//광고버프가 구매된 상태라면 게임 시작할때 버프를 바로 틀어준다.
const int removeAdShopID = 1;
if (DataHandler.GetShop(removeAdShopID).buyCnt >= 1)
{
Instance.AdBuffNoAd();
return;
}
//광고버프가 구매되지 않은 상태라면 현재 지속시간을 불러와서 지속시간이 남아있는 버프를 켠다.
Instance.adTimer = DataHandler.PlayBuff.adTimer;
if (Instance.adTimer[(int)AdNumber.atk] > 0)
{
StartOnAdBuffAttack();
}
if (Instance.adTimer[(int)AdNumber.exp] > 0)
{
StartOnAdBuffExp();
}
if (Instance.adTimer[(int)AdNumber.gold] > 0)
{
StartOnAdBuffGold();
}
}
#endregion Base
#region BuffWindow OnOff
public static void SMoveAdbuff()
{
Instance.BuffWindowOn();
}
public void BuffWindowOn()//버프 버튼을 눌러서 버프 창을 열음
{
for (int i = 0; i < buffIconOn.Length; i++)
buffIconOn[i].SetActive(!buffIconOff[i].activeSelf);
canvasUI.enabled = true;
BattleMgr.CloseFailScroll();
if (bReLocalize)
Localize(false);
atkBuff = DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.atkLv).atkValue;
goldDrop = DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.goldLv).goldValue;
expDrop = DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.expLv).expValue;
//imgAd.SetActive(!isNoAd);
BuffLevelSet(AdNumber.atk);
BuffLevelSet(AdNumber.gold);
BuffLevelSet(AdNumber.exp);
BuffExpSet(AdNumber.atk);
BuffExpSet(AdNumber.gold);
BuffExpSet(AdNumber.exp);
//SampleAdsMgr.LoadRewardedAd();
if (DataHandler.GetShop(1).buyCnt == 1)
{
AdBuffNoAd();
}
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
ButtonActive();
}
public void BuffWindowOff()//열린 창을 닫음
{
MissionMgr.SRefreshMission();
canvasUI.enabled = false;
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
for (int i = 0; i < buffIconOn.Length; i++)
buffIconOn[i].SetActive(false);
}
public void ButtonActive()//레벨업 버튼 활성화 여부를 판별한다.
{
if (DataHandler.PlayBuff.atkExp >= DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.atkLv + 1).exp)
{
btnBuffLvUp[(int)AdNumber.atk].interactable = true;
btnLevelBedge[(int)AdNumber.atk].SetActive(true);
if (buffMax[(int)AdNumber.atk].activeSelf)
{
btnLevelBedge[(int)AdNumber.atk].SetActive(false);
}
}
else
{
btnBuffLvUp[(int)AdNumber.atk].interactable = false;
btnLevelBedge[(int)AdNumber.atk].SetActive(false);
}
if (DataHandler.PlayBuff.goldExp >= DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.goldLv + 1).exp)
{
btnBuffLvUp[(int)AdNumber.gold].interactable = true;
btnLevelBedge[(int)AdNumber.gold].SetActive(true);
if (buffMax[(int)AdNumber.gold].activeSelf)
{
btnLevelBedge[(int)AdNumber.gold].SetActive(false);
}
}
else
{
btnBuffLvUp[(int)AdNumber.gold].interactable = false;
btnLevelBedge[(int)AdNumber.gold].SetActive(false);
}
if (DataHandler.PlayBuff.expExp >= DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.expLv + 1).exp)
{
btnBuffLvUp[(int)AdNumber.exp].interactable = true;
btnLevelBedge[(int)AdNumber.exp].SetActive(true);
if (buffMax[(int)AdNumber.exp].activeSelf)
{
btnLevelBedge[(int)AdNumber.exp].SetActive(false);
}
}
else
{
btnBuffLvUp[(int)AdNumber.exp].interactable = false;
btnLevelBedge[(int)AdNumber.exp].SetActive(false);
}
}
int activeBadge = 0;
public void BadgeActive()//메인메뉴의 뱃지 활성화 여부를 판별한다.
{
if (DataHandler.PlayBuff.atkExp >= DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.atkLv + 1).exp)
{
//badge[(int)AdNumber.atk].SetActive(true);
activeBadge++;
if (DataHandler.PlayBuff.atkLv >= DataHandler.GetSysAdBuffs().Length)
{
//badge[(int)AdNumber.atk].SetActive(false);
activeBadge--;
}
}
else
{
//badge[(int)AdNumber.atk].SetActive(false);
}
if (DataHandler.PlayBuff.goldExp >= DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.goldLv + 1).exp)
{
//badge[(int)AdNumber.gold].SetActive(true);
activeBadge++;
if (DataHandler.PlayBuff.goldLv >= DataHandler.GetSysAdBuffs().Length)
{
//badge[(int)AdNumber.gold].SetActive(false);
activeBadge--;
}
}
else
{
//badge[(int)AdNumber.gold].SetActive(false);
}
if (DataHandler.PlayBuff.expExp >= DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.expLv + 1).exp)
{
//badge[(int)AdNumber.exp].SetActive(true);
activeBadge++;
if (DataHandler.PlayBuff.expLv >= DataHandler.GetSysAdBuffs().Length)
{
//badge[(int)AdNumber.exp].SetActive(false);
activeBadge--;
}
}
else
{
//badge[(int)AdNumber.exp].SetActive(false);
}
if (activeBadge > 0)//메인메뉴의 광고버프 뱃지는 하나이므로 한개 이상 조건을 만족하면 뱃지를 틀어준다.
{
adbuffBadge.SetActive(true);
activeBadge = 0;
}
else
{
adbuffBadge.SetActive(false);
activeBadge = 0;
}
}
#endregion
#region BuffStartOn
public static void StartOnAdBuffAttack()//공격 벼프를 틀고 타이머를 세팅하며 버프아이콘을 교체하고 스텟을 재계산한다. 하위 3개는 게임 시작할때 조건에 따라 작동된다.
{
BuffMgr.Instance.OnAdBuff(eEffectType.AtkBuff, Instance.atkBuff, true);
Instance.btnAtk.interactable = false;
Instance.btnBuffAd[(int)AdNumber.atk].interactable = false;
Instance.txtBuffOn[(int)AdNumber.atk].gameObject.SetActive(false);
Instance.atkOn.gameObject.SetActive(true);
Instance.txtTimerAtk.gameObject.SetActive(true);
Instance.SetTimer((int)AdNumber.atk);
Instance.SwitchBuffIcon((int)AdNumber.atk, true);
BattleMgr.StatRecalc();
EnhanceMgr.Instance.CalcPlayerInfoStat();
}
public static void StartOnAdBuffGold()//골드 벼프를 틀고 타이머를 세팅하며 버프아이콘을 교체하고 스텟을 재계산한다.
{
BuffMgr.Instance.OnAdBuff(eEffectType.GoldDropRate, Instance.goldDrop, true);
Instance.btnGold.interactable = false;
Instance.btnBuffAd[(int)AdNumber.gold].interactable = false;
Instance.txtBuffOn[(int)AdNumber.gold].gameObject.SetActive(false);
Instance.goldOn.gameObject.SetActive(true);
Instance.txtTimerGold.gameObject.SetActive(true);
Instance.SetTimer((int)AdNumber.gold);
Instance.SwitchBuffIcon((int)AdNumber.gold, true);
EnhanceMgr.Instance.CalcPlayerInfoStat();
}
public static void StartOnAdBuffExp()//경험치 벼프를 틀고 타이머를 세팅하며 버프아이콘을 교체하고 스텟을 재계산한다.
{
BuffMgr.Instance.OnAdBuff(eEffectType.ExpDropRate, Instance.expDrop, true);
Instance.btnExp.interactable = false;
Instance.btnBuffAd[(int)AdNumber.exp].interactable = false;
Instance.txtBuffOn[(int)AdNumber.exp].gameObject.SetActive(false);
Instance.expOn.gameObject.SetActive(true);
Instance.txtTimerExp.gameObject.SetActive(true);
Instance.SetTimer((int)AdNumber.exp);
Instance.SwitchBuffIcon((int)AdNumber.exp, true);
EnhanceMgr.Instance.CalcPlayerInfoStat();
}
#endregion
#region Buff OnOff
public static void btnOnAdBuffAttack()//광고를 틀고 광고가 전부 봐졌다면 버프를 실행한다. 광고제거가 있다면 계속 유지되므로 여기서는 구매여부를 점검하지 않는다.
{
//SampleAdsMgr.ShowAds();
SampleAdsMgr.ShowRewardedAd(SampleAdsMgr.ADRewardType.AdAtkBuff);
//OnAdBuffAttack();
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
}
public static void SOnAdBuffAttack()
{
Instance.OnAdBuffAttack();
}
private void OnAdBuffAttack()//광고를 보고나서 실행하는 부분. 하위 3개 묶음씩은 각 경험치와 골드를 보는 곳이다.
{
BuffMgr.Instance.OnAdBuff(eEffectType.AtkBuff, Instance.atkBuff, true);
Instance.btnAtk.interactable = false;
Instance.btnBuffAd[(int)AdNumber.atk].interactable = false;
Instance.txtBuffOn[(int)AdNumber.atk].gameObject.SetActive(false);
Instance.atkOn.gameObject.SetActive(true);
Instance.txtTimerAtk.gameObject.SetActive(true);
Instance.adTimer[(int)AdNumber.atk] = Instance.adTime;
Instance.SetTimer((int)AdNumber.atk);
Instance.SwitchBuffIcon((int)AdNumber.atk, true);
BattleMgr.StatRecalc();
EnhanceMgr.Instance.CalcPlayerInfoStat();
}
public static void btnOnAdBuffGold()//골드
{
SampleAdsMgr.ShowRewardedAd(SampleAdsMgr.ADRewardType.AdGoldBuff);
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
}
public static void SOnAdBuffGold()
{
Instance.OnAdBuffGold();
}
private void OnAdBuffGold()
{
BuffMgr.Instance.OnAdBuff(eEffectType.GoldDropRate, Instance.goldDrop, true);
Instance.btnGold.interactable = false;
Instance.btnBuffAd[(int)AdNumber.gold].interactable = false;
Instance.txtBuffOn[(int)AdNumber.gold].gameObject.SetActive(false);
Instance.goldOn.gameObject.SetActive(true);
Instance.txtTimerGold.gameObject.SetActive(true);
Instance.adTimer[(int)AdNumber.gold] = Instance.adTime;
Instance.SetTimer((int)AdNumber.gold);
Instance.SwitchBuffIcon((int)AdNumber.gold, true);
EnhanceMgr.Instance.CalcPlayerInfoStat();
}
public static void btnOnAdBuffExp()//경험치
{
SampleAdsMgr.ShowRewardedAd(SampleAdsMgr.ADRewardType.AdExpBuff);
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
}
public static void SOnAdBuffExp()
{
Instance.OnAdBuffExp();
}
private void OnAdBuffExp()
{
BuffMgr.Instance.OnAdBuff(eEffectType.ExpDropRate, Instance.expDrop, true);
Instance.btnExp.interactable = false;
Instance.btnBuffAd[(int)AdNumber.exp].interactable = false;
Instance.txtBuffOn[(int)AdNumber.exp].gameObject.SetActive(false);
Instance.expOn.gameObject.SetActive(true);
Instance.txtTimerExp.gameObject.SetActive(true);
Instance.adTimer[(int)AdNumber.exp] = Instance.adTime;
Instance.SetTimer((int)AdNumber.exp);
Instance.SwitchBuffIcon((int)AdNumber.exp, true);
EnhanceMgr.Instance.CalcPlayerInfoStat();
}
public static void btnOffAdBuffAttack()//광고제거가 없고 타이머가 다 되었을때 버프를 종료한다.
{
BuffMgr.Instance.OffAdBuff(eEffectType.AtkBuff, true);
Instance.btnAtk.interactable = true;
Instance.btnBuffAd[(int)AdNumber.atk].interactable = true;
Instance.txtBuffOn[(int)AdNumber.atk].gameObject.SetActive(true);
Instance.atkOn.gameObject.SetActive(false);
Instance.txtTimerAtk.gameObject.SetActive(false);
Instance.SwitchBuffIcon((int)AdNumber.atk, false);
BattleMgr.StatRecalc();
EnhanceMgr.Instance.CalcPlayerInfoStat();
Instance.txtBuffOn[(int)AdNumber.atk].text = LocalizationText.GetText("adbuff_playad");
}
public static void btnOffAdBuffGold()
{
BuffMgr.Instance.OffAdBuff(eEffectType.GoldDropRate, true);
Instance.btnGold.interactable = true;
Instance.btnBuffAd[(int)AdNumber.gold].interactable = true;
Instance.txtBuffOn[(int)AdNumber.gold].gameObject.SetActive(true);
Instance.goldOn.gameObject.SetActive(false);
Instance.txtTimerGold.gameObject.SetActive(false);
Instance.SwitchBuffIcon((int)AdNumber.gold, false);
EnhanceMgr.Instance.CalcPlayerInfoStat();
Instance.txtBuffOn[(int)AdNumber.gold].text = LocalizationText.GetText("adbuff_playad");
}
public static void btnOffAdBuffExp()
{
BuffMgr.Instance.OffAdBuff(eEffectType.ExpDropRate, true);
Instance.btnExp.interactable = true;
Instance.btnBuffAd[(int)AdNumber.exp].interactable = true;
Instance.txtBuffOn[(int)AdNumber.exp].gameObject.SetActive(true);
Instance.expOn.gameObject.SetActive(false);
Instance.txtTimerExp.gameObject.SetActive(false);
Instance.SwitchBuffIcon((int)AdNumber.exp, false);
EnhanceMgr.Instance.CalcPlayerInfoStat();
Instance.txtBuffOn[(int)AdNumber.exp].text = LocalizationText.GetText("adbuff_playad");
}
private void SwitchBuffIcon(int inum, bool bOn)//버프 여부에 따른 아이콘 교체
{
switch (inum)
{
case (int)AdNumber.atk:
if (canvasUI.enabled)
buffIconOn[(int)AdNumber.atk].gameObject.SetActive(bOn);
buffIconOff[(int)AdNumber.atk].gameObject.SetActive(!bOn);
break;
case (int)AdNumber.gold:
if (canvasUI.enabled)
buffIconOn[(int)AdNumber.gold].gameObject.SetActive(bOn);
buffIconOff[(int)AdNumber.gold].gameObject.SetActive(!bOn);
break;
case (int)AdNumber.exp:
if (canvasUI.enabled)
buffIconOn[(int)AdNumber.exp].gameObject.SetActive(bOn);
buffIconOff[(int)AdNumber.exp].gameObject.SetActive(!bOn);
break;
}
}
#endregion
#region Time
public static void SUpdateOneSec()
{
if (Instance != null)
Instance.UpdateOneSec();
}
// 매초마다 실행. SingleMgr에서 호출.
private void UpdateOneSec()
{
if (BattleMgr.Instance.BattlePause) return;
for (int i = 0; i < adTimer.Length; i++)
{
var timer = adTimer[i];
AdNumber adNum = (AdNumber)i;
if (timer < 0) continue;
if (timer >= 0 || isNoAd) //타이머가 남아있거나 광고제거가 구매되어있다면 진입한다.
{
if(timer >= 0 && !isNoAd) //타이머가 남아있는데 광고제거가 없다면 타이머가 줄어든다.
timer -= 1; //초당 시간 줄어드는 양
var adBuff = DataHandler.GetSysAdBuffLevel(DataHandler.GetSysAdBuffMaxLevel());
switch (adNum) //1초당 경험치 1을 추가한다.
{
case AdNumber.atk:
if (adBuff.exp > DataHandler.PlayBuff.atkExp)
{
DataHandler.PlayBuff.atkExp += 1;//초당 경험치량
if(adBuff.exp < DataHandler.PlayBuff.atkExp)
{
DataHandler.PlayBuff.atkExp = adBuff.exp;
}
BuffExpSet(AdNumber.atk);
BadgeActive();
}
break;
case AdNumber.gold:
if (adBuff.exp > DataHandler.PlayBuff.goldExp)
{
DataHandler.PlayBuff.goldExp += 1;//초당 경험치량
if (adBuff.exp < DataHandler.PlayBuff.goldExp)
{
DataHandler.PlayBuff.goldExp = adBuff.exp;
}
BuffExpSet(AdNumber.gold);
BadgeActive();
}
break;
case AdNumber.exp:
if (adBuff.exp > DataHandler.PlayBuff.expExp)
{
DataHandler.PlayBuff.expExp += 1;//초당 경험치량
if (adBuff.exp < DataHandler.PlayBuff.expExp)
{
DataHandler.PlayBuff.expExp = adBuff.exp;
}
BuffExpSet(AdNumber.exp);
BadgeActive();
}
break;
}
if (timer <= 0)
{
switch (adNum)
{
case AdNumber.atk:
btnOffAdBuffAttack();
break;
case AdNumber.gold:
btnOffAdBuffGold();
break;
case AdNumber.exp:
btnOffAdBuffExp();
break;
}
}
else
{
SetTimer(i);
}
}
}
if(canvasUI.isActiveAndEnabled)
{
ButtonActive();
}
}
private void SetTimer(int i)//1분 이상 남았을때와 이하로 남았을때 표시하는 방식을 다르게 해준다.
{
if (adTimer[i] < 60)
{
switch ((AdNumber)i)
{
case AdNumber.atk:
txtTimerAtk.text = FormatString.StringFormat("{0}s", adTimer[i]);
txtTimer[(int)AdNumber.atk].text = FormatString.StringFormat("{0} : {1}", adTimer[i] / 60, adTimer[i] % 60);
break;
case AdNumber.gold:
txtTimerGold.text = FormatString.StringFormat("{0}s", adTimer[i]);
txtTimer[(int)AdNumber.gold].text = FormatString.StringFormat("{0} : {1}", adTimer[i] / 60, adTimer[i] % 60);
break;
case AdNumber.exp:
txtTimerExp.text = FormatString.StringFormat("{0}s", adTimer[i]);
txtTimer[(int)AdNumber.exp].text = FormatString.StringFormat("{0} : {1}", adTimer[i] / 60, adTimer[i] % 60);
break;
}
}
else
{
switch ((AdNumber)i)
{
case AdNumber.atk:
txtTimerAtk.text = FormatString.StringFormat("{0:0}m", adTimer[i]/60);
txtTimer[(int)AdNumber.atk].text = FormatString.StringFormat("{0} : {1}", adTimer[i] / 60, adTimer[i] % 60);
break;
case AdNumber.gold:
txtTimerGold.text = FormatString.StringFormat("{0:0}m", adTimer[i]/60);
txtTimer[(int)AdNumber.gold].text = FormatString.StringFormat("{0} : {1}", adTimer[i] / 60, adTimer[i] % 60);
break;
case AdNumber.exp:
txtTimerExp.text = FormatString.StringFormat("{0:0}m", adTimer[i]/60);
txtTimer[(int)AdNumber.exp].text = FormatString.StringFormat("{0} : {1}", adTimer[i] / 60, adTimer[i] % 60);
break;
}
}
}
#endregion Time
#region AdFree
public static void SAdBUffNoAd()
{
Instance.AdBuffNoAd();
}
//광고제거가 구매되었다면 타이머를 제거하고 무제한 표시를 활성화한다.
public void AdBuffNoAd()
{
SOnAdBuffAttack();
SOnAdBuffGold();
SOnAdBuffExp();
imgAd.SetActive(false);
txtTimerAtk.gameObject.SetActive(false);
txtTimerGold.gameObject.SetActive(false);
txtTimerExp.gameObject.SetActive(false);
for (int i = 0; i < btnBuffAd.Length; i++)
{
isNoAd = true;
btnBuffAd[i].gameObject.SetActive(false);
txtTimer[i].gameObject.SetActive(false);
timerInf[i].SetActive(true);
}
}
public void GoAdFreeShop()//광고제거 배너를 누르면 바로 광고제거를 구매하는 창으로 넘어간다.
{
//ShopMgr.SOpenShopSpecial();
ShopMgr.STryBuy(ShopMgr.SSGetSpecialGetPackKey());
BuffWindowOff();
}
#endregion
#region BuffLvExp
public void BuffLevelSet(AdNumber iadnum)//버프레벨과 버프효과 퍼센트를 표기한다.
{
switch (iadnum)
{
case AdNumber.atk:
txtBuffLevel[(int)iadnum].text = FormatString.StringFormat("Lv. {0}", DataHandler.PlayBuff.atkLv);
txtBuffDesc[(int)iadnum].text = FormatString.StringFormat("{0} + {1}", LocalizationText.GetText("adbuff_atk_buff_per"),
FormatString.TextIntPer0(DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.atkLv).atkValue));
break;
case AdNumber.gold:
txtBuffLevel[(int)iadnum].text = FormatString.StringFormat("Lv. {0}", DataHandler.PlayBuff.goldLv);
txtBuffDesc[(int)iadnum].text = FormatString.StringFormat("{0} + {1}", LocalizationText.GetText("adbuff_gold_buff_per"),
FormatString.TextIntPer0(DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.goldLv).goldValue));
break;
case AdNumber.exp:
txtBuffLevel[(int)iadnum].text = FormatString.StringFormat("Lv. {0}", DataHandler.PlayBuff.expLv);
txtBuffDesc[(int)iadnum].text = FormatString.StringFormat("{0} + {1}", LocalizationText.GetText("adbuff_exp_buff_per"),
FormatString.TextIntPer0(DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.expLv).expValue));
break;
}
}
public void BuffExpSet(AdNumber iadnum)//경험치를 세팅한다.
{
dAdBuff bufflvnext;
dAdBuff bufflvcurrent;
float fexpmax = 0;
float fprevmax = 0;
float maxlvexp = DataHandler.GetSysAdBuffLevel(DataHandler.GetSysAdBuffs().Length).exp - DataHandler.GetSysAdBuffLevel(DataHandler.GetSysAdBuffs().Length - 1).exp;
switch (iadnum)
{
case AdNumber.atk:
bufflvnext = DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.atkLv + 1);
bufflvcurrent = DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.atkLv);
fexpmax = bufflvnext.exp;
fprevmax = bufflvcurrent.exp;
txtBuffExpNum[(int)iadnum].text = FormatString.TextCntPer((DataHandler.PlayBuff.atkExp - fprevmax).ToString(), (fexpmax - fprevmax).ToString());
if (DataHandler.PlayBuff.atkLv >= DataHandler.GetSysAdBuffs().Length)
{
txtBuffExpNum[(int)iadnum].text = "MAX";
txtBuffExpNum[(int)iadnum].color = Global.CLR_TextYellow;
sldBuffExp[(int)iadnum].value = 1;
buffMax[(int)iadnum].SetActive(true);
}
else
{
sldBuffExp[(int)iadnum].value = (DataHandler.PlayBuff.atkExp - fprevmax) / (fexpmax - fprevmax);
}
break;
case AdNumber.gold:
bufflvnext = DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.goldLv + 1);
bufflvcurrent = DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.goldLv);
fexpmax = bufflvnext.exp;
fprevmax = bufflvcurrent.exp;
txtBuffExpNum[(int)iadnum].text = FormatString.TextCntPer((DataHandler.PlayBuff.goldExp - fprevmax).ToString(), (fexpmax - fprevmax).ToString());
if (DataHandler.PlayBuff.goldLv >= DataHandler.GetSysAdBuffs().Length)
{
txtBuffExpNum[(int)iadnum].text = "MAX";
txtBuffExpNum[(int)iadnum].color = Global.CLR_TextYellow;
sldBuffExp[(int)iadnum].value = 1;
buffMax[(int)iadnum].SetActive(true);
}
else
{
sldBuffExp[(int)iadnum].value = (DataHandler.PlayBuff.goldExp - fprevmax) / (fexpmax - fprevmax);
}
break;
case AdNumber.exp:
bufflvnext = DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.expLv + 1);
bufflvcurrent = DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.expLv);
fexpmax = bufflvnext.exp;
fprevmax = bufflvcurrent.exp;
txtBuffExpNum[(int)iadnum].text = FormatString.TextCntPer((DataHandler.PlayBuff.expExp - fprevmax).ToString(), (fexpmax - fprevmax).ToString());
if (DataHandler.PlayBuff.expLv >= DataHandler.GetSysAdBuffs().Length)
{
txtBuffExpNum[(int)iadnum].text = "MAX";
txtBuffExpNum[(int)iadnum].color = Global.CLR_TextYellow;
sldBuffExp[(int)iadnum].value = 1;
buffMax[(int)iadnum].SetActive(true);
}
else
{
sldBuffExp[(int)iadnum].value = (DataHandler.PlayBuff.expExp - fprevmax) / (fexpmax - fprevmax);
}
break;
}
}
public void BuffAtkLevelUp()//레벨업 버튼을 누르면 광고버프레벨이 올라간다.
{
if (DataHandler.GetSysAdBuffs().Length > DataHandler.PlayBuff.atkLv)
{
if (DataHandler.PlayBuff.atkExp >= DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.atkLv + 1).exp)
{
ptcLevelUp[0].Play();
DataHandler.PlayBuff.atkLv++;
BuffLevelSet(AdNumber.atk);
BuffExpSet(AdNumber.atk);
BuffMgr.Instance.OnAdBuff(eEffectType.AtkBuff, DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.atkLv).atkValue, true);
BattleMgr.StatRecalc();
EnhanceMgr.Instance.CalcPlayerInfoStat();
SoundMgr.Instance.PlaySfx(SoundName.ReinforceSuccess);
TrySvPlayBuffSave(DataHandler.PlayBuff);
}
}
}
public void BuffGoldLevelUp()
{
if (DataHandler.GetSysAdBuffs().Length > DataHandler.PlayBuff.goldLv)
{
if (DataHandler.PlayBuff.goldExp >= DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.goldLv + 1).exp)
{
ptcLevelUp[1].Play();
DataHandler.PlayBuff.goldLv++;
BuffLevelSet(AdNumber.gold);
BuffExpSet(AdNumber.gold);
BuffMgr.Instance.OnAdBuff(eEffectType.GoldDropRate, DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.goldLv).goldValue, true);
BattleMgr.StatRecalc();
EnhanceMgr.Instance.CalcPlayerInfoStat();
SoundMgr.Instance.PlaySfx(SoundName.ReinforceSuccess);
TrySvPlayBuffSave(DataHandler.PlayBuff);
}
}
}
public void BuffExpLevelUp()
{
if (DataHandler.GetSysAdBuffs().Length > DataHandler.PlayBuff.expLv)
{
if (DataHandler.PlayBuff.expExp >= DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.expLv + 1).exp)
{
ptcLevelUp[2].Play();
DataHandler.PlayBuff.expLv++;
BuffLevelSet(AdNumber.exp);
BuffExpSet(AdNumber.exp);
BuffMgr.Instance.OnAdBuff(eEffectType.ExpDropRate, DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.expLv).expValue, true);
BattleMgr.StatRecalc();
EnhanceMgr.Instance.CalcPlayerInfoStat();
SoundMgr.Instance.PlaySfx(SoundName.ReinforceSuccess);
TrySvPlayBuffSave(DataHandler.PlayBuff);
}
}
}
#endregion
#region SVConnect
nAdBuffReturn adBuffData = null;
public static void TrySvPlayBuffSave(cAdBuffLevel data)
{
Instance.adBuffData = new nAdBuffReturn();
Instance.adBuffData.playBuff = data;
Instance.APlayBuffSave();
}
private void APlayBuffSave()//버프레벨업을 할때 저장한다. 버프 경험치는 로컬에 저장된다(서버에는 1초마다 저장을 할 수는 없으므로)
{
CoverCamera.Hold();
SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.SaveAdBuffLevel), typeof(nAdBuffReturn), APlayBuffSaveSucc, APlayBuffSaveFail, adBuffData, true);
}
private void APlayBuffSaveFail(SvError error, object request)
{
CoverCamera.Release();
adBuffData = null;
}
private void APlayBuffSaveSucc(object result, object request)
{
nAdBuffReturn data = result as nAdBuffReturn;
if (data == null)
{
APlayBuffSaveFail(new SvError(eErrorCode.NULL_OR_EMPTY), request);
return;
}
DataHandler.PlayBuff.Save(DataHandler.PlayData.server);
ButtonActive();
BadgeActive();
adBuffData = null;
CoverCamera.Release();
}
#endregion
}