| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- 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<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;
- }
- 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<RectTransform>();
- 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;
- }
- }
- }
|