diff --git a/GameData/ConformalDecals/Parts/decal-text.cfg b/GameData/ConformalDecals/Parts/decal-text.cfg index 4e3e3917..1f92cb5f 100644 --- a/GameData/ConformalDecals/Parts/decal-text.cfg +++ b/GameData/ConformalDecals/Parts/decal-text.cfg @@ -52,7 +52,7 @@ PART name = ModuleConformalText text = Text - font = Calibri SDF + fontName = Calibri SDF fillColor = #000000FF outlineColor = #FFFFFFFF fillEnabled = true @@ -62,6 +62,7 @@ PART useBaseNormal = true scaleMode = MINIMUM + defaultScale = 0.2 defaultDepth = 0.2 defaultCutoff = 0.5 } diff --git a/GameData/ConformalDecals/Plugins/ConformalDecals.dll b/GameData/ConformalDecals/Plugins/ConformalDecals.dll index 20b74636..6c54a57d 100644 Binary files a/GameData/ConformalDecals/Plugins/ConformalDecals.dll and b/GameData/ConformalDecals/Plugins/ConformalDecals.dll differ diff --git a/GameData/ConformalDecals/Versioning/ConformalDecals.version b/GameData/ConformalDecals/Versioning/ConformalDecals.version index a722e4d9..56afe254 100644 --- a/GameData/ConformalDecals/Versioning/ConformalDecals.version +++ b/GameData/ConformalDecals/Versioning/ConformalDecals.version @@ -6,8 +6,8 @@ { "MAJOR":0, "MINOR":2, - "PATCH":3, - "BUILD":1 + "PATCH":4, + "BUILD":0 }, "KSP_VERSION": { diff --git a/README.md b/README.md index c2c25088..f6075576 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Conformal Decals v0.2.3 +# Conformal Decals v0.2.4 [![Build Status](https://travis-ci.org/drewcassidy/KSP-Conformal-Decals.svg?branch=release)](https://travis-ci.org/drewcassidy/KSP-Conformal-Decals) [![Art: CC BY-SA 4.0](https://img.shields.io/badge/Art%20License-CC%20BY--SA%204.0-orange.svg)](https://creativecommons.org/licenses/by-sa/4.0/) [![Code: GPL v3](https://img.shields.io/badge/Code%20License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) ![Screenshot](http://pileof.rocks/KSP/images/ConformalDecalsHeader.png) diff --git a/Source/ConformalDecals/ModuleConformalDecal.cs b/Source/ConformalDecals/ModuleConformalDecal.cs index 1ff3b536..8181a871 100644 --- a/Source/ConformalDecals/ModuleConformalDecal.cs +++ b/Source/ConformalDecals/ModuleConformalDecal.cs @@ -31,7 +31,7 @@ public enum DecalScaleMode { [KSPField] public bool scaleAdjustable = true; [KSPField] public float defaultScale = 1; - [KSPField] public Vector2 scaleRange = new Vector2(0, 4); + [KSPField] public Vector2 scaleRange = new Vector2(0, 5); [KSPField] public DecalScaleMode scaleMode = DecalScaleMode.HEIGHT; @@ -60,19 +60,19 @@ public enum DecalScaleMode { // INTERNAL VALUES [KSPField(guiName = "#LOC_ConformalDecals_gui-scale", guiActive = false, guiActiveEditor = true, isPersistant = true, guiFormat = "F2", guiUnits = "m"), - UI_FloatRange(stepIncrement = 0.05f)] + UI_FloatRange()] public float scale = 1.0f; [KSPField(guiName = "#LOC_ConformalDecals_gui-depth", guiActive = false, guiActiveEditor = true, isPersistant = true, guiFormat = "F2", guiUnits = "m"), - UI_FloatRange(stepIncrement = 0.02f)] + UI_FloatRange()] public float depth = 0.2f; [KSPField(guiName = "#LOC_ConformalDecals_gui-opacity", guiActive = false, guiActiveEditor = true, isPersistant = true, guiFormat = "P0"), - UI_FloatRange(stepIncrement = 0.05f)] + UI_FloatRange()] public float opacity = 1.0f; [KSPField(guiName = "#LOC_ConformalDecals_gui-cutoff", guiActive = false, guiActiveEditor = true, isPersistant = true, guiFormat = "P0"), - UI_FloatRange(stepIncrement = 0.05f)] + UI_FloatRange()] public float cutoff = 0.5f; [KSPField(guiName = "#LOC_ConformalDecals_gui-wear", guiActive = false, guiActiveEditor = true, isPersistant = true, guiFormat = "F0"), @@ -215,7 +215,7 @@ public override void OnLoad(ConfigNode node) { foreach (var keyword in _decalMaterial.shaderKeywords) { this.Log($"keyword: {keyword}"); } - + if (HighLogic.LoadedSceneIsEditor) { UpdateTweakables(); } @@ -512,7 +512,7 @@ protected virtual void UpdateTweakables() { cutoffField.guiActiveEditor = cutoffAdjustable; wearField.guiActiveEditor = useBaseNormal; - var steps = 40; + var steps = 20; if (scaleAdjustable) { var minValue = Mathf.Max(Mathf.Epsilon, scaleRange.x); @@ -521,7 +521,7 @@ protected virtual void UpdateTweakables() { var scaleEditor = (UI_FloatRange) scaleField.uiControlEditor; scaleEditor.minValue = minValue; scaleEditor.maxValue = maxValue; - scaleEditor.stepIncrement = (maxValue - minValue) / steps; + scaleEditor.stepIncrement = 0.01f; //1cm scaleEditor.onFieldChanged = OnSizeTweakEvent; } @@ -532,7 +532,7 @@ protected virtual void UpdateTweakables() { var depthEditor = (UI_FloatRange) depthField.uiControlEditor; depthEditor.minValue = minValue; depthEditor.maxValue = maxValue; - depthEditor.stepIncrement = (maxValue - minValue) / steps; + depthEditor.stepIncrement = 0.01f; //1cm depthEditor.onFieldChanged = OnSizeTweakEvent; } diff --git a/Source/ConformalDecals/ModuleConformalText.cs b/Source/ConformalDecals/ModuleConformalText.cs index 49906b65..d2c85ced 100644 --- a/Source/ConformalDecals/ModuleConformalText.cs +++ b/Source/ConformalDecals/ModuleConformalText.cs @@ -94,12 +94,25 @@ public void SetOutlineColor() { public override void OnLoad(ConfigNode node) { base.OnLoad(node); - text = WebUtility.UrlDecode(ParseUtil.ParseString(node, "text")); - font = DecalConfig.GetFont(ParseUtil.ParseString(node, "font", true, "Calibri SDF")); + + string textRaw = ""; + if (ParseUtil.ParseStringIndirect(ref textRaw, node, "text")) { + text = WebUtility.UrlDecode(textRaw); + } + + string fontName = ""; + if (ParseUtil.ParseStringIndirect(ref fontName, node, "fontName")) { + font = DecalConfig.GetFont(fontName); + } + else if (font == null) font = DecalConfig.GetFont("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 (ParseUtil.ParseIntIndirect(ref styleInt, node, "style")) { + style = (FontStyles) styleInt; + } + + ParseUtil.ParseColor32Indirect(ref fillColor, node, "fillColor"); + ParseUtil.ParseColor32Indirect(ref outlineColor, node, "outlineColor"); if (HighLogic.LoadedSceneIsGame) { // For some reason, rendering doesnt work right on the first frame a scene is loaded @@ -210,12 +223,12 @@ public void OnOutlineWidthUpdate(BaseField field, object obj) { public override void OnDestroy() { if (HighLogic.LoadedSceneIsGame && _currentText != null) TextRenderer.UnregisterText(_currentText); - + // close all UIs if (_textEntryController != null) _textEntryController.Close(); if (_fillColorPickerController != null) _fillColorPickerController.Close(); if (_outlineColorPickerController != null) _outlineColorPickerController.Close(); - + base.OnDestroy(); } diff --git a/Source/ConformalDecals/Text/DecalText.cs b/Source/ConformalDecals/Text/DecalText.cs index 4de80817..d6af8d19 100644 --- a/Source/ConformalDecals/Text/DecalText.cs +++ b/Source/ConformalDecals/Text/DecalText.cs @@ -32,6 +32,7 @@ public class DecalText : IEquatable { /// The text formatted with newlines for vertical text public string FormattedText { get { + if (string.IsNullOrWhiteSpace(Text)) return "•"; if (Vertical) { return Regex.Replace(Text, @"(.)", "$1\n"); } diff --git a/Source/ConformalDecals/Text/TextRenderer.cs b/Source/ConformalDecals/Text/TextRenderer.cs index 5176c151..c1b098d6 100644 --- a/Source/ConformalDecals/Text/TextRenderer.cs +++ b/Source/ConformalDecals/Text/TextRenderer.cs @@ -272,13 +272,14 @@ public TextRenderOutput RenderText(DecalText text, Texture2D texture) { } } - GL.PopMatrix(); - // COPY TEXTURE BACK INTO RAM RenderTexture.active = renderTex; texture.ReadPixels(new Rect(0, 0, textureSize.x, textureSize.y), 0, 0, true); texture.Apply(); + GL.Clear(false, true, Color.black); //KSP doesnt clear render textures before using them so we need to clear afterwards, as well. Thanks Squad. + GL.PopMatrix(); + // RELEASE RENDERTEX RenderTexture.ReleaseTemporary(renderTex); diff --git a/Source/ConformalDecals/UI/TextEntryController.cs b/Source/ConformalDecals/UI/TextEntryController.cs index aded7bfb..8a783b04 100644 --- a/Source/ConformalDecals/UI/TextEntryController.cs +++ b/Source/ConformalDecals/UI/TextEntryController.cs @@ -11,7 +11,6 @@ public class TextEntryController : MonoBehaviour { [Serializable] public delegate void TextUpdateDelegate(string newText, DecalFont newFont, FontStyles style, bool vertical, float linespacing, float charspacing); - [SerializeField] private Selectable _textBox; [SerializeField] private Button _fontButton; @@ -40,7 +39,10 @@ public class TextEntryController : MonoBehaviour { private FontMenuController _fontMenu; - private bool _ignoreUpdates; + private bool _ignoreUpdates; + private bool _isLocked; + private string _lockString; + private static int _lockCounter; public static TextEntryController Create( string text, DecalFont font, FontStyles style, bool vertical, float linespacing, float charspacing, @@ -70,6 +72,18 @@ public void Close() { Destroy(gameObject); } + public void SetControlLock(string value = null) { + if (_isLocked) return; + InputLockManager.SetControlLock(_lockString); + _isLocked = true; + } + + public void RemoveControlLock(string value = null) { + if (!_isLocked) return; + InputLockManager.RemoveControlLock(_lockString); + _isLocked = false; + } + public void OnTextUpdate(string newText) { this._text = newText; @@ -195,12 +209,15 @@ public void OnVerticalUpdate(bool state) { OnValueChanged(); } - private void Start() { + _lockString = $"ConformalDecals_TextEditor_{_lockCounter++}"; + _textBoxTMP = ((TMP_InputField) _textBox); _textBoxTMP.text = _text; _textBoxTMP.textComponent.fontStyle = _style | _font.FontStyle & ~_font.FontStyleMask; _textBoxTMP.fontAsset = _font.FontAsset; + _textBoxTMP.onSelect.AddListener(SetControlLock); + _textBoxTMP.onDeselect.AddListener(RemoveControlLock); _font.SetupSample(_fontButton.GetComponentInChildren()); @@ -209,6 +226,10 @@ private void Start() { UpdateCharSpacing(); } + private void OnDestroy() { + RemoveControlLock(); + } + private void OnValueChanged() { _onValueChanged(_text, _font, _style, _vertical, _lineSpacing, _charSpacing); } diff --git a/changelog.txt b/changelog.txt index 16dfba6f..61480c14 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,14 @@ +v0.2.4 +------ +- Fixes: + - Fixed red text appearing on planets due to KSP bug by clearing render textures afterwards. + - Fixed fonts not saving correctly. +- Changes: + - Lowered step size for decal size and depth to 1cm. + - Changed default max size to 5m. + - Changed default text decal size to 0.2m + - Text decals now show as a circle if they contain only whitespace. + v0.2.3 ------ - Fixes: