using UnityEngine;
using UnityEngine.UI;
using DamageNumbersPro;
namespace DamageNumbersPro
{
///
/// Attach this script to custom images or sprite renderers in your damage number prefab.
/// It will handle fading them in and out with the popup.
///
/// You can also use Text Mesh Pro sprites instead.
///
public class DamageNumberSprite : MonoBehaviour
{
[Header("Size:")]
public bool matchTextSize = false;
public Vector2 sizePadding = new Vector2(0.3f, 0.2f);
public Vector2 sizeFactor = new Vector2(1f, 1f);
void Start()
{
// Get damage number
DamageNumber damageNumber = GetComponentInParent();
// Fade graphic or image
Graphic graphic = GetComponent();
if (graphic != null)
{
// Update color
Color color = graphic.color;
float originalAlpha = graphic.color.a;
damageNumber.OnUpdateFade += (alpha) =>
{
graphic.color = new Color(color.r, color.g, color.b, originalAlpha * alpha);
};
// Update size
if (matchTextSize)
{
RectTransform rectTransform = graphic.rectTransform;
damageNumber.OnUpdateText += () =>
{
UpdateSize(damageNumber, rectTransform);
};
}
}
else
{
// Fade sprite renderer
SpriteRenderer spriteRenderer = GetComponent();
if (spriteRenderer != null)
{
// Update color
Color color = spriteRenderer.color;
float originalAlpha = spriteRenderer.color.a;
damageNumber.OnUpdateFade += (alpha) =>
{
spriteRenderer.color = new Color(color.r, color.g, color.b, originalAlpha * alpha);
};
// Update size
if (matchTextSize)
{
damageNumber.OnUpdateText += () =>
{
UpdateSize(damageNumber, spriteRenderer);
};
}
}
}
}
///
/// This function will be called by the script itself.
/// It's only public so that the editor script can call it.
///
public void UpdateSize(DamageNumber damageNumber, SpriteRenderer spriteRenderer)
{
// Get text size
Vector2 textSize = damageNumber.GetTextMesh().textBounds.size;
if (spriteRenderer.drawMode == SpriteDrawMode.Simple)
{
// Update scale
transform.localScale = new Vector3((textSize.x + sizePadding.x) * sizeFactor.x, (textSize.y + sizePadding.y) * sizeFactor.y, 1);
}
else
{
// Update sliced size
spriteRenderer.size = new Vector2((textSize.x + sizePadding.x) * sizeFactor.x, (textSize.y + sizePadding.y) * sizeFactor.y);
}
}
///
/// This function will be called by the script itself.
/// It's only public so that the editor script can call it.
///
public void UpdateSize(DamageNumber damageNumber, RectTransform rectTransform)
{
// Get text size
Vector2 textSize = damageNumber.GetTextMesh().textBounds.size;
// Update size delta
rectTransform.sizeDelta = new Vector2((textSize.x + sizePadding.x) * sizeFactor.x, (textSize.y + sizePadding.y) * sizeFactor.y);
}
}
}