Project_WL/Assets/Script/UI/PC/Limit/PCLimitSlotCard.cs

123 lines
4.5 KiB
C#

using TMPro;
using UnityEngine.UI;
public class PCLimitSlotCard : CardBase
{
public TextMeshProUGUI[] texts; // 0 스탯, 1 등급, 2 잠금 설명
public Image[] images; // 0 등급, 1 잠금
SD_PCLimitSlotData m_SData;
int m_Grade, m_Slot;
public override void Set<T>(T _base)
{
base.Set(_base);
m_SData = _base as SD_PCLimitSlotData;
}
public override void Set(int _val)
{
m_Slot = _val;
var openlv = table_breakinglimit.Ins.Get_SlotOpenLv(m_Slot);
texts[2].text = isCloseSlot() ? DSUtil.Format(262, openlv) : "";
Set_UI();
}
public override void Set_UI()
{
var Tdata = table_optionconfig.Ins.Get_Data(m_SData.ID);
m_Grade = 0;
texts[0].text = texts[1].text = "";
images[0].color = table_enchantgradeconfig.Ins.Get_Data(1).GradeColor;
images[1].enabled = m_SData.Lock > 0;
if (DSUtil.CheckNull(Tdata))
{
// 오픈된 슬롯인가?
}
else
{
texts[2].text = "";
m_Grade = table_randombag.Ins.Get_Data(m_SData.ID).n_ItemGrade;
var gradecolor = table_enchantgradeconfig.Ins.Get_Data(m_Grade).GradeColor;
images[0].color = gradecolor;
texts[0].text = MyText.Get_StatNameValueText(Tdata.e_OptionType, Tdata.Get_Value(m_SData.Lv));
texts[1].text = "??";
}
}
bool isCloseSlot()
{
var lv = ServerInfo.Ins.m_ServerData.Get_LimitLv();
var openlv = table_breakinglimit.Ins.Get_SlotOpenLv(m_Slot);
return openlv > lv;
}
// 기존 클라 기반일 때
//public void Set_Change(string preset)
//{
// var sdata = ServerInfo.Ins.m_ServerData;
// var isOpen = table_breakinglimit.Ins.Get_SlotOpenLv(m_Slot) <= sdata.Get_LimitLv();
// if (isOpen && m_SData.Lock == 0)
// {
// var lv = sdata.Get_LimitLv();
// var Tdata = table_limitslotmagicrate.Ins.Get_Data_orNull(lv);
// var grade = DSUtil.Get_RandomIndex(Tdata.list_rate) + 1;
// var itemData = table_randombag.Ins.Get_RandomItemData(Tdata.n_DropIndex, grade);
// var optionlv = table_enchantgradeconfig.Ins.Get_Lv(grade);
// sdata.Set_LimitSlotID(preset, m_Slot, itemData.itemid, optionlv);
// sdata.Add_MissionCount(ePurpose.HERO_OPTION_CHANGE);
// sdata.Add_MissionCount(ePurpose.HERO_OPTION_CHANGE_ACC);
// }
//}
public void Set_Change(string preset, SC_LimitOptionResult options)
{
var sdata = ServerInfo.Ins.m_ServerData;
var isOpen = table_breakinglimit.Ins.Get_SlotOpenLv(m_Slot) <= sdata.Get_LimitLv();
var s_data = options.results.Find(f => f.slot == m_Slot - 1);
if (s_data != null)
{
sdata.Set_LimitSlotID(preset, m_Slot, s_data.randombagid, s_data.optionlv);
sdata.Add_MissionCount(ePurpose.HERO_OPTION_CHANGE);
sdata.Add_MissionCount(ePurpose.HERO_OPTION_CHANGE_ACC);
}
}
public void Set_Change(string preset, int ipreset)
{
var sdata = ServerInfo.Ins.m_ServerData;
if (!isCloseSlot() && !sdata.isLock_LimitSlot(preset, m_Slot))
{
var option = sdata.LimitBreakOption.Option[ipreset][sdata.LimitBreakOption.Preset[ipreset]++];
if (sdata.LimitBreakOption.Preset[ipreset] >= sdata.LimitBreakOption.Option[ipreset].Count)
{
sdata.LimitBreakOption.Preset[ipreset] = 0;
// 다음 테이블 서버에서 받아오기
PCLimitUI.Ins.m_PCLimitUI_Right.ChangeOption = true;
}
sdata.Set_LimitSlotID(preset, m_Slot, option.id, option.lv);
sdata.Add_MissionCount(ePurpose.HERO_OPTION_CHANGE);
sdata.Add_MissionCount(ePurpose.HERO_OPTION_CHANGE_ACC);
++PCLimitUI.Ins.m_PCLimitUI_Right.MissionCount;
PCLimitUI.Ins.m_PCLimitUI_Right.MissionCount.RandomizeCryptoKey();
}
}
public override int Get_IntData() { return m_Grade; }
public void OnClick_Lock()
{
var sdata = ServerInfo.Ins.m_ServerData;
var preset = PCLimitUI.Ins.m_PCLimitUI_Right.Get_Preset();
if (m_SData.ID > 0 || sdata.isLock_LimitSlot(preset, m_Slot))
{
ServerInfo.Ins.Save_PC_LimitSlotLock(preset, m_Slot, () =>
{
sdata.Set_LimitSlotLock(preset, m_Slot);
PCLimitUI.Ins.m_PCLimitUI_Right.Set();
});
}
}
}