66 lines
2.4 KiB
C#
66 lines
2.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
|
|
namespace AibisDream.Framework
|
|
{
|
|
[Serializable]
|
|
public sealed class TypographyStyle
|
|
{
|
|
[SerializeField] private TypographyRole role;
|
|
[SerializeField] private TMP_FontAsset font;
|
|
[SerializeField] private Material materialPreset;
|
|
[SerializeField] private List<TMP_FontAsset> fallbackFonts = new();
|
|
[SerializeField, Min(0.01f)] private float fontSizeMultiplier = 1f;
|
|
[SerializeField] private float lineSpacingOffset;
|
|
[SerializeField] private float characterSpacingOffset;
|
|
|
|
public TypographyStyle(
|
|
TypographyRole role,
|
|
TMP_FontAsset font,
|
|
Material materialPreset = null,
|
|
IEnumerable<TMP_FontAsset> fallbackFonts = null,
|
|
float fontSizeMultiplier = 1f,
|
|
float lineSpacingOffset = 0f,
|
|
float characterSpacingOffset = 0f)
|
|
{
|
|
this.role = role;
|
|
this.font = font;
|
|
this.materialPreset = materialPreset;
|
|
this.fallbackFonts = fallbackFonts != null
|
|
? new List<TMP_FontAsset>(fallbackFonts)
|
|
: new List<TMP_FontAsset>();
|
|
this.fontSizeMultiplier = Mathf.Max(0.01f, fontSizeMultiplier);
|
|
this.lineSpacingOffset = lineSpacingOffset;
|
|
this.characterSpacingOffset = characterSpacingOffset;
|
|
}
|
|
|
|
public TypographyRole Role => role;
|
|
public TMP_FontAsset Font => font;
|
|
public Material MaterialPreset => materialPreset;
|
|
public IReadOnlyList<TMP_FontAsset> FallbackFonts => fallbackFonts;
|
|
public float FontSizeMultiplier => Mathf.Max(0.01f, fontSizeMultiplier);
|
|
public float LineSpacingOffset => lineSpacingOffset;
|
|
public float CharacterSpacingOffset => characterSpacingOffset;
|
|
public bool IsUsable => font != null;
|
|
|
|
internal void ApplyFallbacks()
|
|
{
|
|
if (font == null)
|
|
return;
|
|
|
|
font.fallbackFontAssetTable ??= new List<TMP_FontAsset>();
|
|
font.fallbackFontAssetTable.Clear();
|
|
if (fallbackFonts == null)
|
|
return;
|
|
|
|
foreach (TMP_FontAsset fallback in fallbackFonts)
|
|
{
|
|
if (fallback != null && fallback != font && !font.fallbackFontAssetTable.Contains(fallback))
|
|
font.fallbackFontAssetTable.Add(fallback);
|
|
}
|
|
}
|
|
}
|
|
}
|