From 39001a600fcae2bcf27c225df8752d75fb92fef4 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期五, 31 十月 2025 11:18:26 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_scripts
---
Main/System/HeroUI/HeroPosWin.cs | 388 +++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 362 insertions(+), 26 deletions(-)
diff --git a/Main/System/HeroUI/HeroPosWin.cs b/Main/System/HeroUI/HeroPosWin.cs
index 1b0d552..00bdc64 100644
--- a/Main/System/HeroUI/HeroPosWin.cs
+++ b/Main/System/HeroUI/HeroPosWin.cs
@@ -2,14 +2,20 @@
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
+using DG.Tweening;
+using Cysharp.Threading.Tasks;
+using System.Threading;
+using System;
/// <summary>
-/// 姝﹀皢甯冮樀: functionOrder锛氬竷闃电被鍨�
+/// 姝﹀皢甯冮樀鐣岄潰
/// </summary>
public class HeroPosWin : UIBase
{
[SerializeField] Text[] attrOnList; //涓婇樀灞炴�у姞鎴�
+ [SerializeField] Button countryOnBtn;
[SerializeField] Image countryOnImg; //涓婇樀闃靛瀷婵�娲诲浗瀹�
+ [SerializeField] UIEffectPlayer countryEffect;
[SerializeField] List<Image> OnCountImgs; //涓婇樀鏁伴噺婵�娲�
[SerializeField] List<Image> scenePosImgs; //鍦烘櫙甯冮樀浣嶇疆
[SerializeField] HeroScenePosCell[] sceneHero;
@@ -21,77 +27,197 @@
[SerializeField] ScrollerController heroListScroller;
[SerializeField] Transform heroListEmpty;
[SerializeField] Toggle showConnTipToggleBtn;
+
[SerializeField] HeroSelectBehaviour fiterManager; //姝﹀皢绛涢��
[SerializeField] Button oneKeyOnBtn; //涓�閿笂闃�
[SerializeField] Button saveBtn; //淇濆瓨闃靛瀷
[SerializeField] Button backBtn; //閫�鍑虹晫闈�
[SerializeField] GroupButtonEx jjcBtn; //绔炴妧鍦�
- [SerializeField] GroupButtonEx tttBtn; //閫氬ぉ濉�
+ // [SerializeField] GroupButtonEx tttBtn; //閫氬ぉ濉�
[SerializeField] GroupButtonEx mainFBBtn; //涓荤嚎鍓湰
//缇佺粖
[SerializeField] HeroConnectionCell connetionForm;
+ [SerializeField] HeroHeadBaseCell flyHead;
+ [SerializeField] CanvasGroup flyAlphaTween;
+ Sequence sequence;
+ CancellationTokenSource _cts;
+ Queue<int> showConnectTipQueue = new Queue<int>();
+
+ private bool m_IsToggleOn = false;
+ private bool isToggleOn
+ {
+ get { return m_IsToggleOn; }
+ set
+ {
+ if (m_IsToggleOn != value)
+ {
+ m_IsToggleOn = value;
+ LocalSave.SetBool("ShowConn" + PlayerDatas.Instance.baseData.PlayerID, value);
+ }
+ }
+ }
protected override void InitComponent()
{
attackTeamBtn.AddListener(() =>
{
- if (HeroUIManager.Instance.selectTeamType == TeamType.Arena)
- {
- return;
- }
-
- HeroUIManager.Instance.selectTeamType = TeamType.Arena;
- Refresh();
+ SelectTeamFunc((TeamType)HeroUIManager.Instance.GetSelectTeamTypeByAttackType(0));
});
defendTeamBtn.AddListener(() =>
{
- if (HeroUIManager.Instance.selectTeamType == TeamType.ArenaDefense)
- {
- return;
- }
- HeroUIManager.Instance.selectTeamType = TeamType.ArenaDefense;
- Refresh();
+ SelectTeamFunc((TeamType)HeroUIManager.Instance.GetSelectTeamTypeByAttackType(1));
});
+
+ mainFBBtn.AddListener(() =>
+ {
+ SelectTeamFunc(TeamType.Story);
+ });
+
+ jjcBtn.AddListener(() =>
+ {
+ SelectTeamFunc(TeamType.Arena);
+ });
+ // tttBtn.AddListener(() =>
+ // {
+ // SelectTeamFunc(TeamType.Tower);
+ // });
+
+ showConnTipToggleBtn.AddListener((value) =>
+ {
+ isToggleOn = showConnTipToggleBtn.isOn;
+ if (isToggleOn == false)
+ {
+ CancelCurrentTask();
+ }
+ });
+ oneKeyOnBtn.AddListener(OneKeyOnPos);
+ saveBtn.AddListener(SaveTeam);
+
+ backBtn.AddListener(CloseWindow);
+
+ countryOnBtn.AddListener(() =>
+ {
+ HeroUIManager.Instance.isCustonHeroFormation = false;
+ UIManager.Instance.OpenWindow<HeroFormationWin>();
+ });
+
+ m_IsToggleOn = LocalSave.GetBool("ShowConn" + PlayerDatas.Instance.baseData.PlayerID, false);
}
protected override void OnPreOpen()
{
+ HeroUIManager.Instance.selectTeamPosJob = 0;
+ HeroUIManager.Instance.selectTeamPosCountry = 0;
+ HeroUIManager.Instance.SortHeroOnTeamList();
heroListScroller.OnRefreshCell += OnRefreshCell;
+ HeroUIManager.Instance.OnTeamPosChangeEvent += TeamChangeEvent;
+ TeamManager.Instance.OnTeamChange += OnTeamChange;
+ SelectTiltleBtn();
CreateScroller();
- Refresh();
+ Display();
}
protected override void OnPreClose()
{
+ CancelCurrentTask();
heroListScroller.OnRefreshCell -= OnRefreshCell;
+ HeroUIManager.Instance.OnTeamPosChangeEvent -= TeamChangeEvent;
+ TeamManager.Instance.OnTeamChange -= OnTeamChange;
+ TeamManager.Instance.GetTeam(HeroUIManager.Instance.selectTeamType).RestoreTeam();
}
- public override void Refresh()
+ void SelectTiltleBtn()
+ {
+ if (functionOrder == 0)
+ {
+ mainFBBtn.SelectBtn();
+ }
+ else if (functionOrder == 1)
+ {
+ jjcBtn.SelectBtn();
+ }
+ }
+
+
+ public void Display()
{
OnBattleTeamAttrPer();
RefreshOnTeamCountry();
RefreshOnTeamBtn();
+ RefreshTeamHero();
+ RefreshFlyHead();
+ RefreshConn();
+
+ RefreshEmptyTip();
+
+ showConnTipToggleBtn.isOn = isToggleOn;
+
+ fiterManager.Display(0, HeroUIManager.Instance.selectTeamPosJob, HeroUIManager.Instance.selectTeamPosCountry, SelectJobCountry);
+
+
+ fightPowerText.text = UIHelper.ReplaceLargeArtNum(FightPowerManager.Instance.GetTeamFightPower(HeroUIManager.Instance.selectTeamType, true));
+
+
}
+ void RefreshFlyHead()
+ {
+ var flyCanvas = flyAlphaTween.GetComponent<Canvas>();
+ flyCanvas.sortingLayerID = canvas.sortingLayerID;
+ flyCanvas.sortingOrder = canvas.sortingOrder + 9;
+ flyAlphaTween.alpha = 0;
+ flyHead.transform.localScale = Vector3.zero;
+ }
+ void RefreshConn()
+ {
+ connetionForm.SetActive(false);
+ var canvasConn = connetionForm.GetComponent<Canvas>();
+ canvasConn.sortingLayerID = canvas.sortingLayerID;
+ canvasConn.sortingOrder = canvas.sortingOrder + 9;
+ CancelCurrentTask();
+ }
+
+ void SelectJobCountry(int job, int country)
+ {
+ HeroUIManager.Instance.selectTeamPosJob = job;
+ HeroUIManager.Instance.selectTeamPosCountry = country;
+ HeroUIManager.Instance.SortHeroOnTeamList();
+ CreateScroller();
+ RefreshEmptyTip();
+ }
+
+ void RefreshEmptyTip()
+ {
+ if (HeroUIManager.Instance.heroOnTeamSortList.Count <= 0)
+ {
+ heroListEmpty.SetActive(true);
+ heroListScroller.SetActive(false);
+ }
+ else
+ {
+ heroListEmpty.SetActive(false);
+ heroListScroller.SetActive(true);
+ }
+ }
void OnRefreshCell(ScrollerDataType type, CellView cell)
{
- var _cell = cell as HeroCardLineCell;
+ var _cell = cell as HeroPosLineCell;
_cell.Display(cell.index);
}
void CreateScroller()
{
heroListScroller.Refresh();
- for (int i = 0; i < HeroUIManager.Instance.heroSortList.Count; i++)
+ for (int i = 0; i < HeroUIManager.Instance.heroOnTeamSortList.Count; i++)
{
- if (i % 4 == 0)
+ if (i % 5 == 0)
{
heroListScroller.AddCell(ScrollerDataType.Header, i);
}
@@ -106,9 +232,11 @@
var team = TeamManager.Instance.GetTeam(HeroUIManager.Instance.selectTeamType);
if (team != null)
{
- for (int i = 0; i < team.serverHeroes.Length; i++)
+ for (int i = 0; i < team.tempHeroes.Length; i++)
{
- var hero = HeroManager.Instance.GetHero(team.serverHeroes[i].guid);
+ if (team.tempHeroes[i] == null)
+ continue;
+ var hero = HeroManager.Instance.GetHero(team.tempHeroes[i].guid);
if (hero != null)
{
valuePer += hero.GetOnBattleAddPer();
@@ -119,19 +247,20 @@
//涓婇樀灞炴��
for (int i = 0; i < attrOnList.Length; i++)
{
- attrOnList[i].text = PlayerPropertyConfig.GetFullDescription(new Int2(PlayerPropertyConfig.basePerAttrs[i], valuePer));
+ string format = valuePer == 0 ? "{0}+{1}" : "{0}+" + UIHelper.AppendColor(TextColType.Green, "{1}", false);
+ attrOnList[i].text = PlayerPropertyConfig.GetFullDescription(PlayerPropertyConfig.basePerAttrs[i], valuePer, format);
}
}
//涓婇樀姝﹀皢鍥藉鍏夌幆婵�娲�
- void RefreshOnTeamCountry()
+ void RefreshOnTeamCountry(bool playEffect = false)
{
- Int2 result = HeroUIManager.Instance.GetMaxCountHeroCountry(HeroUIManager.Instance.selectTeamType);
+ Int2 result = HeroUIManager.Instance.GetMaxCountHeroCountry(HeroUIManager.Instance.selectTeamType, true);
var config = HeroLineupHaloConfig.GetConfig(result.x, result.y);
if (config == null)
{
- countryOnImg.SetSprite("heroTeamCountry" + result.x);
+ countryOnImg.SetSprite("heroTeamCountry0");
for (int i = 0; i < OnCountImgs.Count; i++)
{
OnCountImgs[i].SetActive(false);
@@ -152,6 +281,8 @@
OnCountImgs[i].SetActive(false);
}
}
+ if (playEffect)
+ countryEffect.Play();
}
}
@@ -181,7 +312,212 @@
}
+ void RefreshTeamHero()
+ {
+ var team = TeamManager.Instance.GetTeam(HeroUIManager.Instance.selectTeamType);
+ for (int i = 0; i < sceneHero.Length; i++)
+ {
+ var teamHero = team.tempHeroes[i];
+ if (teamHero == null)
+ {
+ sceneHero[i].SetActive(false);
+ }
+ else
+ {
+ sceneHero[i].SetActive(true);
+ sceneHero[i].Display(teamHero.guid, i);
+ //鎸塻cenePosImgs 椤哄簭鎺掑簭瀵瑰簲浣嶇疆
+ sceneHero[i].transform.position = scenePosImgs[i].transform.position;
+ sceneHero[i].transform.localScale = Vector3.one;
+ }
+
+ }
+ RefreshPosScale();
+ }
+
+ void RefreshPosScale()
+ {
+ for (int i = 0; i < scenePosImgs.Count; i++)
+ {
+ scenePosImgs[i].transform.localScale = Vector3.one;
+ }
+ }
+
+ /// <summary>
+ /// 鐐瑰嚮涓婇樀锛屾嫋鎷夛紝涓�閿瓑瑙﹀彂锛�
+ /// </summary>
+ /// <param name="posList">瑕佸埛鏂扮殑甯冮樀浣嶇疆</param>
+ /// <param name="flyFrom">澶т簬-1浠h〃鏄偣鍑讳笂闃碉紝闇�瑕佽〃鐜伴琛屾晥鏋�</param>
+ void TeamChangeEvent(List<int> posList, int flyFrom, Vector3 startPos)
+ {
+ var team = TeamManager.Instance.GetTeam(HeroUIManager.Instance.selectTeamType);
+ foreach (var i in posList)
+ {
+ var teamHero = team.tempHeroes[i];
+ if (teamHero == null)
+ {
+ sceneHero[i].SetActive(false);
+ }
+ else
+ {
+ sceneHero[i].SetActive(true);
+ sceneHero[i].Display(teamHero.guid, i, flyFrom >= 0, flyFrom != -2 ? true : false);
+ //鎸塻cenePosImgs 椤哄簭鎺掑簭瀵瑰簲浣嶇疆
+ sceneHero[i].transform.position = scenePosImgs[i].transform.position;
+ sceneHero[i].transform.localScale = Vector3.one;
+
+ }
+ }
+ RefreshPosScale();
+ heroListScroller.m_Scorller.RefreshActiveCellViews();
+ RefreshOnTeamCountry(true);
+ OnBattleTeamAttrPer();
+
+ //琛ㄧ幇椋炲叆锛岃繛缁偣鍑讳笉鍚屽ご鍍忚Е鍙戠殑璇濆垯閲嶇疆
+ if (flyFrom > -1)
+ {
+ var flyHero = HeroManager.Instance.GetHero(HeroUIManager.Instance.heroOnTeamSortList[flyFrom]);
+ if (flyHero == null)
+ return;
+
+ //鍏堝仠姝� sequence
+ if (sequence != null)
+ {
+ sequence.Kill();
+ }
+ sequence = DOTween.Sequence();
+ flyAlphaTween.alpha = 1;
+ flyHead.Init(flyHero.heroId, flyHero.SkinID);
+ flyHead.transform.position = startPos;
+ var targetPos = scenePosImgs[posList[0]].transform.position;
+ flyHead.transform.localScale = Vector3.one;
+ sequence.Append(flyHead.transform.DOMove(targetPos, HeroUIManager.clickFlyPosTime).SetEase(Ease.OutQuad))
+ .Join(flyHead.transform.DOScale(new Vector3(0.5f, 0.5f, 0.5f), HeroUIManager.clickFlyPosTime).SetEase(Ease.OutQuad))
+ .Join(flyAlphaTween.DOFade(0f, HeroUIManager.clickFlyPosTime).SetEase(Ease.OutQuad));
+ sequence.onComplete = () => { flyHead.transform.localScale = Vector3.zero; };
+ if (isToggleOn)
+ {
+ ShowFetter(flyHero);
+ }
+ }
+ fightPowerText.text = UIHelper.ReplaceLargeArtNum(FightPowerManager.Instance.GetTeamFightPower(HeroUIManager.Instance.selectTeamType, true));
+
+ }
+
+ void ShowFetter(HeroInfo hero)
+ {
+ var heroConfig = hero.heroConfig;
+ var fetterList = hero.GetActiveFetter(heroConfig, TeamManager.Instance.GetTeam(HeroUIManager.Instance.selectTeamType));
+ for (int i = 0; i < fetterList.Count; i++)
+ {
+ if (!showConnectTipQueue.Contains(fetterList[i]))
+ showConnectTipQueue.Enqueue(fetterList[i]);
+ }
+
+ if (_cts == null)
+ {
+ _cts = new CancellationTokenSource();
+ RunTaskAsync(_cts.Token).Forget(); // Forget() 琛ㄧず涓嶇瓑寰呮浠诲姟瀹屾垚
+ }
+
+ }
+ async UniTask RunTaskAsync(CancellationToken token)
+ {
+ try
+ {
+ while (showConnectTipQueue.Count > 0)
+ {
+ await UniTask.Delay(300, cancellationToken: token);
+ showConnectTipQueue.TryDequeue(out int fetterID);
+ if (fetterID == 0)
+ {
+ continue;
+ }
+ connetionForm.SetActive(true);
+ connetionForm.Display(fetterID);
+ //鏄剧ず1.5绉掑悗鍏抽棴
+ await UniTask.Delay(1500, cancellationToken: token);
+ connetionForm.SetActive(false);
+ }
+
+ }
+ catch (OperationCanceledException)
+ {
+ Debug.Log("缇佺粖 鍗忕▼琚彇娑�");
+ connetionForm.SetActive(false);
+ }
+ finally
+ {
+ _cts?.Dispose(); // 閲婃斁璧勬簮
+ _cts = null; // 缃┖閬垮厤閲嶅鍙栨秷
+ showConnectTipQueue.Clear();
+ }
+
+ }
+
+ // 鍙栨秷褰撳墠姝e湪杩愯鐨勪换鍔�
+ public void CancelCurrentTask()
+ {
+ _cts?.Cancel(); // 瑙﹀彂鍙栨秷
+ _cts?.Dispose(); // 閲婃斁璧勬簮
+ _cts = null; // 缃┖閬垮厤閲嶅鍙栨秷
+ showConnectTipQueue.Clear();
+ }
+
+ void OneKeyOnPos()
+ {
+ var guidList = HeroUIManager.Instance.SelectRecommend();
+ var team = TeamManager.Instance.GetTeam(HeroUIManager.Instance.selectTeamType);
+ team.RemoveAllHeroes();
+ if (NewBieCenter.Instance.inGuiding && NewBieCenter.Instance.currentGuide == HeroUIManager.Instance.onekeyGuideID)
+ {
+ for (int i = 0; i < guidList.Count; i++)
+ {
+ team.AddHero(HeroManager.Instance.GetHero(guidList[i]), HeroUIManager.Instance.onekeyGuidePosList[i] - 1, true);
+ }
+
+ }
+ else
+ {
+ for (int i = 0; i < guidList.Count; i++)
+ {
+ team.AddHero(HeroManager.Instance.GetHero(guidList[i]), i, true);
+ }
+ }
+
+ TeamChangeEvent(new List<int>() { 0, 1, 2, 3, 4, 5 }, -1, Vector3.zero);
+
+ }
+
+ void SaveTeam()
+ {
+ var team = TeamManager.Instance.GetTeam(HeroUIManager.Instance.selectTeamType);
+ team.SaveTeam();
+ }
+
+ void SelectTeamFunc(TeamType type)
+ {
+ if (HeroUIManager.Instance.selectTeamType == type)
+ {
+ return;
+ }
+ HeroUIManager.Instance.selectTeamPosJob = 0;
+ HeroUIManager.Instance.selectTeamPosCountry = 0;
+ HeroUIManager.Instance.selectTeamType = type;
+ HeroUIManager.Instance.SortHeroOnTeamList();
+ Display();
+ heroListScroller.m_Scorller.RefreshActiveCellViews();
+ }
+
+ protected void OnTeamChange(TeamType teamType)
+ {
+ if (HeroUIManager.Instance.selectTeamType == teamType)
+ {
+ HeroUIManager.Instance.SortHeroOnTeamList();
+ heroListScroller.m_Scorller.RefreshActiveCellViews();
+ }
+ }
}
\ No newline at end of file
--
Gitblit v1.8.0