protected override void onStart() { // Récupération des stats du virus virusStats = countrySimData.GetComponent <VirusStats>(); // Récupération des données de la population countryPopData = countrySimData.GetComponent <TerritoryData>(); // Récupération de l'échelle de temps time = countrySimData.GetComponent <TimeScale>(); // calcul de la courbe de mortalité pour une fenêtre de jours deadlinessPerDays = new float[virusStats.windowSize]; float peak = virusStats.deadlinessPeak; float deviation = virusStats.deadlinessDeviation; for (int i = 0; i < deadlinessPerDays.Length; i++) { deadlinessPerDays[i] = (1 / (deviation * Mathf.Sqrt(2 * Mathf.PI))) * Mathf.Exp(-((i - peak) * (i - peak)) / (2 * deviation * deviation)); } // Calcul de la mortalité en fonction de l'age deadlinessPerAges = new float[101]; // Calcul de la valeur de l'exponentielle pour le premier age à partir duquel des morts peuvent arriver float minAgeExpo = Mathf.Exp(virusStats.curveStrenght * ((float)virusStats.firstSensitiveAge / 100 - 1)); // Calcul de la valeur maximale de l'exponentielle pour l'age le plus avancé float maxExpo = 1 - minAgeExpo; // lissage de la mortalité pour quelle soit à 0 au premier age sensible et à sa valeur maximale pour l'age le plus avancé for (int age = 0; age < deadlinessPerAges.Length; age++) { deadlinessPerAges[age] = Mathf.Max(0f, (Mathf.Exp(virusStats.curveStrenght * ((float)age / 100 - 1)) - minAgeExpo) / maxExpo); } }
protected override void onStart() { // Récupération de l'échelle de temps time = countrySimData.GetComponent <TimeScale>(); // Récupération des stats du virus virusStats = countrySimData.GetComponent <VirusStats>(); }
static void Main(string[] args) { SortedDictionary <string, VirusStats> immuneMemory = new SortedDictionary <string, VirusStats>(); int immuneHealth = int.Parse(Console.ReadLine()); int initialHealth = immuneHealth; while (true) { string virusName = Console.ReadLine(); if (virusName == "end") { break; } if (!immuneMemory.ContainsKey(virusName)) { immuneMemory[virusName] = new VirusStats(virusName); Console.WriteLine($"Virus {virusName}: {immuneMemory[virusName].virusStrength} => {immuneMemory[virusName].timeToDefeat} seconds"); immuneHealth -= immuneMemory[virusName].timeToDefeat; if (immuneHealth > 0) { Console.WriteLine($"{virusName} defeated in {SecondsToString(immuneMemory[virusName].timeToDefeat)}."); Console.WriteLine($"Remaining health: {immuneHealth}"); } else { Console.WriteLine("Immune System Defeated."); break; } } else { Console.WriteLine($"Virus {virusName}: {immuneMemory[virusName].virusStrength} => {immuneMemory[virusName].timeToDefeat/3} seconds"); immuneHealth -= (immuneMemory[virusName].timeToDefeat / 3); if (immuneHealth > 0) { Console.WriteLine($"{virusName} defeated in {SecondsToString(immuneMemory[virusName].timeToDefeat/3)}."); Console.WriteLine($"Remaining health: {immuneHealth}"); } else { Console.WriteLine("Immune System Defeated."); break; } } immuneHealth += (int)(immuneHealth * 0.2); if (immuneHealth > initialHealth) { immuneHealth = initialHealth; } } if (immuneHealth > 0) { Console.WriteLine($"Final Health: {immuneHealth}"); } }
void Start() { t = GetComponent <RectTransform> (); slide = GetComponent <Slider> (); virus = GameObject.Find("virus (" + gameObject.name.Replace("hpvirus", "") + ")").GetComponent <VirusStats>(); virusMaxHp = virus.maxHp; lasthp = virusMaxHp; fill = GameObject.Find(gameObject.name + "/Fill Area/Fill").GetComponent <Image> (); StartCoroutine(hideHpBar()); }
protected override void onStart() { // Récupération de l'échelle de temps time = countrySimData.GetComponent <TimeScale>(); // Récupération des stats du virus virusStats = countrySimData.GetComponent <VirusStats>(); // Récupération des données du vaccin vaccine = countrySimData.GetComponent <Vaccine>(); // Récupération des finances finances = countrySimData.GetComponent <Finances>(); // Récupération de données de la frontière frontierPermeability = countrySimData.GetComponent <FrontierPermeability>(); // Récupération du stress de la population revolution = countrySimData.GetComponent <Revolution>(); // Récupération des données de la population countryPopData = countrySimData.GetComponent <TerritoryData>(); }
// Start is called before the first frame update void Awake() { GameObject customizedVirus = GameObject.Find("CustomizedVirus"); if (customizedVirus) { VirusStats localVirus = GetComponent <VirusStats>(); VirusStats newVirus = customizedVirus.GetComponent <VirusStats>(); localVirus.contagiosity = newVirus.contagiosity; localVirus.populationRatioImmunity = newVirus.populationRatioImmunity; localVirus.windowSize = newVirus.windowSize; localVirus.contagiousnessPeak = newVirus.contagiousnessPeak; localVirus.contagiousnessDeviation = newVirus.contagiousnessDeviation; localVirus.deadlinessPeak = newVirus.deadlinessPeak; localVirus.deadlinessDeviation = newVirus.deadlinessDeviation; localVirus.firstSensitiveAge = newVirus.firstSensitiveAge; localVirus.maxDeadlinessRatio = newVirus.maxDeadlinessRatio; localVirus.curveStrenght = newVirus.curveStrenght; localVirus.seriousRatio = newVirus.seriousRatio; } }
// Use this for initialization void Start() { stats = GetComponentInParent <VirusStats> (); }
protected override void onStart() { // Récupération des stats du virus virusStats = countrySimData.GetComponent <VirusStats>(); // Récupération des données de la population countryPopData = countrySimData.GetComponent <TerritoryData>(); // Récupération de l'échelle de temps time = countrySimData.GetComponent <TimeScale>(); // Récupération des masques masks = countrySimData.GetComponent <Masks>(); // Récupération de l'impact du confinement confinementImpact = countrySimData.GetComponent <InfectionImpact>(); // Récupération de données de la frontière frontierPermeability = countrySimData.GetComponent <FrontierPermeability>(); // Récupération de données du télétravail remoteworking = countrySimData.GetComponent <Remoteworking>(); // calcul de la courbe de contagiosité pour une fenêtre de jours contagiousnessProbabilityPerDays = new float[virusStats.windowSize]; float peak = virusStats.contagiousnessPeak; float deviation = virusStats.contagiousnessDeviation; for (int i = 0; i < contagiousnessProbabilityPerDays.Length; i++) { contagiousnessProbabilityPerDays[i] = (1 / (deviation * Mathf.Sqrt(2 * Mathf.PI))) * Mathf.Exp(-((i - peak) * (i - peak)) / (2 * deviation * deviation)); } TerritoryData territoryData; foreach (GameObject territory in f_territoriesAndCountry) { territoryData = territory.GetComponent <TerritoryData>(); // Initialisation du nombre d'infectés pour chaque jour de la fenêtre territoryData.numberOfInfectedPeoplePerDays = new int[virusStats.windowSize]; for (int day = 0; day < virusStats.windowSize; day++) { territoryData.numberOfInfectedPeoplePerDays[day] = 0; } // Initialisation du nombre d'infectés pour chaque age et pour chaque jour de la fenêtre territoryData.numberOfInfectedPeoplePerAgesAndDays = new int[territoryData.popNumber.Length][]; for (int age = 0; age < territoryData.popNumber.Length; age++) { territoryData.numberOfInfectedPeoplePerAgesAndDays[age] = new int[virusStats.windowSize]; for (int day = 0; day < virusStats.windowSize; day++) { territoryData.numberOfInfectedPeoplePerAgesAndDays[age][day] = 0; } } } // Pour déterminer la contagiosité du virus on doit trouver le polynome qui passe par trois points : // - si % population infecté == 0 => contagiosité par défaut du virus // - si % population infecté == % d'immunité => contagiosité == 1 // - si % population infecté == 1 => contagiosité == 0 // On doit donc trouver les valeurs a, b et c du polynome aX²+bX+c=Y avec X <=> % de population infecté et Y la contagiosité finale // Donc on doit résoudre le système // -- // | a*0² + b*0 + c = contagVirus // | a*immu² + b*immu + c = 1 // | a*1² + b*1 + c = 0 // -- // -- // | c = contagVirus // | a*immu² + b*immu + contagVirus = 1 // | a + b = -contagVirus // -- // -- // | c = contagVirus // | a*immu² + b*immu + contagVirus = 1 // | b = -contagVirus - a // -- // -- // | c = contagVirus // | a*immu² + (-contagVirus - a)*immu + contagVirus = 1 // | b = -contagVirus - a // -- // -- // | c = contagVirus // | a*immu² - contagVirus*immu -a*immu + contagVirus = 1 // | b = -contagVirus - a // -- // -- // | c = contagVirus // | a*immu² - a*immu = 1 + contagVirus*immu - contagVirus // | b = -contagVirus - a // -- // -- // | c = contagVirus // | a*immu² - a*immu = 1 + (immu - 1) * contagVirus // | b = -contagVirus - a // -- // -- // | c = contagVirus // | a * (immu² - immu) = 1 + (immu - 1) * contagVirus // | b = -contagVirus - a // -- // -- // | c = contagVirus // | a = (1 + (immu - 1) * contagVirus) / (immu² - immu) // | b = -contagVirus - a // -- // Prise en compte des cas limites if (virusStats.populationRatioImmunity <= 0) { polyA = 0; polyC = 0; polyB = 0; } else if (virusStats.populationRatioImmunity >= 1) { polyA = 0; polyC = virusStats.contagiosity; polyB = 0; } else { polyC = virusStats.contagiosity; polyA = (1 + (virusStats.populationRatioImmunity - 1) * virusStats.contagiosity) / (virusStats.populationRatioImmunity * virusStats.populationRatioImmunity - virusStats.populationRatioImmunity); polyB = -polyC - polyA; } }