private void WorldModelOnOnNewlyInfectedNode(Coordinates coordinates) { // If a random number is less than DISPATCH_FREQUENCY, and there are yet-unassigned ORTs, // send one there by air. Don't want all governments instantly sending their ORTs to the first // ten or fifteen infected nodes, do we? Wouldn't look right. if (s_dispatchDecider.NextDouble() < DISPATCH_FREQUENCY) { OutbreakResponseTeam nextUp = ResponseTeams.FirstOrDefault(n => n.StandingBy); //if ( nextUp != null ) console.WriteLine($"{SimCountryData.Name} is sending {nextUp} to {coordinates}."); nextUp?.SetDestinationAndSpeed(coordinates, OutbreakResponseTeam.AIRCRAFT_MOVE_SPEED); } //else //{ // console.WriteLine($"{SimCountryData.Name} will not respond to infection at {coordinates}."); //} }
private void CreateAndAssignGovernments() { m_allORTs = new List<OutbreakResponseTeam>(); ILineWriter console = Locator.Resolve<ILineWriter>("console"); Dictionary<string, List<Coordinates>> nodeToCountryMapping = new Dictionary<string, List<Coordinates>>(); for (int x = 0; x < m_mapData.Width; x++) { for (int y = 0; y < m_mapData.Height; y++) { DiseaseNode dn = m_nodes[x, y]; string cc = dn.MapCell.CountryCode; if (cc != null && !"--".Equals(cc)) { List<Coordinates> diseaseNodeCoordinates; if (!nodeToCountryMapping.TryGetValue(cc, out diseaseNodeCoordinates)) { diseaseNodeCoordinates = new List<Coordinates>(); nodeToCountryMapping.Add(cc, diseaseNodeCoordinates); } diseaseNodeCoordinates.Add(new Coordinates {X = x, Y = y}); } } } Dictionary<string, NationalGovernment> govts = new Dictionary<string, NationalGovernment>(); for (int x = 0; x < m_mapData.Width; x++) { for (int y = 0; y < m_mapData.Height; y++) { DiseaseNode dn = m_nodes[x, y]; string countryCode = dn.MapCell.CountryCode; if ("--".Equals(countryCode)) continue; if (countryCode == null) continue; if (!m_countryDataByCountryCodes.ContainsKey(countryCode)) { //console.WriteLine($"No country data for country code \"{countryCode}\"."); continue; } SimCountryData simCountryData = m_countryDataByCountryCodes[countryCode]; if (nodeToCountryMapping.ContainsKey(dn.MapCell.CountryCode)) { if (!govts.ContainsKey(countryCode)) { NationalGovernment ng = new NationalGovernment(this) { WorldModel = this, SimCountryData = m_countryDataByCountryCodes[countryCode], DiseaseNodeCoordinates = nodeToCountryMapping[countryCode] }; if (m_ortCounts.ContainsKey(simCountryData.CountryCode)) { var ortCount = m_ortCounts[simCountryData.CountryCode]; int numberOfResponseTeams = ortCount.Item1; for (int i = 0; i < numberOfResponseTeams; i++) { int randomDiseaseNode = m_random.Next(0, ng.DiseaseNodeCoordinates.Count - 1); Coordinates initialCoordinates = ng.DiseaseNodeCoordinates[randomDiseaseNode]; OutbreakResponseTeam ort = new OutbreakResponseTeam(simCountryData.CountryCode, i, ortCount.Item2, this, initialCoordinates); ng.ResponseTeams.Add(ort); simCountryData.ResponseTeams.Add(ort); m_allORTs.Add(ort); } } simCountryData.Government = ng; govts.Add(countryCode, ng); ng.UpdateDiseaseNodes(true); } } else { console.WriteLine($"Could not find a list of nodes for country code {simCountryData.CountryCode}"); } } } m_governments.AddRange(govts.Values); }