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

183 lines
6.4 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
2025-07-13 07:04:40 +00:00
using TMPro;
2024-12-15 01:39:39 +00:00
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
2025-04-10 20:44:01 +00:00
public class SkillCard : CardCoolTimeBase, IDropHandler
2024-12-15 01:39:39 +00:00
{
public static Dictionary<int, Func<bool>> dic_button = new Dictionary<int, Func<bool>>();
2025-07-13 20:48:26 +00:00
public Image[] images; // 0 1 아이콘, 2 버튼, 3 상태bg
2025-07-13 07:04:40 +00:00
public TextMeshProUGUI[] texts; // 0 상태
2025-07-13 20:48:26 +00:00
public GameObject[] gos_type; // 0 전투, 1 ui
2025-08-08 18:17:12 +00:00
public GameObject[] gos; // 0 상태, 1 잠김, 2 +
2024-12-15 01:39:39 +00:00
2025-04-10 20:44:01 +00:00
SkillDragItem m_skillDragItem;
2024-12-15 01:39:39 +00:00
SkillListTableData m_Data;
int m_Slot, m_PetId, m_Petlv;
public override void Set<T>(T _base)
{
base.Set(_base);
m_Data = _base as SkillListTableData;
CoolTime_Off();
if (!DSUtil.CheckNull(m_Data))
{
var sdata = ServerInfo.Ins.m_ServerData;
2025-08-08 18:17:12 +00:00
images[0].enabled = true;
2025-07-13 20:48:26 +00:00
images[0].sprite = images[1].sprite = m_Data.Get_Icon();
var lv = sdata.Get_SkillLv(eRole.PC, m_Data.n_SkillID);
2025-08-07 23:55:33 +00:00
gos[0].SetActive(true);
2025-07-13 20:48:26 +00:00
gos[1].SetActive(lv == 0);
2025-08-08 18:17:12 +00:00
gos[2].SetActive(false);
2025-07-13 07:04:40 +00:00
2025-07-13 20:48:26 +00:00
if (sdata.IsEquipSkill(m_Data.n_SkillID, sdata.Equip.Preset))
{
texts[0].text = table_localtext.Ins.Get_Text(207);
images[3].sprite = UIAtlasMgr.Ins.Get_Sprite("label 5");
}
2025-08-07 23:55:33 +00:00
else if (lv > 0)
2025-07-13 20:48:26 +00:00
{
texts[0].text = table_localtext.Ins.Get_Text(402);
images[3].sprite = UIAtlasMgr.Ins.Get_Sprite("label 3");
}
2025-08-07 23:55:33 +00:00
else
{
texts[0].text = table_localtext.Ins.Get_Text(208);
images[3].sprite = UIAtlasMgr.Ins.Get_Sprite("label 3 black");
}
2024-12-15 01:39:39 +00:00
}
else
{
2025-08-08 18:17:12 +00:00
DSUtil.ActivateGameObjects(gos, 0);
images[0].enabled = false;
2024-12-15 01:39:39 +00:00
}
}
public override void Set(int _val)
{
m_Slot = _val;
}
public void Set_PetSkill(int skillid, int petid, int lv)
{
CoolTime_Off();
m_PetId = petid;
m_Petlv = lv;
m_Data = table_skilllist.Ins.Get_Data_orNull(skillid);
DSUtil.InActivateGameObjects(gos);
images[0].sprite = m_Data.Get_Icon();
}
public override void Set_CardType(eUICardType _type)
{
base.Set_CardType(_type);
2025-07-13 20:48:26 +00:00
var et = images[2].GetComponent<EventTrigger>();
2024-12-15 01:39:39 +00:00
switch (CardType)
{
case eUICardType.UI:
2025-07-13 20:48:26 +00:00
DSUtil.InActivateGameObjects(gos_type, 1);
2025-02-17 06:56:36 +00:00
et.enabled = false;
2025-07-13 20:48:26 +00:00
images[1].raycastTarget = true;
images[2].GetComponent<Button>().onClick.AddListener(OnClick_SkillUI);
2025-04-10 20:44:01 +00:00
if (DSUtil.CheckNull(m_skillDragItem))
2025-07-13 20:48:26 +00:00
m_skillDragItem = images[1].gameObject.AddComponent<SkillDragItem>();
2025-04-10 20:44:01 +00:00
m_skillDragItem.m_skillID = m_Data.n_SkillID;
2024-12-15 01:39:39 +00:00
break;
case eUICardType.Use:
2025-07-13 20:48:26 +00:00
DSUtil.InActivateGameObjects(gos_type, 0);
2025-02-17 06:56:36 +00:00
et.enabled = true;
2025-04-10 20:51:23 +00:00
images[0].raycastTarget = false;
2025-07-13 07:04:40 +00:00
gos[0].SetActive(false);
2025-08-08 18:19:25 +00:00
gos[2].SetActive(false);
2024-12-15 01:39:39 +00:00
break;
2025-07-13 20:48:26 +00:00
case eUICardType.UIEquip:
DSUtil.InActivateGameObjects(gos_type, 0);
break;
2025-04-02 23:29:27 +00:00
case eUICardType.SkillTest:
2025-07-13 20:48:26 +00:00
DSUtil.InActivateGameObjects(gos_type, 0);
2025-04-10 20:51:23 +00:00
et.enabled = false;
images[0].raycastTarget = false;
2025-04-02 23:29:27 +00:00
DSUtil.InActivateGameObjects(gos);
2025-07-13 20:48:26 +00:00
GetComponentInChildren<Button>(true).onClick.AddListener(() =>
2025-04-02 23:29:27 +00:00
{
2025-05-07 03:04:27 +00:00
if (dic_button.ContainsKey(m_Data.n_SkillID))
{
if (dic_button[m_Data.n_SkillID]())
dic_button.Remove(m_Data.n_SkillID);
}
else
MyValue.MyPC.Use_Skill(m_Data, false, m_Index, true);
2025-04-02 23:29:27 +00:00
});
break;
2025-04-28 00:26:36 +00:00
case eUICardType.UIPetSkill:
images[0].raycastTarget = false;
break;
2024-12-15 01:39:39 +00:00
}
}
2025-04-10 20:44:01 +00:00
public void OnDrop(PointerEventData eventData)
{
if (CardType == eUICardType.UIEquip)
{
var draggedSkill = eventData.pointerDrag.GetComponent<SkillDragItem>();
2025-08-07 23:55:33 +00:00
var sdata = ServerInfo.Ins.m_ServerData;
if (!DSUtil.CheckNull(draggedSkill) && sdata.IsObtainItem(draggedSkill.m_skillID))
2025-04-10 20:44:01 +00:00
{
int unequipid = 0;
if (!DSUtil.CheckNull(m_Data))
unequipid = m_Data.n_SkillID;
sdata.Equip.Set_Equip(eItem.Skill, draggedSkill.m_skillID, m_Slot, unequipid);
2025-07-05 20:10:59 +00:00
NewGameUI.Ins.m_SkillUI.EquipSkill(m_Slot, draggedSkill.m_skillID);
2025-04-10 20:44:01 +00:00
NewGameUI.Ins.m_SkillUI.Set_UI();
}
}
}
2024-12-15 01:39:39 +00:00
public void OnClick_SkillUI()
{ // UI 스킬 카드
NewGameUI.Ins.m_SkillUI.m_SkillUI_SkillInfo.Set(m_Data);
}
public void OnClick_Skill()
{ // 실제 스킬 사용
if (CardType == eUICardType.UIEquip)
{
2025-04-10 20:44:01 +00:00
2024-12-15 01:39:39 +00:00
}
else
{
if (!DSUtil.CheckNull(m_Data))
{
switch (CardType)
{
case eUICardType.Use:
if (dic_button.ContainsKey(m_Data.n_SkillID))
{
if (dic_button[m_Data.n_SkillID]())
dic_button.Remove(m_Data.n_SkillID);
}
else if (m_CoolTime <= 0f)
2024-12-15 01:39:39 +00:00
{
if (MyValue.MyPC.Use_Skill(m_Data, false, m_Index))
m_CoolTime = m_Data.Get_CoolTime(MyValue.MyPC.Get_StatInfo().Get_Stat(eStat.COOLTIME_Multiplier));
}
else
MessageInfo.Ins.Add_Log(166);
break;
case eUICardType.UIPetSkill:
NewGameUI.Ins.m_PetUI.m_PetSkillDetailUI.Set(m_Data.n_SkillID, m_PetId, m_Petlv);
break;
default:
//ItemDescUI.Ins.Set(m_ItemData);
break;
}
}
}
}
public override TableDataBase Get_Data() { return m_Data; }
}