protected void BuildUnitTree(UnitTreeView unitTreeView, Unit chapterRoot, Dictionary <int, PlayerSoldier> soldierMap, Dictionary <int, Squad> squadMap) { unitTreeView.ClearTree(); if (chapterRoot.HQSquad != null) { unitTreeView.AddLeafSquad(chapterRoot.HQSquad.Id, chapterRoot.HQSquad.Name, DetermineDisplayColor(chapterRoot.HQSquad, soldierMap)); squadMap[chapterRoot.HQSquad.Id] = chapterRoot.HQSquad; } foreach (Squad squad in chapterRoot.Squads) { squadMap[squad.Id] = squad; unitTreeView.AddLeafSquad(squad.Id, squad.Name, DetermineDisplayColor(squad, soldierMap)); } foreach (Unit company in chapterRoot.ChildUnits) { squadMap[company.HQSquad.Id] = company.HQSquad; if (company.Squads?.Count == 0) { // this is unexpected, currently Debug.Log("We have a company with no squads?"); unitTreeView.AddLeafSquad(company.HQSquad.Id, company.HQSquad.Name, DetermineDisplayColor(company.HQSquad, soldierMap)); } else { List <Tuple <int, string, Color, int> > squadList = new List <Tuple <int, string, Color, int> >(); //squadList.Add(new Tuple<int, string>(company.Id + 1000, company.Name + " HQ Squad")); //_squadMap[company.Id + 1000] = company; foreach (Squad squad in company.Squads) { squadList.Add(new Tuple <int, string, Color, int>(squad.Id, squad.Name, DetermineDisplayColor(squad, soldierMap), -1)); squadMap[squad.Id] = squad; } unitTreeView.AddTreeUnit(company.Id, company.Name, DetermineDisplayColor(company.HQSquad, soldierMap), -1, squadList); } } }