So, I am trying to implement a reload system into my game, and it works very well, except for one thing. When the gun is finished reloading, it stays at full capacity for as long as it’s reload time!
My code:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class gunShoot : MonoBehaviour
{
public GameObject bullet;
public GameObject muzFlash;
public Transform bulletStart;
public bulletProp bProp;
public float reloadLeft;
public int shotsFired;
public bool ready;
public ParticleSystem muzSystem;
public TMP_Text shotText;
// Start is called before the first frame update
void Start()
{
shotsFired = 0;
bProp = bullet.GetComponent();
muzFlash = bulletStart.Find(“muzFlash”).gameObject;
muzSystem = muzFlash.GetComponent();
shotText = GameObject.Find(“shotsLeft”).GetComponent<TMP_Text>();
}
// Update is called once per frame
void Update()
{
int shotsRemaining = bProp.maxShots - shotsFired;
string shotsLeftText = shotsRemaining.ToString();
shotText.SetText(shotsLeftText);
if(reloadLeft < 0f)
{
ready = true;
} else
{
ready = false;
reloadLeft -= Time.deltaTime;
}
if(shotsFired >= bProp.maxShots)
{
IEnumerator reloadCoro = Reload(bProp.restockTime);
StartCoroutine(reloadCoro);
}
switch (bProp.semiAuto)
{
case false:
if (Input.GetMouseButton(0) && shotsFired < bProp.maxShots)
{
Shoot();
}
break;
case true:
if (Input.GetMouseButtonDown(0) && shotsFired < bProp.maxShots)
{
Shoot();
}
break;
}
}
void Shoot()
{
if(ready == true)
{
for (int i = 0; i < bProp.bulletCount; i++)
{
GameObject bulletInstance = Instantiate(bullet, bulletStart.position, bulletStart.rotation);
Rigidbody2D bulletRb = bulletInstance.GetComponent<Rigidbody2D>();
bulletInstance.transform.Rotate(0, 0, Random.Range(-bProp.spread, bProp.spread));
bulletRb.AddForce(bProp.bulletSpeed * bulletInstance.transform.up * Time.deltaTime);
shotsFired++;
}
muzSystem.Play();
reloadLeft = bProp.reloadSpeed;
}
}
IEnumerator Reload(float waitTime)
{
yield return new WaitForSeconds(waitTime);
shotsFired -= bProp.maxShots;
}
}