0
\$\begingroup\$

I made a list containing all the buttons in the UISelectionCanvas and would like to change each image as it is being selected. The problem is once the selection selects a new type of unit it will change all the buttons sprites in the list to the new selection instead of just changing the one selected.

     for a example imagine I have 10 units 9 peasants and 1 warrior

as each peasant is selected the sprite adds the peasant icon to the button. if 8 peasants are selected and then the 9th selection is a warrior it changes all 9 buttons to a warrior icon then if I selects the 10th peasant it changes them all back to peasant.

        for (int i = 0; i < buttons.Count; i++)
        {
            for (int c = 0; c < SelectedUnits.Count; c++)                
            {
                if (i <= c)
                {
                   buttons[i].SetActive(true);

                  foreach (var unit in SelectedUnits)
                 {
                   if(unit.tag == "Peasant")
                 {
                    buttons[i].transform.GetComponent<Image>().sprite = peasant as Sprite;
                 }
             else if(unit.tag == "CityGuard")
            {
               buttons[i].transform.GetComponent<Image>().sprite = warrior as Sprite;

          }
        }

      }
      else
      {
      buttons[i].gameObject.SetActive(false);
    }
 }

}

\$\endgroup\$
1
  • 1
    \$\begingroup\$ You should really clean up the indenting of the brackets around code blocks, so that you can more easily see where each code block begins and ends; right now I keep getting confused about which else statement goes with which if. \$\endgroup\$
    – jhocking
    Jan 15, 2015 at 19:24

1 Answer 1

1
\$\begingroup\$

You probably don't want to be looping through SelectedUnits (not at all, and definitely not twice!) So something like:

for (int i = 0; i < buttons.Count; i++) {
  if (i < SelectedUnits.Count) {
    buttons[i].SetActive(true);
    var unit = SelectedUnits[i];

    if(unit.tag == "Peasant") {
      buttons[i].GetComponent<Image>().sprite = peasant as Sprite;
    }
    else if(unit.tag == "CityGuard") {
      buttons[i].GetComponent<Image>().sprite = warrior as Sprite;
    }
  }
  else {
    buttons[i].SetActive(false);
  }
}
\$\endgroup\$
1
  • \$\begingroup\$ Awesome jhocking thanks I am not sure how I let that piece get so out of hand it works perfectly. \$\endgroup\$ Jan 15, 2015 at 19:58

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .