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:// discordcom/invite/nWbRkN8Zxr * * Check the manual for more information. * Manual: https:// ekincantascom/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 InternalOnPreSpawn() { // Fixes an issue where the previous mesh was visible for 1 frame if (textMeshProA != null) { textMeshProA.enabled = textMeshProB.enabled = false; } } protected override void InternalOnSpawn() { // 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 InternalUpdate(float deltaTime) { // GUI Alpha Fix skippedFrames++; } /* * 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 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(); transformA = transform.Find("TMPA"); transformB = transform.Find("TMPB"); textMeshProA = transformA.GetComponent(); textMeshProB = transformB.GetComponent(); textRectA = transformA.GetComponent(); textRectB = transformB.GetComponent(); } 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(); meshs.Add(textMeshProA.mesh); meshs.Add(textMeshProB.mesh); // Sub Meshs subMeshs = new List(); foreach(TMP_SubMeshUI subMesh in textMeshProA.GetComponentsInChildren()) { subMeshs.Add(subMesh); meshs.Add(subMesh.mesh); } foreach (TMP_SubMeshUI subMesh in textMeshProB.GetComponentsInChildren()) { 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; } protected override void SetFinalPosition(Vector3 newPosition) { GetReferencesIfNecessary(); 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.anchoredPosition3D = 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 Vector3 GetOtherPosition(Transform target) { RectTransform targetRectTransform = followedTarget.GetComponent(); return targetRectTransform != null ? targetRectTransform.anchoredPosition3D : target.position; } 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 InternalUpdateFade(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; } } }