using UnityEngine; namespace GameDev.CoreSystems { public class Weapon : MonoBehaviour, IWeapon { [field: Header("RigConnections")] [field: SerializeField] public Transform PivotPoint { get; private set; } [field: SerializeField] public Transform BarrelEndPoint { get; private set; } [field: Header("Config")] [field: SerializeField] public float FireRate { get; set; } [field: SerializeField] public float Damage { get; set; } [field: Header("State")] [field: SerializeField] public bool FireWeapon { get; set; } [field: SerializeField] private float _timeUntilFire; private void Update() { if (FireWeapon) { _timeUntilFire -= Time.deltaTime; if (!(_timeUntilFire <= 0)) return; var position = BarrelEndPoint.position; var forward = BarrelEndPoint.forward; var ray = new Ray(position, forward); Debug.DrawRay(position, forward * 10, Color.green); if (Physics.Raycast(ray, out RaycastHit hitInfo)) { if (hitInfo.transform.TryGetComponent(out Targetable target)) { target.Damageable.ModifyHealth(Mathf.RoundToInt(-Damage)); } } _timeUntilFire = FireRate; } else { _timeUntilFire = 0; } } } }