- Home /
How do you make a script loop until it finds a child with a certain bool value? (C#)
I am trying to create an inventory system where 'if a display gun is in a slot then the real gun will be able to be used by the player'. In my weapon switching script I want to make it so if I try to switch my weapon it will skip to the next weapon that is in the display slot. (It's confusing, I know, I'm just a beginner and am trying to test things out). The way I attempted to do that is by detecting whether or not the next real gun has a bool enabled or not. I want the script to read through all of its children, (all the real possible guns the player can select), and see which ones have the bool enabled/disabled. If the player wants to switch weapons, I want to skip all the weapons that have the bool disabled and skip straight to the next one to have the bool enabled. Any help will be very much appreciated! C#
This is the weapon switching script:
using UnityEngine;
public class WeaponSwitching : MonoBehaviour
{
public int selectedWeapon = 0;
public Transform nextGun;
public Transform currentGun;
public Transform previousGun;
public int gunValue;
public int preGunValue;
void Start()
{
SelectWeapon();
}
void Update()
{
int previousSelectedWeapon = selectedWeapon;
/* I tried doing it here where it will detect if the next or previous weapon has the bool enabled, and if it does it will skip to the gun after that, but I eventually deemed it ineffective.
gunValue = selectedWeapon + 1;
preGunValue = selectedWeapon - 1;
if (selectedWeapon >= transform.childCount - 1)
{
gunValue = 0;
}
if (preGunValue == -1)
{
preGunValue = 3;
}
nextGun = transform.GetChild(gunValue);
currentGun = transform.GetChild(selectedWeapon);
previousGun = transform.GetChild(preGunValue);
// ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
if (Input.GetAxis("Mouse ScrollWheel") < 0f)
{
if (Weapon.isReloading == false)
{
if (PauseMenu.GameIsPaused == false)
{
if (selectedWeapon >= transform.childCount - 1)
{
selectedWeapon = 0;
}
else
{
selectedWeapon++;
}
}
}
}
if (Input.GetAxis("Mouse ScrollWheel") > 0f)
{
if (Weapon.isReloading == false)
{
if (PauseMenu.GameIsPaused == false)
{
if (selectedWeapon <= 0)
{
selectedWeapon = transform.childCount - 1;
}
else
{
selectedWeapon--;
}
}
}
}
if (previousSelectedWeapon != selectedWeapon)
{
SelectWeapon();
}
}
void SelectWeapon()
{
int i = 0;
foreach (Transform weapon in transform)
{
if (i == selectedWeapon)
{
if (weapon.gameObject.GetComponent<Weapon>().displayGunTouchingSlot == true)
{
weapon.gameObject.SetActive(true);
}
}
else
{
weapon.gameObject.SetActive(false);
}
i++;
}
}
}