ProjetAMJV_CR/Assets/Scripts/UnitScripts/Attacks/ArrowHandler.cs

54 lines
1.5 KiB
C#

using Unity.VisualScripting;
using UnityEngine;
/// <summary>
/// Should be attached to the Arrow, not the skeleton
/// </summary>
[RequireComponent(typeof(Rigidbody))]
public class ArrowHandler : MonoBehaviour
{
[SerializeField] private float baseDamage;
[SerializeField] private float baseKnockback;
private Rigidbody _rigidBody;
private bool _fromTeamA;
void Awake()
{
_rigidBody = GetComponent<Rigidbody>();
}
void Start()
{
// Destroy after 8s, in all case
Destroy(this.gameObject, 8.0f);
}
void Update()
{
// Align with speed
if (_rigidBody.linearVelocity.magnitude >= 1f) transform.forward = _rigidBody.linearVelocity.normalized;
}
public void LaunchArrow(Vector3 baseSpeed, bool fromTeamA)
{
_rigidBody.linearVelocity = baseSpeed;
_fromTeamA = fromTeamA;
}
void OnCollisionEnter(Collision collision)
{
// Can be optimized with tags, but it add dependance beetween teams
if (collision.gameObject.TryGetComponent<AbstractUnit>(out AbstractUnit unit))
{
if (unit is MinecraftUnit && unit.IsTeamA != _fromTeamA) // No friendly fire
{
MinecraftUnit minecraftUnit = unit as MinecraftUnit;
Vector3 knockback = _rigidBody.linearVelocity * baseKnockback;
minecraftUnit.StartCoroutine(minecraftUnit.MovementHandler.TakeImpulse(knockback));
}
unit.TakeDamage(baseDamage);
}
Destroy(this.gameObject);
}
}