5f9e8f979d
cell values and grid lines are displayed. no interaction available yet.
152 lines
5.6 KiB
C#
152 lines
5.6 KiB
C#
/*
|
|
------------------- 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);
|
|
}
|
|
|
|
}
|
|
|
|
}
|