summaryrefslogtreecommitdiff
path: root/Pathfinding Visualizer/Assets/CodeMonkey/Utils/UI_TextComplex.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Pathfinding Visualizer/Assets/CodeMonkey/Utils/UI_TextComplex.cs')
-rw-r--r--Pathfinding Visualizer/Assets/CodeMonkey/Utils/UI_TextComplex.cs151
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);
+ }
+
+ }
+
+}