diff --git a/GameData/ConformalDecals/Plugins/ConformalDecals.dll b/GameData/ConformalDecals/Plugins/ConformalDecals.dll
index 33734ea..dad1a8e 100644
Binary files a/GameData/ConformalDecals/Plugins/ConformalDecals.dll and b/GameData/ConformalDecals/Plugins/ConformalDecals.dll differ
diff --git a/Source/ConformalDecals/ConformalDecals.csproj b/Source/ConformalDecals/ConformalDecals.csproj
index 8ab7fce..f4c47b7 100644
--- a/Source/ConformalDecals/ConformalDecals.csproj
+++ b/Source/ConformalDecals/ConformalDecals.csproj
@@ -90,7 +90,6 @@
-
diff --git a/Source/ConformalDecals/ModuleConformalText.cs b/Source/ConformalDecals/ModuleConformalText.cs
index 03a3cb2..f6bf14a 100644
--- a/Source/ConformalDecals/ModuleConformalText.cs
+++ b/Source/ConformalDecals/ModuleConformalText.cs
@@ -8,27 +8,26 @@ using TMPro;
using UnityEngine;
namespace ConformalDecals {
- public class ModuleConformalText : ModuleConformalDecal, ISerializationCallbackReceiver {
- [KSPField(isPersistant = true)] public string text = "Text";
-
+ public class ModuleConformalText : ModuleConformalDecal {
[KSPField] public Vector2 lineSpacingRange = new Vector2(-50, 50);
[KSPField] public Vector2 charSpacingRange = new Vector2(-50, 50);
- // serialization-only fields. do not use except in serialization functions
- [KSPField(isPersistant = true)] public string fontName = "Calibri SDF";
- [KSPField(isPersistant = true)] public int style;
- [KSPField(isPersistant = true)] public bool vertical;
- [KSPField(isPersistant = true)] public float lineSpacing;
- [KSPField(isPersistant = true)] public float charSpacing;
- [KSPField(isPersistant = true)] public string fillColor = "000000FF";
- [KSPField(isPersistant = true)] public string outlineColor = "FFFFFFFF";
+ [KSPField(isPersistant = true)] public bool vertical;
+ [KSPField(isPersistant = true)] public float lineSpacing;
+ [KSPField(isPersistant = true)] public float charSpacing;
+
+ [KSPField] public string text;
+ [KSPField] public DecalFont font;
+ [KSPField] public FontStyles style;
+ [KSPField] public Color32 fillColor = Color.black;
+ [KSPField] public Color32 outlineColor = Color.white;
// KSP TWEAKABLES
[KSPEvent(guiName = "#LOC_ConformalDecals_gui-set-text", guiActive = false, guiActiveEditor = true)]
public void SetText() {
if (_textEntryController == null) {
- _textEntryController = TextEntryController.Create(_text, _font, _style, lineSpacingRange, charSpacingRange, OnTextUpdate);
+ _textEntryController = TextEntryController.Create(text, font, style, vertical, lineSpacing, charSpacing, lineSpacingRange, charSpacingRange, OnTextUpdate);
}
else {
_textEntryController.Close();
@@ -46,7 +45,7 @@ namespace ConformalDecals {
guiActive = false, guiActiveEditor = true)]
public void SetFillColor() {
if (_fillColorPickerController == null) {
- _fillColorPickerController = ColorPickerController.Create(_fillColor, OnFillColorUpdate);
+ _fillColorPickerController = ColorPickerController.Create(fillColor, OnFillColorUpdate);
}
else {
_fillColorPickerController.Close();
@@ -69,18 +68,13 @@ namespace ConformalDecals {
guiActive = false, guiActiveEditor = true)]
public void SetOutlineColor() {
if (_outlineColorPickerController == null) {
- _outlineColorPickerController = ColorPickerController.Create(_outlineColor, OnOutlineColorUpdate);
+ _outlineColorPickerController = ColorPickerController.Create(outlineColor, OnOutlineColorUpdate);
}
else {
_outlineColorPickerController.Close();
}
}
- private string _text;
- private DecalTextStyle _style;
- private DecalFont _font;
- private Color32 _fillColor;
- private Color32 _outlineColor;
private TextEntryController _textEntryController;
private ColorPickerController _fillColorPickerController;
@@ -100,7 +94,12 @@ namespace ConformalDecals {
public override void OnLoad(ConfigNode node) {
base.OnLoad(node);
- OnAfterDeserialize();
+ text = WebUtility.UrlDecode(ParseUtil.ParseString(node, "text"));
+ font = DecalConfig.GetFont(ParseUtil.ParseString(node, "font", true, "Calibri SDF"));
+ int styleInt = 0;
+ if (ParseUtil.ParseIntIndirect(ref styleInt, node, "style")) style = (FontStyles) styleInt;
+ if (!ParseUtil.ParseColor32Indirect(ref fillColor, node, "fillColor")) fillColor = Color.magenta;
+ if (!ParseUtil.ParseColor32Indirect(ref outlineColor, node, "outlineColor")) outlineColor = Color.magenta;
if (HighLogic.LoadedSceneIsGame) {
// For some reason, rendering doesnt work right on the first frame a scene is loaded
@@ -114,7 +113,11 @@ namespace ConformalDecals {
}
public override void OnSave(ConfigNode node) {
- OnBeforeSerialize();
+ node.AddValue("text", WebUtility.UrlEncode(text));
+ node.AddValue("fontName", font.Name);
+ node.AddValue("style", (int) style);
+ node.AddValue("fillColor", fillColor.ToHexString());
+ node.AddValue("outlineColor", outlineColor.ToHexString());
base.OnSave(node);
}
@@ -131,31 +134,34 @@ namespace ConformalDecals {
_outlineWidthProperty = materialProperties.AddOrGetProperty("_OutlineWidth");
}
- public void OnTextUpdate(string newText, DecalFont newFont, DecalTextStyle newStyle) {
- _text = newText;
- _font = newFont;
- _style = newStyle;
+ public void OnTextUpdate(string newText, DecalFont newFont, FontStyles newStyle, bool newVertical, float newLineSpacing, float newCharSpacing) {
+ this.text = newText;
+ this.font = newFont;
+ this.style = newStyle;
+ this.vertical = newVertical;
+ this.lineSpacing = newLineSpacing;
+ this.charSpacing = newCharSpacing;
UpdateTextRecursive();
}
public void OnFillColorUpdate(Color rgb, Util.ColorHSV hsv) {
- _fillColor = rgb;
+ fillColor = rgb;
UpdateMaterials();
foreach (var counterpart in part.symmetryCounterparts) {
var decal = counterpart.GetComponent();
- decal._fillColor = _fillColor;
+ decal.fillColor = fillColor;
decal.UpdateMaterials();
}
}
public void OnOutlineColorUpdate(Color rgb, Util.ColorHSV hsv) {
- _outlineColor = rgb;
+ outlineColor = rgb;
UpdateMaterials();
foreach (var counterpart in part.symmetryCounterparts) {
var decal = counterpart.GetComponent();
- decal._outlineColor = _outlineColor;
+ decal.outlineColor = outlineColor;
decal.UpdateMaterials();
}
}
@@ -202,33 +208,6 @@ namespace ConformalDecals {
}
}
- public void OnBeforeSerialize() {
- text = WebUtility.UrlEncode(_text);
- fontName = _font.Name;
- style = (int) _style.FontStyle;
- vertical = _style.Vertical;
- lineSpacing = _style.LineSpacing;
- charSpacing = _style.CharSpacing;
- fillColor = _fillColor.ToHexString();
- outlineColor = _outlineColor.ToHexString();
- }
-
- public void OnAfterDeserialize() {
- _text = WebUtility.UrlDecode(text);
- _font = DecalConfig.GetFont(fontName);
- _style = new DecalTextStyle((FontStyles) style, vertical, lineSpacing, charSpacing);
-
- if (!ParseUtil.TryParseColor32(fillColor, out _fillColor)) {
- Logging.LogWarning($"Improperly formatted color value for fill: '{fillColor}'");
- _fillColor = Color.magenta;
- }
-
- if (!ParseUtil.TryParseColor32(outlineColor, out _outlineColor)) {
- Logging.LogWarning($"Improperly formatted color value for outline: '{outlineColor}'");
- _outlineColor = Color.magenta;
- }
- }
-
public override void OnDestroy() {
if (HighLogic.LoadedSceneIsGame && _currentText != null) TextRenderer.UnregisterText(_currentText);
@@ -249,9 +228,9 @@ namespace ConformalDecals {
foreach (var counterpart in part.symmetryCounterparts) {
var decal = counterpart.GetComponent();
- decal._text = _text;
- decal._font = _font;
- decal._style = _style;
+ decal.text = text;
+ decal.font = font;
+ decal.style = style;
decal._currentJob = _currentJob;
decal._currentText = _currentText;
@@ -266,7 +245,7 @@ namespace ConformalDecals {
private void UpdateText() {
// Render text
- var newText = new DecalText(_text, _font, _style);
+ var newText = new DecalText(text, font, style, vertical, lineSpacing, charSpacing);
var output = TextRenderer.UpdateTextNow(_currentText, newText);
_currentText = newText;
@@ -288,10 +267,10 @@ namespace ConformalDecals {
protected override void UpdateMaterials() {
_fillEnabledProperty.value = fillEnabled;
- _fillColorProperty.color = _fillColor;
+ _fillColorProperty.color = fillColor;
_outlineEnabledProperty.value = outlineEnabled;
- _outlineColorProperty.color = _outlineColor;
+ _outlineColorProperty.color = outlineColor;
_outlineWidthProperty.value = outlineWidth;
base.UpdateMaterials();
diff --git a/Source/ConformalDecals/Text/DecalFont.cs b/Source/ConformalDecals/Text/DecalFont.cs
index efa0b6e..bf422ee 100644
--- a/Source/ConformalDecals/Text/DecalFont.cs
+++ b/Source/ConformalDecals/Text/DecalFont.cs
@@ -3,41 +3,47 @@ using System.Collections.Generic;
using ConformalDecals.Util;
using TMPro;
using UniLinq;
+using UnityEngine;
namespace ConformalDecals.Text {
- public class DecalFont : IEquatable {
+ public class DecalFont : ScriptableObject, ISerializationCallbackReceiver, IEquatable {
+ [SerializeField] private string _title;
+ [SerializeField] private TMP_FontAsset _fontAsset;
+ [SerializeField] private FontStyles _fontStyle;
+ [SerializeField] private FontStyles _fontStyleMask;
+
/// Human-readable name for the font
- public string Title { get; }
+ public string Title => _title;
/// Internal name for the font
- public string Name => FontAsset.name;
+ public string Name => _fontAsset.name;
/// The font asset itself
- public TMP_FontAsset FontAsset { get; }
+ public TMP_FontAsset FontAsset => _fontAsset;
/// Styles that are forced on for this font,
/// e.g. smallcaps for a font without lower case characters
- public FontStyles FontStyle { get; }
+ public FontStyles FontStyle => _fontStyle;
- public bool Bold => (FontStyle & FontStyles.Bold) != 0;
+ public bool Bold => (_fontStyle & FontStyles.Bold) != 0;
- public bool Italic => (FontStyle & FontStyles.Italic) != 0;
+ public bool Italic => (_fontStyle & FontStyles.Italic) != 0;
- public bool Underline => (FontStyle & FontStyles.Underline) != 0;
+ public bool Underline => (_fontStyle & FontStyles.Underline) != 0;
- public bool SmallCaps => (FontStyle & FontStyles.SmallCaps) != 0;
+ public bool SmallCaps => (_fontStyle & FontStyles.SmallCaps) != 0;
/// Styles that are forced off for this font,
/// e.g. underline for a font with no underscore character
- public FontStyles FontStyleMask { get; }
+ public FontStyles FontStyleMask => _fontStyleMask;
- public bool BoldMask => (FontStyleMask & FontStyles.Bold) != 0;
+ public bool BoldMask => (_fontStyleMask & FontStyles.Bold) != 0;
- public bool ItalicMask => (FontStyleMask & FontStyles.Italic) != 0;
+ public bool ItalicMask => (_fontStyleMask & FontStyles.Italic) != 0;
- public bool UnderlineMask => (FontStyleMask & FontStyles.Underline) != 0;
+ public bool UnderlineMask => (_fontStyleMask & FontStyles.Underline) != 0;
- public bool SmallCapsMask => (FontStyleMask & FontStyles.SmallCaps) != 0;
+ public bool SmallCapsMask => (_fontStyleMask & FontStyles.SmallCaps) != 0;
public DecalFont(ConfigNode node, IEnumerable fontAssets) {
@@ -45,14 +51,14 @@ namespace ConformalDecals.Text {
if (fontAssets == null) throw new ArgumentNullException(nameof(fontAssets));
var name = ParseUtil.ParseString(node, "name");
- FontAsset = fontAssets.First(o => o.name == name);
+ _fontAsset = fontAssets.First(o => o.name == name);
if (FontAsset == null) {
throw new FormatException($"Could not find font asset named {name}");
}
- Title = ParseUtil.ParseString(node, "title", true, name);
- FontStyle = (FontStyles) ParseUtil.ParseInt(node, "style", true);
- FontStyleMask = (FontStyles) ParseUtil.ParseInt(node, "styleMask", true);
+ _title = ParseUtil.ParseString(node, "title", true, name);
+ _fontStyle = (FontStyles) ParseUtil.ParseInt(node, "style", true);
+ _fontStyleMask = (FontStyles) ParseUtil.ParseInt(node, "styleMask", true);
}
@@ -95,5 +101,9 @@ namespace ConformalDecals.Text {
public static bool operator !=(DecalFont left, DecalFont right) {
return !Equals(left, right);
}
+
+ public void OnBeforeSerialize() { }
+
+ public void OnAfterDeserialize() { }
}
}
\ No newline at end of file
diff --git a/Source/ConformalDecals/Text/DecalText.cs b/Source/ConformalDecals/Text/DecalText.cs
index c974292..4de8081 100644
--- a/Source/ConformalDecals/Text/DecalText.cs
+++ b/Source/ConformalDecals/Text/DecalText.cs
@@ -1,21 +1,38 @@
using System;
using System.Text.RegularExpressions;
+using TMPro;
namespace ConformalDecals.Text {
public class DecalText : IEquatable {
+ private readonly string _text;
+ private readonly DecalFont _font;
+ private readonly FontStyles _style;
+ private readonly bool _vertical;
+ private readonly float _lineSpacing;
+ private readonly float _charSpacing;
+
/// Raw text contents
- public string Text { get; }
+ public string Text => _text;
/// Font asset used by this text snippet
- public DecalFont Font { get; }
+ public DecalFont Font => _font;
/// Style used by this text snippet
- public DecalTextStyle Style { get; }
+ public FontStyles Style => _style;
+
+ /// If this text snippet is vertical
+ public bool Vertical => _vertical;
+
+ /// The text snippet's line spacing
+ public float LineSpacing => _lineSpacing;
+
+ /// The text snippet's character spacing
+ public float CharSpacing => _charSpacing;
/// The text formatted with newlines for vertical text
public string FormattedText {
get {
- if (Style.Vertical) {
+ if (Vertical) {
return Regex.Replace(Text, @"(.)", "$1\n");
}
else {
@@ -24,17 +41,22 @@ namespace ConformalDecals.Text {
}
}
- public DecalText(string text, DecalFont font, DecalTextStyle style) {
+
+ public DecalText(string text, DecalFont font, FontStyles style, bool vertical, float linespacing, float charspacing) {
if (font == null) throw new ArgumentNullException(nameof(font));
- Text = text;
- Font = font;
- Style = style;
+ _text = text;
+ _font = font;
+ _style = style;
+ _vertical = vertical;
+ _lineSpacing = linespacing;
+ _charSpacing = charspacing;
}
public bool Equals(DecalText other) {
if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true;
- return Text == other.Text && Equals(Font, other.Font) && Style.Equals(other.Style);
+ return _text == other._text && Equals(_font, other._font) && _style == other._style && _vertical == other._vertical && _lineSpacing.Equals(other._lineSpacing) &&
+ _charSpacing.Equals(other._charSpacing);
}
public override bool Equals(object obj) {
@@ -46,9 +68,12 @@ namespace ConformalDecals.Text {
public override int GetHashCode() {
unchecked {
- var hashCode = (Text != null ? Text.GetHashCode() : 0);
- hashCode = (hashCode * 397) ^ (Font != null ? Font.GetHashCode() : 0);
- hashCode = (hashCode * 397) ^ Style.GetHashCode();
+ var hashCode = (_text != null ? _text.GetHashCode() : 0);
+ hashCode = (hashCode * 397) ^ (_font != null ? _font.GetHashCode() : 0);
+ hashCode = (hashCode * 397) ^ (int) _style;
+ hashCode = (hashCode * 397) ^ _vertical.GetHashCode();
+ hashCode = (hashCode * 397) ^ _lineSpacing.GetHashCode();
+ hashCode = (hashCode * 397) ^ _charSpacing.GetHashCode();
return hashCode;
}
}
diff --git a/Source/ConformalDecals/Text/DecalTextStyle.cs b/Source/ConformalDecals/Text/DecalTextStyle.cs
deleted file mode 100644
index ac55fc3..0000000
--- a/Source/ConformalDecals/Text/DecalTextStyle.cs
+++ /dev/null
@@ -1,101 +0,0 @@
-using System;
-using TMPro;
-using UnityEngine;
-
-// ReSharper disable NonReadonlyMemberInGetHashCode
-
-namespace ConformalDecals.Text {
- public struct DecalTextStyle : IEquatable {
- private FontStyles _fontStyle;
- private bool _vertical;
- private float _lineSpacing;
- private float _charSpacing;
-
- public FontStyles FontStyle {
- get => _fontStyle;
- set => _fontStyle = value;
- }
-
- public bool Bold {
- get => (FontStyle & FontStyles.Bold) != 0;
- set {
- if (value) FontStyle |= FontStyles.Bold;
- else FontStyle &= ~FontStyles.Bold;
- }
- }
-
- public bool Italic {
- get => (FontStyle & FontStyles.Italic) != 0;
- set {
- if (value) FontStyle |= FontStyles.Italic;
- else FontStyle &= ~FontStyles.Italic;
- }
- }
-
- public bool Underline {
- get => (FontStyle & FontStyles.Underline) != 0;
- set {
- if (value) FontStyle |= FontStyles.Underline;
- else FontStyle &= ~FontStyles.Underline;
- }
- }
-
- public bool SmallCaps {
- get => (FontStyle & FontStyles.SmallCaps) != 0;
- set {
- if (value) FontStyle |= FontStyles.SmallCaps;
- else FontStyle &= ~FontStyles.SmallCaps;
- }
- }
-
- public bool Vertical {
- get => _vertical;
- set => _vertical = value;
- }
-
- public float LineSpacing {
- get => _lineSpacing;
- set => _lineSpacing = value;
- }
-
- public float CharSpacing {
- get => _charSpacing;
- set => _charSpacing = value;
- }
-
- public DecalTextStyle(FontStyles fontStyle, bool vertical, float lineSpacing, float charSpacing) {
- _fontStyle = fontStyle;
- _vertical = vertical;
- _lineSpacing = lineSpacing;
- _charSpacing = charSpacing;
- }
-
- public bool Equals(DecalTextStyle other) {
- return FontStyle == other.FontStyle && Vertical == other.Vertical &&
- Mathf.Approximately(LineSpacing, other.LineSpacing) &&
- Mathf.Approximately(CharSpacing, other.CharSpacing);
- }
-
- public override bool Equals(object obj) {
- return obj is DecalTextStyle other && Equals(other);
- }
-
- public override int GetHashCode() {
- unchecked {
- var hashCode = (int) FontStyle;
- hashCode = (hashCode * 397) ^ Vertical.GetHashCode();
- hashCode = (hashCode * 397) ^ LineSpacing.GetHashCode();
- hashCode = (hashCode * 397) ^ CharSpacing.GetHashCode();
- return hashCode;
- }
- }
-
- public static bool operator ==(DecalTextStyle left, DecalTextStyle right) {
- return left.Equals(right);
- }
-
- public static bool operator !=(DecalTextStyle left, DecalTextStyle right) {
- return !left.Equals(right);
- }
- }
-}
\ No newline at end of file
diff --git a/Source/ConformalDecals/Text/TextRenderer.cs b/Source/ConformalDecals/Text/TextRenderer.cs
index 8d210f1..5176c15 100644
--- a/Source/ConformalDecals/Text/TextRenderer.cs
+++ b/Source/ConformalDecals/Text/TextRenderer.cs
@@ -163,9 +163,9 @@ namespace ConformalDecals.Text {
// SETUP TMP OBJECT FOR RENDERING
_tmp.text = text.FormattedText;
_tmp.font = text.Font.FontAsset;
- _tmp.fontStyle = text.Style.FontStyle | text.Font.FontStyle;
- _tmp.lineSpacing = text.Style.LineSpacing;
- _tmp.characterSpacing = text.Style.CharSpacing;
+ _tmp.fontStyle = text.Style | text.Font.FontStyle;
+ _tmp.lineSpacing = text.LineSpacing;
+ _tmp.characterSpacing = text.CharSpacing;
_tmp.extraPadding = true;
_tmp.enableKerning = true;
diff --git a/Source/ConformalDecals/UI/TextEntryController.cs b/Source/ConformalDecals/UI/TextEntryController.cs
index 40d047d..aded7bf 100644
--- a/Source/ConformalDecals/UI/TextEntryController.cs
+++ b/Source/ConformalDecals/UI/TextEntryController.cs
@@ -9,9 +9,8 @@ using UnityEngine.UI;
namespace ConformalDecals.UI {
public class TextEntryController : MonoBehaviour {
[Serializable]
- public class TextUpdateEvent : UnityEvent { }
+ public delegate void TextUpdateDelegate(string newText, DecalFont newFont, FontStyles style, bool vertical, float linespacing, float charspacing);
- [SerializeField] public TextUpdateEvent onValueChanged = new TextUpdateEvent();
[SerializeField] private Selectable _textBox;
[SerializeField] private Button _fontButton;
@@ -28,21 +27,25 @@ namespace ConformalDecals.UI {
[SerializeField] private Toggle _smallCapsButton;
[SerializeField] private Toggle _verticalButton;
- private string _text;
- private DecalFont _font;
- private DecalTextStyle _style;
- private Vector2 _lineSpacingRange;
- private Vector2 _charSpacingRange;
- private TMP_InputField _textBoxTMP;
+ private string _text;
+ private DecalFont _font;
+ private FontStyles _style;
+ private bool _vertical;
+ private float _lineSpacing;
+ private float _charSpacing;
+ private Vector2 _lineSpacingRange;
+ private Vector2 _charSpacingRange;
+ private TMP_InputField _textBoxTMP;
+ private TextUpdateDelegate _onValueChanged;
private FontMenuController _fontMenu;
private bool _ignoreUpdates;
public static TextEntryController Create(
- string text, DecalFont font, DecalTextStyle style,
+ string text, DecalFont font, FontStyles style, bool vertical, float linespacing, float charspacing,
Vector2 lineSpacingRange, Vector2 charSpacingRange,
- UnityAction textUpdateCallback) {
+ TextUpdateDelegate textUpdateCallback) {
var window = Instantiate(UILoader.TextEntryPrefab, MainCanvasUtil.MainCanvas.transform, true);
window.AddComponent();
@@ -52,9 +55,12 @@ namespace ConformalDecals.UI {
controller._text = text;
controller._font = font;
controller._style = style;
+ controller._vertical = vertical;
+ controller._lineSpacing = linespacing;
+ controller._charSpacing = charspacing;
controller._lineSpacingRange = lineSpacingRange;
controller._charSpacingRange = charSpacingRange;
- controller.onValueChanged.AddListener(textUpdateCallback);
+ controller._onValueChanged = textUpdateCallback;
return controller;
}
@@ -81,7 +87,7 @@ namespace ConformalDecals.UI {
font.SetupSample(_fontButton.GetComponentInChildren());
_textBoxTMP.text = _text;
- _textBoxTMP.textComponent.fontStyle = _style.FontStyle | _font.FontStyle & ~_font.FontStyleMask;
+ _textBoxTMP.textComponent.fontStyle = _style | _font.FontStyle & ~_font.FontStyleMask;
_textBoxTMP.fontAsset = _font.FontAsset;
UpdateStyleButtons();
@@ -91,7 +97,7 @@ namespace ConformalDecals.UI {
public void OnLineSpacingUpdate(float value) {
if (_ignoreUpdates) return;
- _style.LineSpacing = Mathf.Lerp(_lineSpacingRange.x, _lineSpacingRange.y, value);
+ _lineSpacing = Mathf.Lerp(_lineSpacingRange.x, _lineSpacingRange.y, value);
UpdateLineSpacing();
OnValueChanged();
@@ -101,7 +107,7 @@ namespace ConformalDecals.UI {
if (_ignoreUpdates) return;
if (float.TryParse(text, out var value)) {
- _style.LineSpacing = Mathf.Clamp(value, _lineSpacingRange.x, _lineSpacingRange.y);
+ _lineSpacing = Mathf.Clamp(value, _lineSpacingRange.x, _lineSpacingRange.y);
}
else {
Logging.LogWarning("Line spacing value '{text}' could not be parsed.");
@@ -114,7 +120,7 @@ namespace ConformalDecals.UI {
public void OnCharSpacingUpdate(float value) {
if (_ignoreUpdates) return;
- _style.CharSpacing = Mathf.Lerp(_charSpacingRange.x, _charSpacingRange.y, value);
+ _charSpacing = Mathf.Lerp(_charSpacingRange.x, _charSpacingRange.y, value);
UpdateCharSpacing();
OnValueChanged();
@@ -124,7 +130,7 @@ namespace ConformalDecals.UI {
if (_ignoreUpdates) return;
if (float.TryParse(text, out var value)) {
- _style.CharSpacing = Mathf.Clamp(value, _charSpacingRange.x, _charSpacingRange.y);
+ _charSpacing = Mathf.Clamp(value, _charSpacingRange.x, _charSpacingRange.y);
}
else {
Logging.LogWarning("Char spacing value '{text}' could not be parsed.");
@@ -137,39 +143,55 @@ namespace ConformalDecals.UI {
public void OnBoldUpdate(bool state) {
if (_ignoreUpdates) return;
- _style.Bold = state;
- _textBoxTMP.textComponent.fontStyle = _style.FontStyle | _font.FontStyle & ~_font.FontStyleMask;
+ if (state)
+ _style |= FontStyles.Bold;
+ else
+ _style &= ~FontStyles.Bold;
+
+ _textBoxTMP.textComponent.fontStyle = _style | _font.FontStyle & ~_font.FontStyleMask;
OnValueChanged();
}
public void OnItalicUpdate(bool state) {
if (_ignoreUpdates) return;
- _style.Italic = state;
- _textBoxTMP.textComponent.fontStyle = _style.FontStyle | _font.FontStyle & ~_font.FontStyleMask;
+ if (state)
+ _style |= FontStyles.Italic;
+ else
+ _style &= ~FontStyles.Italic;
+
+ _textBoxTMP.textComponent.fontStyle = _style | _font.FontStyle & ~_font.FontStyleMask;
OnValueChanged();
}
public void OnUnderlineUpdate(bool state) {
if (_ignoreUpdates) return;
- _style.Underline = state;
- _textBoxTMP.textComponent.fontStyle = _style.FontStyle | _font.FontStyle & ~_font.FontStyleMask;
+ if (state)
+ _style |= FontStyles.Underline;
+ else
+ _style &= ~FontStyles.Underline;
+
+ _textBoxTMP.textComponent.fontStyle = _style | _font.FontStyle & ~_font.FontStyleMask;
OnValueChanged();
}
public void OnSmallCapsUpdate(bool state) {
if (_ignoreUpdates) return;
-
- _style.SmallCaps = state;
- _textBoxTMP.textComponent.fontStyle = _style.FontStyle | _font.FontStyle & ~_font.FontStyleMask;
+
+ if (state)
+ _style |= FontStyles.SmallCaps;
+ else
+ _style &= ~FontStyles.SmallCaps;
+
+ _textBoxTMP.textComponent.fontStyle = _style | _font.FontStyle & ~_font.FontStyleMask;
OnValueChanged();
}
public void OnVerticalUpdate(bool state) {
if (_ignoreUpdates) return;
-
- _style.Vertical = state;
+
+ _vertical = state;
OnValueChanged();
}
@@ -177,7 +199,7 @@ namespace ConformalDecals.UI {
private void Start() {
_textBoxTMP = ((TMP_InputField) _textBox);
_textBoxTMP.text = _text;
- _textBoxTMP.textComponent.fontStyle = _style.FontStyle | _font.FontStyle & ~_font.FontStyleMask;
+ _textBoxTMP.textComponent.fontStyle = _style | _font.FontStyle & ~_font.FontStyleMask;
_textBoxTMP.fontAsset = _font.FontAsset;
_font.SetupSample(_fontButton.GetComponentInChildren());
@@ -188,7 +210,7 @@ namespace ConformalDecals.UI {
}
private void OnValueChanged() {
- onValueChanged.Invoke(_text, _font, _style);
+ _onValueChanged(_text, _font, _style, _vertical, _lineSpacing, _charSpacing);
}
private void UpdateStyleButtons() {
@@ -204,7 +226,7 @@ namespace ConformalDecals.UI {
}
else {
_boldButton.interactable = true;
- _boldButton.isOn = _style.Bold;
+ _boldButton.isOn = (_style & FontStyles.Bold) != 0;
}
if (_font.Italic) {
@@ -217,7 +239,7 @@ namespace ConformalDecals.UI {
}
else {
_italicButton.interactable = true;
- _italicButton.isOn = _style.Italic;
+ _italicButton.isOn = (_style & FontStyles.Italic) != 0;
}
if (_font.Underline) {
@@ -230,7 +252,7 @@ namespace ConformalDecals.UI {
}
else {
_underlineButton.interactable = true;
- _underlineButton.isOn = _style.Underline;
+ _underlineButton.isOn = (_style & FontStyles.Underline) != 0;
}
if (_font.SmallCaps) {
@@ -243,10 +265,10 @@ namespace ConformalDecals.UI {
}
else {
_smallCapsButton.interactable = true;
- _smallCapsButton.isOn = _style.SmallCaps;
+ _smallCapsButton.isOn = (_style & FontStyles.SmallCaps) != 0;
}
- _verticalButton.isOn = _style.Vertical;
+ _verticalButton.isOn = _vertical;
_ignoreUpdates = false;
}
@@ -254,8 +276,8 @@ namespace ConformalDecals.UI {
private void UpdateLineSpacing() {
_ignoreUpdates = true;
- _lineSpacingSlider.value = Mathf.InverseLerp(_lineSpacingRange.x, _lineSpacingRange.y, _style.LineSpacing);
- ((TMP_InputField) _lineSpacingTextBox).text = $"{_style.LineSpacing:F1}";
+ _lineSpacingSlider.value = Mathf.InverseLerp(_lineSpacingRange.x, _lineSpacingRange.y, _lineSpacing);
+ ((TMP_InputField) _lineSpacingTextBox).text = $"{_lineSpacing:F1}";
_ignoreUpdates = false;
}
@@ -263,8 +285,8 @@ namespace ConformalDecals.UI {
private void UpdateCharSpacing() {
_ignoreUpdates = true;
- _charSpacingSlider.value = Mathf.InverseLerp(_charSpacingRange.x, _charSpacingRange.y, _style.CharSpacing);
- ((TMP_InputField) _charSpacingTextBox).text = $"{_style.CharSpacing:F1}";
+ _charSpacingSlider.value = Mathf.InverseLerp(_charSpacingRange.x, _charSpacingRange.y, _charSpacing);
+ ((TMP_InputField) _charSpacingTextBox).text = $"{_charSpacing:F1}";
_ignoreUpdates = false;
}
diff --git a/Source/ConformalDecals/Util/ParseUtil.cs b/Source/ConformalDecals/Util/ParseUtil.cs
index 5a712c7..d600bf5 100644
--- a/Source/ConformalDecals/Util/ParseUtil.cs
+++ b/Source/ConformalDecals/Util/ParseUtil.cs
@@ -30,9 +30,15 @@ namespace ConformalDecals.Util {
}
public static string ParseString(ConfigNode node, string valueName, bool isOptional = false, string defaultValue = "") {
- if (!node.HasValue(valueName)) throw new FormatException($"Missing value for {valueName}");
+ if (node.HasValue(valueName)) return node.GetValue(valueName);
+
+ if (isOptional) {
+ return defaultValue;
+ }
+ else {
+ throw new FormatException($"Missing value for {valueName}");
+ }
- return node.GetValue(valueName);
}
public static bool ParseStringIndirect(ref string value, ConfigNode node, string valueName) {