419 lines
16 KiB
C#
419 lines
16 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:
|
|
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.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 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.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 = 0;//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(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
|
|
} |