how to check all elements in array
Hi i have an array of gameobjects (they are actually buttons). I want to check when ALL of these buttons are disabled (SetActive(false));
public void CheckCondition(int amount)
{
if (shipMax[amount] <= 0)
{
buttons[amount].SetActive(false);
}
else if (shipMax[amount] > 0)
{
buttons[amount].SetActive(true);
}
}
This is how they get disabled. Each button handles an int and when this int is 0 the button gets disabled.
I looked up here and there seemed to be many answers already to this problem so i tried this out:
void StartGame()
{
for(int i = 0; i < buttons.Length; i++)
{
if(buttons[i].activeSelf == false)
{
Debug.Log("ready");
break;
}
}
}
I have this foreach loop running in Update(). However whenever just ONE of the elements inside the array gets disabled it already prints "ready". Its supposed to print "ready" when all of the elements in the arra are disabled.
Is it that im running in Update()? Do i need to call this loop somewhere else? Did i write something wrong?
Thanks
If you only want to print "ready" when all buttons are disabled, do it like this:
int disabledCounter = 0;
for(int i = 0; i < buttons.Length; i++)
{
if(buttons[i].activeSelf == false)
{
disabledCounter ++;
}
}
if(disabledCounter == buttons.Length - 1) {
Debug.Log("ready");
}
the "ready" was mostly a test to see if it works. Your example helped so that the "ready" was not spammed atleast in the console because of update().
However the problem still persists. I disabled the first button and ready was printed once. But i have 3 more buttons still that are active in the array. It seems as long as i disable one button (doesnt matter which one): ready will be called.
Dont know whats going on lol
Answer by jgodfrey · Apr 23, 2016 at 05:31 PM
Something like this should work:
bool allDisabled = true;
for(int i = 0; i < buttons.Length; i++)
{
if (buttons[i].activeSelf) { allDisabled = false; break; }
}
if (allDisabled) { Debug.Log("ready"); }
ready gets written directly since allDisabled is true from the very start.
Ummm... No. Did you even try this code?
It does this:
Sets allDisabled to true at the start
Loops through each item. As soon as it finds one that is active, it sets allDisabled=false and exits the loop.
If it doesn't find one that is active, then it exits the loop with allDisabled=true.
So, by the time it gets to the last "if", allDisabled will be set appropriately.
Answer by mohit415 · Dec 14, 2016 at 09:53 PM
for future reference:
bool allDisabled = true;
for(int i = 0; i < buttons.Length; i++)
{
if (buttons[i].activeSelf) {
allDisabled = false;
break;
}
else {
allDisabled = true;
}
}
if (allDisabled) {
Debug.Log("ready");
}