using UnityEngine; namespace Reset.Units{ public interface ILockOnTarget{ public float lockonTargetRadius{ set; get; } public bool lockonDebug{ set; get; } public float lockonRaycastVerticalOffset{ set; get; } Transform transform{ get; } GameObject gameObject{ get; } abstract void OnTargetDelete(); void Help(){ SafelyDeleteTarget(); } public Vector3 GetReticlePosition(){ float upValue = 0f; if (gameObject.GetComponent()) { Bounds objectBounds = gameObject.GetComponent().bounds; upValue = objectBounds.size.y; upValue = 4f; } Vector3 reticlePosition = new Vector3(transform.position.x, transform.position.y + upValue, transform.position.z); return reticlePosition; } public void SafelyDeleteTarget(){ // gameObject. foreach (LockOnManager.ActiveLockOnTarget target in LockOnManager.Instance.activeTargets) { if (target.gameObject == this.gameObject) { GameObject clone = new GameObject { name = $"Target Clone of {gameObject.name}", transform = { position = transform.position } }; target.gameObject = clone; target.cinemachineTarget.Object = clone.transform; LockOnManager.Instance.QueueTargetRemoval(clone, true); } } } } }