using System; using System.Collections.Generic; using System.Linq; using Fort23.Core; 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; /// /// 1.执行升级逻辑 2.执行更换逻辑 /// private int infoType = 1; 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 void AddButtonEvent() { Btn_ChangeRoad.onClick.AddListener(() => { SkillRoadSelecPanel.OpenPanel(); }); Btn_Setting.onClick.AddListener(() => { GongFaSettingRoot.SetActive(true); infoType = 2; Btn_Setting.gameObject.SetActive(false); }); 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) { GongFaSettingRoot.SetActive(false); infoType = 1; Btn_Setting.gameObject.SetActive(true); CloseSelect(); } else { UIManager.Instance.HideUIUIPanel(this); } }); Btn_RemoveGongFa.onClick.AddListener(() => { PlayerManager.Instance.GongFaControl.RemoveSkillInfo(dianjiSkillKongWidget.index); dianjiSkillKongWidget.Cleared(); UpdateSkillWidget(); CloseSelect(); }); } List showSkillInfo = new List(); 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) { } else if (type2 == 1) { } else if (type2 == 2) { } else if (type2 == 4) { } else if (type2 == 8) { } else if (type2 == 16) { } //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(); } 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(PlayerManager.Instance.GongFaControl.GetSkillInfo(index)); skillKongWidget.transform.anchoredPosition = pos; skillKongWidget.onClick = OnClickSkillKongWidget; allKongSkill.Add(skillKongWidget); } } private SkillKongWidget dianjiSkillKongWidget; private void OnClickSkillKongWidget(ItemWidgetBasic obj) { if (infoType == 1) return; SkillKongWidget skillKongWidget = obj as SkillKongWidget; if (skillKongWidget.SkillInfo == null && dianjiSkillKongWidget == null) { skillKongWidget.SetSKill(selectSkillConfig); selectSkillConfig.index = skillKongWidget.index; PlayerManager.Instance.GongFaControl.AddUseSkill(selectSkillConfig); CloseSelect(); } else if (skillKongWidget.SkillInfo != null && dianjiSkillKongWidget == null && selectSkillConfig != null) { PlayerManager.Instance.GongFaControl.RemoveSkillInfo(skillKongWidget.SkillInfo); skillKongWidget.SetSKill(selectSkillConfig); selectSkillConfig.index = skillKongWidget.index; PlayerManager.Instance.GongFaControl.AddUseSkill(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); dianjiSkillKongWidget.SkillInfo.index = dianjiSkillKongWidget.index; PlayerManager.Instance.GongFaControl.AddUseSkill(dianjiSkillKongWidget.SkillInfo); } else { PlayerManager.Instance.GongFaControl.RemoveSkillInfo(dianjiSkillKongWidget.SkillInfo); dianjiSkillKongWidget.Cleared(); } skillKongWidget.SetSKill(selectSkillConfig); selectSkillConfig.index = skillKongWidget.index; PlayerManager.Instance.GongFaControl.AddUseSkill(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); for (int i = 0; i < allKongSkill.Count; i++) { allKongSkill[i].SelectState(false); } } public override void Hide() { base.Hide(); if (isAlter) { PlayerManager.Instance.GongFaControl.SaveUseSkill(); } CombatDrive.Instance.CombatController.isUpdate = true; isAlter = false; } 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 (PlayerManager.Instance.GongFaControl.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 (PlayerManager.Instance.GongFaControl.allUseSkill.Contains(skillWidget.skillConfigId)) { skillWidget.Icon_Marsk.SetActive(true); } else { skillWidget.Icon_Marsk.SetActive(false); } } for (var i = 0; i < PlayerManager.Instance.GongFaControl.allUseSkill.Length; i++) { if (PlayerManager.Instance.GongFaControl.allUseSkill[i] != null) { count++; } } Text_GongFaCount.text = $"功法数量{count}/4"; } private void OnClick(ItemWidgetBasic obj) { SkillWidget skillWidget = obj as SkillWidget; if (infoType == 1) { GongFaUpgradePanel.Open(skillWidget.skillConfigId); } else if (infoType == 2) { int count = 0; for (var i = 0; i < PlayerManager.Instance.GongFaControl.allUseSkill.Length; i++) { if (PlayerManager.Instance.GongFaControl.allUseSkill[i] != null) { count++; } } if (count >= 4) return; if (PlayerManager.Instance.GongFaControl.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); } _wuXingGongFaWidgets.Clear(); base.Close(); } } }