/// <summary> /// Generates the organizations for the indicated root territory. All territories /// capable of sustaining life will be considered viable territories /// for organizations to be spawned in. /// </summary> /// <param name="rootTerritory">The root territory.</param> /// <param name="random">The random.</param> public void GenerateOrganizations(Territory rootTerritory, Random random, int count = 300) { var professions = _professionGenerator.GenerateProfessions(count).Select(p => _professionCache.Save(p)).ToArray(); var territories = rootTerritory.GetLiveableTerritories(); foreach (var company in professions.Select(p => p.Company).Distinct()) { var selectedTerritory = territories.OrderBy(_ => Guid.NewGuid()).First(); foreach (var profession in professions.Where(p => p.Company.Equals(company))) { selectedTerritory.AddProfession(profession); } } }