Files
JJBB/Assets/Project/Script/GUI/FactionChallenge/FactionSkillChangeRootCtr.cs

320 lines
9.5 KiB
C#
Raw Permalink Normal View History

2024-08-23 15:49:34 +08:00
using System;
using System.Collections.Generic;
using System.Runtime.Remoting.Lifetime;
using Games.GlobeDefine;
using Games.LogicObj;
using Games.SkillModle;
using GCGame;
using GCGame.Table;
using Module.Log;
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using Games.Item;
public class FactionSkillChangeRootCtr : MonoBehaviour {
public static FactionSkillChangeRootCtr Instance;
private void Awake()
{
Instance = this;
}
private void OnDestroy()
{
Instance = null;
}
private int[] SkillIdx = new int[4]; //五个ID的下标
public FactionSkillBarItem _DragSkillBar { get; set; }
public int _DragSkillOwnIdx { get; set; }
public FactionSkillBarItem[] _SkillBarItems;
public UISubScollMenu _SkillClasses;
public Image _DragIcon;
public SkillRootPage _SkillInfoPage;
//private UserConfigData.FactionSkillSavePage _CurSkillPage;
private void OnEnable()
{
InitSkillItems(); //初始化技能按钮
LoadFactionSkillSavePage();
_SkillClasses.Clear();
foreach (var skillClass in _MySkillInfos)
{
_SkillClasses.PushMenu(skillClass.Key);
}
_SkillClasses.ShowDefaultFirst();
OnSkillClassPage(_SkillClasses.SelectedSub1);
}
private int[] settingSkillIdx;
private void LoadFactionSkillSavePage()
{
var mainPlayer = Singleton<ObjManager>.GetInstance().MainPlayer;
if (mainPlayer == null)
return;
settingSkillIdx = new int[4];
for (int index = 0; index < 4; index++)
{
bool hasFind = false;
for (int _Index = 0; _Index < mainPlayer.OwnSkillInfo.Length; _Index++)
{
if (mainPlayer.OwnSkillInfo[_Index].SkillId == FactionChallengeCtr.Instace.curSkillIdx[index]
&& mainPlayer.OwnSkillInfo[_Index].SkillId != -1)
{
hasFind = true;
settingSkillIdx[index] = _Index;
}
}
if (!hasFind)
{
settingSkillIdx[index] = -1;
}
}
for (int i = 0; i < settingSkillIdx.Length; ++i)
{
if (i < _SkillBarItems.Length)
{
_SkillBarItems[i].InitSkillBar(settingSkillIdx[i], i);
}
}
}
private Dictionary<string, List<SkillRootItem.SkillShowInfo>> _MySkillInfos;
private SkillRootItem.SkillShowInfo _SelectedSkillShow;
private void InitSkillItems()
{
var totleList = new List<SkillRootItem.SkillShowInfo>();
_MySkillInfos = new Dictionary<string, List<SkillRootItem.SkillShowInfo>>();
foreach (var skillInfo in Singleton<ObjManager>.GetInstance().MainPlayer.OwnSkillInfo)
{
if (skillInfo.SkillLevelTable == null)
continue;
SkillRootItem.SkillShowInfo showInfo = new SkillRootItem.SkillShowInfo();
showInfo.SkillExTab = skillInfo.SkillExTable;
if (showInfo.SkillExTab == null)
continue;
showInfo.SkillBase = skillInfo.SkillBaseTable;
Tab_SkillLevelUp skillnext = TableManager.GetSkillLevelUpByID(skillInfo.SkillLevelTable.NextSkillId, 0);
showInfo.SkillLevelUp = skillnext;
totleList.Add(showInfo);
}
var learnList = TableManager.GetSkillLearn().Values;
foreach (var tabAct in learnList)
{
if (tabAct.Profession != GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Profession)
continue;
Tab_SkillEx skillEx = TableManager.GetSkillExByID(tabAct.SkillId, 0);
Tab_SkillBase skillBase = TableManager.GetSkillBaseByID(skillEx.BaseId, 0);
var skillInfo = totleList.Find((showInfo) =>
{
if (showInfo.SkillBase.Id == skillEx.BaseId)
{
return true;
}
return false;
});
if (skillInfo != null)
{
skillInfo.SkillLearn = tabAct;
}
else
{
SkillRootItem.SkillShowInfo showInfo = new SkillRootItem.SkillShowInfo();
showInfo.SkillLearn = tabAct;
showInfo.SkillBase = skillBase;
showInfo.SkillLevelUp = TableManager.GetSkillLevelUpByID(skillEx.SkillExID, 0); ;
totleList.Add(showInfo);
}
}
foreach (var showInfo in totleList)
{
if (showInfo.SkillLearn == null)
continue;
if (_MySkillInfos.ContainsKey(showInfo.SkillLearn.Class))
{
_MySkillInfos[showInfo.SkillLearn.Class].Add(showInfo);
}
else
{
List<SkillRootItem.SkillShowInfo> showList = new List<SkillRootItem.SkillShowInfo>();
showList.Add(showInfo);
_MySkillInfos.Add(showInfo.SkillLearn.Class, showList);
}
}
}
public void OnSkillClassPage(object paramObj)
{
string skillClass = paramObj as string;
if (_MySkillInfos.ContainsKey(skillClass))
{
_SkillInfoPage.InitContainer(_MySkillInfos[skillClass], OnSkillItemClick);
}
}
public void OnSkillItemClick(object skillItem)
{
SkillRootItem.SkillShowInfo skillShowInfo = skillItem as SkillRootItem.SkillShowInfo;
if (skillShowInfo == null)
return;
_SelectedSkillShow = skillShowInfo;
{
if (skillShowInfo.SkillExTab != null)
{
SkillTooltipsLogic.ShowSkillToolTips(skillShowInfo.SkillExTab.SkillExID, new Vector3(114, -35, 0));
}
else
{
SkillTooltipsLogic.ShowSkillToolTips(skillShowInfo.SkillLearn.SkillId, new Vector3(114, -35, 0));
}
}
}
public void ChangeSkillBar(int skillItemIdx)
{
if (_DragSkillOwnIdx < 0)
return;
for (int index = 0; index < settingSkillIdx.Length; index++)
{
//技能已经存在的情况
if (settingSkillIdx[index] == _DragSkillOwnIdx)
{
//目标位置ID与拖拽过来的技能ID相同
if (settingSkillIdx[skillItemIdx] == _DragSkillOwnIdx)
{
return;
}
else
{
//目标位置技能ID置为拖拽过来的ID
settingSkillIdx[skillItemIdx] = _DragSkillOwnIdx;
//将存在技能的ID置为-1
settingSkillIdx[index] = -1;
}
//刷新界面
UpdateSkillBarInfo();
return;
}
}
settingSkillIdx[skillItemIdx] = _DragSkillOwnIdx;
}
public void SaveSkillPage()
{
//发送技能ID
CG_USER_CHALLENGE_EQUIP_SKILL packet = (CG_USER_CHALLENGE_EQUIP_SKILL)PacketDistributed.CreatePacket(MessageID.PACKET_CG_USER_CHALLENGE_EQUIP_SKILL);
var mainPlayer = Singleton<ObjManager>.GetInstance().MainPlayer;
if (mainPlayer == null)
return;
for (int index = 0; index < _SkillBarItems.Length; index++)
{
if(_SkillBarItems[index].OwnSkillIdx == -1)
{
packet.AddSkillId(-1);
}
else
{
packet.AddSkillId(mainPlayer.OwnSkillInfo[_SkillBarItems[index].OwnSkillIdx].SkillId);
}
}
packet.SendPacket();
//请求一次当前的页面的配置信息包括技能配置信息
CG_REQ_USER_CHALLENGE_INFO ask = (CG_REQ_USER_CHALLENGE_INFO)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_USER_CHALLENGE_INFO);
ask.SetFlag(1);
ask.SendPacket();
}
public void UpdateSkillBarInfo()
{
for (int i = 0; i < settingSkillIdx.Length; ++i)
{
if (i < _SkillBarItems.Length)
{
_SkillBarItems[i].InitSkillBar(settingSkillIdx[i], i);
}
}
}
public void ExChangeSkillBar(int skillItemIdx)
{
if (_DragSkillOwnIdx < 0)
return;
if (_DragSkillBar != null)
{
int tempIdx = settingSkillIdx[skillItemIdx];
settingSkillIdx[skillItemIdx] = _DragSkillBar.OwnSkillIdx;
settingSkillIdx[_DragSkillBar.SkillItemIdx] = tempIdx;
}
}
public void ClearSkillBar(int skillItemIdx)
{
if (skillItemIdx >= settingSkillIdx.Length)
return;
settingSkillIdx[skillItemIdx] = -1;
}
public void SetDragSkillIdx(SkillRootItem.SkillShowInfo showInfo)
{
if (showInfo == null || showInfo.SkillExTab == null)
{
_DragSkillOwnIdx = -1;
return;
}
if (Singleton<ObjManager>.GetInstance().MainPlayer == null)
return;
for (int i = 0; i < Singleton<ObjManager>.GetInstance().MainPlayer.OwnSkillInfo.Length; ++i)
{
if (showInfo.SkillExTab.SkillExID == Singleton<ObjManager>.GetInstance().MainPlayer.OwnSkillInfo[i].SkillId)
{
_DragSkillOwnIdx = i;
return;
}
}
_DragSkillOwnIdx = -1;
}
public void CloseWindow()
{
SaveSkillPage(); //把当前的技能配置存储在XML文件内
UIManager.CloseUI(UIInfo.FactionSkillChangeRoot);
}
}