279 lines
8.6 KiB
C#
279 lines
8.6 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.Serialization;
|
|
using DamageNumbersPro.Internal;
|
|
using TMPro;
|
|
|
|
namespace DamageNumbersPro
|
|
{
|
|
[DisallowMultipleComponent]
|
|
public class DamageNumberGUI : DamageNumber
|
|
{
|
|
/*
|
|
* Contact me if you need any support.
|
|
* Email: ekincantascontact@gmail.com
|
|
* Discord: https://discord.com/invite/nWbRkN8Zxr
|
|
*
|
|
* Check the manual for more information.
|
|
* Manual: https://ekincantas.com/damage-numbers-pro/
|
|
*
|
|
* Thank you for using my asset.
|
|
* If you want to add your own code please use the functions below.
|
|
* I recommend creating a duplicate of this script first or creating your own script which derives from DamageNumber.
|
|
* Otherwise you may loose your custom code when you update damage numbers pro.
|
|
*
|
|
* Good Luck
|
|
*/
|
|
|
|
//Custom Events:
|
|
protected override void OnPreSpawn()
|
|
{
|
|
//Fixes an issue where the previous mesh was visible for 1 frame.
|
|
if (textMeshProA != null)
|
|
{
|
|
textMeshProA.enabled = textMeshProB.enabled = false;
|
|
}
|
|
}
|
|
protected override void OnStart()
|
|
{
|
|
//Only damage numbers of the same parent can interact with each other.
|
|
if(spamGroup != "" && transform.parent != null)
|
|
{
|
|
spamGroup += transform.parent.GetInstanceID();
|
|
}
|
|
|
|
//GUI Alpha Fix:
|
|
skippedFrames = 0;
|
|
skipFrames = true;
|
|
realStartTime = Time.unscaledTime;
|
|
}
|
|
protected override void OnLateUpdate()
|
|
{
|
|
//GUI Alpha Fix:
|
|
if (skipFrames)
|
|
{
|
|
transform.localScale = Vector3.one * 0.0001f;
|
|
currentFade = 0;
|
|
|
|
if (skippedFrames > 2 && Time.unscaledTime > realStartTime + 0.03f)
|
|
{
|
|
skipFrames = false;
|
|
transform.localScale = originalScale;
|
|
currentFade = 0;
|
|
}
|
|
}
|
|
}
|
|
protected override void OnStop()
|
|
{
|
|
|
|
}
|
|
protected override void OnUpdate(float deltaTime)
|
|
{
|
|
//GUI Alpha Fix:
|
|
skippedFrames++;
|
|
}
|
|
protected override void OnAbsorb(float number, float newSum)
|
|
{
|
|
|
|
}
|
|
protected override void OnTextUpdate()
|
|
{
|
|
|
|
}
|
|
|
|
/*
|
|
* The code below is required for the GUI version of damage numbers pro.
|
|
* So you should not change it too much.
|
|
* But you can use the events above to add your custom behavior.
|
|
*/
|
|
|
|
//References:
|
|
RectTransform myRect;
|
|
TextMeshProUGUI textMeshProA;
|
|
TextMeshProUGUI textMeshProB;
|
|
RectTransform textRectA;
|
|
RectTransform textRectB;
|
|
List<TMP_SubMeshUI> subMeshs;
|
|
|
|
//Internal:
|
|
float realStartTime;
|
|
bool skipFrames;
|
|
int skippedFrames;
|
|
|
|
//Components:
|
|
public override void GetReferencesIfNecessary()
|
|
{
|
|
if(textMeshProA == null)
|
|
{
|
|
GetReferences();
|
|
}
|
|
}
|
|
public override void GetReferences()
|
|
{
|
|
baseAlpha = 0.9f;
|
|
|
|
myRect = GetComponent<RectTransform>();
|
|
transformA = transform.Find("TMPA");
|
|
transformB = transform.Find("TMPB");
|
|
textMeshProA = transformA.GetComponent<TextMeshProUGUI>();
|
|
textMeshProB = transformB.GetComponent<TextMeshProUGUI>();
|
|
textRectA = transformA.GetComponent<RectTransform>();
|
|
textRectB = transformB.GetComponent<RectTransform>();
|
|
}
|
|
public override TMP_Text[] GetTextMeshs()
|
|
{
|
|
return new TMP_Text[] { textMeshProA, textMeshProB };
|
|
}
|
|
public override TMP_Text GetTextMesh()
|
|
{
|
|
return textMeshProA;
|
|
}
|
|
|
|
//Materials:
|
|
public override Material[] GetSharedMaterials()
|
|
{
|
|
return textMeshProA.fontSharedMaterials;
|
|
}
|
|
public override Material[] GetMaterials()
|
|
{
|
|
return textMeshProA.fontMaterials;
|
|
}
|
|
public override Material GetSharedMaterial()
|
|
{
|
|
return textMeshProA.fontSharedMaterial;
|
|
}
|
|
public override Material GetMaterial()
|
|
{
|
|
return textMeshProA.fontMaterial;
|
|
}
|
|
|
|
//Text:
|
|
protected override void SetTextString(string fullString)
|
|
{
|
|
textMeshProA.text = textMeshProB.text = fullString;
|
|
|
|
if(!textMeshProA.enabled)
|
|
{
|
|
textMeshProA.enabled = textMeshProB.enabled = true;
|
|
}
|
|
|
|
textMeshProA.ForceMeshUpdate();
|
|
textMeshProB.ForceMeshUpdate();
|
|
textMeshProA.canvasRenderer.SetMesh(textMeshProA.mesh);
|
|
textMeshProB.canvasRenderer.SetMesh(textMeshProB.mesh);
|
|
|
|
meshs = new List<Mesh>();
|
|
meshs.Add(textMeshProA.mesh);
|
|
meshs.Add(textMeshProB.mesh);
|
|
|
|
//Sub Meshs:
|
|
subMeshs = new List<TMP_SubMeshUI>();
|
|
foreach(TMP_SubMeshUI subMesh in textMeshProA.GetComponentsInChildren<TMP_SubMeshUI>())
|
|
{
|
|
subMeshs.Add(subMesh);
|
|
meshs.Add(subMesh.mesh);
|
|
}
|
|
foreach (TMP_SubMeshUI subMesh in textMeshProB.GetComponentsInChildren<TMP_SubMeshUI>())
|
|
{
|
|
subMeshs.Add(subMesh);
|
|
meshs.Add(subMesh.mesh);
|
|
}
|
|
}
|
|
|
|
//Position:
|
|
public override Vector3 GetPosition()
|
|
{
|
|
return myRect.anchoredPosition3D;
|
|
}
|
|
public override void SetPosition(Vector3 newPosition)
|
|
{
|
|
GetReferencesIfNecessary();
|
|
position = myRect.anchoredPosition3D = newPosition;
|
|
}
|
|
public override void SetAnchoredPosition(Transform rectParent, Vector2 anchoredPosition)
|
|
{
|
|
//Old Transform:
|
|
Vector3 oldScale = transform.localScale;
|
|
|
|
//Set Parent and Position:
|
|
GetReferencesIfNecessary();
|
|
myRect.SetParent(rectParent, false);
|
|
myRect.anchoredPosition = anchoredPosition;
|
|
|
|
//New Transform:
|
|
transform.localScale = oldScale;
|
|
transform.eulerAngles = textMeshProA.canvas.transform.eulerAngles;
|
|
}
|
|
public override void SetAnchoredPosition(Transform rectParent, Transform rectPosition, Vector2 relativeAnchoredPosition)
|
|
{
|
|
//Old Transform:
|
|
Vector3 oldScale = transform.localScale;
|
|
|
|
//Set Parent and Position:
|
|
GetReferencesIfNecessary();
|
|
myRect.SetParent(rectParent, false);
|
|
myRect.position = rectPosition.position;
|
|
myRect.anchoredPosition += relativeAnchoredPosition;
|
|
|
|
//New Transform:
|
|
transform.localScale = oldScale;
|
|
transform.eulerAngles = textMeshProA.canvas.transform.eulerAngles;
|
|
}
|
|
|
|
protected override void SetLocalPositionA(Vector3 localPosition)
|
|
{
|
|
textRectA.anchoredPosition = localPosition * 50;
|
|
}
|
|
protected override void SetLocalPositionB(Vector3 localPosition)
|
|
{
|
|
textRectB.anchoredPosition = localPosition * 50;
|
|
}
|
|
protected override float GetPositionFactor()
|
|
{
|
|
return 100f;
|
|
}
|
|
|
|
//Other:
|
|
protected override void OnFade(float currentFade)
|
|
{
|
|
textMeshProA.canvasRenderer.SetMesh(textMeshProA.mesh);
|
|
textMeshProB.canvasRenderer.SetMesh(textMeshProB.mesh);
|
|
|
|
foreach (TMP_SubMeshUI subMesh in subMeshs)
|
|
{
|
|
subMesh.canvasRenderer.SetMesh(subMesh.mesh);
|
|
}
|
|
}
|
|
protected override void UpdateRotationZ()
|
|
{
|
|
SetRotationZ(textMeshProA.transform);
|
|
SetRotationZ(textMeshProB.transform);
|
|
}
|
|
public override void CheckAndEnable3D()
|
|
{
|
|
enable3DGame = false;
|
|
}
|
|
public override bool IsMesh()
|
|
{
|
|
return false;
|
|
}
|
|
public override Vector3 GetUpVector()
|
|
{
|
|
return Vector3.up;
|
|
}
|
|
public override Vector3 GetRightVector()
|
|
{
|
|
return Vector3.right;
|
|
}
|
|
public override Vector3 GetFreshUpVector()
|
|
{
|
|
return Vector3.up;
|
|
}
|
|
public override Vector3 GetFreshRightVector()
|
|
{
|
|
return Vector3.right;
|
|
}
|
|
}
|
|
}
|