75 lines
2.3 KiB
C#
75 lines
2.3 KiB
C#
using System;
|
|
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 Vector3 _start;
|
|
private Vector3 _direction;
|
|
// private bool drawGizmo;
|
|
// private Vector3 start;
|
|
// private Vector3 end;
|
|
//
|
|
// private void OnEnable()
|
|
// {
|
|
// start = BarrelEndPoint.position;
|
|
// end = BarrelEndPoint.position;
|
|
// }
|
|
//
|
|
// private void OnDrawGizmos()
|
|
// {
|
|
// if (drawGizmo)
|
|
// {
|
|
// Gizmos.DrawLine(start, end);
|
|
// }
|
|
// }
|
|
|
|
private void Update()
|
|
{
|
|
if (FireWeapon)
|
|
{
|
|
// drawGizmo = true;
|
|
// start = BarrelEndPoint.position;
|
|
// end = start + Vector3.forward * 5;
|
|
_timeUntilFire -= Time.deltaTime;
|
|
|
|
if (!(_timeUntilFire <= 0)) return;
|
|
|
|
// _start = BarrelEndPoint.position;
|
|
//_direction = BarrelEndPoint.forward;
|
|
|
|
var ray = new Ray(BarrelEndPoint.position, BarrelEndPoint.forward);
|
|
Debug.DrawRay(BarrelEndPoint.position, BarrelEndPoint.forward * 10, Color.green);
|
|
|
|
if (Physics.Raycast(ray, out RaycastHit hitInfo))
|
|
{
|
|
if (hitInfo.transform.TryGetComponent(out Targetable target))
|
|
{
|
|
print("pew");
|
|
target.Damageable.ModifyHealth(Mathf.RoundToInt(-Damage));
|
|
}
|
|
}
|
|
|
|
_timeUntilFire = FireRate;
|
|
}
|
|
else
|
|
{
|
|
// drawGizmo = false;
|
|
_timeUntilFire = 0;
|
|
}
|
|
}
|
|
}
|
|
} |