Esempio n. 1
0
    public unsafe static void CreateDiseaseTable()
    {
        //IL_0125: Incompatible stack types: I vs Ref
        Diseases     diseases     = Db.Get().Diseases;
        MemoryStream memoryStream = new MemoryStream(1024);
        BinaryWriter binaryWriter = new BinaryWriter(memoryStream);

        binaryWriter.Write(diseases.Count);
        List <Element> elements = ElementLoader.elements;

        binaryWriter.Write(elements.Count);
        for (int i = 0; i < diseases.Count; i++)
        {
            Disease disease = diseases[i];
            binaryWriter.WriteKleiString(UI.StripLinkFormatting(disease.Name));
            binaryWriter.Write(disease.id.GetHashCode());
            binaryWriter.Write(disease.strength);
            disease.temperatureRange.Write(binaryWriter);
            disease.temperatureHalfLives.Write(binaryWriter);
            disease.pressureRange.Write(binaryWriter);
            disease.pressureHalfLives.Write(binaryWriter);
            for (int j = 0; j < elements.Count; j++)
            {
                ElemGrowthInfo elemGrowthInfo = disease.elemGrowthInfo[j];
                elemGrowthInfo.Write(binaryWriter);
            }
        }
        byte[] buffer = memoryStream.GetBuffer();
        fixed(byte *msg = &((buffer != null && buffer.Length != 0) ? ref buffer[0] : ref *(byte *)null))
        {
            Sim.SIM_HandleMessage(825301935, (int)memoryStream.Length, msg);
        }
    }
Esempio n. 2
0
        protected void InitializeElemGrowthArray(ref ElemGrowthInfo[] infoArray, ElemGrowthInfo default_value)
        {
            List <Element> elements = ElementLoader.elements;

            infoArray = new ElemGrowthInfo[elements.Count];
            for (int i = 0; i < elements.Count; i++)
            {
                infoArray[i] = default_value;
            }
            infoArray[ElementLoader.GetElementIndex(SimHashes.Polypropylene)] = new ElemGrowthInfo
            {
                underPopulationDeathRate         = 2.66666675f,
                populationHalfLife               = 10f,
                overPopulationHalfLife           = 10f,
                minCountPerKG                    = 0f,
                maxCountPerKG                    = float.PositiveInfinity,
                minDiffusionCount                = 2147483647,
                diffusionScale                   = 1f,
                minDiffusionInfestationTickCount = 255
            };
            infoArray[ElementLoader.GetElementIndex(SimHashes.Vacuum)] = new ElemGrowthInfo
            {
                underPopulationDeathRate         = 0f,
                populationHalfLife               = 0f,
                overPopulationHalfLife           = 0f,
                minCountPerKG                    = 0f,
                maxCountPerKG                    = float.PositiveInfinity,
                diffusionScale                   = 0f,
                minDiffusionInfestationTickCount = 255
            };
        }
Esempio n. 3
0
    private void EvaluateGrowthConstants(DiseaseHeader header, ref DiseaseContainer container)
    {
        Disease        disease        = Db.Get().Diseases[header.diseaseIdx];
        KPrefabID      component      = header.primaryElement.GetComponent <KPrefabID>();
        ElemGrowthInfo elemGrowthInfo = disease.elemGrowthInfo[header.diseaseIdx];

        container.overpopulationCount = (int)(elemGrowthInfo.maxCountPerKG * header.primaryElement.Mass);
        container.instanceGrowthRate  = disease.GetGrowthRateForTags(component.Tags, header.diseaseCount > container.overpopulationCount);
    }
 public Data(HandleVector <int> .Handle temperature_handle, byte elem_idx, float mass, byte disease_idx, int disease_count)
 {
     diseaseIdx        = disease_idx;
     elemIdx           = elem_idx;
     this.mass         = mass;
     diseaseCount      = disease_count;
     accumulatedError  = 0f;
     temperatureHandle = temperature_handle;
     growthInfo        = GetGrowthInfo(disease_idx, elem_idx);
 }
Esempio n. 5
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);
    }