339 lines
11 KiB
C#
339 lines
11 KiB
C#
|
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
|
|||
|
}
|