public void Sim200ms(float dt)
 {
     using (new KProfiler.Region("ConduitDiseaseManager.SimUpdate", null))
     {
         for (int i = 0; i < data.Count; i++)
         {
             Data value = data[i];
             if (value.diseaseIdx != 255)
             {
                 float accumulatedError = value.accumulatedError;
                 accumulatedError += value.growthInfo.CalculateDiseaseCountDelta(value.diseaseCount, value.mass, dt);
                 Disease disease              = Db.Get().Diseases[value.diseaseIdx];
                 float   temperature          = temperatureManager.GetTemperature(value.temperatureHandle);
                 float   half_life_in_seconds = Disease.CalculateRangeHalfLife(temperature, ref disease.temperatureRange, ref disease.temperatureHalfLives);
                 float   num = Disease.HalfLifeToGrowthRate(half_life_in_seconds, dt);
                 accumulatedError += (float)value.diseaseCount * num - (float)value.diseaseCount;
                 int num2 = (int)accumulatedError;
                 value.accumulatedError = accumulatedError - (float)num2;
                 value.diseaseCount    += num2;
                 if (value.diseaseCount <= 0)
                 {
                     value.diseaseCount     = 0;
                     value.diseaseIdx       = byte.MaxValue;
                     value.accumulatedError = 0f;
                 }
                 data[i] = value;
             }
         }
     }
 }
Пример #2
0
    public static float CalculateDelta(int disease_count, int element_idx, float mass, int environment_cell, float temperature, float tags_multiplier_base, Disease disease, float dt)
    {
        float          num            = 0f;
        ElemGrowthInfo elemGrowthInfo = disease.elemGrowthInfo[element_idx];

        num += elemGrowthInfo.CalculateDiseaseCountDelta(disease_count, mass, dt);
        float half_life_in_seconds = Disease.CalculateRangeHalfLife(temperature, ref disease.temperatureRange, ref disease.temperatureHalfLives);
        float num2 = Disease.HalfLifeToGrowthRate(half_life_in_seconds, dt);

        num += (float)disease_count * num2 - (float)disease_count;
        float num3 = Mathf.Pow(tags_multiplier_base, dt);

        num += (float)disease_count * num3 - (float)disease_count;
        if (Grid.IsValidCell(environment_cell))
        {
            byte             b = Grid.ElementIdx[environment_cell];
            ElemExposureInfo elemExposureInfo = disease.elemExposureInfo[b];
            num += elemExposureInfo.CalculateExposureDiseaseCountDelta(disease_count, dt);
        }
        return(num);
    }