diff --git a/SVSim.BattleEngine/Engine/UILabel.cs b/SVSim.BattleEngine/Engine/UILabel.cs index 6bbfb38f..065d1ece 100644 --- a/SVSim.BattleEngine/Engine/UILabel.cs +++ b/SVSim.BattleEngine/Engine/UILabel.cs @@ -1,1525 +1,58 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using Wizard; - -[ExecuteInEditMode] -[AddComponentMenu("NGUI/UI/NGUI Label")] -public class UILabel : UIWidget -{ - public enum Effect - { - None, - Outline, - Outline8 - } - - public enum Overflow - { - ShrinkContent, - ClampContent, - ResizeFreely, - ResizeHeight - } - - public enum Crispness - { -} - - private static bool OnFontChangedFlg = false; - - private static UnityEngine.Font OnFontChangedFont; - - [HideInInspector] - [SerializeField] - private UnityEngine.Font mTrueTypeFont; - - [HideInInspector] - [SerializeField] - private UIFont mFont; - - [Multiline(6)] - [HideInInspector] - [SerializeField] - private string mText = ""; - - [HideInInspector] - [SerializeField] - private int mFontSize = 16; - - [HideInInspector] - [SerializeField] - private FontStyle mFontStyle; - - [HideInInspector] - [SerializeField] - private NGUIText.Alignment mAlignment; - - [HideInInspector] - [SerializeField] - private bool mEncoding = true; - - [HideInInspector] - [SerializeField] - private int mMaxLineCount; - - [HideInInspector] - [SerializeField] - private Effect mEffectStyle; - - [HideInInspector] - [SerializeField] - private Color mEffectColor = Color.black; - - [HideInInspector] - [SerializeField] - private NGUIText.SymbolStyle mSymbols = NGUIText.SymbolStyle.Normal; - - [HideInInspector] - [SerializeField] - private Vector2 mEffectDistance = Vector2.one; - - [HideInInspector] - [SerializeField] - private Overflow mOverflow; - - [HideInInspector] - [SerializeField] - private Material mMaterial; - - [HideInInspector] - [SerializeField] - private bool mApplyGradient; - - [HideInInspector] - [SerializeField] - private Color mGradientTop = Color.white; - - [HideInInspector] - [SerializeField] - private Color mGradientBottom = new Color(0.7f, 0.7f, 0.7f); - - [HideInInspector] - [SerializeField] - private int mSpacingX; - - [HideInInspector] - [SerializeField] - private int mSpacingY; - - [HideInInspector] - [SerializeField] - private bool mUseFloatSpacing; - - [HideInInspector] - [SerializeField] - private float mFloatSpacingX; - - [HideInInspector] - [SerializeField] - private float mFloatSpacingY; - - [HideInInspector] - [SerializeField] - private bool mOverflowEllipsis; - - [HideInInspector] - [SerializeField] - private bool m_bWizardRuby; - - [HideInInspector] - [SerializeField] - private float m_WizardRubyScale = 0.6f; - - [HideInInspector] - [SerializeField] - private float m_WizardRubyMargin = 0.6f; - - [HideInInspector] - [SerializeField] - private bool m_bWizardDot; - - [HideInInspector] - [SerializeField] - private float m_WizardDotScale = 0.8f; - - [HideInInspector] - [SerializeField] - private float m_WizardDotMargin = 0.5f; - - [HideInInspector] - [SerializeField] - private bool _alignmentEachLanguage; - - [HideInInspector] - [SerializeField] - private bool mShrinkToFit; - - [HideInInspector] - [SerializeField] - private int mMaxLineWidth; - - [HideInInspector] - [SerializeField] - private int mMaxLineHeight; - - [HideInInspector] - [SerializeField] - private float mLineWidth; - - [HideInInspector] - [SerializeField] - private bool mMultiline = true; - - [NonSerialized] - private UnityEngine.Font mActiveTTF; - - [NonSerialized] - private float mDensity = 1f; - - [NonSerialized] - private bool mShouldBeProcessed = true; - - [NonSerialized] - private string mProcessedText; - - [NonSerialized] - private bool mPremultiply; - - [NonSerialized] - private Vector2 mCalculatedSize = Vector2.zero; - - [NonSerialized] - private float mScale = 1f; - - [NonSerialized] - private int mFinalFontSize; - - [NonSerialized] - private int mLastWidth; - - [NonSerialized] - private int mLastHeight; - - private string _originalText; - - private static BetterList mList = new BetterList(); - - private static Dictionary mFontUsage = new Dictionary(); - - private static bool mTexRebuildAdded = false; - - private static BetterList mTempVerts = new BetterList(); - - private static BetterList mTempIndices = new BetterList(); - - public bool IsRuby => m_bWizardRuby; - - public float RubyScale => m_WizardRubyScale; - - public float RubyMargin => m_WizardRubyMargin; - - public bool IsDot => m_bWizardDot; - - public float DotScale => m_WizardDotScale; - - public float DotMargin => m_WizardDotMargin; - - private bool shouldBeProcessed - { - get - { - return mShouldBeProcessed; - } - set - { - if (value) - { - mChanged = true; - mShouldBeProcessed = true; - } - else - { - mShouldBeProcessed = false; - } - } - } - - public override bool isAnchoredHorizontally - { - get - { - if (!base.isAnchoredHorizontally) - { - return mOverflow == Overflow.ResizeFreely; - } - return true; - } - } - - public override bool isAnchoredVertically - { - get - { - if (!base.isAnchoredVertically && mOverflow != Overflow.ResizeFreely) - { - return mOverflow == Overflow.ResizeHeight; - } - return true; - } - } - - public override Material material - { - get - { - if (mMaterial != null) - { - return mMaterial; - } - if (mFont != null) - { - return mFont.material; - } - if (mTrueTypeFont != null) - { - return mTrueTypeFont.material; - } - return null; - } - set - { - if (mMaterial != value) - { - RemoveFromPanel(); - mMaterial = value; - MarkAsChanged(); - } - } - } - - public UIFont bitmapFont - { - get - { - return mFont; - } - set - { - if (mFont != value) - { - RemoveFromPanel(); - mFont = value; - mTrueTypeFont = null; - MarkAsChanged(); - } - } - } - - public UnityEngine.Font trueTypeFont - { - get - { - if (mTrueTypeFont != null) - { - return mTrueTypeFont; - } - if (!(mFont != null)) - { - return null; - } - return mFont.dynamicFont; - } - set - { - if (mTrueTypeFont != value) - { - SetActiveFont(null); - RemoveFromPanel(); - mTrueTypeFont = value; - shouldBeProcessed = true; - mFont = null; - SetActiveFont(value); - ProcessAndRequest(); - if (mActiveTTF != null) - { - base.MarkAsChanged(); - } - } - } - } - - public UnityEngine.Object ambigiousFont - { - get - { - return (UnityEngine.Object)(((object)mFont) ?? ((object)mTrueTypeFont)); - } - set - { - UIFont uIFont = value as UIFont; - if (uIFont != null) - { - bitmapFont = uIFont; - } - else - { - trueTypeFont = value as UnityEngine.Font; - } - } - } - - public string text - { - get - { - return mText; - } - set - { - if (mText == value) - { - return; - } - if (string.IsNullOrEmpty(value)) - { - if (!string.IsNullOrEmpty(mText)) - { - mText = ""; - MarkAsChanged(); - ProcessAndRequest(); - } - } - else if (mText != value) - { - mText = value; - MarkAsChanged(); - ProcessAndRequest(); - } - if (autoResizeBoxCollider) - { - ResizeCollider(); - } - } - } - - public int defaultFontSize - { - get - { - if (!(trueTypeFont != null)) - { - if (!(mFont != null)) - { - return 16; - } - return mFont.defaultSize; - } - return mFontSize; - } - } - - public int fontSize - { - get - { - return mFontSize; - } - set - { - value = Mathf.Clamp(value, 0, 256); - if (mFontSize != value) - { - mFontSize = value; - shouldBeProcessed = true; - ProcessAndRequest(); - } - } - } - - public NGUIText.Alignment alignment - { - get - { - if (_alignmentEachLanguage) - { - try - { - return (NGUIText.Alignment)Enum.Parse(typeof(NGUIText.Alignment), Data.SystemText.Get("Dialog_Text_Alignment")); - } - catch (Exception) - { - _ = Application.isPlaying; - } - } - return mAlignment; - } - set - { - if (mAlignment != value) - { - mAlignment = value; - shouldBeProcessed = true; - ProcessAndRequest(); - } - } - } - - public bool applyGradient - { - get - { - return mApplyGradient; - } - set - { - if (mApplyGradient != value) - { - mApplyGradient = value; - MarkAsChanged(); - } - } - } - - public Color gradientTop - { - get - { - return mGradientTop; - } - set - { - if (mGradientTop != value) - { - mGradientTop = value; - if (mApplyGradient) - { - MarkAsChanged(); - } - } - } - } - - public Color gradientBottom - { - get - { - return mGradientBottom; - } - set - { - if (mGradientBottom != value) - { - mGradientBottom = value; - if (mApplyGradient) - { - MarkAsChanged(); - } - } - } - } - - public int spacingY - { - get - { - return mSpacingY; - } - set - { - if (mSpacingY != value) - { - mSpacingY = value; - MarkAsChanged(); - } - } - } - - public float effectiveSpacingY - { - get - { - if (!mUseFloatSpacing) - { - return mSpacingY; - } - return mFloatSpacingY; - } - } - - public float effectiveSpacingX - { - get - { - if (!mUseFloatSpacing) - { - return mSpacingX; - } - return mFloatSpacingX; - } - } - - public bool overflowEllipsis - { - get - { - return mOverflowEllipsis; - } - set - { - if (mOverflowEllipsis != value) - { - mOverflowEllipsis = value; - MarkAsChanged(); - } - } - } - - private bool keepCrisp => trueTypeFont != null; - - public bool supportEncoding - { - get - { - return mEncoding; - } - set - { - if (mEncoding != value) - { - mEncoding = value; - shouldBeProcessed = true; - } - } - } - - public Overflow overflowMethod - { - get - { - return mOverflow; - } - set - { - if (mOverflow != value) - { - mOverflow = value; - shouldBeProcessed = true; - } - } - } - - public bool multiLine - { - get - { - return mMaxLineCount != 1; - } - set - { - if (mMaxLineCount != 1 != value) - { - mMaxLineCount = ((!value) ? 1 : 0); - shouldBeProcessed = true; - } - } - } - - public override Vector3[] localCorners - { - get - { - if (shouldBeProcessed) - { - ProcessText(); - } - return base.localCorners; - } - } - - public override Vector3[] worldCorners - { - get - { - if (shouldBeProcessed) - { - ProcessText(); - } - return base.worldCorners; - } - } - - public override Vector4 drawingDimensions - { - get - { - if (shouldBeProcessed) - { - ProcessText(); - } - return base.drawingDimensions; - } - } - - public int maxLineCount - { - get - { - return mMaxLineCount; - } - set - { - if (mMaxLineCount != value) - { - mMaxLineCount = Mathf.Max(value, 0); - shouldBeProcessed = true; - if (overflowMethod == Overflow.ShrinkContent) - { - MakePixelPerfect(); - } - } - } - } - - public Effect effectStyle - { - get - { - return mEffectStyle; - } - set - { - if (mEffectStyle != value) - { - mEffectStyle = value; - shouldBeProcessed = true; - } - } - } - - public Color effectColor - { - get - { - return mEffectColor; - } - set - { - if (mEffectColor != value) - { - mEffectColor = value; - if (mEffectStyle != Effect.None) - { - shouldBeProcessed = true; - } - } - } - } - - public Vector2 effectDistance - { - get - { - return mEffectDistance; - } - set - { - if (mEffectDistance != value) - { - mEffectDistance = value; - shouldBeProcessed = true; - } - } - } - - public string processedText - { - get - { - if (mLastWidth != mWidth || mLastHeight != mHeight) - { - mLastWidth = mWidth; - mLastHeight = mHeight; - mShouldBeProcessed = true; - } - if (shouldBeProcessed) - { - ProcessText(); - } - return mProcessedText; - } - } - - public override Vector2 localSize - { - get - { - if (shouldBeProcessed) - { - ProcessText(); - } - return base.localSize; - } - } - - private bool isValid - { - get - { - if (!(mFont != null)) - { - return mTrueTypeFont != null; - } - return true; - } - } - - public void SetWrapText(string s) - { - _originalText = s; - text = Global.GetConvertWrapText(this, s); - } - - protected override void OnInit() - { - base.OnInit(); - mList.Add(this); - InitializeFont(); - SetActiveFont(trueTypeFont); - } - - public void InitializeFont() - { - if (Global.GAME_FONT == null) - { - Global.GAME_FONT = Resources.Load("Fonts/Jpn/A-OTF-KaiminTuStd-Bold"); - } - if (trueTypeFont != Global.GAME_FONT && bitmapFont == null) - { - trueTypeFont = Global.GAME_FONT; - } - } - - protected override void OnDisable() - { - SetActiveFont(null); - mList.Remove(this); - base.OnDisable(); - } - - protected void SetActiveFont(UnityEngine.Font fnt) - { - if (!(mActiveTTF != fnt)) - { - return; - } - UnityEngine.Font font = mActiveTTF; - if (font != null && mFontUsage.TryGetValue(font, out var value)) - { - value = Mathf.Max(0, --value); - if (value == 0) - { - mFontUsage.Remove(font); - } - else - { - mFontUsage[font] = value; - } - } - mActiveTTF = fnt; - font = fnt; - if (font != null) - { - int num = 0; - num = (mFontUsage[font] = num + 1); - } - } - - private static void OnFontChanged(UnityEngine.Font font) - { - OnFontChangedFlg = true; - OnFontChangedFont = font; - for (int i = 0; i < mList.size; i++) - { - UILabel uILabel = mList[i]; - if (uILabel != null) - { - UnityEngine.Font font2 = uILabel.trueTypeFont; - if (font2 == font) - { - font2.RequestCharactersInTexture(uILabel.mText, uILabel.mFinalFontSize, uILabel.mFontStyle); - uILabel.RemoveFromPanel(); - uILabel.CreatePanel(); - } - } - } - } - - public override Vector3[] GetSides(Transform relativeTo) - { - if (shouldBeProcessed) - { - ProcessText(); - } - return base.GetSides(relativeTo); - } - - protected override void UpgradeFrom265() - { - ProcessText(legacyMode: true, full: true); - if (mShrinkToFit) - { - overflowMethod = Overflow.ShrinkContent; - mMaxLineCount = 0; - } - if (mMaxLineWidth != 0) - { - base.width = mMaxLineWidth; - overflowMethod = ((mMaxLineCount > 0) ? Overflow.ResizeHeight : Overflow.ShrinkContent); - } - else - { - overflowMethod = Overflow.ResizeFreely; - } - if (mMaxLineHeight != 0) - { - base.height = mMaxLineHeight; - } - if (mFont != null) - { - int defaultSize = mFont.defaultSize; - if (base.height < defaultSize) - { - base.height = defaultSize; - } - fontSize = defaultSize; - } - mMaxLineWidth = 0; - mMaxLineHeight = 0; - mShrinkToFit = false; - NGUITools.UpdateWidgetCollider(base.gameObject, considerInactive: true); - } - - protected override void OnAnchor() - { - if (mOverflow == Overflow.ResizeFreely) - { - if (base.isFullyAnchored) - { - mOverflow = Overflow.ShrinkContent; - } - } - else if (mOverflow == Overflow.ResizeHeight && topAnchor.target != null && bottomAnchor.target != null) - { - mOverflow = Overflow.ShrinkContent; - } - base.OnAnchor(); - } - - private void ProcessAndRequest() - { - if (ambigiousFont != null) - { - ProcessText(); - } - } - - protected override void OnEnable() - { - base.OnEnable(); - if (!mTexRebuildAdded) - { - mTexRebuildAdded = true; - UnityEngine.Font.textureRebuilt += OnFontChanged; - } - } - - protected override void OnStart() - { - base.OnStart(); - if (mLineWidth > 0f) - { - mMaxLineWidth = Mathf.RoundToInt(mLineWidth); - mLineWidth = 0f; - } - if (!mMultiline) - { - mMaxLineCount = 1; - mMultiline = true; - } - mPremultiply = material != null && material.shader != null && material.shader.name.Contains("Premultiplied"); - ProcessAndRequest(); - } - - public override void MarkAsChanged() - { - shouldBeProcessed = true; - base.MarkAsChanged(); - } - - public void ProcessText() - { - ProcessText(legacyMode: false, full: true); - } - - private void ProcessText(bool legacyMode, bool full) - { - if (!isValid) - { - return; - } - mChanged = true; - shouldBeProcessed = false; - float num = mDrawRegion.z - mDrawRegion.x; - float num2 = mDrawRegion.w - mDrawRegion.y; - NGUIText.rectWidth = ((!legacyMode) ? base.width : ((mMaxLineWidth != 0) ? mMaxLineWidth : 1000000)); - NGUIText.rectHeight = ((!legacyMode) ? base.height : ((mMaxLineHeight != 0) ? mMaxLineHeight : 1000000)); - NGUIText.regionWidth = ((num != 1f) ? Mathf.RoundToInt((float)NGUIText.rectWidth * num) : NGUIText.rectWidth); - NGUIText.regionHeight = ((num2 != 1f) ? Mathf.RoundToInt((float)NGUIText.rectHeight * num2) : NGUIText.rectHeight); - mFinalFontSize = Mathf.Abs(legacyMode ? Mathf.RoundToInt(base.cachedTransform.localScale.x) : defaultFontSize); - mScale = 1f; - if (NGUIText.regionWidth < 1 || NGUIText.regionHeight < 0) - { - mProcessedText = ""; - return; - } - bool flag = trueTypeFont != null; - if (flag && keepCrisp) - { - UIRoot uIRoot = base.root; - if (uIRoot != null) - { - mDensity = ((uIRoot != null) ? uIRoot.pixelSizeAdjustment : 1f); - } - } - else - { - mDensity = 1f; - } - if (full) - { - UpdateNGUIText(); - } - if (mOverflow == Overflow.ResizeFreely) - { - NGUIText.rectWidth = 1000000; - NGUIText.regionWidth = 1000000; - } - if (mOverflow == Overflow.ResizeFreely || mOverflow == Overflow.ResizeHeight) - { - NGUIText.rectHeight = 1000000; - NGUIText.regionHeight = 1000000; - } - if (mFinalFontSize > 0) - { - bool flag2 = keepCrisp; - int num3 = mFinalFontSize; - while (num3 > 0) - { - if (flag2) - { - mFinalFontSize = num3; - NGUIText.fontSize = mFinalFontSize; - } - else - { - mScale = (float)num3 / (float)mFinalFontSize; - NGUIText.fontScale = (flag ? mScale : ((float)mFontSize / (float)mFont.defaultSize * mScale)); - } - NGUIText.Update(request: false, base.rawPivot); - bool flag3 = NGUIText.WrapText(mText, out mProcessedText, keepCharCount: true, wrapLineColors: false, mOverflowEllipsis && mOverflow == Overflow.ClampContent); - if (mOverflow == Overflow.ShrinkContent && !flag3) - { - if (--num3 <= 1) - { - break; - } - num3--; - continue; - } - if (mOverflow == Overflow.ResizeFreely) - { - mCalculatedSize = NGUIText.CalculatePrintedSize(mProcessedText); - mWidth = Mathf.Max(minWidth, Mathf.RoundToInt(mCalculatedSize.x)); - if (num != 1f) - { - mWidth = Mathf.RoundToInt((float)mWidth / num); - } - mHeight = Mathf.Max(minHeight, Mathf.RoundToInt(mCalculatedSize.y)); - if (num2 != 1f) - { - mHeight = Mathf.RoundToInt((float)mHeight / num2); - } - if ((mWidth & 1) == 1) - { - mWidth++; - } - if ((mHeight & 1) == 1) - { - mHeight++; - } - } - else if (mOverflow == Overflow.ResizeHeight) - { - mCalculatedSize = NGUIText.CalculatePrintedSize(mProcessedText); - mHeight = Mathf.Max(minHeight, Mathf.RoundToInt(mCalculatedSize.y)); - if (num2 != 1f) - { - mHeight = Mathf.RoundToInt((float)mHeight / num2); - } - if ((mHeight & 1) == 1) - { - mHeight++; - } - } - else - { - mCalculatedSize = NGUIText.CalculatePrintedSize(mProcessedText); - } - if (legacyMode) - { - base.width = Mathf.RoundToInt(mCalculatedSize.x); - base.height = Mathf.RoundToInt(mCalculatedSize.y); - base.cachedTransform.localScale = Vector3.one; - } - break; - } - } - else - { - base.cachedTransform.localScale = Vector3.one; - mProcessedText = ""; - mScale = 1f; - } - if (full) - { - NGUIText.bitmapFont = null; - NGUIText.dynamicFont = null; - } - if (OnFontChangedFlg) - { - FontReflash(OnFontChangedFont); - } - } - - private static void FontReflash(UnityEngine.Font font) - { - OnFontChangedFlg = false; - List list = null; - for (int i = 0; i < mList.size; i++) - { - UILabel uILabel = mList[i]; - if (uILabel != null && uILabel.trueTypeFont == font) - { - if (list == null) - { - list = new List(); - } - if (!list.Contains(uILabel.panel)) - { - list.Add(uILabel.panel); - } - } - } - if (list != null) - { - int j = 0; - for (int count = list.Count; j < count; j++) - { - UIPanel uIPanel = list[j]; - if (uIPanel != null) - { - uIPanel.Refresh(); - } - } - list.Clear(); - } - OnFontChangedFlg = false; - } - - public override void MakePixelPerfect() - { - if (ambigiousFont != null) - { - Vector3 localPosition = base.cachedTransform.localPosition; - localPosition.x = Mathf.RoundToInt(localPosition.x); - localPosition.y = Mathf.RoundToInt(localPosition.y); - localPosition.z = Mathf.RoundToInt(localPosition.z); - base.cachedTransform.localPosition = localPosition; - base.cachedTransform.localScale = Vector3.one; - if (mOverflow == Overflow.ResizeFreely) - { - AssumeNaturalSize(); - return; - } - int a = base.width; - int a2 = base.height; - Overflow overflow = mOverflow; - if (overflow != Overflow.ResizeHeight) - { - mWidth = 100000; - } - mHeight = 100000; - mOverflow = Overflow.ShrinkContent; - ProcessText(legacyMode: false, full: true); - mOverflow = overflow; - int a3 = Mathf.RoundToInt(mCalculatedSize.x); - int a4 = Mathf.RoundToInt(mCalculatedSize.y); - a3 = Mathf.Max(a3, base.minWidth); - a4 = Mathf.Max(a4, base.minHeight); - if ((a3 & 1) == 1) - { - a3++; - } - if ((a4 & 1) == 1) - { - a4++; - } - mWidth = Mathf.Max(a, a3); - mHeight = Mathf.Max(a2, a4); - MarkAsChanged(); - } - else - { - base.MakePixelPerfect(); - } - } - - public void AssumeNaturalSize() - { - if (ambigiousFont != null) - { - mWidth = 100000; - mHeight = 100000; - ProcessText(legacyMode: false, full: true); - mWidth = Mathf.RoundToInt(mCalculatedSize.x); - mHeight = Mathf.RoundToInt(mCalculatedSize.y); - if ((mWidth & 1) == 1) - { - mWidth++; - } - if ((mHeight & 1) == 1) - { - mHeight++; - } - MarkAsChanged(); - } - } - - public int GetCharacterIndexAtPosition(Vector3 worldPos, bool precise) - { - Vector2 localPos = base.cachedTransform.InverseTransformPoint(worldPos); - return GetCharacterIndexAtPosition(localPos, precise); - } - - public int GetCharacterIndexAtPosition(Vector2 localPos, bool precise) - { - if (isValid) - { - string value = processedText; - if (string.IsNullOrEmpty(value)) - { - return 0; - } - UpdateNGUIText(); - if (precise) - { - NGUIText.PrintExactCharacterPositions(value, mTempVerts, mTempIndices); - } - else - { - NGUIText.PrintApproximateCharacterPositions(value, mTempVerts, mTempIndices); - } - if (mTempVerts.size > 0) - { - ApplyOffset(mTempVerts, 0); - int result = (precise ? NGUIText.GetExactCharacterIndex(mTempVerts, mTempIndices, localPos) : NGUIText.GetApproximateCharacterIndex(mTempVerts, mTempIndices, localPos)); - mTempVerts.Clear(); - mTempIndices.Clear(); - NGUIText.bitmapFont = null; - NGUIText.dynamicFont = null; - return result; - } - NGUIText.bitmapFont = null; - NGUIText.dynamicFont = null; - } - return 0; - } - - public void PrintOverlay(int start, int end, UIGeometry caret, UIGeometry highlight, Color caretColor, Color highlightColor) - { - caret?.Clear(); - highlight?.Clear(); - if (!isValid) - { - return; - } - string text = processedText; - UpdateNGUIText(); - int size = caret.verts.size; - Vector2 item = new Vector2(0.5f, 0.5f); - float num = finalAlpha; - if (highlight != null && start != end) - { - int size2 = highlight.verts.size; - NGUIText.PrintCaretAndSelection(text, start, end, caret.verts, highlight.verts); - if (highlight.verts.size > size2) - { - ApplyOffset(highlight.verts, size2); - Color32 item2 = new Color(highlightColor.r, highlightColor.g, highlightColor.b, highlightColor.a * num); - for (int i = size2; i < highlight.verts.size; i++) - { - highlight.uvs.Add(item); - highlight.cols.Add(item2); - } - } - } - else - { - NGUIText.PrintCaretAndSelection(text, start, end, caret.verts, null); - } - ApplyOffset(caret.verts, size); - Color32 item3 = new Color(caretColor.r, caretColor.g, caretColor.b, caretColor.a * num); - for (int j = size; j < caret.verts.size; j++) - { - caret.uvs.Add(item); - caret.cols.Add(item3); - } - NGUIText.bitmapFont = null; - NGUIText.dynamicFont = null; - } - - public override void OnFill(BetterList verts, BetterList uvs, BetterList cols) - { - if (!isValid) - { - return; - } - int num = verts.size; - Color color = base.color; - color.a = finalAlpha; - if (mFont != null && mFont.premultipliedAlphaShader) - { - color = NGUITools.ApplyPMA(color); - } - if (QualitySettings.activeColorSpace == ColorSpace.Linear) - { - color.r = Mathf.GammaToLinearSpace(color.r); - color.g = Mathf.GammaToLinearSpace(color.g); - color.b = Mathf.GammaToLinearSpace(color.b); - color.a = Mathf.GammaToLinearSpace(color.a); - } - string obj = processedText; - int size = verts.size; - UpdateNGUIText(); - NGUIText.tint = color; - RubyText.PrintWithRuby(obj, verts, uvs, cols, this); - NGUIText.bitmapFont = null; - NGUIText.dynamicFont = null; - Vector2 vector = ApplyOffset(verts, size); - if (mFont != null && mFont.packedFontShader) - { - return; - } - if (effectStyle != Effect.None) - { - int size2 = verts.size; - vector.x = mEffectDistance.x; - vector.y = mEffectDistance.y; - ApplyShadow(verts, uvs, cols, num, size2, vector.x, 0f - vector.y); - if (effectStyle == Effect.Outline || effectStyle == Effect.Outline8) - { - num = size2; - size2 = verts.size; - ApplyShadow(verts, uvs, cols, num, size2, 0f - vector.x, vector.y); - num = size2; - size2 = verts.size; - ApplyShadow(verts, uvs, cols, num, size2, vector.x, vector.y); - num = size2; - size2 = verts.size; - ApplyShadow(verts, uvs, cols, num, size2, 0f - vector.x, 0f - vector.y); - if (effectStyle == Effect.Outline8) - { - num = size2; - size2 = verts.size; - ApplyShadow(verts, uvs, cols, num, size2, 0f - vector.x, 0f); - num = size2; - size2 = verts.size; - ApplyShadow(verts, uvs, cols, num, size2, vector.x, 0f); - num = size2; - size2 = verts.size; - ApplyShadow(verts, uvs, cols, num, size2, 0f, vector.y); - num = size2; - size2 = verts.size; - ApplyShadow(verts, uvs, cols, num, size2, 0f, 0f - vector.y); - } - } - } - if (onPostFill != null) - { - onPostFill(this, num, verts, uvs, cols); - } - } - - public Vector2 ApplyOffset(BetterList verts, int start) - { - Vector2 vector = base.pivotOffset; - float f = Mathf.Lerp(0f, -mWidth, vector.x); - float f2 = Mathf.Lerp(mHeight, 0f, vector.y) + Mathf.Lerp(mCalculatedSize.y - (float)mHeight, 0f, vector.y); - f = Mathf.Round(f); - f2 = Mathf.Round(f2); - for (int i = start; i < verts.size; i++) - { - verts.buffer[i].x += f; - verts.buffer[i].y += f2; - } - return new Vector2(f, f2); - } - - public void ApplyShadow(BetterList verts, BetterList uvs, BetterList cols, int start, int end, float x, float y) - { - Color color = mEffectColor; - color.a *= finalAlpha; - Color32 color2 = ((bitmapFont != null && bitmapFont.premultipliedAlphaShader) ? NGUITools.ApplyPMA(color) : color); - for (int i = start; i < end; i++) - { - verts.Add(verts.buffer[i]); - uvs.Add(uvs.buffer[i]); - cols.Add(cols.buffer[i]); - Vector3 vector = verts.buffer[i]; - vector.x += x; - vector.y += y; - verts.buffer[i] = vector; - Color32 color3 = cols.buffer[i]; - if (color3.a == byte.MaxValue) - { - cols.buffer[i] = color2; - continue; - } - Color color4 = color; - color4.a = (float)(int)color3.a / 255f * color.a; - cols.buffer[i] = ((bitmapFont != null && bitmapFont.premultipliedAlphaShader) ? NGUITools.ApplyPMA(color4) : color4); - } - } - - public int CalculateOffsetToFit(string text) - { - UpdateNGUIText(); - NGUIText.encoding = false; - NGUIText.symbolStyle = NGUIText.SymbolStyle.None; - int result = NGUIText.CalculateOffsetToFit(text); - NGUIText.bitmapFont = null; - NGUIText.dynamicFont = null; - return result; - } - - public bool Wrap(string text, out string final) - { - return Wrap(text, out final, 1000000); - } - - public bool Wrap(string text, out string final, int height) - { - UpdateNGUIText(); - NGUIText.rectHeight = height; - NGUIText.regionHeight = height; - bool result = NGUIText.WrapText(text, out final); - NGUIText.bitmapFont = null; - NGUIText.dynamicFont = null; - return result; - } - - public void UpdateNGUIText() - { - UnityEngine.Font font = trueTypeFont; - bool flag = font != null; - NGUIText.fontSize = mFinalFontSize; - NGUIText.fontStyle = mFontStyle; - NGUIText.rectWidth = mWidth; - NGUIText.rectHeight = mHeight; - NGUIText.regionWidth = Mathf.RoundToInt((float)mWidth * (mDrawRegion.z - mDrawRegion.x)); - NGUIText.regionHeight = Mathf.RoundToInt((float)mHeight * (mDrawRegion.w - mDrawRegion.y)); - NGUIText.gradient = mApplyGradient && (mFont == null || !mFont.packedFontShader); - NGUIText.gradientTop = mGradientTop; - NGUIText.gradientBottom = mGradientBottom; - NGUIText.encoding = mEncoding; - NGUIText.premultiply = mPremultiply; - NGUIText.symbolStyle = mSymbols; - NGUIText.maxLines = mMaxLineCount; - NGUIText.spacingX = effectiveSpacingX; - NGUIText.spacingY = effectiveSpacingY; - NGUIText.fontScale = (flag ? mScale : ((float)mFontSize / (float)mFont.defaultSize * mScale)); - if (mFont != null) - { - NGUIText.bitmapFont = mFont; - while (true) - { - UIFont replacement = NGUIText.bitmapFont.replacement; - if (replacement == null) - { - break; - } - NGUIText.bitmapFont = replacement; - } - if (NGUIText.bitmapFont.isDynamic) - { - NGUIText.dynamicFont = NGUIText.bitmapFont.dynamicFont; - NGUIText.bitmapFont = null; - } - else - { - NGUIText.dynamicFont = null; - } - } - else - { - NGUIText.dynamicFont = font; - NGUIText.bitmapFont = null; - } - if (flag && keepCrisp) - { - UIRoot uIRoot = base.root; - if (uIRoot != null) - { - NGUIText.pixelDensity = ((uIRoot != null) ? uIRoot.pixelSizeAdjustment : 1f); - } - } - else - { - NGUIText.pixelDensity = 1f; - } - if (mDensity != NGUIText.pixelDensity) - { - ProcessText(legacyMode: false, full: false); - NGUIText.rectWidth = mWidth; - NGUIText.rectHeight = mHeight; - NGUIText.regionWidth = Mathf.RoundToInt((float)mWidth * (mDrawRegion.z - mDrawRegion.x)); - NGUIText.regionHeight = Mathf.RoundToInt((float)mHeight * (mDrawRegion.w - mDrawRegion.y)); - } - if (alignment == NGUIText.Alignment.Automatic) - { - switch (base.pivot) - { - case Pivot.TopLeft: - case Pivot.Left: - case Pivot.BottomLeft: - NGUIText.alignment = NGUIText.Alignment.Left; - break; - case Pivot.TopRight: - case Pivot.Right: - case Pivot.BottomRight: - NGUIText.alignment = NGUIText.Alignment.Right; - break; - default: - NGUIText.alignment = NGUIText.Alignment.Center; - break; - } - } - else - { - NGUIText.alignment = alignment; - } - NGUIText.Update(base.rawPivot); - } -} +// PASS-9 STUB: 1,525-line NGUI text label reduced to the compile-time surface external +// callers touch. BattleManagerBase.AlertDialogueLabel field type is UILabel — field +// declaration compiles fine against this stub; UILabel methods are called only from +// UI-side code. See Task 5 of PASS8-PLAN.md. +using System; +using UnityEngine; +using Wizard; + +[ExecuteInEditMode] +[AddComponentMenu("NGUI/UI/NGUI Label")] +public class UILabel : UIWidget +{ + public enum Effect { None, Outline, Outline8 } + public enum Overflow { ShrinkContent, ClampContent, ResizeFreely, ResizeHeight } + public enum Crispness { } + + // Backing field populated by the shim's Materialize() reflection path so material is non-null + // when SetNumberLabelStyle reads inLabel.material.name. + [NonSerialized] private Material mMaterial; + public override Material material { get => mMaterial; set => mMaterial = value; } + + // Core display fields + public string text; + public string processedText; + public Effect effectStyle; + public Color effectColor; + public Vector2 effectDistance; + public bool multiLine; + public Overflow overflowMethod; + public bool overflowEllipsis; + public int maxLineCount; + public int fontSize; + public int spacingX; + public int spacingY; + public NGUIText.Alignment alignment; + public bool applyGradient; + public Color gradientBottom; + public Color gradientTop; + public bool supportEncoding; + public UIFont bitmapFont; + public UnityEngine.Font trueTypeFont; + + // RubyText extension fields + public bool IsRuby; + public bool IsDot; + public float RubyMargin; + public float RubyScale; + public float DotMargin; + public float DotScale; + + // Methods + public void ProcessText() { } + public void SetWrapText(string text) { } + public bool Wrap(string text, out string finalText) { finalText = text; return false; } + public int CalculateOffsetToFit(string text) => 0; + public int GetCharacterIndexAtPosition(Vector3 worldPos, bool precise) => 0; + public void PrintOverlay(int start, int end, UIGeometry caret, UIGeometry highlight, Color caretColor, Color selectionColor) { } +}