Project_WL/Assets/Script/UI/Skill/SkillUI.cs

145 lines
5.1 KiB
C#

using System.Collections.Generic;
using System.Linq;
using TMPro;
public class SkillUI : BotMenuBase
{
public SkillUI_SkillInfo m_SkillUI_SkillInfo;
public TabUIBase m_Tab, m_TabSkillType;
public BattleUI m_BattleUI;
public SkillEquipUI m_SkillEquipUI;
public TextMeshProUGUI[] texts; // 0 보유 스킬 갯수
string m_SkillType = "JobPassive";
Dictionary<string, eSkillType> dic_skillType = new Dictionary<string, eSkillType>
{ { "Active", eSkillType.Active }, { "Passive", eSkillType.Passive }, { "JobPassive", eSkillType.JobPassive } };
List<TabUIData> list_tabData = new List<TabUIData> { new TabUIData{ }, new TabUIData{ }, new TabUIData{ } };
List<TabUIData> list_skilltabData = new List<TabUIData>
{ new TabUIData { n_btnName = 214 }, new TabUIData { n_btnName = 215 }, new TabUIData { n_btnName = 216 } };
int BeforePreset, AfterPreset;
Dictionary<bool, Dictionary<int, List<int>>> dic_EquipSkill = new Dictionary<bool, Dictionary<int, List<int>>>();
public override void Set()
{
m_SkillEquipUI.OnClick_Back();
base.Set();
if (dic_EquipSkill.Count == 0)
{
for (int i = 0; i < 2; i++)
{
dic_EquipSkill.Add(i == 0, new Dictionary<int, List<int>>());
for (int j = 0; j < 3; j++)
dic_EquipSkill[i == 0].Add(j + 1, new List<int> { 0, 0, 0, 0, 0, 0 });
}
}
var sdata = ServerInfo.Ins.m_ServerData;
for (int i = 0; i < 3; i++)
for (int j = 0; j < sdata.Equip.Skill[i + 1].Count; j++)
{
dic_EquipSkill[true][i + 1][j] = sdata.Equip.Skill[i + 1][j];
dic_EquipSkill[false][i + 1][j] = sdata.Equip.Skill[i + 1][j];
}
BeforePreset = sdata.Equip.Preset;
Set_PresetTab();
Set_SkillTab();
Set_Money(table_skilllist.Ins.Get_MatIds());
}
void Set_PresetTab()
{
var sdata = ServerInfo.Ins.m_ServerData;
for (int i = 0; i < list_tabData.Count; i++)
{
list_tabData[i].n_btnName = 219 + i;
list_tabData[i].onClick = OnClick_Preset;
}
m_Tab.Set_Index(sdata.Equip.Preset - 1);
m_Tab.Set(list_tabData);
OnClick_Preset();
}
void Set_SkillTab()
{
var sdata = ServerInfo.Ins.m_ServerData;
for (int i = 0; i < list_skilltabData.Count; i++)
{
list_skilltabData[i].onClick = OnClick_SkillType;
}
m_TabSkillType.Set(list_skilltabData);
OnClick_SkillType();
}
public override void Set_UI()
{
var sdata = ServerInfo.Ins.m_ServerData;
var lst = table_skilllist.Ins.Get_DataList(dic_skillType[m_SkillType], sdata.Get_EqiupmentEquip(eItem.PC));
Set_ScrollView(lst);
list_CardBase.ForEach(f => f.Set_CardType(eUICardType.UI));
var data = m_SkillUI_SkillInfo.Get_Data();
m_SkillUI_SkillInfo.Set(DSUtil.CheckNull(data) ? list_CardBase[0].Get_Data() as SkillListTableData : data);
m_BattleUI.Set(eUICardType.UIEquip, sdata.Equip.Preset);
int obtain = 0;
for (int i = 0; i < lst.Count; i++)
if (sdata.IsObtainItem(lst[i].n_SkillID))
++obtain;
texts[0].text = $"{obtain}/{lst.Count}";
}
public void EquipSkill(int slot, int skillid)
{
var curPreset = m_Tab.Get_Index() + 1;
for (int i = 0; i < dic_EquipSkill[false][curPreset].Count; i++)
{
if (dic_EquipSkill[false][curPreset][i] == skillid)
dic_EquipSkill[false][curPreset][i] = 0;
}
dic_EquipSkill[false][curPreset][slot] = skillid;
}
public void OnClick_SkillType()
{
var index = m_TabSkillType.Get_Index();
m_SkillType = index == 0 ? "JobPassive" : index == 1 ? "Active" : "Passive";
Set_UI();
}
public void OnClick_Preset()
{
var sdata = ServerInfo.Ins.m_ServerData;
AfterPreset = sdata.Equip.Preset = m_Tab.Get_Index() + 1;
m_BattleUI.Set(eUICardType.UIEquip, sdata.Equip.Preset);
}
public override void OnClick_Back()
{
base.OnClick_Back();
bool save = BeforePreset != AfterPreset;
if (!save) save = !AreDictionariesEqual(dic_EquipSkill[true], dic_EquipSkill[false]);
if (save) ServerInfo.Ins.Save_Skill_MenuBack(AfterPreset, dic_EquipSkill[false], () =>
{ // 실패시 원래대로
var sdata = ServerInfo.Ins.m_ServerData;
sdata.Equip.Preset = BeforePreset;
for (int i = 0; i < 3; i++)
for (int j = 0; j < dic_EquipSkill[true][i + 1].Count; j++)
sdata.Equip.Skill[i + 1][j] = dic_EquipSkill[true][i + 1][j];
});
}
bool AreDictionariesEqual(Dictionary<int, List<int>> a, Dictionary<int, List<int>> b)
{
if (a.Count != b.Count) return false;
foreach (var kv in a)
{
if (!b.TryGetValue(kv.Key, out var listB)) return false;
if (!kv.Value.SequenceEqual(listB)) return false;
}
return true;
}
}