Files

339 lines
11 KiB
C#
Raw Permalink Normal View History

2024-08-23 15:49:34 +08:00
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections;
using GCGame.Table;
using System;
public class SkillRootItem : UIItemSelect, IBeginDragHandler, IDragHandler, IEndDragHandler
{
public class SkillShowInfo
{
public int SkillIndex;
public Tab_SkillEx SkillExTab; // 当前技能属性数据
public Tab_SkillBase SkillBase;
public Tab_SkillLearn SkillLearn; // 主要用于控制显示技能位置,也包含技能类别,开始学习等级
public Tab_SkillLevelUp SkillLevelUp; // 下一级的技能数据包括Id、它的升级技能、消耗/奖励信息
// 检查是否需要前置技能-在学了前置技能才可学习后面的技能
public bool IsNeedSkillBase(int skillBaseID)
{
var skillFirst = TableManager.GetSkillLevelUpByID(SkillLearn.SkillId, 0);
for (int i = 0; i < SkillLevelUp.getNeedSkillIdCount(); ++i)
{
int needSkillID = skillFirst.GetNeedSkillIdbyIndex(i);
if (needSkillID > 0)
{
Tab_SkillEx needSkillEx = TableManager.GetSkillExByID(needSkillID, 0);
if (needSkillEx == null)
return false;
if (needSkillEx.BaseId != SkillBase.Id && needSkillEx.BaseId == skillBaseID)
return true;
}
}
return false;
}
public Tab_SkillEx GetNeedSkillLvUp()
{
for (int i = 0; i < SkillLevelUp.getNeedSkillIdCount(); ++i)
{
int needSkillID = SkillLevelUp.GetNeedSkillIdbyIndex(i);
if (needSkillID > 0)
{
Tab_SkillEx needSkillEx = TableManager.GetSkillExByID(needSkillID, 0);
if (needSkillEx == null)
return null;
if (needSkillEx.BaseId != SkillBase.Id)
{
return needSkillEx;
}
}
}
return null;
}
public bool IsNeedSkillLearned()
{
var needSkill = GetNeedSkillLvUp();
if (needSkill == null)
{
return true;
}
else
{
bool alreadyLearnNeedSkill = false;
foreach (var skillInfo in Singleton<ObjManager>.GetInstance().MainPlayer.OwnSkillInfo)
{
var skillEx = skillInfo.SkillExTable;
if (skillEx == null)
continue;
if (skillEx.BaseId == needSkill.BaseId && skillEx.Level >= needSkill.Level)
{
alreadyLearnNeedSkill = true;
}
}
return alreadyLearnNeedSkill;
}
}
}
public Image _Icon;
public Text _LevelTx;
public GameObject _LevelGO;
public Text _LearnTx1;
public Text _LearnTx2;
public GameObject _LearnGO1;
public GameObject _LearnGO2;
public GameObject _DisableGO;
public GameObject _PassiveGO;
public GameObject _NeedItemGO;
public RectTransform _RectTransform;
public GameObject _EquipedTag;
public SkillShowInfo ShowSkillInfo;
public virtual void ShowSkillItem(SkillShowInfo skillInfo, bool isOtherPlayer)
{
UnSelected();
_InitInfo = skillInfo;
ShowSkillInfo = skillInfo;
LoadAssetBundle.Instance.SetImageSprite(_Icon, skillInfo.SkillBase.Icon);
if (ShowSkillInfo.SkillLearn.ShowPosY > 0)
{
_LearnGO1.SetActive(true);
_LearnGO2.SetActive(false);
_LearnTx1.text = ShowSkillInfo.SkillLearn.LearnLv.ToString();
}
else
{
_LearnGO1.SetActive(false);
_LearnGO2.SetActive(true);
_LearnTx2.text = ShowSkillInfo.SkillLearn.LearnLv.ToString();
}
if (skillInfo.SkillExTab == null)
{
_DisableGO.SetActive(true);
// 尚未学习
_LevelTx.text = StrDictionary.GetClientDictionaryString("#{6738}");
if (skillInfo.SkillLevelUp != null)
{
if (skillInfo.SkillLevelUp.Level > GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level)
{
_NeedItemGO.SetActive(false);
}
else
{
_NeedItemGO.SetActive(true);
}
}
}
else
{
_DisableGO.SetActive(false);
_NeedItemGO.SetActive(false);
Games.SkillModle.OwnSkillData ownSkill = null;
if (!isOtherPlayer)
{
ownSkill = GameManager.gameManager.PlayerDataPool.GetOwnSkillInfo(skillInfo.SkillBase.Id);
}
if (ownSkill == null || ownSkill.exSkillLevel == 0)
{
_LevelTx.text = StrDictionary.GetClientDictionaryString("#{6739}", skillInfo.SkillExTab.Level.ToString());
}
else
{
_LevelTx.text = StrDictionary.GetClientDictionaryString("#{6739}", skillInfo.SkillExTab.Level.ToString() + StrDictionary.GetClientDictionaryString("#{4743}", ownSkill.exSkillLevel));
}
}
UpdateRedTips();
RefreshEquipedTag();
}
public void RefreshEquipedTag()
{
int skillIdx = -1;
for (int i = 0; i < Singleton<ObjManager>.GetInstance().MainPlayer.OwnSkillInfo.Length; ++i)
{
if (ShowSkillInfo.SkillExTab == null)
break;
if (ShowSkillInfo.SkillExTab.SkillExID == Singleton<ObjManager>.GetInstance().MainPlayer.OwnSkillInfo[i].SkillId)
{
skillIdx = i;
break;
}
}
for (int i = 0; i < SkillRootLogic.Instance()._CurSkillPage.SkillIdxs.Length; ++i)
{
if (skillIdx != -1 && SkillRootLogic.Instance()._CurSkillPage.SkillIdxs[i] == skillIdx)
{
_EquipedTag.SetActive(true);
return;
}
}
_EquipedTag.SetActive(false);
}
#region drag
public virtual void OnBeginDrag(PointerEventData eventData)
{
int state = GameManager.gameManager.PlayerDataPool.GetPropInt(PropID.PropertyID.STATE);
if ( (state & 2) > 0)
{
SkillRootLogic.canDrag = false;
if(SkillRootLogic.Instance().CanDragSkillItem())
{
GUIData.AddNotifyData("#{4748}");
}
}
else
{
SkillRootLogic.canDrag = true;
}
if(SkillRootLogic.canDrag == false)
{
return;
}
if (FactionSkillChangeRootCtr.Instance)
{
if (_DisableGO.activeSelf)
return;
FactionSkillChangeRootCtr.Instance.SetDragSkillIdx(ShowSkillInfo);
if (!GlobalData.CanDragSkillBySkillIndex(FactionSkillChangeRootCtr.Instance._DragSkillOwnIdx))
{
FactionSkillChangeRootCtr.Instance.SetDragSkillIdx(null);
return;
}
FactionSkillChangeRootCtr.Instance._DragIcon.sprite = _Icon.sprite;
FactionSkillChangeRootCtr.Instance._DragIcon.gameObject.SetActive(true);
}else if (SkillRootLogic.Instance())
{
if (_DisableGO.activeSelf)
return;
if (!SkillRootLogic.Instance().CanDragSkillItem())
return;
//绝技不能被拖动
SkillRootLogic.Instance().SetDragSkillIdx(ShowSkillInfo);
if (!GlobalData.CanDragSkillBySkillIndex(SkillRootLogic.Instance()._DragSkillOwnIdx))
{
SkillRootLogic.Instance().SetDragSkillIdx(null);
return;
}
SkillRootLogic.Instance()._DragIcon.sprite = _Icon.sprite;
SkillRootLogic.Instance()._DragIcon.gameObject.SetActive(true);
}
}
public virtual void OnDrag(PointerEventData eventData)
{
if (SkillRootLogic.canDrag == false)
{
return;
}
if (FactionSkillChangeRootCtr.Instance)
{
if (FactionSkillChangeRootCtr.Instance._DragIcon.isActiveAndEnabled)
{
SetDraggedPosition(eventData);
}
}
if(SkillRootLogic.Instance())
{
if(SkillRootLogic.Instance()._DragIcon.isActiveAndEnabled)
{
SetDraggedPosition(eventData);
}
}
}
protected virtual void SetDraggedPosition(PointerEventData eventData)
{
if (SkillRootLogic.Instance())
{
var rt = SkillRootLogic.Instance()._DragIcon.rectTransform;
Vector3 globalMousePos;
if (RectTransformUtility.ScreenPointToWorldPointInRectangle(SkillRootLogic.Instance().GetComponent<RectTransform>(), eventData.position, eventData.pressEventCamera, out globalMousePos))
{
rt.position = globalMousePos;
}
}
if (FactionSkillChangeRootCtr.Instance)
{
var rt = FactionSkillChangeRootCtr.Instance._DragIcon.rectTransform;
Vector3 globalMousePos;
if (RectTransformUtility.ScreenPointToWorldPointInRectangle(FactionSkillChangeRootCtr.Instance.GetComponent<RectTransform>(), eventData.position, eventData.pressEventCamera, out globalMousePos))
{
rt.position = globalMousePos;
}
}
}
public virtual void OnEndDrag(PointerEventData eventData)
{
if (SkillRootLogic.canDrag == false)
{
return;
}
if (SkillRootLogic.Instance())
{
SkillRootLogic.Instance().SetDragSkillIdx(null);
SkillRootLogic.Instance()._DragIcon.sprite = null;
SkillRootLogic.Instance()._DragIcon.gameObject.SetActive(false);
}
if(FactionSkillChangeRootCtr.Instance)
{
FactionSkillChangeRootCtr.Instance.SetDragSkillIdx(null);
FactionSkillChangeRootCtr.Instance._DragIcon.sprite = null;
FactionSkillChangeRootCtr.Instance._DragIcon.gameObject.SetActive(false);
}
}
#endregion
#region
public GameObject _RedTips;
// 更新红点
public virtual void UpdateRedTips()
{
// 增加对他人信息界面支持
if (SkillRootLogic.Instance() != null
&& SkillRootLogic.Instance().gameObject.activeInHierarchy
&& SkillRootLogic.CanSkillItemLvUp(ShowSkillInfo))
{
_RedTips.SetActive(true);
}
else
{
_RedTips.SetActive(false);
}
}
#endregion
}