44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			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);
 | |
| 		}
 | |
| 	}
 | |
| }
 |