using UnityEngine; namespace Invector { [System.Serializable] public class OnReceiveDamage : UnityEngine.Events.UnityEvent { } public interface vIDamageReceiver { OnReceiveDamage onStartReceiveDamage { get; } OnReceiveDamage onReceiveDamage { get; } Transform transform { get; } GameObject gameObject { get; } void TakeDamage(vDamage damage); } public static class vDamageHelper { /// /// Apply damage to gameObject if /// /// /// public static void ApplyDamage(this GameObject receiver, vDamage damage) { var receivers = receiver.GetComponents(); if (receivers != null) for (int i = 0; i < receivers.Length; i++) receivers[i].TakeDamage(damage); } /// /// check if gameObject can receive the damage /// /// /// return true if gameObject contains a public static bool CanReceiveDamage(this GameObject receiver) { return receiver.GetComponent() != null; } /// /// Get Angle between transform position and hit point /// /// /// /// /// public static float HitAngle(this Transform transform, Vector3 hitpoint, bool normalized = true) { var localTarget = transform.InverseTransformPoint(hitpoint); var _angle = (int)(Mathf.Atan2(localTarget.x, localTarget.z) * Mathf.Rad2Deg); if (!normalized) return _angle; if (_angle <= 45 && _angle >= -45) _angle = 0; else if (_angle > 45 && _angle < 135) _angle = 90; else if (_angle >= 135 || _angle <= -135) _angle = 180; else if (_angle < -45 && _angle > -135) _angle = -90; return _angle; } } }