コード例 #1
0
    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);
        }
    }
コード例 #2
0
 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>();
 }
コード例 #3
0
        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}");
            }
        }
コード例 #4
0
 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());
 }
コード例 #5
0
 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>();
 }
コード例 #6
0
    // 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;
        }
    }
コード例 #7
0
 // Use this for initialization
 void Start()
 {
     stats = GetComponentInParent <VirusStats> ();
 }
コード例 #8
0
ファイル: InfectionSystem.cs プロジェクト: Muratet/Covid25
    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;
        }
    }