using System; using System.Collections.Generic; using System.Linq; using Core.Language; using Excel2Json; using Fort23.Core; using Fort23.UTool; using GameLogic.Combat; using GameLogic.Combat.CombatTool; using GameLogic.Hero; using UnityEngine; namespace Fort23.Mono { [UIBinding(prefab = "SkillSelectPanel")] public partial class SkillSelectPanel : UIPanel, IScrollListContent { private bool _isSelectSkill; private List allKongSkill = new List(); List _wuXingGongFaWidgets = new List(); private SkillInfo selectSkillConfig; private bool isAlter; private int type1 = 0; private int type2 = 0; public SkillInfo[] allUseSkill; private int currenRoadSkilId = PlayerManager.Instance.myHero.TaoismSkillId; /// /// 1.执行升级逻辑 2.执行更换逻辑 /// private int infoType = 1; SkillWidget currentSelectedSkill; public static async CTask OpenSkillSelectPanel() { CombatDrive.Instance.CombatController.isUpdate = false; await UIManager.Instance.LoadAndOpenPanel(null, UILayer.Middle); } private void Init() { } protected override void AddEvent() { } protected override void DelEvent() { } public override CTask AsyncInit(object[] uiData) { allUseSkill = PlayerManager.Instance.GongFaControl.allUseSkill.ToArray(); UpdateSkillWidget(); UpdateRoad(); return base.AsyncInit(uiData); } public override void AddButtonEvent() { Btn_OneKyChange.onClick.AddListener(() => { for (var i = 0; i < allUseSkill.Length; i++) { allUseSkill[i] = null; } SkillInfo[] skills = new SkillInfo[5]; List allSkill = PlayerManager.Instance.GongFaControl.allSkill.ToList(); for (var i = 0; i < allSkill.Count; i++) { //金 if (allSkill[i].skillConfig.attribute == 1) { if (skills[0] == null || skills[0].skillConfig.level > allSkill[i].skillConfig.level) { skills[0] = allSkill[i]; } } //木 if (allSkill[i].skillConfig.attribute == 2) { if (skills[1] == null || skills[1].skillConfig.level > allSkill[i].skillConfig.level) { skills[1] = allSkill[i]; } } //水 if (allSkill[i].skillConfig.attribute == 4) { if (skills[2] == null || skills[2].skillConfig.level > allSkill[i].skillConfig.level) { skills[2] = allSkill[i]; } } //火 if (allSkill[i].skillConfig.attribute == 8) { if (skills[3] == null || skills[3].skillConfig.level > allSkill[i].skillConfig.level) { skills[3] = allSkill[i]; } } //土 if (allSkill[i].skillConfig.attribute == 16) { if (skills[4] == null || skills[4].skillConfig.level > allSkill[i].skillConfig.level) { skills[4] = allSkill[i]; } } } for (var i = 0; i < allKongSkill.Count; i++) { allKongSkill[i].InitWidget(allKongSkill[i].index, this); } for (var i = 0; i < indexList.Count; i++) { if (skills[i] == null) continue; allKongSkill[indexList[i]].SetSKill(skills[i]); allUseSkill[indexList[i]] = skills[i]; } isAlter = true; UpdateSkillWidget(); }); Btn_ChangeOk.onClick.AddListener(() => { ChangeInfoType(1); if (isAlter) { PlayerManager.Instance.GongFaControl.SaveUseSkill(allUseSkill); PlayerManager.Instance.GongFaControl.SetTaoismSkillIndex(currenRoadSkilId); PlayerManager.Instance.myHero.heroData.TaoismSkillId = currenRoadSkilId; AccountFileInfo.Instance.SavePlayerData(); } isAlter = false; }); Btn_Info.onClick.AddListener(async () => { if (currentSelectedSkill != null) { GongFaUpgradePanel gongFaUpgradePanel = await GongFaUpgradePanel.Open(currentSelectedSkill.skillConfigId); await gongFaUpgradePanel.UIClosed(); Sort(type1, type2); } }); Btn_ChangeRoad.onClick.AddListener(() => { SkillRoadSelecPanel.OpenPanel(currenRoadSkilId, (skillId) => { if (skillId != currenRoadSkilId && skillId != 0) { currenRoadSkilId = skillId; isAlter = true; UpdateRoad(); } }); }); Btn_Setting.onClick.AddListener(() => { ChangeInfoType(2); }); Btn_Jin.onClick.AddListener(() => { if (type2 == 1) { type2 = 0; } else { type2 = 1; } Sort(type1, type2); }); Btn_Mu.onClick.AddListener(() => { if (type2 == 2) { type2 = 0; } else { type2 = 2; } Sort(type1, type2); }); Btn_Shui.onClick.AddListener(() => { if (type2 == 4) { type2 = 0; } else { type2 = 4; } Sort(type1, type2); }); Btn_Huo.onClick.AddListener(() => { if (type2 == 8) { type2 = 0; } else { type2 = 8; } Sort(type1, type2); }); Btn_Tu.onClick.AddListener(() => { if (type2 == 16) { type2 = 0; } else { type2 = 16; } Sort(type1, type2); }); Btn_All.onClick.AddListener(() => { type1 = 0; Sort(type1, type2); }); Btn_ZhuDong.onClick.AddListener(() => { type1 = 1; Sort(type1, type2); }); Btn_FuZu.onClick.AddListener(() => { type1 = 2; Sort(type1, type2); }); Btn_BeiDong.onClick.AddListener(() => { type1 = 5; Sort(type1, type2); }); guanbi.onClick.AddListener(() => { if (infoType == 2) { ChangeInfoType(1); currenRoadSkilId = PlayerManager.Instance.myHero.TaoismSkillId; allUseSkill = PlayerManager.Instance.GongFaControl.allUseSkill.ToArray(); for (var i = 0; i < allKongSkill.Count; i++) { allKongSkill[i].InitWidget(allKongSkill[i].index, this); allKongSkill[i].SetSKill(allUseSkill[allKongSkill[i].index]); } UpdateSkillWidget(); UpdateRoad(); } else { UIManager.Instance.HideUIUIPanel(this); } }); Btn_RemoveGongFa.onClick.AddListener(() => { PlayerManager.Instance.GongFaControl.RemoveSkillInfo(dianjiSkillKongWidget.index); dianjiSkillKongWidget.Cleared(); UpdateSkillWidget(); CloseSelect(); }); } private void UpdateRoad() { if (currenRoadSkilId != 0) { SkillConfig skillConfig = ConfigComponent.Instance.Get(currenRoadSkilId); Text_RoadName.text = LanguageManager.Instance.Text(skillConfig.name); } else { Text_RoadName.text = "未选择"; } // } private void ChangeInfoType(int type) { if (type == 1) { GongFaSettingRoot.SetActive(false); infoType = 1; Btn_Setting.gameObject.SetActive(true); CloseSelect(); } else if (type == 2) { GongFaSettingRoot.SetActive(true); infoType = 2; allUseSkill = PlayerManager.Instance.GongFaControl.allUseSkill.ToArray(); Btn_Setting.gameObject.SetActive(false); } } List showSkillInfo = new List(); List indexList = new List() { 0, 6, 8, 4, 2 }; private void Sort(int type1, int type2) { //先排序类型在排属性 if (type1 == 0) { BtnRoot.ClickWidget(Btn_All.GetComponent()); } else if (type1 == 1) { BtnRoot.ClickWidget(Btn_ZhuDong.GetComponent()); } else if (type1 == 2) { BtnRoot.ClickWidget(Btn_FuZu.GetComponent()); } else if (type1 == 5) { BtnRoot.ClickWidget(Btn_BeiDong.GetComponent()); } if (type2 == 0) { Icon_Select.gameObject.SetActive(false); } else if (type2 == 1) { Icon_Select.transform.position = Btn_Jin.transform.position; Icon_Select.gameObject.SetActive(true); } else if (type2 == 2) { Icon_Select.transform.position = Btn_Mu.transform.position; Icon_Select.gameObject.SetActive(true); } else if (type2 == 4) { Icon_Select.transform.position = Btn_Shui.transform.position; Icon_Select.gameObject.SetActive(true); } else if (type2 == 8) { Icon_Select.transform.position = Btn_Huo.transform.position; Icon_Select.gameObject.SetActive(true); } else if (type2 == 16) { Icon_Select.transform.position = Btn_Tu.transform.position; Icon_Select.gameObject.SetActive(true); } //0代表全部 if (type1 == 0) { showSkillInfo = PlayerManager.Instance.GongFaControl.allSkill.ToList(); } else { showSkillInfo = PlayerManager.Instance.GongFaControl.allSkill.Where(s => s.skillConfig.SkillType == type1).ToList(); } if (type2 == 0) { } else { showSkillInfo = showSkillInfo.Where(s => s.skillConfig.attribute == type2).ToList(); } CloseSelect(); Content.Init(this, showSkillInfo.Count); } public override async CTask Open() { await base.Open(); Sort(type1, type2); for (int i = 0; i < 5; i++) { double hd = i * 72 * Math.PI / 180f; double a = Math.Cos(hd); double b = -Math.Sin(hd); double c = Math.Sin(hd); double d = a; double x = a * 0 + b * 172; double y = c * 0 + d * 172; int index = i; WuXingGongFaWidget widget = await UIManager.Instance.CreateGComponent(null, root: WuXingGongFaRoot, poolName: "132"); widget.transform.anchoredPosition = new Vector2((float)x, (float)y); widget.ShowWidget(index); _wuXingGongFaWidgets.Add(widget); } for (int i = 0; i < 10; i++) { int index = i; double hd = (-36 * i) * Math.PI / 180f; double a = Math.Cos(hd); double b = -Math.Sin(hd); double c = Math.Sin(hd); double d = a; double x = a * 0 + b * 275; double y = c * 0 + d * 275; Vector2 pos = new Vector2((float)x, (float)y); SkillKongWidget skillKongWidget = await UIManager.Instance.CreateGComponentForObject( kongdongs.gameObject, null, SkillKongWeiRoot, isInstance: true); skillKongWidget.InitWidget(index, this); skillKongWidget.SetSKill(allUseSkill[index]); skillKongWidget.transform.anchoredPosition = pos; skillKongWidget.onClick = OnClickSkillKongWidget; allKongSkill.Add(skillKongWidget); } } private SkillKongWidget dianjiSkillKongWidget; private void OnClickSkillKongWidget(ItemWidgetBasic obj) { if (infoType == 1) return; Btn_Info.gameObject.SetActive(false); currentSelectedSkill = null; SkillKongWidget skillKongWidget = obj as SkillKongWidget; if (skillKongWidget.SkillInfo == null && dianjiSkillKongWidget == null && selectSkillConfig == null) { return; } int count = 0; for (var i = 0; i < allUseSkill.Length; i++) { if (allUseSkill[i] != null) { count++; } } //直接上功法 if (skillKongWidget.SkillInfo == null && dianjiSkillKongWidget == null && selectSkillConfig != null) { if (count >= 4) { TipMessagePanel.OpenTipMessagePanel("功法已经上满"); CloseSelect(); return; } skillKongWidget.SetSKill(selectSkillConfig); allUseSkill[skillKongWidget.index] = selectSkillConfig; } //替换功法 else if (skillKongWidget.SkillInfo != null && dianjiSkillKongWidget == null && selectSkillConfig != null) { allUseSkill[skillKongWidget.SkillInfo.index] = null; skillKongWidget.SetSKill(selectSkillConfig); allUseSkill[skillKongWidget.index] = selectSkillConfig; skillKongWidget.SetSKill(selectSkillConfig); CloseSelect(); } else { if (dianjiSkillKongWidget != null && dianjiSkillKongWidget == skillKongWidget) { CloseSelect(); return; } //交换功法 if (dianjiSkillKongWidget == null) { dianjiSkillKongWidget = skillKongWidget; Btn_RemoveGongFa.transform.position = dianjiSkillKongWidget.RemovePos.position; Btn_RemoveGongFa.gameObject.SetActive(true); SelectSkill(skillKongWidget.SkillInfo); } else { isAlter = true; if (skillKongWidget.SkillInfo != null) { dianjiSkillKongWidget.SetSKill(skillKongWidget.SkillInfo); allUseSkill[dianjiSkillKongWidget.index] = dianjiSkillKongWidget.SkillInfo; } else { allUseSkill[dianjiSkillKongWidget.SkillInfo.index] = null; dianjiSkillKongWidget.Cleared(); } skillKongWidget.SetSKill(selectSkillConfig); allUseSkill[skillKongWidget.index] = selectSkillConfig; CloseSelect(); } } UpdateSkillWidget(); } public void SelectSkill(SkillInfo skillConfig) { selectSkillConfig = skillConfig; _isSelectSkill = true; for (int i = 0; i < allKongSkill.Count; i++) { allKongSkill[i].SelectState(true); } } private void CloseSelect() { _isSelectSkill = false; selectSkillConfig = null; dianjiSkillKongWidget = null; Btn_RemoveGongFa.gameObject.SetActive(false); Btn_Info.gameObject.SetActive(false); currentSelectedSkill = null; for (int i = 0; i < allKongSkill.Count; i++) { allKongSkill[i].SelectState(false); } } public override void Hide() { base.Hide(); CombatDrive.Instance.CombatController.isUpdate = true; } List _skillWidgets = new List(); public async CTask GetIScorllListWidget(int index, RectTransform root) { if (index < 0 || index >= showSkillInfo.Count) return null; SkillInfo skillInfo = showSkillInfo[index]; SkillWidget skillWidget = await UIManager.Instance.CreateGComponent(null, ContentRoot); skillWidget.InitSkillWidget(skillInfo, this); skillWidget.onClick = OnClick; if (allUseSkill.Contains(skillWidget.skillConfigId)) { skillWidget.Icon_Marsk.SetActive(true); } else { skillWidget.Icon_Marsk.SetActive(false); } _skillWidgets.Add(skillWidget); return skillWidget; } private void UpdateSkillWidget() { int count = 0; foreach (var skillWidget in _skillWidgets) { if (allUseSkill.Contains(skillWidget.skillConfigId)) { skillWidget.Icon_Marsk.SetActive(true); } else { skillWidget.Icon_Marsk.SetActive(false); } } for (var i = 0; i < allUseSkill.Length; i++) { if (allUseSkill[i] != null) { count++; } } Text_GongFaCount.text = $"功法数量{count}/4"; } private async void OnClick(ItemWidgetBasic obj) { SkillWidget skillWidget = obj as SkillWidget; if (infoType == 1) { GongFaUpgradePanel gongFaUpgradePanel = await GongFaUpgradePanel.Open(skillWidget.skillConfigId); await gongFaUpgradePanel.UIClosed(); Sort(type1, type2); } else if (infoType == 2) { CloseSelect(); Btn_Info.transform.position = skillWidget.InfoPos.position; Btn_Info.gameObject.SetActive(true); currentSelectedSkill = skillWidget; if (allUseSkill.Contains(skillWidget.skillConfigId)) { return; } Btn_RemoveGongFa.gameObject.SetActive(false); SelectSkill(skillWidget.skillConfigId); } } public void HindIScorllListWidget(IScorllListWidget widget) { UIManager.Instance.DormancyGComponent(widget as SkillWidget); _skillWidgets.Remove(widget as SkillWidget); } public override void Close() { foreach (var skillWidget in _skillWidgets) { UIManager.Instance.DormancyGComponent(skillWidget); } _skillWidgets.Clear(); foreach (var skillKongWidget in allKongSkill) { UIManager.Instance.DormancyGComponent(skillKongWidget); } allKongSkill.Clear(); foreach (var wuXingGongFaWidget in _wuXingGongFaWidgets) { UIManager.Instance.DormancyGComponent(wuXingGongFaWidget); } Icon_Select.gameObject.SetActive(false); _wuXingGongFaWidgets.Clear(); CloseSelect(); ChangeInfoType(1); base.Close(); } } }