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.
2278 lines
75 KiB
2278 lines
75 KiB
using IVDataFormat;
|
|
using IVServerFormat;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Numerics;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using Vector2 = UnityEngine.Vector2;
|
|
|
|
public class PetMgr : MonoBehaviour
|
|
{
|
|
#region Const
|
|
private static PetMgr curMgr = null;
|
|
|
|
private const float F_LeftGoodsLeft = -170f;
|
|
private const float F_LeftGoodsMid = 0f;
|
|
#endregion Const
|
|
|
|
#region UI
|
|
[Header("UI")]
|
|
[SerializeField]
|
|
private TextMeshProUGUI txtMainT;
|
|
[SerializeField]
|
|
Button mainPetButton;
|
|
GameObject mainLock;
|
|
[SerializeField]
|
|
private GameObject goMainBadge;
|
|
|
|
[SerializeField]
|
|
private Canvas canvasUI;
|
|
private ButtonIV[] btnTabs;
|
|
private Image[] imgTabLineBottoms;
|
|
private Image[] imgTabLineRights;
|
|
private GameObject[] goTabBadges;
|
|
private RectTransform rtrfSvPet;
|
|
|
|
// 통합 레벨 효과.
|
|
private GameObject groupTotalEfc;
|
|
private TextMeshProUGUI txtTotalEfcT, txtTotalLv, txtTotalEfc;
|
|
private ButtonIV btnComposeAll;
|
|
|
|
// 프리셋.
|
|
private GameObject groupPreset;
|
|
private ButtonIV[] btnPresetTabs;
|
|
private GoodsItem[] goodsPresets;
|
|
private GameObject[] goPresetUnsets, goPresetEmptys;
|
|
|
|
|
|
[SerializeField] float petSpiritScrTopValue = 149f;
|
|
[SerializeField] float petScrTopValue = 429f;
|
|
[SerializeField] EScrController escrPet;
|
|
|
|
// 왼쪽 정보창.
|
|
[SerializeField]
|
|
Canvas petLeftInfo;
|
|
private GoodsItem goodsInfo;
|
|
private RectTransform rtrfGoodsInfo;
|
|
private GameObject goBtnInfoHelp;
|
|
private TextMeshProUGUI txtInfoT;
|
|
|
|
// 펫 정보창.
|
|
private GameObject groupInfoPet;
|
|
private TextMeshProUGUI txtInfoUnlockLv;
|
|
private TextMeshProUGUI txtInfoName;
|
|
private GraphicsColorSetter txtInfoNameColorSetter;
|
|
private TextMeshProUGUI txtInfoLv;
|
|
private GameObject goInfoMax;
|
|
private Image imgBtnInfoEnhance;
|
|
private ButtonIV btnInfoEnhance, btnInfoAwaken;
|
|
private TextMeshProUGUI txtInfoEnhance;
|
|
|
|
// 펫 효과 탭.
|
|
private GameObject goBtnInfoEfcAddLock;
|
|
private Image imgTabInfoLineRight;
|
|
private ButtonIV btnTabInfoEffect, btnTabInfoEffectAdd;
|
|
private GameObject groupInfoPetEffect, groupInfoPetEffectAdd;
|
|
private GameObject[] goInfoEfcs;
|
|
[SerializeField] TextMeshProUGUI[] txtInfoEfcTs;
|
|
[SerializeField] TextMeshProUGUI[] txtInfoEfcCurs;
|
|
[SerializeField] GameObject[] InfoEfcArrowObjs;
|
|
[SerializeField] TextMeshProUGUI[] txtInfoEfcNexts;
|
|
|
|
// 펫 추가 효과.
|
|
private EfcAddItem[] efcAddItems;
|
|
private EfcAddItem efcAddOption;
|
|
private ButtonIV btnEfcAdd, btnEfcAddAuto;
|
|
private GameObject groupAutoNow;
|
|
private TextMeshProUGUI txtEfcAddPrice;
|
|
|
|
// 추가 효과 자동 변경.
|
|
private GameObject groupOptionAuto;
|
|
private ButtonIV btnEfcAddAutoStart;
|
|
private TextMeshProUGUI txtEfcAddPriceStart;
|
|
private EScrEfcOption[] efcOptionRarties;
|
|
[SerializeField]
|
|
private EScrController escrEfcAddAuto;
|
|
|
|
// 펫 스피릿 정보창.
|
|
private GameObject groupInfoSpirit;
|
|
private TextMeshProUGUI txtInfoSpiritName, txtInfoSpiritDesc;
|
|
private ButtonIV btnInfoSpiritCompose;
|
|
#endregion UI
|
|
|
|
#region Variables
|
|
private int iLoading = 1;
|
|
private bool bReLocalize = true;
|
|
private bool bReLocalizePet = false;
|
|
private bool bInitNeedPet = true;
|
|
|
|
private int iSelectedTab = -1;
|
|
private int iSelectedPreset = -1;
|
|
private int iSvType = -1;
|
|
private int iSelectedId = -1;
|
|
private int iSelectedCount = 0;
|
|
|
|
private int[][] iPresetPets;
|
|
private bool bChangePreset = false;
|
|
|
|
private EnhancedUI.SmallList<int> petRows;
|
|
private int[] petIds;
|
|
|
|
private bool bInitNeedOption = true;
|
|
// 자동 변경인지.
|
|
private bool bEfcAddAuto = false;
|
|
public static bool GetEfcAddAuto()
|
|
{
|
|
return curMgr.bEfcAddAuto;
|
|
}
|
|
// 변경 통신 중인지.
|
|
private bool bEfcAddChanging = false;
|
|
private int iEfcAddSlots = 0;
|
|
// 자동 변경 옵션 선택.
|
|
private bool[] bSelectedOptions;
|
|
// 자동 변경 옵션.
|
|
private eEffectType[] efcOptions;
|
|
|
|
private bool bClicking = false;
|
|
private nIdEnhance dataEnhance = null;
|
|
|
|
bool isUnlockPet = false;
|
|
#endregion Variables
|
|
|
|
#region Base
|
|
public static void SLocalize(bool bmain)
|
|
{
|
|
if (curMgr != null)
|
|
curMgr.Localize(bmain);
|
|
}
|
|
|
|
private void Localize(bool bmain)
|
|
{
|
|
if (bmain)
|
|
{
|
|
txtMainT.text = LocalizationText.GetText("pet_title");
|
|
|
|
//IsUnlock();
|
|
}
|
|
else
|
|
{
|
|
bReLocalize = false;
|
|
Transform trfcanvas = canvasUI.transform;
|
|
trfcanvas.Find("txtT").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("pet_title");
|
|
btnTabs = trfcanvas.Find("tabWrapTop").GetComponentsInChildren<ButtonIV>(true);
|
|
goTabBadges = new GameObject[btnTabs.Length];
|
|
for (int i = 0; i < btnTabs.Length; i++)
|
|
{
|
|
goTabBadges[i] = btnTabs[i].transform.Find("badge").gameObject;
|
|
}
|
|
|
|
btnTabs[0].transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("pet_title");
|
|
btnTabs[1].transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("pet_spirit");
|
|
|
|
imgTabLineBottoms = new Image[btnTabs.Length];
|
|
imgTabLineRights = new Image[btnTabs.Length];
|
|
|
|
for (int i = 0; i < btnTabs.Length; i++)
|
|
{
|
|
imgTabLineBottoms[i] = btnTabs[i].transform.Find("linebottom").GetComponent<Image>();
|
|
imgTabLineRights[i] = btnTabs[i].transform.Find("lineright").GetComponent<Image>();
|
|
}
|
|
|
|
rtrfSvPet = trfcanvas.Find("SvPet").GetComponent<RectTransform>();
|
|
|
|
Transform trfefc = trfcanvas.Find("groupTotalEffect");
|
|
groupTotalEfc = trfefc.gameObject;
|
|
trfefc.Find("txtTotalLvT").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("pet_totallv");
|
|
txtTotalEfcT = trfefc.Find("txtTotalEfcT").GetComponent<TextMeshProUGUI>();
|
|
txtTotalLv = trfefc.Find("txtTotalLv").GetComponent<TextMeshProUGUI>();
|
|
txtTotalEfc = trfefc.Find("txtTotalEfc").GetComponent<TextMeshProUGUI>();
|
|
|
|
btnComposeAll = trfcanvas.Find("btnComposeAll").GetComponent<ButtonIV>();
|
|
btnComposeAll.transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_composeall");
|
|
|
|
Transform trfpreset = trfcanvas.Find("groupPreset");
|
|
groupPreset = trfpreset.gameObject;
|
|
trfpreset.Find("btnSave").Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_save");
|
|
btnPresetTabs = new ButtonIV[6];
|
|
btnPresetTabs[0] = trfpreset.Find("tab0").GetComponent<ButtonIV>();
|
|
btnPresetTabs[1] = trfpreset.Find("tab1").GetComponent<ButtonIV>();
|
|
btnPresetTabs[2] = trfpreset.Find("tab2").GetComponent<ButtonIV>();
|
|
btnPresetTabs[3] = trfpreset.Find("tab3").GetComponent<ButtonIV>();
|
|
btnPresetTabs[4] = trfpreset.Find("tab4").GetComponent<ButtonIV>();
|
|
btnPresetTabs[5] = trfpreset.Find("tab5").GetComponent<ButtonIV>();
|
|
|
|
goodsPresets = trfpreset.GetComponentsInChildren<GoodsItem>(true);
|
|
goPresetUnsets = new GameObject[goodsPresets.Length];
|
|
goPresetEmptys = new GameObject[goodsPresets.Length];
|
|
for (int i = 0; i < goodsPresets.Length; i++)
|
|
{
|
|
goPresetUnsets[i] = goodsPresets[i].transform.Find("unset").gameObject;
|
|
goPresetEmptys[i] = goodsPresets[i].transform.Find("empty").gameObject;
|
|
}
|
|
|
|
// 왼쪽 정보창.
|
|
Transform trfleft = petLeftInfo.transform;
|
|
goodsInfo = trfleft.Find("GoodsItem").GetComponent<GoodsItem>();
|
|
rtrfGoodsInfo = goodsInfo.GetComponent<RectTransform>();
|
|
goBtnInfoHelp = trfleft.Find("btnInfo").gameObject;
|
|
txtInfoT = trfleft.Find("txtT").GetComponent<TextMeshProUGUI>();
|
|
|
|
Transform trfleftpet = trfleft.Find("groupPet");
|
|
groupInfoPet = trfleftpet.gameObject;
|
|
txtInfoUnlockLv = trfleftpet.Find("txtUnlockLv").GetComponent<TextMeshProUGUI>();
|
|
txtInfoName = trfleftpet.Find("txtName").GetComponent<TextMeshProUGUI>();
|
|
txtInfoNameColorSetter = txtInfoName.GetComponent<GraphicsColorSetter>();
|
|
txtInfoLv = trfleftpet.Find("txtLv").GetComponent<TextMeshProUGUI>();
|
|
|
|
btnInfoEnhance = trfleftpet.Find("btnEnhance").GetComponent<ButtonIV>();
|
|
imgBtnInfoEnhance = btnInfoEnhance.GetComponent<Image>();
|
|
txtInfoEnhance = btnInfoEnhance.transform.Find("txtPrice").GetComponent<TextMeshProUGUI>();
|
|
btnInfoEnhance.transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_enhance");
|
|
btnInfoAwaken = trfleftpet.Find("btnAwaken").GetComponent<ButtonIV>();
|
|
btnInfoAwaken.transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_awaken");
|
|
goInfoMax = trfleftpet.Find("goMax").gameObject;
|
|
goInfoMax.transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText(Global.STR_MAX);
|
|
|
|
goBtnInfoEfcAddLock = trfleftpet.Find("goEffectAddLock").gameObject;
|
|
imgTabInfoLineRight = trfleftpet.Find("tabSubLine2").GetComponent<Image>();
|
|
btnTabInfoEffect = trfleftpet.Find("tabEffect").GetComponent<ButtonIV>();
|
|
btnTabInfoEffect.transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_effectset");
|
|
btnTabInfoEffectAdd = trfleftpet.Find("tabEffectAdd").GetComponent<ButtonIV>();
|
|
btnTabInfoEffectAdd.transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_effectadd");
|
|
|
|
// 펫 장착 효과.
|
|
groupInfoPetEffect = trfleftpet.Find("groupEffect").gameObject;
|
|
Transform trfinfoefc = groupInfoPetEffect.transform;
|
|
goInfoEfcs = new GameObject[3];
|
|
for (int i = 0; i < goInfoEfcs.Length; i++)
|
|
goInfoEfcs[i] = trfinfoefc.GetChild(i).gameObject;
|
|
|
|
// 펫 추가 효과.
|
|
groupInfoPetEffectAdd = trfleftpet.Find("groupEffectAdd").gameObject;
|
|
EfcAddItem[] additems = groupInfoPetEffectAdd.GetComponentsInChildren<EfcAddItem>();
|
|
efcAddItems = new EfcAddItem[additems.Length - 1];
|
|
for (int i = 0; i < additems.Length; i++)
|
|
{
|
|
additems[i].Init();
|
|
if (i < additems.Length - 1)
|
|
{
|
|
efcAddItems[i] = additems[i];
|
|
efcAddItems[i].SetCondition(i + 1);
|
|
}
|
|
else
|
|
{
|
|
efcAddOption = additems[i];
|
|
efcAddOption.SetCondition(FormatString.StringFormat(LocalizationText.GetText("all_optionopen"), Global.STR_Rarity[cGoods.RLegend]));
|
|
}
|
|
}
|
|
groupInfoPetEffectAdd.transform.Find("txtOptionT").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_optionhaveefc");
|
|
btnEfcAdd = groupInfoPetEffectAdd.transform.Find("btnChange").GetComponent<ButtonIV>();
|
|
txtEfcAddPrice = btnEfcAdd.transform.Find("txtPrice").GetComponent<TextMeshProUGUI>();
|
|
btnEfcAdd.transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_changego");
|
|
btnEfcAddAuto = groupInfoPetEffectAdd.transform.Find("btnChangeAuto").GetComponent<ButtonIV>();
|
|
btnEfcAddAuto.transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_changeauto");
|
|
groupAutoNow = groupInfoPetEffectAdd.transform.Find("groupAutoNow").gameObject;
|
|
groupAutoNow.transform.Find("txtProgress").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_autoprocessing");
|
|
|
|
// 추가 효과 자동 변경.
|
|
groupOptionAuto = trfleft.Find("groupOptionAuto").gameObject;
|
|
groupOptionAuto.transform.Find("txtInfo").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("bag_efcautomsg");
|
|
groupOptionAuto.transform.Find("txtRarityT").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_selectrarity");
|
|
groupOptionAuto.transform.Find("txtOptionT").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_selectefc");
|
|
btnEfcAddAutoStart = groupOptionAuto.transform.Find("btnChange").GetComponent<ButtonIV>();
|
|
txtEfcAddPriceStart = btnEfcAddAutoStart.transform.Find("txtPrice").GetComponent<TextMeshProUGUI>();
|
|
btnEfcAddAutoStart.transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_changego");
|
|
|
|
efcOptionRarties = groupOptionAuto.transform.Find("rarities").GetComponentsInChildren<EScrEfcOption>();
|
|
efcOptionRarties[0].SetType(cGoods.TPet);
|
|
efcOptionRarties[1].SetType(cGoods.TPet);
|
|
efcOptionRarties[0].InitCell();
|
|
efcOptionRarties[1].InitCell();
|
|
efcOptionRarties[0].SetData(-1);
|
|
efcOptionRarties[1].SetData(-2);
|
|
efcOptionRarties[0].SetText(LocalizationText.GetText("awaken_grade_hero_up"));
|
|
efcOptionRarties[1].SetText(LocalizationText.GetText("awaken_grade_mystic"));
|
|
|
|
// 소모품.
|
|
groupInfoSpirit = trfleft.Find("groupSpirit").gameObject;
|
|
txtInfoSpiritName = groupInfoSpirit.transform.Find("txtName").GetComponent<TextMeshProUGUI>();
|
|
txtInfoSpiritDesc = groupInfoSpirit.transform.Find("txtDesc").GetComponent<TextMeshProUGUI>();
|
|
btnInfoSpiritCompose = groupInfoSpirit.transform.Find("btnCompose").GetComponent<ButtonIV>();
|
|
btnInfoSpiritCompose.transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_compose");
|
|
}
|
|
}
|
|
|
|
public static void IsUnlock()
|
|
{
|
|
if (curMgr.isUnlockPet)
|
|
{
|
|
return;
|
|
}
|
|
|
|
curMgr.mainLock = curMgr.mainPetButton.transform.Find("Image").gameObject;
|
|
|
|
curMgr.mainLock.SetActive(!DataHandler.IsClearStage(DataHandler.GetDungeonTypeInfo(DungeonMgr.DungeonKind.PetDG).openStage));
|
|
|
|
ColorBlock colorBlock = curMgr.mainPetButton.colors;
|
|
|
|
if (curMgr.mainLock.activeSelf)
|
|
{
|
|
colorBlock.normalColor = new Color(0.5f, 0.5f, 0.5f);
|
|
colorBlock.highlightedColor = new Color(0.5f, 0.5f, 0.5f);
|
|
colorBlock.selectedColor = new Color(0.5f, 0.5f, 0.5f);
|
|
colorBlock.pressedColor = new Color(0.5f, 0.5f, 0.5f);
|
|
|
|
curMgr.mainPetButton.colors = colorBlock;
|
|
}
|
|
else
|
|
{
|
|
curMgr.isUnlockPet = true;
|
|
|
|
colorBlock.normalColor = new Color(1f, 1f, 1f);
|
|
colorBlock.highlightedColor = new Color(1f, 1f, 1f);
|
|
colorBlock.selectedColor = new Color(1f, 1f, 1f);
|
|
colorBlock.pressedColor = new Color(1f, 1f, 1f);
|
|
|
|
curMgr.mainPetButton.colors = colorBlock;
|
|
}
|
|
|
|
}
|
|
|
|
// 설정에서 언어 변경 시 처리.
|
|
public static void SReLocalize()
|
|
{
|
|
curMgr.Localize(true);
|
|
curMgr.bReLocalize = true;
|
|
curMgr.bReLocalizePet = true;
|
|
}
|
|
|
|
// 백버튼 처리.
|
|
public static bool SCloseMenu()
|
|
{
|
|
return curMgr.CloseMenu();
|
|
}
|
|
|
|
private bool CloseMenu()
|
|
{
|
|
// 게임 시작 후 열린적 없음.
|
|
if (iSelectedTab < 0)
|
|
return false;
|
|
|
|
// 추가 효과 자동 변경 설정.
|
|
if (groupOptionAuto.activeSelf)
|
|
{
|
|
BtnEfcAddAutoClose();
|
|
return true;
|
|
}
|
|
|
|
// 추가 효과 자동 변경 진행중.
|
|
if (bEfcAddAuto)
|
|
{
|
|
BtnEfcAddChangeAutoStop();
|
|
return true;
|
|
}
|
|
|
|
if (canvasUI.enabled)
|
|
{
|
|
ClosePet();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private void Awake()
|
|
{
|
|
curMgr = this;
|
|
}
|
|
|
|
void Start()
|
|
{
|
|
SetBadge();
|
|
iLoading--;
|
|
//if (!DataHandler.GetPet(1).have)
|
|
//{
|
|
// TestGetPet();
|
|
//}
|
|
}
|
|
#endregion Base
|
|
|
|
#region UI
|
|
public static void SMovePet(eEventMoveType content)
|
|
{
|
|
curMgr.OpenPet();
|
|
switch (content)
|
|
{
|
|
case eEventMoveType.pet:
|
|
curMgr.TabPress(0);
|
|
break;
|
|
case eEventMoveType.petSprit:
|
|
curMgr.TabPress(1);
|
|
break;
|
|
}
|
|
}
|
|
|
|
// 펫창 열기.
|
|
public void OpenPet()
|
|
{
|
|
if (mainLock.activeSelf)
|
|
{
|
|
GameUIMgr.SOpenToast(FormatString.TextOpenStageClear(DataHandler.GetDungeonTypeInfo(DungeonMgr.DungeonKind.PetDG).openStage));//펫 던전 해금될때 해금됨
|
|
return;
|
|
}
|
|
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
if (bReLocalize)
|
|
Localize(false);
|
|
if (iSelectedTab < 0)
|
|
{
|
|
iPresetPets = new int[6][];
|
|
for (int i = 0; i < iPresetPets.Length; i++)
|
|
{
|
|
iPresetPets[i] = new int[3];
|
|
for (int k = 0; k < iPresetPets[i].Length; k++)
|
|
{
|
|
iPresetPets[i][k] = DataHandler.PlayData.petPresets[i][k];
|
|
}
|
|
}
|
|
TabPress(0);
|
|
}
|
|
else
|
|
{
|
|
escrPet.scroller.RefreshActiveCellViews();
|
|
SetLeftPetInfo();
|
|
TabLeftEffect();
|
|
if (iSelectedTab == 1)
|
|
btnComposeAll.interactable = DataHandler.IsPetSpiritComposable(fRangeRarity.All);
|
|
}
|
|
SetBadge();
|
|
SetTotalLvEfc();
|
|
|
|
canvasUI.enabled = true;
|
|
petLeftInfo.enabled = true;
|
|
//rtrfGoodsInfo.gameObject.SetActive(true);
|
|
//groupInfoPet.SetActive(true);
|
|
GameUIMgr.SRightWindowClose();
|
|
GameUIMgr.SOpenLeftPanel(change: true, pudding: true);
|
|
GameUIMgr.SSetMainUiOn(false);
|
|
BattleMgr.CloseFailScroll();
|
|
|
|
if (bReLocalizePet)
|
|
{
|
|
bReLocalizePet = false;
|
|
if (iSelectedTab == 0)
|
|
{
|
|
txtInfoT.text = LocalizationText.GetText("pet_info");
|
|
}
|
|
else
|
|
{
|
|
txtInfoT.text = LocalizationText.GetText("petspirit_info");
|
|
}
|
|
escrPet.Localize();
|
|
}
|
|
|
|
TabPress(iSelectedTab);
|
|
iLoading--;
|
|
}
|
|
|
|
public void TestGetPet()
|
|
{
|
|
SettingMgr.SGetPetT();
|
|
}
|
|
|
|
// 펫창 닫기.
|
|
public void ClosePet()
|
|
{
|
|
if (!canvasUI.enabled)
|
|
return;
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
ResetPetPreset();
|
|
MissionMgr.SRefreshMission();
|
|
|
|
canvasUI.enabled = false;
|
|
petLeftInfo.enabled = false;
|
|
groupOptionAuto.SetActive(false);
|
|
GameUIMgr.SCloseLeftPanel();
|
|
GameUIMgr.SSetMainUiOn(true);
|
|
|
|
if (isSave > 0)
|
|
{
|
|
GameUIMgr.SOpenToast(LocalizationText.GetText(Global.STR_Saved));
|
|
isSave = 0;
|
|
}
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
|
|
iLoading--;
|
|
}
|
|
|
|
// 도움말 열기.
|
|
public void OpenHelp()
|
|
{
|
|
}
|
|
#endregion UI
|
|
|
|
#region Tab
|
|
public void TabPress(int index)
|
|
{
|
|
if (iSelectedTab == index)
|
|
return;
|
|
iLoading++;
|
|
|
|
if (iSelectedTab >= 0)
|
|
{
|
|
btnTabs[iSelectedTab].interactable = true;
|
|
}
|
|
iSelectedTab = index;
|
|
btnTabs[iSelectedTab].interactable = false;
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
// 펫.
|
|
if (iSelectedTab == 0)
|
|
{
|
|
Vector2 v2pos = rtrfSvPet.offsetMax;
|
|
v2pos.y = -petScrTopValue;
|
|
rtrfSvPet.offsetMax = v2pos;
|
|
groupTotalEfc.SetActive(true);
|
|
groupPreset.SetActive(true);
|
|
txtInfoT.text = LocalizationText.GetText("pet_info");
|
|
btnComposeAll.gameObject.SetActive(false);
|
|
TabPreset(DataHandler.PlayData.usePetPreset);
|
|
|
|
iSvType = cGoods.TPet;
|
|
|
|
if (bInitNeedPet)
|
|
{
|
|
bInitNeedPet = false;
|
|
// 초기화.
|
|
int irowcnt = 4;
|
|
Dictionary<int, dPet> datas = DataHandler.GetPets();
|
|
petRows = new EnhancedUI.SmallList<int>();
|
|
petIds = new int[datas.Count];
|
|
|
|
int itemindex = 0;
|
|
foreach (var item in datas)
|
|
{
|
|
if (itemindex % irowcnt == 0)
|
|
petRows.Add(petRows.Count);
|
|
petIds[itemindex] = item.Key;
|
|
itemindex++;
|
|
}
|
|
int ipet = DataHandler.PlayData.petPresets[iSelectedPreset][0] - 1;
|
|
if (ipet < 0)
|
|
SelectPet(0, 0,true);
|
|
else
|
|
SelectPet(ipet / 4, ipet % 4,true);
|
|
escrPet.LoadDatas(petRows);
|
|
}
|
|
else
|
|
{
|
|
int ipet = DataHandler.PlayData.petPresets[iSelectedPreset][0] - 1;
|
|
if (ipet < 0)
|
|
SelectPet(0, 0,true);
|
|
else
|
|
SelectPet(ipet / 4, ipet % 4,true);
|
|
escrPet.scroller.RefreshActiveCellViews();
|
|
escrPet.scroller.SetScrollPositionImmediately(0f);
|
|
}
|
|
|
|
}
|
|
// 스피릿.
|
|
else
|
|
{
|
|
Vector2 v2pos = rtrfSvPet.offsetMax;
|
|
v2pos.y = -petSpiritScrTopValue;
|
|
rtrfSvPet.offsetMax = v2pos;
|
|
groupTotalEfc.SetActive(false);
|
|
groupPreset.SetActive(false);
|
|
txtInfoT.text = LocalizationText.GetText("petspirit_info");
|
|
btnComposeAll.interactable = DataHandler.IsPetSpiritComposable(fRangeRarity.All);
|
|
btnComposeAll.gameObject.SetActive(true);
|
|
|
|
iSvType = cGoods.TPetSpirit;
|
|
|
|
// 추가효과 자동 변경창 열려있으면 닫기.
|
|
if (groupOptionAuto.activeSelf)
|
|
{
|
|
rtrfGoodsInfo.gameObject.SetActive(true);
|
|
groupInfoPet.SetActive(true);
|
|
//goBtnInfoHelp.SetActive(true);
|
|
|
|
groupOptionAuto.SetActive(false);
|
|
btnEfcAdd.gameObject.SetActive(true);
|
|
btnEfcAddAuto.gameObject.SetActive(true);
|
|
groupAutoNow.SetActive(false);
|
|
}
|
|
|
|
SelectPet(0, 0,true);
|
|
escrPet.scroller.RefreshActiveCellViews();
|
|
escrPet.scroller.SetScrollPositionImmediately(0f);
|
|
}
|
|
|
|
// 선 표시.
|
|
for (int i = 0; i < imgTabLineBottoms.Length; i++)
|
|
{
|
|
imgTabLineBottoms[i].enabled = iSelectedTab != i;
|
|
if (i == iSelectedTab)
|
|
{
|
|
imgTabLineBottoms[i].enabled = false;
|
|
imgTabLineRights[i].enabled = true;
|
|
}
|
|
else
|
|
{
|
|
imgTabLineBottoms[i].enabled = true;
|
|
imgTabLineRights[i].enabled = true;
|
|
}
|
|
}
|
|
|
|
SetBadge();
|
|
iLoading--;
|
|
}
|
|
|
|
// 현재 스크롤뷰 타입.
|
|
public static int SGetSvType()
|
|
{
|
|
return curMgr.iSvType;
|
|
}
|
|
|
|
public static void SSetBadge()
|
|
{
|
|
curMgr.SetBadge();
|
|
}
|
|
|
|
// 탭 뱃지 표시.
|
|
private void SetBadge()
|
|
{
|
|
if (bInitNeedPet)
|
|
{
|
|
goMainBadge.SetActive(DataHandler.IsPetNewHave());
|
|
return;
|
|
}
|
|
|
|
goTabBadges[0].SetActive(DataHandler.IsPetNewHave());
|
|
goTabBadges[1].SetActive(false);
|
|
|
|
if (goTabBadges[0].activeSelf || goTabBadges[1].activeSelf)
|
|
goMainBadge.SetActive(true);
|
|
else
|
|
goMainBadge.SetActive(false);
|
|
}
|
|
|
|
// 총합 레벨 효과 표시.
|
|
private void SetTotalLvEfc()
|
|
{
|
|
int[] ilvefcs = DataHandler.GetPetTotalLevels();
|
|
txtTotalLv.text = FormatString.TextLv(ilvefcs[1]);
|
|
txtTotalEfc.text = FormatString.TextCntPerBlank(ilvefcs[0].ToString(), ilvefcs[3].ToString());
|
|
txtTotalEfcT.text = FormatString.StringFormat(LocalizationText.GetText("pet_addefc"), FormatString.TextEffectValue(eEffectType.PetBuff, ilvefcs[2]));
|
|
}
|
|
#endregion Tab
|
|
|
|
|
|
#region Pet
|
|
public static int SGetPetId(int irow, int icolumn)
|
|
{
|
|
return curMgr.GetPetId(irow, icolumn);
|
|
}
|
|
|
|
// 펫 번호.
|
|
private int GetPetId(int irow, int icolumn)
|
|
{
|
|
int index = irow * 4 + icolumn;
|
|
if (index >= petIds.Length)
|
|
return -1;
|
|
return petIds[index];
|
|
}
|
|
|
|
public static bool SIsSetPet(int idx)
|
|
{
|
|
return curMgr.IsSetPet(idx);
|
|
}
|
|
|
|
// 프리셋에 장착된 펫인지.
|
|
private bool IsSetPet(int idx)
|
|
{
|
|
if (iSelectedPreset < 0)
|
|
return false;
|
|
|
|
int[] ipresets = iPresetPets[iSelectedPreset];
|
|
for (int i = 0; i < ipresets.Length; i++)
|
|
{
|
|
if (ipresets[i] == idx)
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// 선택된 펫인지.
|
|
public static bool SIsSelectPet(int idx)
|
|
{
|
|
return idx == curMgr.iSelectedId;
|
|
}
|
|
|
|
public static void SSelectPet(int irow, int icolumn)
|
|
{
|
|
if (curMgr.iLoading > 0)
|
|
return;
|
|
|
|
curMgr.isChange = true;
|
|
curMgr.SelectPet(irow, icolumn, false);
|
|
}
|
|
|
|
// 펫 선택.
|
|
public void SelectPet(int irow, int icolumn, bool isOpen)
|
|
{
|
|
iLoading++;
|
|
|
|
int key = GetPetId(irow, icolumn);
|
|
iSelectedId = key;
|
|
SetLeftPetInfo();
|
|
TabLeftEffect();
|
|
escrPet.scroller.RefreshActiveCellViews();
|
|
|
|
if (groupOptionAuto.activeSelf)
|
|
{
|
|
groupOptionAuto.SetActive(false);
|
|
rtrfGoodsInfo.gameObject.SetActive(true);
|
|
groupInfoPet.SetActive(true);
|
|
}
|
|
|
|
|
|
iLoading--;
|
|
|
|
if (!isOpen)
|
|
{
|
|
for (int i = 0; i < 3; i++)
|
|
{
|
|
if (AutoBtnPresetSlot(i))
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endregion Pet
|
|
|
|
|
|
#region Preset
|
|
// 프리셋 버튼 선택.
|
|
public void TabPreset(int index)
|
|
{
|
|
if (iSelectedPreset == index)
|
|
return;
|
|
|
|
if (iSelectedPreset >= 0)
|
|
btnPresetTabs[iSelectedPreset].interactable = true;
|
|
iSelectedPreset = index;
|
|
btnPresetTabs[iSelectedPreset].interactable = false;
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
|
|
SetPetPreset();
|
|
escrPet.scroller.RefreshActiveCellViews();
|
|
}
|
|
|
|
int isSave = 0;
|
|
|
|
// 프리셋 세팅.
|
|
private void SetPetPreset()
|
|
{
|
|
for (int k = 0; k < goodsPresets.Length; k++)
|
|
{
|
|
if (iPresetPets[iSelectedPreset][k] < 0)
|
|
{
|
|
goodsPresets[k].ReleaseData();
|
|
goPresetUnsets[k].SetActive(false);
|
|
goPresetEmptys[k].SetActive(true);
|
|
}
|
|
else
|
|
{
|
|
goodsPresets[k].SetGoods(cGoods.TPet, iPresetPets[iSelectedPreset][k], 0L);
|
|
goPresetUnsets[k].SetActive(true);
|
|
goPresetEmptys[k].SetActive(false);
|
|
}
|
|
}
|
|
|
|
ApplyPetPreset();
|
|
}
|
|
|
|
// 프리셋 초기화. 수정한 내용 취소.
|
|
private void ResetPetPreset()
|
|
{
|
|
if (!bChangePreset)
|
|
return;
|
|
bChangePreset = false;
|
|
for (int i = 0; i < iPresetPets.Length; i++)
|
|
{
|
|
for (int k = 0; k < iPresetPets[i].Length; k++)
|
|
{
|
|
if (iPresetPets[i][k] == DataHandler.PlayData.petPresets[i][k])
|
|
continue;
|
|
iPresetPets[i][k] = DataHandler.PlayData.petPresets[i][k];
|
|
|
|
if (i == iSelectedPreset)
|
|
{
|
|
if (iPresetPets[i][k] < 0)
|
|
{
|
|
goodsPresets[k].ReleaseData();
|
|
goPresetUnsets[k].SetActive(false);
|
|
goPresetEmptys[k].SetActive(true);
|
|
}
|
|
else
|
|
{
|
|
goodsPresets[k].SetGoods(cGoods.TPet, iPresetPets[i][k], 0L);
|
|
goPresetUnsets[k].SetActive(true);
|
|
goPresetEmptys[k].SetActive(false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
TabPreset(DataHandler.PlayData.usePetPreset);
|
|
}
|
|
|
|
// 프리셋 저장.
|
|
public void ApplyPetPreset()
|
|
{
|
|
if (iSelectedPreset != DataHandler.PlayData.usePetPreset)
|
|
bChangePreset = true;
|
|
if (iLoading > 0 || !bChangePreset)
|
|
return;
|
|
iLoading++;
|
|
|
|
bool[] bchanges = new bool[6];
|
|
for (int i = 0; i < iPresetPets.Length; i++)
|
|
{
|
|
for (int k = 0; k < iPresetPets[i].Length; k++)
|
|
{
|
|
if (iPresetPets[i][k] != DataHandler.PlayData.petPresets[i][k])
|
|
{
|
|
bchanges[i] = true;
|
|
DataHandler.EditPetPreset(i, k, iPresetPets[i][k]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// 프리셋 번호 변경.
|
|
if (iSelectedPreset != DataHandler.PlayData.usePetPreset)
|
|
{
|
|
DataHandler.ChangePetPreset(iSelectedPreset);
|
|
DataHandler.PlayData.Save();
|
|
DataHandler.CalcPetEquipExtra(DataHandler.PlayData.usePetPreset);
|
|
BattleMgr.SSetPet(DataHandler.PlayData.usePetPreset);
|
|
//GameUIMgr.SOpenToast(LocalizationText.GetText(Global.STR_Saved));
|
|
isSave++;
|
|
}
|
|
// 프리셋 내용 변경.
|
|
else if (bchanges[0] || bchanges[1] || bchanges[2] || bchanges[3] || bchanges[4] || bchanges[5])
|
|
{
|
|
DataHandler.PlayData.Save();
|
|
if (bchanges[DataHandler.PlayData.usePetPreset])
|
|
{
|
|
DataHandler.CalcPetEquipExtra(DataHandler.PlayData.usePetPreset);
|
|
BattleMgr.SSetPet(DataHandler.PlayData.usePetPreset);
|
|
}
|
|
//GameUIMgr.SOpenToast(LocalizationText.GetText(Global.STR_Saved));
|
|
isSave++;
|
|
}
|
|
|
|
bChangePreset = false;
|
|
iLoading--;
|
|
}
|
|
|
|
// 프리셋의 슬롯 선택.
|
|
public bool AutoBtnPresetSlot(int islotindex)
|
|
{
|
|
if (iSelectedTab > 0)
|
|
return false;
|
|
if (iLoading > 0)
|
|
return false;
|
|
iLoading++;
|
|
|
|
// 선택중인 펫이 없는 경우.
|
|
if (iSelectedId < 0)
|
|
{
|
|
iLoading--;
|
|
return false;
|
|
}
|
|
|
|
// 획득하지 않은 펫.
|
|
if (!DataHandler.GetPet(iSelectedId).have)
|
|
{
|
|
iLoading--;
|
|
return false;
|
|
}
|
|
|
|
// 선택중인 펫에 있는 펫이 선택된 슬롯에 이미 장착되어 있으면 아무것도 하지 않음.
|
|
if (iPresetPets[iSelectedPreset][islotindex] == iSelectedId)
|
|
{
|
|
iLoading--;
|
|
return false;
|
|
}
|
|
|
|
// 선택중인 펫이 해당 프리셋의 다른 슬롯에 있는지 확인.
|
|
int iprevslot = -1;
|
|
for (int k = 0; k < iPresetPets[iSelectedPreset].Length; k++)
|
|
{
|
|
if (iPresetPets[iSelectedPreset][k] == iSelectedId)
|
|
{
|
|
iprevslot = k;
|
|
iLoading--;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// 선택한 슬롯에 다른 펫 없으면 펫 세팅.
|
|
if (iPresetPets[iSelectedPreset][islotindex] < 0)
|
|
{
|
|
//// 선택중인 펫이 이미 다른 슬롯에 있으면 그 슬롯 해제.
|
|
//if (iprevslot >= 0)
|
|
//{
|
|
// iPresetPets[iSelectedPreset][iprevslot] = -1;
|
|
// goodsPresets[iprevslot].ReleaseData();
|
|
// goPresetUnsets[iprevslot].SetActive(false);
|
|
// goPresetEmptys[iprevslot].SetActive(true);
|
|
//}
|
|
|
|
// 선택한 슬롯에 펫 세팅.
|
|
iPresetPets[iSelectedPreset][islotindex] = iSelectedId;
|
|
goodsPresets[islotindex].SetGoods(cGoods.TPet, iSelectedId, 0L);
|
|
goPresetUnsets[islotindex].SetActive(true);
|
|
goPresetEmptys[islotindex].SetActive(false);
|
|
}
|
|
// 선택한 슬롯에 이미 장착된 다른 펫이 있는 경우 서로 교체.
|
|
else
|
|
{
|
|
iLoading--;
|
|
|
|
return false;
|
|
//// 선택중인 펫이 이미 다른 슬롯에 있으면 그 슬롯에 선택한 슬롯에 장착중인 펫을 장착.
|
|
//if (iprevslot >= 0)
|
|
//{
|
|
// iPresetPets[iSelectedPreset][iprevslot] = iPresetPets[iSelectedPreset][islotindex];
|
|
// goodsPresets[iprevslot].SetGoods(cGoods.TPet, iPresetPets[iSelectedPreset][iprevslot], 0L);
|
|
// goPresetUnsets[iprevslot].SetActive(true);
|
|
// goPresetEmptys[iprevslot].SetActive(false);
|
|
//}
|
|
//
|
|
//// 선택한 슬롯에 펫 세팅.
|
|
//iPresetPets[iSelectedPreset][islotindex] = iSelectedId;
|
|
//goodsPresets[islotindex].SetGoods(cGoods.TPet, iSelectedId, 0L);
|
|
//goPresetUnsets[islotindex].SetActive(true);
|
|
//goPresetEmptys[islotindex].SetActive(false);
|
|
}
|
|
|
|
escrPet.scroller.RefreshActiveCellViews();
|
|
bChangePreset = true;
|
|
iLoading--;
|
|
|
|
ApplyPetPreset();
|
|
|
|
return true;
|
|
}
|
|
|
|
// 프리셋의 슬롯 선택.
|
|
public void BtnPresetSlot(int islotindex)
|
|
{
|
|
if (iSelectedTab > 0)
|
|
return;
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
// 선택중인 펫이 없는 경우.
|
|
if (iSelectedId < 0)
|
|
{
|
|
iLoading--;
|
|
return;
|
|
}
|
|
|
|
// 획득하지 않은 펫.
|
|
if (!DataHandler.GetPet(iSelectedId).have)
|
|
{
|
|
iLoading--;
|
|
return;
|
|
}
|
|
|
|
// 선택중인 펫에 있는 펫이 선택된 슬롯에 이미 장착되어 있으면 아무것도 하지 않음.
|
|
if (iPresetPets[iSelectedPreset][islotindex] == iSelectedId)
|
|
{
|
|
iLoading--;
|
|
return;
|
|
}
|
|
|
|
// 선택중인 펫이 해당 프리셋의 다른 슬롯에 있는지 확인.
|
|
int iprevslot = -1;
|
|
for (int k = 0; k < iPresetPets[iSelectedPreset].Length; k++)
|
|
{
|
|
if (iPresetPets[iSelectedPreset][k] == iSelectedId)
|
|
{
|
|
iprevslot = k;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// 선택한 슬롯에 다른 펫 없으면 펫 세팅.
|
|
if (iPresetPets[iSelectedPreset][islotindex] < 0)
|
|
{
|
|
// 선택중인 펫이 이미 다른 슬롯에 있으면 그 슬롯 해제.
|
|
if (iprevslot >= 0)
|
|
{
|
|
iPresetPets[iSelectedPreset][iprevslot] = -1;
|
|
goodsPresets[iprevslot].ReleaseData();
|
|
goPresetUnsets[iprevslot].SetActive(false);
|
|
goPresetEmptys[iprevslot].SetActive(true);
|
|
}
|
|
|
|
// 선택한 슬롯에 펫 세팅.
|
|
iPresetPets[iSelectedPreset][islotindex] = iSelectedId;
|
|
goodsPresets[islotindex].SetGoods(cGoods.TPet, iSelectedId, 0L);
|
|
goPresetUnsets[islotindex].SetActive(true);
|
|
goPresetEmptys[islotindex].SetActive(false);
|
|
}
|
|
// 선택한 슬롯에 이미 장착된 다른 펫이 있는 경우 서로 교체.
|
|
else
|
|
{
|
|
// 선택중인 펫이 이미 다른 슬롯에 있으면 그 슬롯에 선택한 슬롯에 장착중인 펫을 장착.
|
|
if (iprevslot >= 0)
|
|
{
|
|
iPresetPets[iSelectedPreset][iprevslot] = iPresetPets[iSelectedPreset][islotindex];
|
|
goodsPresets[iprevslot].SetGoods(cGoods.TPet, iPresetPets[iSelectedPreset][iprevslot], 0L);
|
|
goPresetUnsets[iprevslot].SetActive(true);
|
|
goPresetEmptys[iprevslot].SetActive(false);
|
|
}
|
|
|
|
// 선택한 슬롯에 펫 세팅.
|
|
iPresetPets[iSelectedPreset][islotindex] = iSelectedId;
|
|
goodsPresets[islotindex].SetGoods(cGoods.TPet, iSelectedId, 0L);
|
|
goPresetUnsets[islotindex].SetActive(true);
|
|
goPresetEmptys[islotindex].SetActive(false);
|
|
}
|
|
|
|
escrPet.scroller.RefreshActiveCellViews();
|
|
bChangePreset = true;
|
|
iLoading--;
|
|
|
|
ApplyPetPreset();
|
|
}
|
|
|
|
// 프리셋의 슬롯 해제.
|
|
public void BtnPresetRelease(int islotindex)
|
|
{
|
|
if (iSelectedTab > 0)
|
|
return;
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
// 슬롯에 펫 없으면 아무것도 하지 않음.
|
|
if (iPresetPets[iSelectedPreset][islotindex] < 0)
|
|
{
|
|
iLoading--;
|
|
return;
|
|
}
|
|
|
|
// 선택한 슬롯에 있는 펫을 해제.
|
|
iPresetPets[iSelectedPreset][islotindex] = -1;
|
|
goodsPresets[islotindex].ReleaseData();
|
|
goPresetUnsets[islotindex].SetActive(false);
|
|
goPresetEmptys[islotindex].SetActive(true);
|
|
escrPet.scroller.RefreshActiveCellViews();
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
|
|
bChangePreset = true;
|
|
iLoading--;
|
|
|
|
ApplyPetPreset();
|
|
}
|
|
#endregion Preset
|
|
|
|
|
|
#region Pet Enhance
|
|
// 펫 강화 시작.
|
|
public void OnBtnPetEnhanceDown()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
if (bClicking)
|
|
return;
|
|
iLoading++;
|
|
|
|
bClicking = true;
|
|
int ibeflv = DataHandler.GetPet(iSelectedId).level;
|
|
dataEnhance = new nIdEnhance(iSelectedId, ibeflv);
|
|
StartCoroutine("CPetEnhance");
|
|
}
|
|
|
|
// 펫 강화 진행.
|
|
private IEnumerator CPetEnhance()
|
|
{
|
|
int imaxlv = DataHandler.GetPetMaxLv(iSelectedId);
|
|
dPet pet = DataHandler.GetPet(iSelectedId);
|
|
BigInteger calcmultiply = BigInteger.Pow(pet.buyingCountInc, dataEnhance.aftLv - 1);
|
|
BigInteger calcdivide = BigInteger.Pow(dConst.RateMaxBi, dataEnhance.aftLv - 1);
|
|
|
|
BigInteger biprice = pet.buyingCount * calcmultiply / calcdivide;
|
|
|
|
//int ipricebase = pet.buyingCount;
|
|
//int ipriceinc = pet.buyingCountInc;
|
|
|
|
int iprice = (int)biprice;
|
|
if (iprice > DataHandler.Goods.pudding || dataEnhance.aftLv >= imaxlv)
|
|
{
|
|
OnBtnPetEnhanceUp();
|
|
yield break;
|
|
}
|
|
|
|
dataEnhance.aftLv++;
|
|
dataEnhance.tryCount++;
|
|
dataEnhance.useGoods += iprice;
|
|
DataHandler.SubPudding(iprice);
|
|
DataHandler.LvUpPet(iSelectedId, dataEnhance.aftLv, false);
|
|
SetLeftPetInfo();
|
|
GameUIMgr.SPlayEfcLeftEnhance();
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
SoundMgr.PlaySfx(SoundName.ReinforceSuccess);
|
|
|
|
yield return YieldInstructionCache.WaitForSeconds(0.4f);
|
|
|
|
while (bClicking)
|
|
{
|
|
calcmultiply = BigInteger.Pow(pet.buyingCountInc, dataEnhance.aftLv - 1);
|
|
calcdivide = BigInteger.Pow(dConst.RateMaxBi, dataEnhance.aftLv - 1);
|
|
|
|
biprice = pet.buyingCount * calcmultiply / calcdivide;
|
|
iprice = (int)biprice;
|
|
|
|
if (iprice > DataHandler.Goods.pudding || dataEnhance.aftLv >= imaxlv)
|
|
{
|
|
OnBtnPetEnhanceUp();
|
|
yield break;
|
|
}
|
|
|
|
dataEnhance.aftLv++;
|
|
dataEnhance.tryCount++;
|
|
dataEnhance.useGoods += iprice;
|
|
DataHandler.SubPudding(iprice);
|
|
DataHandler.LvUpPet(iSelectedId, dataEnhance.aftLv, false);
|
|
SetLeftPetInfo();
|
|
GameUIMgr.SPlayEfcLeftEnhance();
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
SoundMgr.PlaySfx(SoundName.ReinforceSuccess);
|
|
|
|
yield return YieldInstructionCache.WaitForSeconds(0.1f);
|
|
}
|
|
}
|
|
|
|
// 펫 강화 종료.
|
|
public void OnBtnPetEnhanceUp()
|
|
{
|
|
if (!bClicking)
|
|
return;
|
|
CoverCamera.Hold();
|
|
StopCoroutine("CPetEnhance");
|
|
bClicking = false;
|
|
SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.PetEnhance), typeof(nPetReturn), APetEnhanceSucc, APetEnhanceFail, dataEnhance, false);
|
|
}
|
|
|
|
// 펫 강화 통신 실패.
|
|
private void APetEnhanceFail(SvError error, object request)
|
|
{
|
|
DataHandler.AddEnhanceStone(dataEnhance.useGoods);
|
|
DataHandler.LvUpPet(dataEnhance.sid, dataEnhance.befLv, true);
|
|
|
|
escrPet.scroller.RefreshActiveCellViews();
|
|
SetTotalLvEfc();
|
|
SetLeftPetInfo();
|
|
dataEnhance = null;
|
|
|
|
CoverCamera.Release();
|
|
iLoading--;
|
|
}
|
|
|
|
// 펫 강화 통신 성공.
|
|
private void APetEnhanceSucc(object result, object request)
|
|
{
|
|
nPetReturn data = result as nPetReturn;
|
|
if (data == null)
|
|
{
|
|
APetEnhanceFail(new SvError(eErrorCode.NULL_OR_EMPTY), request);
|
|
return;
|
|
}
|
|
|
|
DataHandler.SetGoods(data.playCurrency, true);
|
|
DataHandler.LvUpPet(data.playPet.sid, data.playPet.lv, true);
|
|
|
|
escrPet.scroller.RefreshActiveCellViews();
|
|
SetTotalLvEfc();
|
|
SetLeftPetInfo();
|
|
dataEnhance = null;
|
|
|
|
CoverCamera.Release();
|
|
iLoading--;
|
|
}
|
|
#endregion Pet Enhance
|
|
|
|
|
|
#region Pet Awaken
|
|
// 펫 각성.
|
|
public void BtnPetAwaken()
|
|
{
|
|
if (iSelectedId < 0)
|
|
return;
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
// 스피릿.
|
|
dAwaken awaken = DataHandler.GetPetAwakenNext(iSelectedId);
|
|
int[] ihavecounts = new int[1] { DataHandler.GetPetSpiritCount(iSelectedId) };
|
|
int[] ineedcounts = new int[1] { awaken.buyingCnt1 };
|
|
|
|
nGoods[] goodsneeds = new nGoods[1]
|
|
{
|
|
new nGoods(cGoods.TPetSpirit, iSelectedId, ihavecounts[0])
|
|
};
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
|
|
GameUIMgr.SOpenPopupItemsUseTo(goodsneeds, new nGoods(cGoods.TPet, iSelectedId, -1), APetAwaken, null,
|
|
LocalizationText.GetText("pet_awaken"), LocalizationText.GetText("pet_awakenmsg"), LocalizationText.GetText("all_awakengo"), LocalizationText.GetText(Global.STR_CANCEL));
|
|
GameUIMgr.SSetPopupItemsUseToCount(ihavecounts, ineedcounts);
|
|
|
|
iLoading--;
|
|
}
|
|
|
|
// 펫 각성하기.
|
|
private void APetAwaken()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
CoverCamera.Hold();
|
|
SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.PetAwaken), typeof(nPetReturn), APetAwakenSucc, APetAwakenFail, new nIdCnt(iSelectedId), false);
|
|
}
|
|
|
|
// 펫 각성 통신 실패.
|
|
private void APetAwakenFail(SvError error, object request)
|
|
{
|
|
CoverCamera.Release();
|
|
iLoading--;
|
|
}
|
|
|
|
// 펫 각성 통신 성공.
|
|
private void APetAwakenSucc(object result, object request)
|
|
{
|
|
nPetReturn data = result as nPetReturn;
|
|
if (data == null)
|
|
{
|
|
APetAwakenFail(new SvError(eErrorCode.NULL_OR_EMPTY), request);
|
|
return;
|
|
}
|
|
|
|
// 펫 각성 및 스피릿 수량 감소.
|
|
DataHandler.AwakenPet(data.playPet.sid, data.playPet.awaken, data.playPet.cnt);
|
|
|
|
SetLeftPetInfo();
|
|
if (groupInfoPetEffectAdd.activeSelf)
|
|
{
|
|
SetEfcAddList(true);
|
|
SetEfcAddCost();
|
|
}
|
|
GameUIMgr.SOpenToast(LocalizationText.GetText("msg_petawaken"));
|
|
|
|
CoverCamera.Release();
|
|
iLoading--;
|
|
}
|
|
#endregion Pet Awaken
|
|
|
|
|
|
#region Pet Effect Add
|
|
public static void SSetEfcAddCost()
|
|
{
|
|
curMgr.SetEfcAddCost();
|
|
}
|
|
|
|
// 효과 변경 가격 표시.
|
|
private void SetEfcAddCost()
|
|
{
|
|
int icnt = 0;
|
|
for (int i = 0; i < efcAddItems.Length; i++)
|
|
{
|
|
if (efcAddItems[i].IsChangable())
|
|
icnt++;
|
|
}
|
|
|
|
int iprice = DataHandler.Const.petExtraChangeStonePrice * icnt;
|
|
txtEfcAddPrice.text = FormatString.TextInt(iprice);
|
|
btnEfcAdd.interactable = DataHandler.Goods.changeStone >= iprice;
|
|
btnEfcAddAuto.interactable = btnEfcAdd.interactable;
|
|
txtEfcAddPriceStart.text = txtEfcAddPrice.text;
|
|
btnEfcAddAutoStart.interactable = btnEfcAdd.interactable;
|
|
}
|
|
|
|
bool isChange = false;
|
|
// 추가 효과 표시.
|
|
private void SetEfcAddList(bool breset)
|
|
{
|
|
dPet pet = DataHandler.GetPet(iSelectedId);
|
|
|
|
bool bopenoption = true;
|
|
if (breset)
|
|
{
|
|
for (int i = 0; i < efcAddItems.Length; i++)
|
|
{
|
|
if (i + 1 >= pet.maxAwaken)
|
|
{
|
|
efcAddItems[i].gameObject.SetActive(false);
|
|
continue;
|
|
}
|
|
efcAddItems[i].gameObject.SetActive(true);
|
|
bool bopen = pet.awaken > i + 1;
|
|
|
|
if (isChange)
|
|
{
|
|
efcAddItems[i].SetChangeOpen(bopen);
|
|
isChange = false;
|
|
}
|
|
else
|
|
{
|
|
efcAddItems[i].SetOpen(bopen);
|
|
}
|
|
|
|
if (bopen)
|
|
{
|
|
efcAddItems[i].SetEffect(pet.extraEffects[i]);
|
|
if (pet.extraEffects[i] < 0 || DataHandler.GetExtraAbility(pet.extraEffects[i]).rarity < cGoods.RLegend)
|
|
bopenoption = false;
|
|
}
|
|
else
|
|
{
|
|
bopenoption = false;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (int i = 0; i < efcAddItems.Length; i++)
|
|
{
|
|
if (i + 1 >= pet.maxAwaken)
|
|
{
|
|
continue;
|
|
}
|
|
bool bopen = pet.awaken > i + 1;
|
|
if (bopen)
|
|
{
|
|
efcAddItems[i].SetEffect(pet.extraEffects[i]);
|
|
if (pet.extraEffects[i] < 0 || DataHandler.GetExtraAbility(pet.extraEffects[i]).rarity < cGoods.RLegend)
|
|
bopenoption = false;
|
|
}
|
|
else
|
|
{
|
|
bopenoption = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
efcAddOption.SetOpen(bopenoption);
|
|
if (bopenoption)
|
|
{
|
|
efcAddOption.SetEffect(pet.abilityTypeOption, pet.abilityValueOption);
|
|
}
|
|
}
|
|
|
|
// 아이템 효과 종류.
|
|
public static eEffectType SGetEfcAddAutoType(int index)
|
|
{
|
|
if (index < 0)
|
|
return eEffectType.None;
|
|
return curMgr.efcOptions[index];
|
|
}
|
|
|
|
// 아이템 선택 상태.
|
|
public static bool SGetEfcAddAutoSelect(int index)
|
|
{
|
|
if (index < 0)
|
|
return false;
|
|
return curMgr.bSelectedOptions[index];
|
|
}
|
|
|
|
// 추가 효과 자동 변경 창 열기.
|
|
public void BtnEfcAddChangeAuto()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
txtInfoT.text = LocalizationText.GetText("all_effectadd");
|
|
rtrfGoodsInfo.gameObject.SetActive(false);
|
|
groupInfoPet.SetActive(false);
|
|
goBtnInfoHelp.SetActive(false);
|
|
groupOptionAuto.SetActive(true);
|
|
|
|
// 초기화.
|
|
if (bInitNeedOption)
|
|
{
|
|
bInitNeedOption = false;
|
|
|
|
Dictionary<eEffectType, int> dicdatas = DataHandler.GetExtraAbilityIds()[0];
|
|
EnhancedUI.SmallList<int> datas = new EnhancedUI.SmallList<int>();
|
|
bSelectedOptions = new bool[dicdatas.Count];
|
|
efcOptions = new eEffectType[dicdatas.Count];
|
|
|
|
int index = 0;
|
|
foreach (var item in dicdatas)
|
|
{
|
|
bSelectedOptions[index] = true;
|
|
efcOptions[index] = DataHandler.GetExtraAbility(item.Value).abilityType;
|
|
datas.Add(index);
|
|
index++;
|
|
}
|
|
escrEfcAddAuto.SetType(cGoods.TPet);
|
|
escrEfcAddAuto.LoadDatas(datas);
|
|
}
|
|
else
|
|
{
|
|
escrEfcAddAuto.scroller.RefreshActiveCellViews();
|
|
}
|
|
efcOptionRarties[0].SetToggle();
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
|
|
iLoading--;
|
|
}
|
|
|
|
// 추가 효과 자동 변경 창 닫기.
|
|
public void BtnEfcAddAutoClose()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
txtInfoT.text = LocalizationText.GetText("pet_info");
|
|
rtrfGoodsInfo.gameObject.SetActive(true);
|
|
groupInfoPet.SetActive(true);
|
|
goBtnInfoHelp.SetActive(true);
|
|
|
|
groupOptionAuto.SetActive(false);
|
|
btnEfcAdd.gameObject.SetActive(true);
|
|
btnEfcAddAuto.gameObject.SetActive(true);
|
|
groupAutoNow.SetActive(false);
|
|
|
|
iLoading--;
|
|
}
|
|
|
|
// 추가 효과 토글 변경.
|
|
public static void SToggleSelect(int itemid, bool bselect)
|
|
{
|
|
if (itemid < 0)
|
|
{
|
|
if (bselect)
|
|
{
|
|
if (itemid == -1)
|
|
{
|
|
curMgr.efcOptionRarties[0].SetSelected(true);
|
|
curMgr.efcOptionRarties[1].SetSelected(false);
|
|
}
|
|
else
|
|
{
|
|
curMgr.efcOptionRarties[0].SetSelected(false);
|
|
curMgr.efcOptionRarties[1].SetSelected(true);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
curMgr.bSelectedOptions[itemid] = bselect;
|
|
curMgr.escrEfcAddAuto.scroller.RefreshActiveCellViews();
|
|
}
|
|
|
|
// 추가 효과 자동 변경 시작.
|
|
public void BtnEfcAddChangeAutoStart()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
bEfcAddAuto = true;
|
|
int icheck = CheckEfcAdd(true);
|
|
if (icheck > 0)
|
|
{
|
|
iLoading--;
|
|
return;
|
|
}
|
|
AEfcAddChange();
|
|
}
|
|
|
|
// 추가 효과 자동 변경 종료.
|
|
public void BtnEfcAddChangeAutoStop()
|
|
{
|
|
if (!bEfcAddAuto)
|
|
return;
|
|
ProcessEfcAddAutoStop();
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
|
|
// UI 표시 변경. 통신 도중일 경우 Cover 켜기(bEfcAddAuto = false 이므로 통신 종료 후 1회 변경과 같은 처리에서 꺼지게 됨).
|
|
if (bEfcAddChanging)
|
|
CoverCamera.Hold();
|
|
}
|
|
|
|
// 추가 효과 자동 변경 종료시 처리.
|
|
private void ProcessEfcAddAutoStop()
|
|
{
|
|
bEfcAddAuto = false;
|
|
CancelInvoke("IEfcAddChangeAuto");
|
|
btnEfcAdd.gameObject.SetActive(true);
|
|
btnEfcAddAuto.gameObject.SetActive(true);
|
|
groupAutoNow.SetActive(false);
|
|
|
|
// 장착 펫 추가 효과 적용.
|
|
int slotindex = DataHandler.GetPetSlot(iSelectedId);
|
|
if (slotindex >= 0)
|
|
DataHandler.CalcPetExtra(DataHandler.PlayData.usePetPreset, slotindex, true);
|
|
}
|
|
|
|
// 1회 변경 버튼 클릭.
|
|
public void BtnEfcAddChange()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
bEfcAddAuto = false;
|
|
int icheck = CheckEfcAdd(false);
|
|
if (icheck > 0)
|
|
{
|
|
iLoading--;
|
|
return;
|
|
}
|
|
AEfcAddChange();
|
|
}
|
|
|
|
// 추가 효과 바꾸기 전 현재 옵션 검사.
|
|
private int CheckEfcAdd(bool bauto)
|
|
{
|
|
iEfcAddSlots = 0;
|
|
if (efcAddItems[0].IsChangable())
|
|
iEfcAddSlots += 1;
|
|
if (efcAddItems[1].IsChangable())
|
|
iEfcAddSlots += 2;
|
|
if (efcAddItems[2].IsChangable())
|
|
iEfcAddSlots += 4;
|
|
// 변경 가능한 슬롯이 없습니다.
|
|
if (iEfcAddSlots == 0)
|
|
{
|
|
GameUIMgr.SOpenToast(LocalizationText.GetText("msg_noslotchange"));
|
|
return 1;
|
|
}
|
|
|
|
// 자동 설정 효과 선택되었는지.
|
|
if (bauto)
|
|
{
|
|
bool bselectany = false;
|
|
for (int k = 0; k < bSelectedOptions.Length; k++)
|
|
{
|
|
if (bSelectedOptions[k])
|
|
{
|
|
bselectany = true;
|
|
break;
|
|
}
|
|
}
|
|
// 효과를 선택해주세요.
|
|
if (!bselectany)
|
|
{
|
|
GameUIMgr.SOpenToast(LocalizationText.GetText("msg_abilityselect"));
|
|
return 2;
|
|
}
|
|
}
|
|
|
|
dPet pet = DataHandler.GetPet(iSelectedId);
|
|
int iraritymin = cGoods.RLegend;
|
|
if (bauto && efcOptionRarties[1].IsSelected())
|
|
iraritymin = cGoods.RMyth;
|
|
|
|
bool bhaveefc = false;
|
|
bool bheroup = false;
|
|
for (int i = 0; i < efcAddItems.Length; i++)
|
|
{
|
|
if (i + 1 >= pet.maxAwaken)
|
|
break;
|
|
// 미해금 또는 잠긴 상태.
|
|
if (!efcAddItems[i].IsChangable())
|
|
continue;
|
|
|
|
// 현재 효과 없음.
|
|
if (pet.extraEffects[i] < 0)
|
|
continue;
|
|
|
|
dExtraAbility ability = DataHandler.GetExtraAbility(pet.extraEffects[i]);
|
|
|
|
// 자동 설정에 포함된 효과 검사.
|
|
if (bauto && !bhaveefc)
|
|
{
|
|
// 희귀도 조건 만족.
|
|
if (ability.rarity >= iraritymin)
|
|
{
|
|
for (int k = 0; k < efcOptions.Length; k++)
|
|
{
|
|
// 조건 종류 만족.
|
|
if (ability.abilityType == efcOptions[k])
|
|
{
|
|
// 선택된 조건일 경우.
|
|
if (bSelectedOptions[k])
|
|
bhaveefc = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// 높은 등급 효과 검사.
|
|
if (ability.rarity >= cGoods.RLegend)
|
|
bheroup = true;
|
|
}
|
|
|
|
// 슬롯에 이미 획득한 옵션이 존재합니다.
|
|
if (bhaveefc)
|
|
{
|
|
GameUIMgr.SOpenToast(LocalizationText.GetText("msg_abilityhave"));
|
|
return 3;
|
|
}
|
|
|
|
// 높은 희귀도의 옵션이 포함되어있습니다. 변경하시겠습니까?
|
|
if (bheroup)
|
|
{
|
|
GameUIMgr.SOpenPopup2Button(LocalizationText.GetText("msg_highgrade"), AEfcAddChange);
|
|
return 4;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
// 자동 변경된 추가 효과에 원하는 옵션이 있는지 검사.
|
|
private bool CheckEfcAddChanging(int[] extras)
|
|
{
|
|
int iraritymin = cGoods.RLegend;
|
|
if (efcOptionRarties[1].IsSelected())
|
|
iraritymin = cGoods.RMyth;
|
|
|
|
for (int i = 0; i < extras.Length; i++)
|
|
{
|
|
// 미해금 또는 잠긴 상태.
|
|
if (!efcAddItems[i].IsChangable())
|
|
continue;
|
|
// 현재 효과 없음.
|
|
if (extras[i] < 0)
|
|
continue;
|
|
|
|
dExtraAbility ability = DataHandler.GetExtraAbility(extras[i]);
|
|
// 희귀도 조건 만족.
|
|
if (ability.rarity >= iraritymin)
|
|
{
|
|
for (int k = 0; k < efcOptions.Length; k++)
|
|
{
|
|
// 조건 종류 만족.
|
|
if (ability.abilityType == efcOptions[k])
|
|
{
|
|
// 선택된 조건일 경우.
|
|
if (bSelectedOptions[k])
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
// 추가 효과 변경.
|
|
private void AEfcAddChange()
|
|
{
|
|
// 자동 변경일 경우 UI 표시 수정.
|
|
if (bEfcAddAuto)
|
|
{
|
|
txtInfoT.text = LocalizationText.GetText("pet_info");
|
|
rtrfGoodsInfo.gameObject.SetActive(true);
|
|
groupInfoPet.SetActive(true);
|
|
goBtnInfoHelp.SetActive(true);
|
|
|
|
groupOptionAuto.SetActive(false);
|
|
btnEfcAdd.gameObject.SetActive(false);
|
|
btnEfcAddAuto.gameObject.SetActive(false);
|
|
groupAutoNow.SetActive(true);
|
|
}
|
|
else
|
|
{
|
|
CoverCamera.Hold();
|
|
}
|
|
|
|
bEfcAddChanging = true;
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
|
|
nIdSlot data = new nIdSlot(iSelectedId, iEfcAddSlots);
|
|
SvConnectManager.Instance.RequestSvPost(false, 0, UrlApi.GetUrl(UrlApi.PetEfcAdd), typeof(nPetReturn), AEfcAddChangeSucc, AEfcAddChangeFail, data, true);
|
|
}
|
|
|
|
// 추가 효과 자동 변경. Invoke에서 호출.
|
|
private void IEfcAddChangeAuto()
|
|
{
|
|
if (!bEfcAddAuto)
|
|
return;
|
|
|
|
bEfcAddChanging = true;
|
|
nIdSlot data = new nIdSlot(iSelectedId, iEfcAddSlots);
|
|
SvConnectManager.Instance.RequestSvPost(false, 0, UrlApi.GetUrl(UrlApi.PetEfcAdd), typeof(nPetReturn), AEfcAddChangeSucc, AEfcAddChangeFail, data, true);
|
|
}
|
|
|
|
// 추가 효과 변경 통신 실패.
|
|
private void AEfcAddChangeFail(SvError error, object request)
|
|
{
|
|
// 자동 변경 종료.
|
|
if (bEfcAddAuto)
|
|
{
|
|
ProcessEfcAddAutoStop();
|
|
}
|
|
else
|
|
{
|
|
CoverCamera.Release();
|
|
}
|
|
bEfcAddChanging = false;
|
|
iLoading--;
|
|
}
|
|
|
|
// 추가 효과 변경 성공.
|
|
private void AEfcAddChangeSucc(object result, object request)
|
|
{
|
|
nPetReturn data = result as nPetReturn;
|
|
if (data == null)
|
|
{
|
|
AEfcAddChangeFail(new SvError(eErrorCode.NULL_OR_EMPTY), request);
|
|
return;
|
|
}
|
|
|
|
DataHandler.SetGoods(data.playCurrency, true);
|
|
nIdLvInfo playdata = data.playPet;
|
|
DataHandler.ChangePetExtras(playdata.sid, playdata.extras);
|
|
|
|
// 자동 변경일 경우.
|
|
if (bEfcAddAuto)
|
|
{
|
|
// 원하는 효과를 얻었으면 종료. 재화가 부족해도 종료.
|
|
if (CheckEfcAddChanging(playdata.extras))
|
|
{
|
|
ProcessEfcAddAutoStop();
|
|
// 설정한 추가 효과를 획득하였습니다.
|
|
GameUIMgr.SOpenToast(LocalizationText.GetText("msg_abilityget"));
|
|
}
|
|
else
|
|
{
|
|
int icnt = 0;
|
|
for (int i = 0; i < efcAddItems.Length; i++)
|
|
{
|
|
if (efcAddItems[i].IsChangable())
|
|
icnt++;
|
|
}
|
|
int iprice = DataHandler.Const.petExtraChangeStonePrice * icnt;
|
|
|
|
// 재화가 부족하면 종료.
|
|
if (iprice > DataHandler.Goods.changeStone)
|
|
{
|
|
GameUIMgr.SOpenToast(LocalizationText.GetText("msg_nodice"));
|
|
ProcessEfcAddAutoStop();
|
|
}
|
|
|
|
// 원하는 효과가 없는 경우 다시 시도.
|
|
else
|
|
Invoke("IEfcAddChangeAuto", Time.timeScale > 0f ? 0.5f * Time.timeScale : 0.5f);
|
|
}
|
|
}
|
|
// 자동 변경이 아닐 경우 종료.
|
|
else
|
|
{
|
|
// 장착 펫 추가 효과 적용.
|
|
int slotindex = DataHandler.GetPetSlot(iSelectedId);
|
|
if (slotindex >= 0)
|
|
DataHandler.CalcPetExtra(DataHandler.PlayData.usePetPreset, slotindex, true);
|
|
CoverCamera.Release();
|
|
}
|
|
|
|
SetEfcAddList(false);
|
|
SetEfcAddCost();
|
|
bEfcAddChanging = false;
|
|
iLoading--;
|
|
}
|
|
#endregion Pet Effect Add
|
|
|
|
|
|
#region Spirit Compose
|
|
// 스피릿 합성.
|
|
public void BtnSpiritCompose()
|
|
{
|
|
if (iSelectedId < 0)
|
|
return;
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
dPet pet = DataHandler.GetPet(iSelectedId);
|
|
int iunit = DataHandler.Const.petSpiritComposePrice;
|
|
iSelectedCount = 1;
|
|
GameUIMgr.SOpenPopupItemUseTo(new nGoods(iSvType, iSelectedId, pet.count), new nGoods(iSvType, -1, -1L),
|
|
ASpiritComposeSub, ASpiritComposeAdd, ASpiritComposeMin, ASpiritComposeMax, ASpiritCompose, null,
|
|
LocalizationText.GetText("petspirit_compose"), LocalizationText.GetText("all_composedo"), LocalizationText.GetText(Global.STR_CANCEL));
|
|
GameUIMgr.SSetPopupItemUseToCount(iSelectedCount, iSelectedCount * iunit, iSelectedCount);
|
|
|
|
iLoading--;
|
|
}
|
|
|
|
// 스피릿 합성 수 감소.
|
|
private void ASpiritComposeSub()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
if (iSelectedCount <= 1)
|
|
{
|
|
iLoading--;
|
|
return;
|
|
}
|
|
iSelectedCount--;
|
|
int iunit = DataHandler.Const.petSpiritComposePrice;
|
|
GameUIMgr.SSetPopupItemUseToCount(iSelectedCount, iSelectedCount * iunit, iSelectedCount);
|
|
|
|
iLoading--;
|
|
}
|
|
|
|
// 스피릿 합성 수 증가.
|
|
private void ASpiritComposeAdd()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
int iunit = DataHandler.Const.petSpiritComposePrice;
|
|
int imaxcount = DataHandler.GetPetSpiritCount(iSelectedId) / iunit;
|
|
if (iSelectedCount >= imaxcount)
|
|
{
|
|
iLoading--;
|
|
return;
|
|
}
|
|
iSelectedCount++;
|
|
GameUIMgr.SSetPopupItemUseToCount(iSelectedCount, iSelectedCount * iunit, iSelectedCount);
|
|
|
|
iLoading--;
|
|
}
|
|
|
|
// 스피릿 합성 수 최소.
|
|
private void ASpiritComposeMin()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
if (iSelectedCount <= 1)
|
|
{
|
|
iLoading--;
|
|
return;
|
|
}
|
|
iSelectedCount = 1;
|
|
int iunit = DataHandler.Const.petSpiritComposePrice;
|
|
GameUIMgr.SSetPopupItemUseToCount(iSelectedCount, iSelectedCount * iunit, iSelectedCount);
|
|
|
|
iLoading--;
|
|
}
|
|
|
|
// 스피릿 합성 수 최대.
|
|
private void ASpiritComposeMax()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
int iunit = DataHandler.Const.petSpiritComposePrice;
|
|
int imaxcount = DataHandler.GetPetSpiritCount(iSelectedId) / iunit;
|
|
if (iSelectedCount >= imaxcount)
|
|
{
|
|
iLoading--;
|
|
return;
|
|
}
|
|
iSelectedCount = imaxcount;
|
|
GameUIMgr.SSetPopupItemUseToCount(iSelectedCount, iSelectedCount * iunit, iSelectedCount);
|
|
|
|
iLoading--;
|
|
}
|
|
|
|
// 스피릿 합성하기.
|
|
private void ASpiritCompose()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
CoverCamera.Hold();
|
|
|
|
int iunit = DataHandler.Const.petSpiritComposePrice;
|
|
nIdCnt data = new nIdCnt(iSelectedId, iSelectedCount * iunit);
|
|
SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.PetSpiritCompose), typeof(nPetsReturn), ASpiritComposeSucc, ASpiritComposeFail, data, false);
|
|
}
|
|
|
|
// 스피릿 일괄 합성.
|
|
public void BtnSpiritComposeAll()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
fRangeRarity rarities = (fRangeRarity)ES3.Load(Global.ES3_PetSpiritRarity, FormatString.StringFormat(Global.ES3_Server, DataHandler.PlayData.server.ToString()), (int)fRangeRarity.All);
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
|
|
GameUIMgr.SOpenPopupRarityCheck(new nGoods(cGoods.TPetSpirit, -1, -1L), rarities, ASpiritComposeAllToggle, ASpiritComposeAll, ASpiritComposeAllSave,
|
|
LocalizationText.GetText("petspirit_composeall"), LocalizationText.GetText("msg_composerarity"), LocalizationText.GetText("all_composedo"), LocalizationText.GetText(Global.STR_CANCEL));
|
|
GameUIMgr.SSetPopupRarityCheckYes(DataHandler.IsPetSpiritComposable(rarities));
|
|
|
|
iLoading--;
|
|
}
|
|
|
|
// 스피릿 일괄 합성 희귀도 선택 상태 저장.
|
|
private void ASpiritComposeAllSave()
|
|
{
|
|
fRangeRarity rarities = GameUIMgr.SGetPopupRarityCheck();
|
|
ES3.Save(Global.ES3_PetSpiritRarity, (int)rarities, FormatString.StringFormat(Global.ES3_Server, DataHandler.PlayData.server.ToString()));
|
|
}
|
|
|
|
// 스피릿 일괄 합성 토글.
|
|
private void ASpiritComposeAllToggle()
|
|
{
|
|
fRangeRarity rarities = GameUIMgr.SGetPopupRarityCheck();
|
|
GameUIMgr.SSetPopupRarityCheckYes(DataHandler.IsPetSpiritComposable(rarities));
|
|
}
|
|
|
|
// 스피릿 일괄 합성하기.
|
|
private void ASpiritComposeAll()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
CoverCamera.Hold();
|
|
|
|
fRangeRarity rarities = GameUIMgr.SGetPopupRarityCheck();
|
|
ES3.Save(Global.ES3_PetSpiritRarity, (int)rarities, FormatString.StringFormat(Global.ES3_Server, DataHandler.PlayData.server.ToString()));
|
|
|
|
nRarity data = new nRarity(rarities);
|
|
SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.PetSpiritComposeAll), typeof(nPetsReturn), ASpiritComposeSucc, ASpiritComposeFail, data, false);
|
|
}
|
|
|
|
// 스피릿 합성 통신 실패.
|
|
private void ASpiritComposeFail(SvError error, object request)
|
|
{
|
|
CoverCamera.Release();
|
|
iLoading--;
|
|
}
|
|
|
|
// 스피릿 합성 통신 성공.
|
|
private void ASpiritComposeSucc(object result, object request)
|
|
{
|
|
nPetsReturn data = result as nPetsReturn;
|
|
if (data == null)
|
|
{
|
|
ASpiritComposeFail(new SvError(eErrorCode.NULL_OR_EMPTY), request);
|
|
return;
|
|
}
|
|
|
|
DataHandler.AddRecord(eCondition.PetspiritCompose, iSelectedCount);
|
|
DataHandler.UpdatePetsPlay(data.playPet);
|
|
if (data.result != null && data.result.Length > 0)
|
|
{
|
|
GameUIMgr.SOpenPopupGoods(data.result);
|
|
}
|
|
escrPet.scroller.RefreshActiveCellViews();
|
|
if (iSelectedId >= 0)
|
|
SetLeftPetInfo();
|
|
btnComposeAll.interactable = DataHandler.IsPetSpiritComposable(fRangeRarity.All);
|
|
|
|
CoverCamera.Release();
|
|
iLoading--;
|
|
}
|
|
#endregion Spirit Compose
|
|
|
|
|
|
#region Left Info
|
|
// 왼쪽 정보창 펫 정보 표시.
|
|
private void SetLeftPetInfo()
|
|
{
|
|
// 스피릿.
|
|
if (iSvType == cGoods.TPetSpirit)
|
|
{
|
|
int icount = DataHandler.GetPetSpiritCount(iSelectedId);
|
|
goodsInfo.SetGoods(iSvType, iSelectedId, -1L);
|
|
btnInfoSpiritCompose.interactable = icount >= DataHandler.Const.petSpiritComposePrice;
|
|
txtInfoSpiritName.text = FormatString.GetGoodsName(iSvType, iSelectedId);
|
|
txtInfoSpiritDesc.text = FormatString.GetGoodsDesc(iSvType, iSelectedId);
|
|
|
|
if (groupInfoPet.activeSelf)
|
|
{
|
|
groupInfoPet.SetActive(false);
|
|
groupInfoSpirit.SetActive(true);
|
|
Vector2 v2pos = rtrfGoodsInfo.anchoredPosition;
|
|
v2pos.x = F_LeftGoodsMid;
|
|
rtrfGoodsInfo.anchoredPosition = v2pos;
|
|
goBtnInfoHelp.SetActive(false);
|
|
}
|
|
return;
|
|
}
|
|
|
|
// 펫.
|
|
dPet pet = DataHandler.GetPet(iSelectedId);
|
|
int imaxlv = DataHandler.GetPetMaxLv(iSelectedId);
|
|
if (DataHandler.RemovePetNew(iSelectedId))
|
|
SetBadge();
|
|
|
|
goodsInfo.SetGoods(iSvType, iSelectedId, -1L);
|
|
txtInfoUnlockLv.text = FormatString.TextCondition(eCondition.DgStagePet, pet.condValue);
|
|
txtInfoName.text = FormatString.GetGoodsName(iSvType, iSelectedId);
|
|
txtInfoNameColorSetter?.SetColor(pet.rarity.ToString());
|
|
txtInfoLv.text = FormatString.TextLvPerMax(pet.have ? pet.level : 0, imaxlv);
|
|
|
|
bool bmaxawaken = pet.awaken >= pet.maxAwaken;
|
|
bool bmaxlv = pet.level >= imaxlv;
|
|
int ilevel = pet.level - 1;
|
|
|
|
// 최고 레벨이 아니면 강화 버튼 표시.
|
|
btnInfoEnhance.gameObject.SetActive(!bmaxlv);
|
|
// 최고 레벨에 각성이 가능하면 각성 버튼 표시.
|
|
btnInfoAwaken.gameObject.SetActive(bmaxlv && !bmaxawaken);
|
|
// 최고 레벨에 각성이 불가능하면 Max 버튼 표시.
|
|
goInfoMax.SetActive(bmaxlv && bmaxawaken);
|
|
// 각성 가능 펫는 추가 효과 탭 표시.
|
|
imgTabInfoLineRight.enabled = pet.maxAwaken > 1;
|
|
btnTabInfoEffectAdd.gameObject.SetActive(imgTabInfoLineRight.enabled);
|
|
goBtnInfoEfcAddLock.SetActive(imgTabInfoLineRight.enabled && pet.awaken <= 1);
|
|
goBtnInfoHelp.SetActive(imgTabInfoLineRight.enabled);
|
|
goBtnInfoHelp.SetActive(!groupOptionAuto.activeSelf);
|
|
|
|
string[] strefccurs = new string[3];
|
|
string[] strefcnexts = new string[3];
|
|
|
|
// 미소지.
|
|
if (!pet.have)
|
|
{
|
|
txtInfoEnhance.text = FormatString.S_Hypen;
|
|
btnInfoEnhance.interactable = false;
|
|
|
|
if (pet.abilityType1 != eEffectType.None)
|
|
{
|
|
strefccurs[0] = FormatString.TextEffectValue(pet.abilityType1, 0L);
|
|
strefcnexts[0] = FormatString.TextEffectValue(pet.abilityType1, pet.abilityValue1);
|
|
}
|
|
|
|
if (pet.abilityType2 != eEffectType.None)
|
|
{
|
|
strefccurs[1] = FormatString.TextEffectValue(pet.abilityType2, 0L);
|
|
strefcnexts[1] = FormatString.TextEffectValue(pet.abilityType2, pet.abilityValue2);
|
|
}
|
|
|
|
if (pet.abilityType3 != eEffectType.None)
|
|
{
|
|
strefccurs[2] = FormatString.TextEffectValue(pet.abilityType3, 0L);
|
|
strefcnexts[2] = FormatString.TextEffectValue(pet.abilityType3, pet.abilityValue3);
|
|
}
|
|
}
|
|
// 최고 레벨.
|
|
else if (bmaxlv)
|
|
{
|
|
if (pet.abilityType1 != eEffectType.None)
|
|
{
|
|
strefccurs[0] = FormatString.TextEffectValue(pet.abilityType1, ilevel * pet.abilityValueInc1 + pet.abilityValue1);
|
|
}
|
|
|
|
if (pet.abilityType2 != eEffectType.None)
|
|
{
|
|
strefccurs[1] = FormatString.TextEffectValue(pet.abilityType2, ilevel * pet.abilityValueInc2 + pet.abilityValue2);
|
|
}
|
|
|
|
if (pet.abilityType3 != eEffectType.None)
|
|
{
|
|
strefccurs[2] = FormatString.TextEffectValue(pet.abilityType3, ilevel * pet.abilityValueInc3 + pet.abilityValue3);
|
|
}
|
|
}
|
|
// 최고 레벨 아님.
|
|
else
|
|
{
|
|
BigInteger calcmultiply = BigInteger.Pow(pet.buyingCountInc, ilevel);
|
|
BigInteger calcdivide = BigInteger.Pow(dConst.RateMaxBi, ilevel);
|
|
|
|
BigInteger biprice = pet.buyingCount * calcmultiply / calcdivide;
|
|
long iprice = (int)biprice;
|
|
txtInfoEnhance.text = FormatString.TextInt(iprice);
|
|
btnInfoEnhance.interactable = iprice <= DataHandler.Goods.pudding;
|
|
int ilevelnext = ilevel + 1;
|
|
|
|
if (pet.abilityType1 != eEffectType.None)
|
|
{
|
|
strefccurs[0] = FormatString.TextEffectValue(pet.abilityType1, ilevel * pet.abilityValueInc1 + pet.abilityValue1);
|
|
strefcnexts[0] = FormatString.TextEffectValue(pet.abilityType1, ilevelnext * pet.abilityValueInc1 + pet.abilityValue1);
|
|
}
|
|
|
|
if (pet.abilityType2 != eEffectType.None)
|
|
{
|
|
strefccurs[1] = FormatString.TextEffectValue(pet.abilityType2, ilevel * pet.abilityValueInc2 + pet.abilityValue2);
|
|
strefcnexts[1] = FormatString.TextEffectValue(pet.abilityType2, ilevelnext * pet.abilityValueInc2 + pet.abilityValue2);
|
|
}
|
|
|
|
if (pet.abilityType3 != eEffectType.None)
|
|
{
|
|
strefccurs[2] = FormatString.TextEffectValue(pet.abilityType3, ilevel * pet.abilityValueInc3 + pet.abilityValue3);
|
|
strefcnexts[2] = FormatString.TextEffectValue(pet.abilityType3, ilevelnext * pet.abilityValueInc3 + pet.abilityValue3);
|
|
}
|
|
}
|
|
|
|
// 펫 장착 효과 표시.
|
|
if (pet.abilityType1 == eEffectType.None)
|
|
{
|
|
txtInfoEfcTs[0].enabled = false;
|
|
txtInfoEfcCurs[0].enabled = false;
|
|
InfoEfcArrowObjs[0].SetActive(false);
|
|
txtInfoEfcNexts[0].enabled = false;
|
|
}
|
|
else
|
|
{
|
|
txtInfoEfcTs[0].text = FormatString.TextEffectTitle(pet.abilityType1);
|
|
txtInfoEfcCurs[0].text = strefccurs[0];
|
|
txtInfoEfcNexts[0].text = strefcnexts[0];
|
|
txtInfoEfcTs[0].enabled = true;
|
|
txtInfoEfcCurs[0].enabled = true;
|
|
InfoEfcArrowObjs[0].SetActive(!bmaxlv);
|
|
txtInfoEfcNexts[0].enabled = !bmaxlv;
|
|
}
|
|
|
|
if (pet.abilityType2 == eEffectType.None)
|
|
{
|
|
txtInfoEfcTs[1].enabled = false;
|
|
txtInfoEfcCurs[1].enabled = false;
|
|
InfoEfcArrowObjs[1].SetActive(false);
|
|
txtInfoEfcNexts[1].enabled = false;
|
|
}
|
|
else
|
|
{
|
|
txtInfoEfcTs[1].text = FormatString.TextEffectTitle(pet.abilityType2);
|
|
txtInfoEfcCurs[1].text = strefccurs[1];
|
|
txtInfoEfcNexts[1].text = strefcnexts[1];
|
|
txtInfoEfcTs[1].enabled = true;
|
|
txtInfoEfcCurs[1].enabled = true;
|
|
InfoEfcArrowObjs[1].SetActive(!bmaxlv);
|
|
txtInfoEfcNexts[1].enabled = !bmaxlv;
|
|
}
|
|
|
|
if (pet.abilityType3 == eEffectType.None)
|
|
{
|
|
txtInfoEfcTs[2].enabled = false;
|
|
txtInfoEfcCurs[2].enabled = false;
|
|
InfoEfcArrowObjs[2].SetActive(false);
|
|
txtInfoEfcNexts[2].enabled = false;
|
|
}
|
|
else
|
|
{
|
|
txtInfoEfcTs[2].text = FormatString.TextEffectTitle(pet.abilityType3);
|
|
txtInfoEfcCurs[2].text = strefccurs[2];
|
|
txtInfoEfcNexts[2].text = strefcnexts[2];
|
|
txtInfoEfcTs[2].enabled = true;
|
|
txtInfoEfcCurs[2].enabled = true;
|
|
InfoEfcArrowObjs[2].SetActive(!bmaxlv);
|
|
txtInfoEfcNexts[2].enabled = !bmaxlv;
|
|
}
|
|
imgBtnInfoEnhance.raycastTarget = btnInfoEnhance.interactable;
|
|
|
|
if (groupInfoSpirit.activeSelf)
|
|
{
|
|
groupInfoPet.SetActive(true);
|
|
groupInfoSpirit.SetActive(false);
|
|
Vector2 v2pos = rtrfGoodsInfo.anchoredPosition;
|
|
v2pos.x = F_LeftGoodsLeft;
|
|
rtrfGoodsInfo.anchoredPosition = v2pos;
|
|
}
|
|
}
|
|
|
|
// 왼쪽 정보창 펫 효과 탭.
|
|
public void TabLeftEffect()
|
|
{
|
|
iLoading++;
|
|
|
|
btnTabInfoEffect.interactable = false;
|
|
btnTabInfoEffectAdd.interactable = true;
|
|
groupInfoPetEffect.SetActive(true);
|
|
groupInfoPetEffectAdd.SetActive(false);
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
|
|
iLoading--;
|
|
}
|
|
|
|
// 왼쪽 정보창 추가 효과 탭.
|
|
public void TabLeftEffectAdd()
|
|
{
|
|
if (goBtnInfoEfcAddLock.activeSelf)
|
|
{
|
|
GameUIMgr.SOpenToast(LocalizationText.GetText("msg_petawakenneed"));
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
return;
|
|
}
|
|
iLoading++;
|
|
|
|
btnTabInfoEffect.interactable = true;
|
|
btnTabInfoEffectAdd.interactable = false;
|
|
groupInfoPetEffect.SetActive(false);
|
|
groupInfoPetEffectAdd.SetActive(true);
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
|
|
SetEfcAddList(true);
|
|
SetEfcAddCost();
|
|
|
|
iLoading--;
|
|
}
|
|
|
|
// 왼쪽 정보창 도움말.
|
|
public void OpenInfoHelp()
|
|
{
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
|
|
GameUIMgr.SOpenPopupRarityRate();
|
|
}
|
|
#endregion Left Info
|
|
|
|
|
|
public static void SResetPreset()
|
|
{
|
|
if(curMgr.iSelectedTab < 0)
|
|
{
|
|
return;
|
|
}
|
|
for (int i = 0; i < curMgr.iPresetPets.Length; i++)
|
|
{
|
|
for (int k = 0; k < curMgr.iPresetPets[i].Length; k++)
|
|
{
|
|
curMgr.iPresetPets[i][k] = DataHandler.PlayData.petPresets[i][k];
|
|
}
|
|
}
|
|
|
|
curMgr.TabPreset(DataHandler.PlayData.usePetPreset);
|
|
}
|
|
|
|
public void HelpMsg()
|
|
{
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
GameUIMgr.SOpenHelp(LocalizationText.GetText("help_pet"));
|
|
}
|
|
}
|