using System.Collections; using System.Collections.Generic; using UnityEngine; using IVDataFormat; using IVServerFormat; using TMPro; using EnhancedUI; using UnityEngine.UI; public class MaskMgr : MonoBehaviour { #region Const private static MaskMgr curMgr = null; #endregion Const #region UI [SerializeField] TextMeshProUGUI txtMainT; [SerializeField] Canvas canvasUI; [SerializeField] Canvas leftWindow; //오른쪽 상단탭 TextMeshProUGUI txtT; ButtonIV[] btnTabs; GameObject[] goTabLocks; GameObject[] goTabBadges; //왼쪽 상단탭 TextMeshProUGUI LtxtT; GameObject groupSubTab3; ButtonIV[] btnSubTabs3; TextMeshProUGUI[] txtSubTabs3; GameObject[] SubTabsLocks; //오른쪽 창 GameObject effectLv; Image[] maskParts; GameObject arrowEffect; Image[] arrows; Color disableCol = new Color(91f / 255f, 91f / 255f, 91f / 255f); Color enableCol = new Color(93f / 255f, 227f / 255f, 232f / 255f); TextMeshProUGUI[] txtPartName; TextMeshProUGUI[] txtPartLv; ParticleSystem[] partSucc; TextMeshProUGUI txtPercent; ButtonIV btnEnhance; TextMeshProUGUI txtEnhance; TextMeshProUGUI txtEnhancePrice; GameObject maxPanel; //왼쪽 창 GameObject effectSet; GameObject[] maskEffect; Image[] imgMaskParts; TextMeshProUGUI[] maskLv; TextMeshProUGUI[] maskName; TextMeshProUGUI[] txtMaskEffect; TextMeshProUGUI[] maskPrev; GameObject[] maskArrow; TextMeshProUGUI[] maskNext; #endregion [SerializeField] ParticleSystem ptcSucc, ptcFail; bool bInitNeed = true; private int iLoading = 1; private bool bReLocalize = true; int relicTypeTab = -1; #region Base public static void SLocalize(bool bmain) { if (curMgr != null) curMgr.Localize(bmain); //curMgr.Localize(false); } private void Localize(bool bmain) { if (bmain) { txtMainT.text = LocalizationText.GetText("mask_title"); } else { txtT= canvasUI.transform.Find("txtT").GetComponent(); txtT.text = LocalizationText.GetText("mask_title"); btnTabs = canvasUI.transform.Find("tabWrapTop").GetComponentsInChildren(true); goTabLocks = new GameObject[btnTabs.Length]; goTabBadges = new GameObject[btnTabs.Length]; for (int i = 0; i < btnTabs.Length; i++) { goTabLocks[i] = btnTabs[i].transform.Find("lock").gameObject; goTabBadges[i] = btnTabs[i].transform.Find("badge").gameObject; } btnTabs[0].transform.Find("txt").GetComponent().text = LocalizationText.GetText("mask_kind_1"); LtxtT = leftWindow.transform.Find("txtT").GetComponent(); LtxtT.text = LocalizationText.GetText("mask_title_left"); groupSubTab3 = leftWindow.transform.Find("groupSubTab3").gameObject; btnSubTabs3 = groupSubTab3.transform.GetComponentsInChildren(); txtSubTabs3 = new TextMeshProUGUI[btnSubTabs3.Length]; SubTabsLocks = new GameObject[btnSubTabs3.Length]; for (int i = 0; i < btnSubTabs3.Length; i++) { txtSubTabs3[i] = btnSubTabs3[i].transform.Find("txt").GetComponent(); SubTabsLocks[i] = btnSubTabs3[i].transform.Find("lock").gameObject; } txtSubTabs3[0].text = LocalizationText.GetText("own_effect_title"); //txtSubTabs3[1].text = LocalizationText.GetText("guardian_grow"); effectLv = canvasUI.transform.Find("EffectLv").gameObject; maskParts = effectLv.transform.GetComponentsInChildren(); arrowEffect = canvasUI.transform.Find("Arrows").gameObject; arrows = arrowEffect.transform.GetComponentsInChildren(); txtPartName = new TextMeshProUGUI[maskParts.Length]; txtPartLv = new TextMeshProUGUI[maskParts.Length]; partSucc = new ParticleSystem[maskParts.Length - 1]; for (int i = 0;i < maskParts.Length;i++) { txtPartName[i] = maskParts[i].transform.Find("txtPartName").GetComponent(); txtPartLv[i] = maskParts[i].transform.Find("txtPartLv").GetComponent(); if(maskParts.Length - 1 != i) { partSucc[i] = maskParts[i].transform.Find("enhance_succ").GetComponent(); } } txtPercent = canvasUI.transform.Find("txtPercent").GetComponent(); btnEnhance = canvasUI.transform.Find("btnEnhance").GetComponent(); txtEnhance = btnEnhance.transform.Find("txt").GetComponent(); txtEnhancePrice = btnEnhance.transform.Find("txtPrice").GetComponent(); maxPanel = canvasUI.transform.Find("bgoCMax").gameObject; effectSet = leftWindow.transform.Find("OwnEffectSet").transform.Find("Content").gameObject; maskEffect = new GameObject[5]; for (int i = 0; i < 5; i++) { maskEffect[i] = effectSet.transform.GetChild(i).gameObject; } imgMaskParts = new Image[maskEffect.Length]; maskLv = new TextMeshProUGUI[maskEffect.Length]; maskName = new TextMeshProUGUI[maskEffect.Length]; txtMaskEffect = new TextMeshProUGUI[maskEffect.Length]; maskPrev = new TextMeshProUGUI[maskEffect.Length]; maskArrow = new GameObject[maskEffect.Length]; maskNext = new TextMeshProUGUI[maskEffect.Length]; for (int i = 0; i < maskEffect.Length; i++) { imgMaskParts[i] = maskEffect[i].transform.Find("imgMaskParts").GetComponent(); maskLv[i] = maskEffect[i].transform.Find("txtLv").GetComponent(); maskName[i] = maskEffect[i].transform.Find("txtName").GetComponent(); txtMaskEffect[i] = maskEffect[i].transform.Find("txtEffect").GetComponent(); maskPrev[i] = maskEffect[i].transform.Find("txtPrev").GetComponent(); maskArrow[i] = maskEffect[i].transform.Find("txtArrow").gameObject; maskNext[i] = maskEffect[i].transform.Find("txtNext").GetComponent(); } } } // 설정에서 언어 변경 시 처리. public static void SReLocalize() { curMgr.Localize(true); curMgr.bReLocalize = true; } private void Awake() { curMgr = this; } void Start() { iLoading--; //CalcGuardian(); CalcRelicEnhance(); } #endregion Base void Init() { bInitNeed = false; Localize(false); } #region Mask UI OnOff public void MaskWindowOn()//구 유물 창 열기 { if (iLoading > 0) return; iLoading++; if (bInitNeed) Init(); if (bReLocalize) Localize(false); canvasUI.enabled = true; leftWindow.enabled = true; GameUIMgr.SRightWindowClose(); //GameUIMgr.SOpenLeftPanel(true, true, true, false, true, true); GameUIMgr.SSetMainUiOn(false); BattleMgr.CloseFailScroll(); GameUIMgr.SCloseMenu(); //AddressableMgr.GetGradeIcon(0); GameUIMgr.SOpenLeftPanel(maskenhance: true); OpenTabMask(0); SoundMgr.PlaySfx(SoundName.BtnPress); iLoading--; } public static void SMaskWindowOff() { curMgr.MaskWindowOff(); } public void MaskWindowOff()//구 유물 창 닫기 { if (iLoading > 0) return; iLoading++; curMgr.canvasUI.enabled = false; curMgr.leftWindow.enabled = false; GameUIMgr.SCloseLeftPanel(); GameUIMgr.SSetMainUiOn(true); MissionMgr.SRefreshMission(); SoundMgr.PlaySfx(SoundName.BtnPress); iLoading--; } #endregion #region Tab public void OpenTabMask(int tab)//구 유물 탭 열기. 유물의 세트만큼 탭 수가 있다. 각 세트당 유물 수는 5개. { relicTypeTab = tab + 1; for (int i = 0; i < maskEffect.Length ; i++) { if(i == maskParts.Length-1) { maskParts[i].sprite = AddressableMgr.GetRelicIcon(i + 10000); imgMaskParts[i].sprite = AddressableMgr.GetRelicIcon(i + ((relicTypeTab - 1) * 5)); } else { maskParts[i].sprite = AddressableMgr.GetRelicIcon(i + ((relicTypeTab - 1) * 5)); imgMaskParts[i].sprite = AddressableMgr.GetRelicIcon(i + ((relicTypeTab - 1) * 5)); } txtPartName[i].text = LocalizationText.GetText(FormatString.CombineAll("mask_part_", i + ((relicTypeTab - 1) * 5))); maskName[i].text = LocalizationText.GetText(FormatString.CombineAll("mask_part_", i + ((relicTypeTab - 1) * 5))); txtMaskEffect[i].text = FormatString.TextEffectTitle((eEffectType)DataHandler.GetSysRelic(relicTypeTab)[i].abilityType);//LocalizationText.GetText(FormatString.CombineAll("mask_des_", i + ((relicTypeTab - 1) * 5))); } int[] maskLevel = new int[5] { DataHandler.GetPlayRelic(relicTypeTab).assistLv1, DataHandler.GetPlayRelic(relicTypeTab).assistLv2, DataHandler.GetPlayRelic(relicTypeTab).assistLv3, DataHandler.GetPlayRelic(relicTypeTab).assistLv4, DataHandler.GetPlayRelic(relicTypeTab).ancientLv }; for (int i = 0; i < maskEffect.Length; i++) { txtPartLv[i].text = FormatString.CombineAll("Lv. ", maskLevel[i]); maskLv[i].text = FormatString.CombineAll("Lv. ", maskLevel[i]); maskPrev[i].text = FormatString.TextIntPer0(DataHandler.GetSysRelic(relicTypeTab)[i].abilityValue + (DataHandler.GetSysRelic(relicTypeTab)[i].abilityValueInc * (maskLevel[i] - 1))); if (maskLevel[i] < DataHandler.GetSysRelic(relicTypeTab)[i].maxLv) { maskNext[i].text = FormatString.TextIntPer0(DataHandler.GetSysRelic(relicTypeTab)[i].abilityValue + (DataHandler.GetSysRelic(relicTypeTab)[i].abilityValueInc * maskLevel[i])); maskNext[i].gameObject.SetActive(true); maskArrow[i].SetActive(true); } else { maskNext[i].gameObject.SetActive(false); maskArrow[i].SetActive(false); } } txtEnhance.text = LocalizationText.GetText("mask_enhance"); int enhancePrice = DataHandler.GetSysRelic(relicTypeTab)[DataHandler.GetPlayRelic(relicTypeTab).nextRelic - 1].buyingCnt; int enhancePriceInc = DataHandler.GetSysRelic(relicTypeTab)[DataHandler.GetPlayRelic(relicTypeTab).nextRelic - 1].buyingCntInc; int level = maskLevel[DataHandler.GetPlayRelic(relicTypeTab).nextRelic - 1]; txtEnhancePrice.text = FormatString.TextInt(enhancePrice + (enhancePriceInc * level)); btnEnhance.interactable = DataHandler.Goods.condMight >= (enhancePrice + (enhancePriceInc * level)); if (maskLevel[4] >= DataHandler.GetSysRelic(relicTypeTab)[4].maxLv) { maxPanel.SetActive(true); btnEnhance.interactable = false; } if (DataHandler.GetPlayRelic(relicTypeTab).nextRelic == 5) { txtPercent.text = FormatString.StringFormat(LocalizationText.GetText("all_succrate"), FormatString.TextIntPer0(DataHandler.GetRelicEnhanceProp(maskLevel[4]))); txtPercent.gameObject.SetActive(true); } else { txtPercent.gameObject.SetActive(false); } SetArrows(relicTypeTab); //int iprop = GetGearTreasureProp(dicGearTreasure[key].level); //if (Random.Range(0, dConst.RateMax) >= iprop) // return false; } public void SetArrows(int iRelicTypeTab) { for(int i = 1; i < maskParts.Length; i++) { if (i < DataHandler.GetPlayRelic(iRelicTypeTab).nextRelic) { arrows[i-1].color = enableCol; } else arrows[i-1].color = disableCol; } } #endregion bool upgradeSuccess = false; #region Enhance And Calc public void MaskEnhance()//유물 강화. 마지막 유물을 제외한 유물은 확정적으로 강화된다. 마지막 유물은 확률. { if (DataHandler.GetPlayRelic(relicTypeTab).nextRelic == 5) { if (DataHandler.LvUpRelicEnhance(relicTypeTab)) { upgradeSuccess = true; ptcSucc.Play(); SoundMgr.PlaySfx(SoundName.ReinforceSuccess); } else { upgradeSuccess = false; ptcFail.Play(); SoundMgr.PlaySfx(SoundName.ReinforceFailed); } } else { partSucc[DataHandler.GetPlayRelic(relicTypeTab).nextRelic - 1].Play(); SoundMgr.PlaySfx(SoundName.ReinforceSuccess); upgradeSuccess = true; } SetArrows(relicTypeTab); TrySVMaskEnhance(); } public void CalcRelicEnhance()//유물의 버프를 재계산하는 부분. { BuffMgr.Instance.RelicStatReset(); for(int i = 0; i < DataHandler.GetSysRelics().Count; i++) { int[] maskLevel = new int[5] { DataHandler.GetPlayRelic(i + 1).assistLv1, DataHandler.GetPlayRelic(i + 1).assistLv2, DataHandler.GetPlayRelic(i + 1).assistLv3, DataHandler.GetPlayRelic(i + 1).assistLv4, DataHandler.GetPlayRelic(i + 1).ancientLv }; for (int j = 0; j < maskLevel.Length; j++) { int abiVal = DataHandler.GetSysRelic(i + 1)[j].abilityValue + (DataHandler.GetSysRelic(i + 1)[j].abilityValueInc * (maskLevel[j] - 1)); BuffMgr.Instance.ChangeRelicStat((eEffectType)DataHandler.GetSysRelic(i + 1)[j].abilityType, abiVal, false); } } BuffMgr.Instance.CalcAllStat(); } #endregion nMaskEnhancePost data = null; #region SV public void TrySVMaskEnhance()//유물의 강화 정보를 서버에 통신한다. 이때 강화의 성공 여부는 로컬에서 계산해서 서버로 보낸다. { data=new nMaskEnhancePost(); data.relicType = DataHandler.GetPlayRelic(relicTypeTab).relicType; data.isUpgrade = upgradeSuccess; CoverCamera.Hold(); SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.MaskEnhance), typeof(nMaskEnhanceReturn), AMaskEnhancSucc, AMaskEnhancFail, data, true); } private void AMaskEnhancFail(IVServerFormat.SvError error, object request) { CoverCamera.Release(); data = null; iLoading--; } // 레벨 강화 통신 성공. private void AMaskEnhancSucc(object result, object request) { nMaskEnhanceReturn data = result as nMaskEnhanceReturn; if (data == null) { AMaskEnhancFail(new IVServerFormat.SvError(IVServerFormat.eErrorCode.NULL_OR_EMPTY), request); return; } DataHandler.SetGoods(data.playCurrency, true); DataHandler.SetPlayRelic(relicTypeTab, data.playRelic); OpenTabMask(relicTypeTab - 1); CalcRelicEnhance(); data = null; CoverCamera.Release(); } #endregion public void HelpMsg() { SoundMgr.PlaySfx(SoundName.BtnPress); GameUIMgr.SOpenHelp(LocalizationText.GetText("help_upgrade")); } }