Files
SVSimServer/SVSim.BattleEngine/Engine/CardDetailBase.cs
gamer147 0d9d8acae0 feat(battle-engine): M1 auto-copy closure (782 battle-logic files)
Compile-driven bulk-copy loop (tools/engine-port/m1_copy_loop.py) pulled the precise reference closure of the battle-core roots, stopping at the classify god-object/View-VFX-UI boundary. 782 files; no re-explosion (M0 had estimated ~order 1000). Residual frontier = 52 shim-classified + 80 external (Unity/BCL) types to author next.
2026-06-05 16:57:20 -04:00

189 lines
5.6 KiB
C#

using System;
using Cute;
using UnityEngine;
using Wizard;
using Wizard.Battle.View;
public class CardDetailBase : MonoBehaviour
{
[Serializable]
public class BgSizeInfo
{
public int Line;
public int BgSize;
}
[Serializable]
public class DetailPanelInfo
{
public GameObject _root;
public UILabel _nameLabel;
public UITexture _logImage;
public UIScrollView _scrollView;
public UISprite _bg;
public int _maxLine;
public UIPanel DiscPanelObject;
public UILabel DiscLabel;
public BoxCollider DiscCollider;
public UIScrollBar DiscScrollBar;
public int DefaultBgHeight;
public UILabel _costLabel;
public UILabel _signLabel;
public UILabel _zeroCostLabel;
public UILabel _signedCostLabel;
public UISprite _costSprite;
public UILabel _classLabel;
public UISprite _classBG;
public GameObject _myRotationInfo;
public UILabel _myRotationClassLabel;
public GameObject _myRotationBonusIconOriginal;
public UIGrid _myRotationBonusIconGrid;
public FlexibleGrid _myRotationInfoGrid;
public UIRect RootAnchor;
public void Initialize()
{
}
}
private const int EVO_OR_FUSION_BUTTON_OFFSET = 65;
private const int CLASS_LABEL_HEIGHT = 89;
private const int PANEL_BOTTOM__ANCHOR = 4;
private const int PANEL_BOTTOM__ANCHOR_SCROLL = 16;
[SerializeField]
protected DetailPanelInfo _followerPanel;
[SerializeField]
protected DetailPanelInfo _followerEvoPanel;
[SerializeField]
protected DetailPanelInfo _nonFollowerPanel;
protected void SetFollowerDetailLabel(string skillDisc, string evoSkillDisc, bool needEvolutionOrFusionButton, bool resetScrollPosition = true)
{
_nonFollowerPanel._root.SetActive(value: false);
_followerPanel._root.SetActive(value: true);
_followerEvoPanel._root.SetActive(value: true);
int num = CheckTextLineCount(_followerPanel.DiscLabel, skillDisc);
int num2 = CheckTextLineCount(_followerEvoPanel.DiscLabel, evoSkillDisc);
if (num >= _followerPanel._maxLine && num2 < _followerEvoPanel._maxLine)
{
num = Mathf.Min(9 - num2, num);
}
else if (num < _followerPanel._maxLine && num2 >= _followerEvoPanel._maxLine)
{
num2 = Mathf.Min(9 - num, num2);
}
else if (num >= _followerPanel._maxLine && num2 >= _followerEvoPanel._maxLine)
{
num = _followerPanel._maxLine;
num2 = _followerEvoPanel._maxLine;
}
SetDescLabelText(_followerPanel, skillDisc, num, needEvolutionOrFusionButton: false, resetScrollPosition);
SetDescLabelText(_followerEvoPanel, evoSkillDisc, num2, needEvolutionOrFusionButton, resetScrollPosition);
_followerEvoPanel.RootAnchor.UpdateAnchors();
}
protected void SetDescLabelText(DetailPanelInfo panel, string discText, bool needEvolutionOrFusionButton = false, bool resetScrollPosition = true, bool isClass = false)
{
SetDescLabelText(panel, discText, panel._maxLine, needEvolutionOrFusionButton, resetScrollPosition, isClass);
}
protected void SetDescLabelText(DetailPanelInfo panel, string discText, int maxLine, bool needEvolutionOrFusionButton = false, bool resetScrollPosition = true, bool isClass = false)
{
UILabel discLabel = panel.DiscLabel;
UIScrollView scrollView = panel._scrollView;
UISprite bg = panel._bg;
discLabel.text = Global.GetConvertWrapText(discLabel, discText);
discLabel.ProcessText();
int textLineCount = Global.GetTextLineCount(discLabel.processedText);
bool flag = textLineCount > maxLine;
if (bg != null)
{
bg.height = panel.DefaultBgHeight + Mathf.Min(textLineCount, maxLine) * (panel.DiscLabel.fontSize + panel.DiscLabel.spacingY);
if (needEvolutionOrFusionButton)
{
bg.height += 65;
}
if (isClass)
{
bg.height = 89;
}
bg.gameObject.SetActive(value: false);
bg.gameObject.SetActive(value: true);
bg.ResetAndUpdateAnchors();
}
panel.DiscPanelObject.bottomAnchor.absolute = (flag ? 16 : 4) + (needEvolutionOrFusionButton ? 65 : 0);
panel.DiscPanelObject.gameObject.SetActive(value: false);
panel.DiscPanelObject.gameObject.SetActive(value: true);
panel.DiscPanelObject.UpdateAnchors();
scrollView.enabled = flag;
panel.DiscScrollBar.gameObject.SetActive(flag);
if (resetScrollPosition)
{
scrollView.ResetPosition();
}
scrollView.UpdateScrollbars();
}
private int CheckTextLineCount(UILabel label, string discText)
{
label.text = Global.GetConvertWrapText(label, discText);
label.ProcessText();
return Global.GetTextLineCount(label.processedText);
}
protected void SetDetailKeywordEvents(Action<BattleCardBase, GameObject, CardParameter> onClick, BattleCardBase card, CardParameter baseParameter, DetailPanelControl control)
{
SetDetailKeywordEvent(_followerPanel, onClick, card, baseParameter, control);
SetDetailKeywordEvent(_followerEvoPanel, onClick, card, baseParameter, control);
SetDetailKeywordEvent(_nonFollowerPanel, onClick, card, baseParameter, control);
}
private void SetDetailKeywordEvent(DetailPanelInfo panelInfo, Action<BattleCardBase, GameObject, CardParameter> onClick, BattleCardBase card, CardParameter baseParameter, DetailPanelControl control)
{
UILabel label = panelInfo.DiscLabel;
BoxCollider discCollider = panelInfo.DiscCollider;
if (label.text != " ")
{
UIEventListener.Get(discCollider.gameObject).onClick = delegate
{
onClick.Call(card, label.gameObject, baseParameter);
};
BattlePlayerView.SetKeyWordColor(discCollider.gameObject, label, control);
}
else
{
UIEventListener.Get(discCollider.gameObject).onClick = null;
}
}
}