You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.2 KiB
C#
56 lines
1.2 KiB
C#
using Fusion;
|
|
using UnityEngine;
|
|
|
|
namespace Projectiles
|
|
{
|
|
/// <summary>
|
|
/// Weapon component that processes player input and is responsible for controlling weapon cadence.
|
|
/// </summary>
|
|
public class WeaponTrigger : WeaponComponent
|
|
{
|
|
// PRIVATE MEMBERS
|
|
|
|
[SerializeField]
|
|
private int _cadence = 600;
|
|
[SerializeField]
|
|
private EInputButton _fireButton = EInputButton.Fire;
|
|
[SerializeField]
|
|
private bool _fireOnKeyDownOnly;
|
|
|
|
[Networked]
|
|
private TickTimer _fireCooldown { get; set; }
|
|
|
|
private int _fireTicks;
|
|
|
|
// WeaponComponent INTERFACE
|
|
|
|
public override bool IsBusy => _fireCooldown.ExpiredOrNotRunning(Runner) == false;
|
|
|
|
public override bool CanFire()
|
|
{
|
|
if (Weapon.IsBusy() == true)
|
|
return false;
|
|
|
|
if (_fireCooldown.ExpiredOrNotRunning(Runner) == false)
|
|
return false;
|
|
|
|
return _fireOnKeyDownOnly == true ? PressedButtons.IsSet(_fireButton) : Buttons.IsSet(_fireButton);
|
|
}
|
|
|
|
public override void Fire()
|
|
{
|
|
_fireCooldown = TickTimer.CreateFromTicks(Runner, _fireTicks);
|
|
}
|
|
|
|
// NetworkBehaviour INTERFACE
|
|
|
|
public override void Spawned()
|
|
{
|
|
base.Spawned();
|
|
|
|
float fireTime = 60f / _cadence;
|
|
_fireTicks = (int)System.Math.Ceiling(fireTime / (double)Runner.DeltaTime);
|
|
}
|
|
}
|
|
}
|