Exemple #1
0
 private void OnSerializing()
 {
     _Temperature = Temperature;
     SanitizeMassAndTemperature();
     diseaseID.HashValue = 0;
     diseaseCount        = 0;
     if (useSimDiseaseInfo)
     {
         int i = Grid.PosToCell(base.transform.GetPosition());
         if (Grid.DiseaseIdx[i] != 255)
         {
             diseaseID    = Db.Get().Diseases[Grid.DiseaseIdx[i]].id;
             diseaseCount = Grid.DiseaseCount[i];
         }
     }
     else if (diseaseHandle.IsValid())
     {
         DiseaseHeader header = GameComps.DiseaseContainers.GetHeader(diseaseHandle);
         if (header.diseaseIdx != 255)
         {
             diseaseID    = Db.Get().Diseases[header.diseaseIdx].id;
             diseaseCount = header.diseaseCount;
         }
     }
 }
Exemple #2
0
    private void OnDeserialized()
    {
        if (ElementID == (SimHashes)351109216)
        {
            ElementID = SimHashes.Creature;
        }
        SanitizeMassAndTemperature();
        float temperature = _Temperature;

        if (float.IsNaN(temperature) || float.IsInfinity(temperature) || temperature < 0f || 10000f < temperature)
        {
            DeserializeWarnings.Instance.PrimaryElementTemperatureIsNan.Warn($"{base.name} has invalid temperature of {Temperature}. Resetting temperature.", null);
            temperature = Element.defaultValues.temperature;
        }
        _Temperature = temperature;
        Temperature  = temperature;
        if (Element == null)
        {
            DeserializeWarnings.Instance.PrimaryElementHasNoElement.Warn(base.name + "Primary element has no element.", null);
        }
        if (Mass < 0f)
        {
            DebugUtil.DevLogError(base.gameObject, "deserialized ore with less than 0 mass. Error! Destroying");
            Util.KDestroyGameObject(base.gameObject);
        }
        else
        {
            if (onDataChanged != null)
            {
                onDataChanged(this);
            }
            byte index = Db.Get().Diseases.GetIndex(diseaseID);
            if (index == 255 || diseaseCount <= 0)
            {
                if (diseaseHandle.IsValid())
                {
                    GameComps.DiseaseContainers.Remove(base.gameObject);
                    diseaseHandle.Clear();
                }
            }
            else if (diseaseHandle.IsValid())
            {
                DiseaseHeader header = GameComps.DiseaseContainers.GetHeader(diseaseHandle);
                header.diseaseIdx   = index;
                header.diseaseCount = diseaseCount;
                GameComps.DiseaseContainers.SetHeader(diseaseHandle, header);
            }
            else
            {
                diseaseHandle = GameComps.DiseaseContainers.Add(base.gameObject, index, diseaseCount);
            }
        }
    }
Exemple #3
0
 public void DestroySelf(System.Action onComplete)
 {
     callDestroy = false;
     for (int i = 0; i < building.PlacementCells.Length; i++)
     {
         int num = building.PlacementCells[i];
         Game.Instance.RemoveSolidChangedFilter(num);
         Sim.Cell.Properties simCellProperties = GetSimCellProperties();
         SimMessages.ClearCellProperties(num, (byte)simCellProperties);
         if (doReplaceElement && Grid.Element[num].id == primaryElement.ElementID)
         {
             HandleVector <int> .Handle handle = GameComps.DiseaseContainers.GetHandle(base.gameObject);
             if (handle.IsValid())
             {
                 DiseaseHeader header = GameComps.DiseaseContainers.GetHeader(handle);
                 header.diseaseIdx   = Grid.DiseaseIdx[num];
                 header.diseaseCount = Grid.DiseaseCount[num];
                 GameComps.DiseaseContainers.SetHeader(handle, header);
             }
             if (onComplete != null)
             {
                 HandleVector <Game.CallbackInfo> .Handle handle2 = Game.Instance.callbackManager.Add(new Game.CallbackInfo(onComplete, false));
                 int              gameCell    = num;
                 SimHashes        new_element = SimHashes.Vacuum;
                 CellElementEvent simCellOccupierDestroySelf = CellEventLogger.Instance.SimCellOccupierDestroySelf;
                 float            mass        = 0f;
                 float            temperature = -1f;
                 int              index       = handle2.index;
                 SimMessages.ReplaceElement(gameCell, new_element, simCellOccupierDestroySelf, mass, temperature, byte.MaxValue, 0, index);
             }
             else
             {
                 SimMessages.ReplaceElement(num, SimHashes.Vacuum, CellEventLogger.Instance.SimCellOccupierDestroySelf, 0f, -1f, byte.MaxValue, 0, -1);
             }
             SimMessages.SetStrength(num, 1, 1f);
         }
         else
         {
             Grid.SetSolid(num, false, CellEventLogger.Instance.SimCellOccupierDestroy);
             onComplete.Signal();
             World.Instance.OnSolidChanged(num);
             GameScenePartitioner.Instance.TriggerEvent(num, GameScenePartitioner.Instance.solidChangedLayer, null);
         }
     }
 }
Exemple #4
0
        public void OnEatComplete(object obj)
        {
            Edible edible = (Edible)obj;

            HandleVector <int> .Handle handle = GameComps.DiseaseContainers.GetHandle(edible.gameObject);
            if (handle != HandleVector <int> .InvalidHandle)
            {
                DiseaseHeader header = GameComps.DiseaseContainers.GetHeader(handle);
                if (header.diseaseIdx != 255)
                {
                    Disease disease = Db.Get().Diseases[header.diseaseIdx];
                    float   num     = edible.unitsConsumed / (edible.unitsConsumed + edible.Units);
                    int     num2    = Mathf.CeilToInt((float)header.diseaseCount * num);
                    GameComps.DiseaseContainers.ModifyDiseaseCount(handle, -num2);
                    KPrefabID component = edible.GetComponent <KPrefabID>();
                    InjectDisease(disease, num2, component.PrefabID(), Sickness.InfectionVector.Digestion);
                }
            }
        }