Project_WL/Assets/Script/UI/Common/UIItemCard.cs

448 lines
18 KiB
C#

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<StatInfo> 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<StatInfo> { 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>(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<Image>().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
}