diff options
| author | Simon O'Shea <osheas1@wit.edu> | 2023-07-31 18:45:01 -0400 |
|---|---|---|
| committer | Simon O'Shea <osheas1@wit.edu> | 2023-07-31 18:45:01 -0400 |
| commit | 5f9e8f979deb94e9219113ed09b49142c040cb57 (patch) | |
| tree | a67bd606205f7fb28e48d351028b3478bc49145b /Pathfinding Visualizer/Assets/CodeMonkey/Utils/UI_TextComplex.cs | |
| parent | 4699ce72871eaa6ee27c01971383b9d1fced1946 (diff) | |
import successful, grid has visuals
cell values and grid lines are displayed. no interaction available yet.
Diffstat (limited to 'Pathfinding Visualizer/Assets/CodeMonkey/Utils/UI_TextComplex.cs')
| -rw-r--r-- | Pathfinding Visualizer/Assets/CodeMonkey/Utils/UI_TextComplex.cs | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/Pathfinding Visualizer/Assets/CodeMonkey/Utils/UI_TextComplex.cs b/Pathfinding Visualizer/Assets/CodeMonkey/Utils/UI_TextComplex.cs new file mode 100644 index 0000000..307c204 --- /dev/null +++ b/Pathfinding Visualizer/Assets/CodeMonkey/Utils/UI_TextComplex.cs @@ -0,0 +1,151 @@ +/* + ------------------- Code Monkey ------------------- + + Thank you for downloading the Code Monkey Utilities + I hope you find them useful in your projects + If you have any questions use the contact form + Cheers! + + unitycodemonkey.com + -------------------------------------------------- + */ + +using UnityEngine; +using UnityEngine.UI; + +namespace CodeMonkey.Utils { + + /* + * Displays text with icons in between the text + * */ + public class UI_TextComplex { + + private static Transform GetCanvasTransform() { + return UtilsClass.GetCanvasTransform(); + } + + public struct Icon { + public Sprite sprite; + public Vector2 size; + public Color color; + public Icon(Sprite sprite, Vector2 size, Color? color = null) { + this.sprite = sprite; + this.size = size; + if (color == null) { + this.color = Color.white; + } else { + this.color = (Color) color; + } + } + } + + public GameObject gameObject; + private Transform transform; + private RectTransform rectTransform; + + // iconChar prepends the iconArr index; + // Example using iconChar '#': + // test #0 asdf + // Displays "test [iconArr[0]] asdf" + public UI_TextComplex(Transform parent, Vector2 anchoredPosition, int fontSize, char iconChar, string text, Icon[] iconArr, Font font) { + SetupParent(parent, anchoredPosition); + string tmp = text; + float textPosition = 0f; + while (tmp.IndexOf(iconChar) != -1) { + string untilTmp = tmp.Substring(0, tmp.IndexOf(iconChar)); + string iconNumber = tmp.Substring(tmp.IndexOf(iconChar)+1); + int indexOfSpaceAfterIconNumber = iconNumber.IndexOf(" "); + if (indexOfSpaceAfterIconNumber != -1) { + // Still has more space after iconNumber + iconNumber = iconNumber.Substring(0, indexOfSpaceAfterIconNumber); + } else { + // No more space after iconNumber + } + tmp = tmp.Substring(tmp.IndexOf(iconChar+iconNumber) + (iconChar+iconNumber).Length); + if (untilTmp.Trim() != "") { + Text uiText = UtilsClass.DrawTextUI(untilTmp, transform, new Vector2(textPosition,0), fontSize, font); + textPosition += uiText.preferredWidth; + } + // Draw Icon + int iconIndex = UtilsClass.Parse_Int(iconNumber, 0); + Icon icon = iconArr[iconIndex]; + UtilsClass.DrawSprite(icon.sprite, transform, new Vector2(textPosition + icon.size.x / 2f, 0), icon.size); + textPosition += icon.size.x; + } + if (tmp.Trim() != "") { + UtilsClass.DrawTextUI(tmp, transform, new Vector2(textPosition,0), fontSize, font); + } + } + + private void SetupParent(Transform parent, Vector2 anchoredPosition) { + gameObject = new GameObject("UI_TextComplex", typeof(RectTransform)); + transform = gameObject.transform; + rectTransform = gameObject.GetComponent<RectTransform>(); + rectTransform.SetParent(parent, false); + rectTransform.sizeDelta = new Vector2(0, 0); + rectTransform.anchorMin = new Vector2(0, .5f); + rectTransform.anchorMax = new Vector2(0, .5f); + rectTransform.pivot = new Vector2(0, .5f); + rectTransform.anchoredPosition = anchoredPosition; + } + + public void SetTextColor(Color color) { + foreach (Transform trans in transform) { + Text text = trans.GetComponent<Text>(); + if (text != null) { + text.color = color; + } + } + } + + public float GetTotalWidth() { + float textPosition = 0f; + foreach (Transform trans in transform) { + Text text = trans.GetComponent<Text>(); + if (text != null) { + textPosition += text.preferredWidth; + } + Image image = trans.GetComponent<Image>(); + if (image != null) { + textPosition += image.GetComponent<RectTransform>().sizeDelta.x; + } + } + return textPosition; + } + + public float GetTotalHeight() { + foreach (Transform trans in transform) { + Text text = trans.GetComponent<Text>(); + if (text != null) { + return text.preferredHeight; + } + } + return 0f; + } + + public void AddTextOutline(Color color, float size) { + foreach (Transform textComplexTrans in transform) { + if (textComplexTrans.GetComponent<Text>() != null) { + Outline outline = textComplexTrans.gameObject.AddComponent<Outline>(); + outline.effectColor = color; + outline.effectDistance = new Vector2(size, size); + } + } + } + + public void SetAnchorMiddle() { + rectTransform.anchorMin = new Vector2(.5f, .5f); + rectTransform.anchorMax = new Vector2(.5f, .5f); + } + + public void CenterOnPosition(Vector2 position) { + rectTransform.anchoredPosition = position + new Vector2(-GetTotalWidth() / 2f, 0); + } + + public void DestroySelf() { + Object.Destroy(gameObject); + } + + } + +} |
