- Home /
Issue with a Bool and Pause Menu
Hey all,
I'm having a tricky issue here that I got myself into, and I've been trying to wrap my head around it for hours, but feel like I've given myself tunnel vision now, so I could use some fresh eyes. Here's my code:
https://wtools.io/paste-code/b2R8
Basically, I have a setup where my weapon uses a bool to check if it can shoot or not, and I run a coroutine in between shots to give it a "shotgun" feel. When I implemented a pause menu, I had to try and disable my shooting during pause. Problem is, I put the canShoot bool = true (if not paused) in update. So either my shotgun now fires for every click (because it's always true) OR it doesnt fire at all after pausing. I feel like there is either an easy fix or I have to really re do this system. Any ideas?
Answer by sacredgeometry · Dec 09, 2020 at 09:40 PM
Try this:
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class Shotgun : MonoBehaviour
 {
     public float ReloadTime = 2.5f;
 
     public int Bullets = 9;
 
     public bool IsReloading = false;
     
     private bool _isPaused = false;
 
     private bool _hasBullets => Bullets > 0;
 
     void Update()
     {
         HandleShooting();
         HandleReloading();
 
         // NOTE THE PAUSE LOGIC SHOULDNT GO HERE THIS IS JUST FOR TESTING
         if(Input.GetKeyDown(KeyCode.P))
         {
             _isPaused = !_isPaused;
             Debug.Log(_isPaused ? "Paused" : "Unpaused");
             Time.timeScale = _isPaused ? 0 : 1;
         }
     }
 
     private void HandleShooting()
     {
         if(Input.GetKeyDown(KeyCode.Space) && _hasBullets && !IsReloading)
         {
             Debug.Log("BANG!!");
             Bullets--;
         }
     }
 
     private void HandleReloading()
     {
         if(Input.GetKeyDown(KeyCode.R) && !IsReloading)
         {
             StartCoroutine(Reload());
         }
     }
 
     IEnumerator Reload()
     {
         Debug.Log("Reloading!");
 
         IsReloading = true;
         yield return new WaitForSeconds(ReloadTime);
         Bullets = 9;
         IsReloading = false;
 
         Debug.Log("Reloaded!");
     }
 }
 
Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
               
 
			 
                