GameDev.CoreSystems/Scripts/Weapon.cs

64 lines
2.0 KiB
C#

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 int Damage { get; set; }
[field: Header("State")]
[field: SerializeField] public bool FireWeapon { get; set; }
[field: SerializeField] private float _timeUntilFire;
[field: Header("Stats")]
[field: SerializeField] public int NumberOfKills { get; set; }
[field: SerializeField] public int DamageDealt { get; set; }
private void Update()
{
if (FireWeapon)
{
_timeUntilFire -= Time.deltaTime;
var reloading = _timeUntilFire > 0;
if (reloading) return;
var position = BarrelEndPoint.position;
var forward = BarrelEndPoint.forward;
var ray = new Ray(position, forward);
if (Physics.Raycast(ray, out RaycastHit hitInfo))
{
if (hitInfo.transform.TryGetComponent(out Targetable target))
{
Debug.DrawRay(position, forward * Vector3.Distance(position, target.GetCenterPosition()),
Color.red, 0.1f);
target.Damageable.ModifyHealth(-Damage, gameObject);
}
}
_timeUntilFire = FireRate;
}
else
{
_timeUntilFire = 0;
}
}
public void IncrementDamageDealt(int damage)
{
DamageDealt += damage;
}
public void IncrementKillCount()
{
NumberOfKills += 1;
}
}
}