ZeroVR/ZeroPacientVR/Assets/HurricaneVR/Framework/Scripts/Weapons/HVRAssaultRifle.cs

151 lines
3.6 KiB
C#

using UnityEngine;
namespace HurricaneVR.Framework.Weapons
{
public class HVRAssaultRifle : HVRRayCastGun
{
[Header("Assault Rifle Components")]
public HVRChargingHandle ChargingHandle;
public Animator Animator;
public ParticleSystem CasingSystem;
public ParticleSystem BulletEjectSystem;
public HVRBolt Bolt;
public GameObject ChamberedRound;
public GameObject ChamberedCasing;
protected override void Start()
{
base.Start();
if (!Animator)
{
Animator = GetComponent<Animator>();
}
ChargingHandle.FullRelease.AddListener(OnChargingHandleReleased);
ChargingHandle.EjectReached.AddListener(OnChargingHandlePulledBack);
Bolt.BoltForward.AddListener(OnBoltForward);
}
private void OnChargingHandlePulledBack()
{
EjectBullet();
}
private void OnBoltForward()
{
GunSounds?.PlaySlideForward();
ChamberRound();
if (IsBulletChambered)
{
EnableChamberedRound();
}
}
private void OnChargingHandleReleased()
{
GunSounds?.PlaySlideForward();
ChamberRound();
if (Bolt)
{
Bolt.IsPushedBack = false;
}
if (IsBulletChambered)
{
EnableChamberedRound();
}
}
protected override void AfterFired()
{
base.AfterFired();
if (RequiresChamberedBullet)
{
DisableChamberedRound();
if (OutOfAmmo)
{
if (Animator)
{
Animator.enabled = false;
}
Bolt.PushBack();
EjectCasing();
}
}
if (!OutOfAmmo && Animator)
{
Animator.enabled = true;
Animator.SetTrigger("Fire");
EnableChamberedCasing();
}
}
//call from animation
public void DisableFireAnimator()
{
Animator.enabled = false;
}
protected virtual void EnableChamberedCasing()
{
if (ChamberedCasing)
{
ChamberedCasing.SetActive(true);
}
}
protected virtual void DisableChamberedCasing()
{
if (ChamberedCasing)
{
ChamberedCasing.SetActive(false);
}
}
protected virtual void DisableChamberedRound()
{
if (ChamberedRound)
{
ChamberedRound.SetActive(false);
}
}
//call from animation
protected virtual void EnableChamberedRound()
{
if (ChamberedRound)
{
ChamberedRound.SetActive(true);
}
}
public override void EjectBullet()
{
if (IsBulletChambered)
{
IsBulletChambered = false;
DisableChamberedRound();
if (BulletEjectSystem)
{
BulletEjectSystem.Emit(1);
}
}
}
public override void EjectCasing()
{
DisableChamberedCasing();
if (CasingSystem)
{
CasingSystem.Emit(1);
}
}
}
}