2025-09-24 11:24:38 +05:00

44 lines
1.3 KiB
C#

using UnityEngine;
namespace TPSBR
{
public class ProjectileWeapon : FirearmWeapon
{
// PRIVATE MEMBERS
[Header("Projectile")]
[SerializeField]
private Projectile _projectile;
[SerializeField]
private float _projectileSpeed = 100f;
[SerializeField]
private GameObject _dummyLoadedProjectile;
// FirearmWeapon INTERFACE
protected override bool FireProjectile(Vector3 firePosition, Vector3 targetPosition, Vector3 direction, float distanceToTarget, LayerMask hitMask, bool isFirst)
{
// Spawning of new network object for projectiles is fine here because we use it only for slow low cadence projectiles (grenades, arrows).
// If you plan to have kinematic projectiles for rifles etc. you should consider using projectile data buffer similar to the one in HitscanWeapon.
if (HasStateAuthority == false)
return false;
var projectile = Runner.Spawn(_projectile, firePosition, Quaternion.LookRotation(direction), Object.InputAuthority);
if (projectile == null)
return false;
projectile.Fire(Owner, firePosition, direction * _projectileSpeed, hitMask, HitType);
return true;
}
public override void Render()
{
base.Render();
_dummyLoadedProjectile.SetActiveSafe(IsReloading == false && MagazineAmmo > 0);
}
}
}