Files
SVSimServer/SVSim.BattleEngine/Engine/Wizard/GatheringTournament.cs
gamer147 0455ff649e feat(battle-engine): EffectType full enum + collection/card/vfx extension copies
Replaces partial EffectMgr.EffectType with all 226 decomp values; copies the
IsNotNullOrEmpty/EquelsID/FindFromCardId/GetAllFuncVfxResults extension files +
UI extensions; adds Renderer/MeshFilter shared-material/mesh/sortingOrder. Compile
loop then closed the revealed deps (3242 files). 9.1k -> 18 errors.
2026-06-05 20:38:56 -04:00

229 lines
6.6 KiB
C#

using System.Collections.Generic;
using System.Linq;
using Cute;
using UnityEngine;
using Wizard.RoomMatch;
namespace Wizard;
public class GatheringTournament : MonoBehaviour
{
private enum DoubleTab
{
Winners,
Losers
}
[SerializeField]
private GameObject _originalTournament;
[SerializeField]
private GameObject _tournamentRoot;
[SerializeField]
private UILabel _ruleLabel;
[SerializeField]
private GameObject _singleRoot;
[SerializeField]
private GameObject _doubleRoot;
[SerializeField]
private UIButton _winnersButton;
[SerializeField]
private UIButton _losersButton;
[SerializeField]
private GameObject _messageRoot;
[SerializeField]
private UILabel _messageLabel;
private List<TournamentController> _tournamentControllers;
private List<TournamentData> _tournamentDataList;
private List<string> _resourceList;
private DoubleTab _doubleTab;
public void Show(GatheringInfo info, GatheringJoining parent)
{
UIManager.GetInstance().AttachAtlas(base.gameObject);
_originalTournament.SetActive(value: false);
_singleRoot.SetActive(value: false);
_doubleRoot.SetActive(value: false);
_ruleLabel.text = RoomRuleSetting.GetWinTypeString(info.Rule.BattleParameterInstance.Rule) + " " + FormatBehaviorManager.GetFormatName(info.Rule.BattleParameterInstance.DeckFormat);
GatheringGetSelfInfoTask task = new GatheringGetSelfInfoTask(isDependGatheringInfo: true);
StartCoroutine(Toolbox.NetworkManager.Connect(task, delegate
{
GatheringTournamentInfoTask tournamentInfoTask = new GatheringTournamentInfoTask();
StartCoroutine(Toolbox.NetworkManager.Connect(tournamentInfoTask, delegate
{
if (tournamentInfoTask.TournamentDataList != null)
{
Setup(tournamentInfoTask.TournamentDataList, info);
}
else
{
SetMessage(Data.SystemText.Get("Gathering_Tournament_0009"));
}
}));
}));
}
private void Setup(List<TournamentData> tournamentDataList, GatheringInfo info)
{
_tournamentDataList = tournamentDataList;
_tournamentRoot.SetActive(value: true);
_messageRoot.SetActive(value: false);
bool flag = !info.OwnerInfo.IsSelf || info.Rule.IsOwnerEntryBattle;
_doubleTab = GetCurrentTabAndCell(out var currentCells, tournamentDataList, flag);
if (flag && currentCells.All((TournamentCellData c) => c == null))
{
_doubleTab = GetCurrentTabAndCell(out currentCells, tournamentDataList, isEntry: false);
}
SetupTournamentType(info.Rule.TournamentType);
_resourceList = CollectResourcePath(tournamentDataList);
StartCoroutine(Toolbox.ResourcesManager.LoadAssetGroupAsync(_resourceList, delegate
{
_originalTournament.SetActive(value: true);
_tournamentControllers = new List<TournamentController>(tournamentDataList.Count);
for (int i = 0; i < tournamentDataList.Count; i++)
{
TournamentController componentInChildren = NGUITools.AddChild(_tournamentRoot, _originalTournament).GetComponentInChildren<TournamentController>();
_tournamentControllers.Add(componentInChildren);
StartCoroutine(componentInChildren.Setup(tournamentDataList[i], currentCells[i], info, i == (int)_doubleTab));
}
_originalTournament.SetActive(value: false);
}));
}
private void SetupTournamentType(GatheringRule.eTournamentType type)
{
_singleRoot.SetActive(type == GatheringRule.eTournamentType.SINGLE_ELIMINATION);
_doubleRoot.SetActive(type == GatheringRule.eTournamentType.DOUBLE_ELIMINATION);
_winnersButton.onClick.Add(new EventDelegate(delegate
{
GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_BTN_DECIDE);
SetDoubleTab(DoubleTab.Winners);
}));
_losersButton.onClick.Add(new EventDelegate(delegate
{
GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_BTN_DECIDE);
SetDoubleTab(DoubleTab.Losers);
}));
UpdateDoubleTab();
}
private DoubleTab GetCurrentTabAndCell(out List<TournamentCellData> currentCells, List<TournamentData> tournamentDataList, bool isEntry)
{
currentCells = new List<TournamentCellData>(tournamentDataList.Count);
foreach (TournamentData tournamentData in tournamentDataList)
{
bool flag = false;
for (int num = tournamentData.Rounds.Count - 1; num >= 0; num--)
{
foreach (TournamentCellData cell in tournamentData.Rounds[num].Cells)
{
if (IsCurrentCell(cell))
{
currentCells.Add(cell);
flag = true;
break;
}
}
if (flag)
{
break;
}
}
if (!flag)
{
currentCells.Add(null);
}
}
if (currentCells.Count > 1)
{
if (currentCells[0] == null)
{
return DoubleTab.Winners;
}
if (currentCells[0].Round == tournamentDataList[0].Rounds[tournamentDataList[0].Rounds.Count - 2])
{
return DoubleTab.Winners;
}
if (currentCells[0].State != TournamentCellData.CellState.Lose || currentCells[1] == null)
{
return DoubleTab.Winners;
}
return DoubleTab.Losers;
}
return DoubleTab.Winners;
bool IsCurrentCell(TournamentCellData targetCell)
{
if (targetCell == null)
{
return false;
}
TournamentCellData.CellState state = targetCell.State;
if (state == TournamentCellData.CellState.Unresolved || state == TournamentCellData.CellState.Active || state == TournamentCellData.CellState.Win || state == TournamentCellData.CellState.Lose)
{
if (isEntry)
{
return targetCell.ViewerId == PlayerStaticData.UserViewerID;
}
return true;
}
return false;
}
}
private void UpdateDoubleTab()
{
_winnersButton.normalSprite = ((_doubleTab == DoubleTab.Winners) ? "pilltab_02_left_on" : "pilltab_02_left_off");
_losersButton.normalSprite = ((_doubleTab == DoubleTab.Losers) ? "pilltab_02_right_on" : "pilltab_02_right_off");
}
private void SetDoubleTab(DoubleTab tab)
{
if (_doubleTab != tab)
{
_doubleTab = tab;
UpdateDoubleTab();
for (int i = 0; i < _tournamentControllers.Count; i++)
{
_tournamentControllers[i].SetVisible(i == (int)tab);
}
}
}
private List<string> CollectResourcePath(List<TournamentData> dataList)
{
List<string> resourceList = new List<string>();
foreach (TournamentData data in dataList)
{
data.CollectResourcePath(ref resourceList);
}
return resourceList;
}
private void OnDestroy()
{
if (_resourceList != null)
{
Toolbox.ResourcesManager.RemoveAssetGroup(_resourceList);
_resourceList.Clear();
}
}
private void SetMessage(string message)
{
_tournamentRoot.SetActive(value: false);
_messageRoot.SetActive(value: true);
_messageLabel.text = message;
}
}