using CodeStage.AntiCheat.ObscuredTypes; using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; public enum eUICardSprite { Grade, Icon, PetAttackTypeBG, PetAttackType, Back, SubIcon } public enum eUICardLabel { MP, Amount, Lv, AmountOnIcon } public class ItemData { public eItem ItemType; public eItemGrade Grade; public ObscuredInt Lv, TLv, Stone; public ObscuredDouble Amount; public string Name, Desc, Cause, AttackTypeIcon, Deck; public eUICardType UICardType; ObscuredInt ID; public ItemData() { } public ItemData(eItem item, int id, double amount, string cause = "", eUICardType cardtype = eUICardType.NoTouch) { ItemType = item; Amount = amount; Amount.RandomizeCryptoKey(); Cause = cause; UICardType = cardtype; Set_ID(id); } public void Set_ID(int id) { ID = id; ID.RandomizeCryptoKey(); Grade = eItemGrade.Common; //Name = MyText.Get_ItemName(ID); Desc = MyText.Get_ItemDesc(ItemType, ID); var sdata = ServerInfo.Ins.m_ServerData; if (sdata == null) return; if (id > 0) { switch (ItemType) { case eItem.Skill: Lv.RandomizeCryptoKey(); break; case eItem.Weapon: case eItem.Ring: case eItem.Necklace: case eItem.Extra: case eItem.Fairy: Lv = sdata.Get_SmeltingLv(id); Lv.RandomizeCryptoKey(); TLv = sdata.Get_EquipmentTLv(ItemType, id); TLv.RandomizeCryptoKey(); break; case eItem.Pet: Lv = sdata.Get_PetLv(id); Lv.RandomizeCryptoKey(); break; case eItem.Farmer: //Lv = sdata.Get_FarmerLv(id); //Lv.RandomizeCryptoKey(); break; } EquipmentTableBase equipmenttabledata = null; switch (ItemType) { case eItem.Weapon: //equipmenttabledata = table_weapon.Ins.Get_Data(ID); break; case eItem.Fairy: equipmenttabledata = table_fairy.Ins.Get_Data(ID); break; case eItem.Pet: break; case eItem.Skill: break; case eItem.Farmer: break; case eItem.Seed: case eItem.Food: //Grade = seeddata.Grade; break; case eItem.Title: Grade = table_title.Ins.Get_Data(ID).Grade; break; case eItem.IdontKnow: Grade = MyValue.Get_GradebyID(ID); break; } if (equipmenttabledata != null) { Grade = equipmenttabledata.Grade; Stone = equipmenttabledata.Stone; Name = equipmenttabledata.Name; } } } public int Get_ID() { return ID; } public List Get_StatInfo() { switch (ItemType) { //case eItem.Weapon: return table_equipitemlist.Ins.Get_StatInfo(ID); case eItem.Fairy: return table_fairy.Ins.Get_StatInfo(ID); //case eItem.Pet: table_pet.Ins.Get_StatInfo(ID); case eItem.Skill: case eItem.Farmer: break; } return new List { new StatInfo { Stat = eStat.None }, new StatInfo { Stat = eStat.None }, new StatInfo { Stat = eStat.None } }; } public double Get_NeedStoneAmount(int _addlv = 0) { return System.Math.Truncate(Stone * Mathf.Pow(Lv + _addlv, 1.1f)); } public double Get_UsedAllStone() { var stone = 0d; for (int i = 1; i < Lv; i++) stone += System.Math.Truncate(Stone * Mathf.Pow(i, 1.1f)); return stone; } } public class UIItemCard : CardCoolTimeBase { public Image[] sprites; // 0 등급, 1 아이콘, 2 펫 공격타입bg, 3 펫 공격타입, 4 백 배경, 5 서브 아이콘 public TextMeshProUGUI[] labels; public Slider slider; // 갯수 슬라이더 public GameObject[] gos; // 0 선택, 1 장착버튼, 2 미획득, 3 장착 중, 4 new, 5 번쩍, 6 펫 공격타입 public ParticleSystem PS_CardGlow; public ParticleSystemRenderer[] PSR_CardGlow; public Animation m_Anim; public bool isIngameSkillCard; #region 아이템 ItemData m_ItemData; public override void Set(T _base) { StopAllCoroutines(); base.Set(_base); m_ItemData = _base as ItemData; Initiate(); if (m_ItemData != null) { PSR_CardGlow[0].sortingOrder = PSR_CardGlow[1].sortingOrder = 1; CardType = m_ItemData.UICardType; sprites[(int)eUICardSprite.Back].canvasRenderer.SetAlpha(CardType == eUICardType.Gamble ? 1f : 0f); var sdata = ServerInfo.Ins.m_ServerData; sprites[(int)eUICardSprite.Grade].sprite = UIAtlasMgr.Ins.Get_Sprite(DSUtil.Get_GradeSpriteName(m_ItemData.Grade)); switch (m_ItemData.ItemType) { case eItem.Weapon: case eItem.Ring: case eItem.Necklace: case eItem.Extra: case eItem.Fairy: case eItem.WeaponCostume: case eItem.Skill: case eItem.Pet: case eItem.Farmer: case eItem.IdontKnow: break; default: sprites[(int)eUICardSprite.Grade].sprite = UIAtlasMgr.Ins.Get_Sprite("getitembg"); break; } sprites[(int)eUICardSprite.Icon].enabled = true; sprites[(int)eUICardSprite.Icon].SetNativeSize(); sprites[(int)eUICardSprite.SubIcon].enabled = !DSUtil.CheckNull(sprites[(int)eUICardSprite.SubIcon].sprite); labels[(int)eUICardLabel.Amount].text = DSUtil.GetThousandCommaText(m_ItemData.Amount); if (m_ItemData.ItemType == eItem.Skill) { sprites[(int)eUICardSprite.Grade].sprite = UIAtlasMgr.Ins.Get_Sprite("empty_slot_magic"); sprites[(int)eUICardSprite.Icon].color = Color.white; if (m_ItemData.Get_ID() > 0) Set_Magic(table_skilllist.Ins.Get_Data_orNull(m_ItemData.Get_ID())); } else { sprites[(int)eUICardSprite.Icon].color = CardType == eUICardType.GetItem || sdata.IsObtainItem(m_ItemData.Get_ID()) ? Color.white : Color.black; if (CardType == eUICardType.GetItem || CardType == eUICardType.Gamble) { labels[(int)eUICardLabel.AmountOnIcon].text = DSUtil.GetThousandCommaText(m_ItemData.Amount); PS_CardGlow.gameObject.SetActive(m_ItemData.Grade >= eItemGrade.Epic); var psmain = PS_CardGlow.main; psmain.startColor = MyValue.Get_SliderGradeColor(m_ItemData.Grade); } else if (CardType == eUICardType.DetailInfo) { sprites[(int)eUICardSprite.Icon].color = Color.white; } else if (CardType == eUICardType.DropInfo) { if (m_ItemData.Amount > 0) labels[(int)eUICardLabel.AmountOnIcon].text = DSUtil.GetThousandCommaText(m_ItemData.Amount); sprites[(int)eUICardSprite.Icon].color = Color.white; } else { labels[(int)eUICardLabel.Lv].text = $"Lv.{m_ItemData.Lv}"; if (m_ItemData.ItemType == eItem.Farmer) gos[3].SetActive(sdata.IsEquipItem(m_ItemData.Get_ID())); else gos[3].SetActive(!isIngameSkillCard && sdata.IsEquipItem(m_ItemData.Get_ID())); gos[4].SetActive(GameUI.Ins.ExistNewItem(m_ItemData.ItemType, m_ItemData.Get_ID())); slider.gameObject.SetActive(true); var amount = sdata.Get_ItemAmount(m_ItemData.ItemType, m_ItemData.Get_ID()); int mixamount = MyValue.arr_NeedMixCount[(int)m_ItemData.Grade]; labels[(int)eUICardLabel.Amount].text = DSUtil.Format("{0}/{1}", amount, mixamount); if (mixamount > 0f) slider.value = (float)(amount / mixamount); else slider.value = amount > 0 ? 1f : 0f; slider.fillRect.GetComponent().color = MyValue.Get_SliderGradeColor(m_ItemData.Grade); } if (m_ItemData.ItemType == eItem.Pet && m_ItemData.Get_ID() > 0) { gos[6].SetActive(true); sprites[(int)eUICardSprite.PetAttackTypeBG].color = MyValue.Get_SliderGradeColor(m_ItemData.Grade); sprites[(int)eUICardSprite.PetAttackType].sprite = UIAtlasMgr.Ins.Get_Sprite(m_ItemData.AttackTypeIcon); } } } else { sprites[(int)eUICardSprite.Grade].sprite = UIAtlasMgr.Ins.Get_Sprite("empty_slot_magic"); sprites[(int)eUICardSprite.Icon].enabled = false; } //if (CardType == eUICardType.Gamble) // StartCoroutine(Co_BackAlpha()); } public override void Set(TableDataBase _base, int i) { base.Set(_base); Set_SelectSkill(_base as SelectSkillTableData); } public override void Set_CardEffectOrder(int _order) { PSR_CardGlow[0].sortingOrder = PSR_CardGlow[1].sortingOrder = _order; } public void Set_BerserkIcon(string icon, string attackicon) { sprites[(int)eUICardSprite.Icon].sprite = UIAtlasMgr.Ins.Get_Sprite(icon); sprites[(int)eUICardSprite.PetAttackType].sprite = UIAtlasMgr.Ins.Get_Sprite(attackicon); } public override void Do_SomeThing() { if (gameObject.activeInHierarchy) StartCoroutine(Co_BackAlpha()); } IEnumerator Co_BackAlpha() { yield return new WaitForSeconds(0.1f); m_Anim.Play(); yield return new WaitForSeconds(m_Anim["CardLeftRightShake"].length + 0.3f); sprites[(int)eUICardSprite.Back].canvasRenderer.SetAlpha(0f); } protected void Initiate() { sprites[(int)eUICardSprite.Grade].sprite = UIAtlasMgr.Ins.Get_Sprite("empty_magic"); sprites[(int)eUICardSprite.Icon].enabled = false; Off_Objs(); if (PS_CardGlow.gameObject.activeSelf) PS_CardGlow.gameObject.SetActive(false); } public void Off_Objs() { DSUtil.InActivateGameObjects(gos); CoolTime_Off(); if (slider.gameObject.activeSelf) slider.gameObject.SetActive(false); for (int i = 0; i < labels.Length; i++) labels[i].text = ""; sprites[(int)eUICardSprite.Back].canvasRenderer.SetAlpha(0f); sprites[(int)eUICardSprite.SubIcon].enabled = false; } public bool IsID(int _id) { return Get_ItemData().Get_ID() == _id; } public ItemData Get_ItemData() { return m_ItemData; } #endregion #region 마법, 스킬 SkillListTableData m_MagicTableData; void Set_Magic(SkillListTableData _data) { var sdata = ServerInfo.Ins.m_ServerData; m_MagicTableData = _data; var lv = 0; switch (CardType) { case eUICardType.UI: case eUICardType.UIEquip: labels[(int)eUICardLabel.Lv].text = $"Lv.{lv}"; slider.gameObject.SetActive(true); var amount = sdata.Get_ItemAmount(eItem.Skill, m_MagicTableData.n_SkillID); var mixamount = 5;// MyValue.arr_NeedMixCount[(int)m_MagicTableData.e_Grade]; labels[(int)eUICardLabel.Amount].text = DSUtil.Format("{0}/{1}", amount, mixamount); slider.value = (float)(amount / mixamount); labels[(int)eUICardLabel.MP].text = m_MagicTableData.n_MP.ToString(); gos[4].SetActive(GameUI.Ins.ExistNewItem(m_ItemData.ItemType, m_ItemData.Get_ID())); break; case eUICardType.Use: labels[(int)eUICardLabel.MP].text = m_MagicTableData.n_MP.ToString(); break; case eUICardType.GetItem: case eUICardType.Gamble: labels[(int)eUICardLabel.AmountOnIcon].text = DSUtil.GetThousandCommaText(m_ItemData.Amount); PS_CardGlow.gameObject.SetActive(m_ItemData.Grade >= eItemGrade.Epic); var psmain = PS_CardGlow.main; psmain.startColor = MyValue.Get_SliderGradeColor(m_ItemData.Grade); break; } //sprites[(int)eUICardSprite.Grade].sprite = UIAtlasMgr.Ins.Get_Sprite(DSUtil.Get_GradeSpriteName(m_MagicTableData.e_Grade)); gos[2].SetActive(lv == 0); m_CoolTime = 0f; Set_CoolTimeText(); gos[3].SetActive(!isIngameSkillCard && sdata.IsEquipItem(m_ItemData.Get_ID())); } public void Set_SelectSkill(SelectSkillTableData _sstd) { base.Set(); Initiate(); sprites[(int)eUICardSprite.Grade].sprite = UIAtlasMgr.Ins.Get_Sprite(_sstd.PetSkill ? "petreinforce_bg" : "reinforce_bg"); sprites[(int)eUICardSprite.Icon].sprite = UIAtlasMgr.Ins.Get_Sprite(_sstd.Icon); sprites[(int)eUICardSprite.Icon].enabled = !DSUtil.CheckNull(sprites[(int)eUICardSprite.Icon].sprite); Set_CardType(eUICardType.NoTouch); } public SkillListTableData Get_SkillTableData() { return m_MagicTableData; } #endregion #region 선택 관련 public void UnSelect_Card() { gos[0].SetActive(false); gos[1].SetActive(false); } public void Select_Card() { gos[0].SetActive(true); gos[1].SetActive(m_ItemData.Get_ID() > 0 && m_ItemData.Lv > 0); // 장비 프리셋에 등록해야 하므로 그냥 다 착용 버튼 보여준다. //var sdata = ServerInfo.Ins.m_ServerData; //if (m_ItemData != null && m_ItemData.Get_ID() > 0 && m_ItemData.Lv > 0) // gos[1].SetActive(!sdata.Equip.IsEquipItem(m_Preset, m_ItemData.ItemType, m_ItemData.Get_ID())); //else // gos[1].SetActive(false); } public void Set_GuideArrow(bool _active) { //gos[7].SetActive(_active); } #endregion #region 터치 public void OnClick_Card() { if (m_ItemData != null) { if (m_ItemData.ItemType == eItem.Skill && m_ItemData.Get_ID() > 0) switch (CardType) { case eUICardType.UI: break; case eUICardType.Use: if (m_CoolTime <= 0f) { //if (InGameInfo.Ins.Get_CurStageData().Chapter != 105) // 투견장에서 마법 사용 금지) { if (MyValue.MyPC.Use_Skill(m_MagicTableData, false, m_Index)) m_CoolTime = m_MagicTableData.Get_CoolTime(MyValue.MyPC.Get_StatInfo().Get_Stat(eStat.COOLTIME_Multiplier)); } //else //MessageInfo.Ins.Add_Log("투견장은 마법 사용이 금지되어 있습니다."); } else MessageInfo.Ins.Add_Log(166); break; default: ItemDescUI.Ins.Set(m_ItemData); break; } else if (m_ItemData.ItemType == eItem.Pet && m_ItemData.Get_ID() > 0) switch (CardType) { case eUICardType.UI: case eUICardType.UIEquip: break; default: ItemDescUI.Ins.Set(m_ItemData); break; } else if (m_ItemData.ItemType == eItem.Farmer && m_ItemData.Get_ID() > 0) switch (CardType) { case eUICardType.UI: Select_Card(); break; default: ItemDescUI.Ins.Set(m_ItemData); break; } else switch (CardType) { case eUICardType.UI: case eUICardType.Use: break; case eUICardType.Inven: // InvenCard 만들어서 그쪽에서 처리 break; default: if (m_ItemData.UICardType == eUICardType.Gamble) m_ItemData.UICardType = eUICardType.GetItem; ItemDescUI.Ins.Set(m_ItemData); break; } } } public void OnClick_Equip() { //var sdata = ServerInfo.Ins.m_ServerData; if (m_ItemData != null && m_ItemData.ItemType == eItem.Pet && m_ItemData.Get_ID() > 0 && m_ItemData.Lv > 0) { //if (gos[7].activeInHierarchy) // Set_GuideArrow(false); } else if (m_ItemData.Lv > 0) { //if (gos[7].activeInHierarchy) // Set_GuideArrow(false); } } #endregion }