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; } } }
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); } } }
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); } } }
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); } } }