public Tag GetNextPoopEntry() { for (int i = 0; i < caloriesConsumed.Count; i++) { CaloriesConsumedEntry caloriesConsumedEntry = caloriesConsumed[i]; if (!(caloriesConsumedEntry.calories <= 0f)) { Diet.Info dietInfo = diet.GetDietInfo(caloriesConsumedEntry.tag); if (dietInfo != null && !(dietInfo.producedElement == Tag.Invalid)) { return(dietInfo.producedElement); } } } return(Tag.Invalid); }
public float GetTotalConsumedCalories() { float num = 0f; foreach (CaloriesConsumedEntry item in caloriesConsumed) { CaloriesConsumedEntry current = item; if (!(current.calories <= 0f)) { Diet.Info dietInfo = diet.GetDietInfo(current.tag); if (dietInfo != null && !(dietInfo.producedElement == Tag.Invalid)) { num += current.calories; } } } return(num); }
public void Consume(Tag tag, float calories) { for (int i = 0; i < caloriesConsumed.Count; i++) { CaloriesConsumedEntry value = caloriesConsumed[i]; if (value.tag == tag) { value.calories += calories; caloriesConsumed[i] = value; return; } } CaloriesConsumedEntry item = default(CaloriesConsumedEntry); item.tag = tag; item.calories = calories; caloriesConsumed.Add(item); }
public void Poop() { float num = 0f; Tag tag = Tag.Invalid; byte disease_idx = byte.MaxValue; int num2 = 0; bool flag = false; for (int i = 0; i < caloriesConsumed.Count; i++) { CaloriesConsumedEntry value = caloriesConsumed[i]; if (!(value.calories <= 0f)) { Diet.Info dietInfo = diet.GetDietInfo(value.tag); if (dietInfo != null && (!(tag != Tag.Invalid) || !(tag != dietInfo.producedElement))) { num += dietInfo.ConvertConsumptionMassToProducedMass(dietInfo.ConvertCaloriesToConsumptionMass(value.calories)); tag = dietInfo.producedElement; disease_idx = dietInfo.diseaseIdx; num2 = (int)(dietInfo.diseasePerKgProduced * num); value.calories = 0f; caloriesConsumed[i] = value; flag = (flag || dietInfo.produceSolidTile); } } } if (!(num <= 0f) && !(tag == Tag.Invalid)) { Element element = ElementLoader.GetElement(tag); Debug.Assert(element != null, "TODO: implement non-element tag spawning"); int num3 = Grid.PosToCell(owner.transform.GetPosition()); float temperature = owner.GetComponent <PrimaryElement>().Temperature; if (element.IsLiquid) { FallingWater.instance.AddParticle(num3, element.idx, num, temperature, disease_idx, num2, true, false, false, false); } else if (element.IsGas) { SimMessages.AddRemoveSubstance(num3, element.idx, CellEventLogger.Instance.ElementConsumerSimUpdate, num, temperature, disease_idx, num2, true, -1); } else if (flag) { Facing component = owner.GetComponent <Facing>(); int num4 = component.GetFrontCell(); if (!Grid.IsValidCell(num4)) { Debug.LogWarningFormat("{0} attemping to Poop {1} on invalid cell {2} from cell {3}", owner, element.name, num4, num3); num4 = num3; } SimMessages.AddRemoveSubstance(num4, element.idx, CellEventLogger.Instance.ElementConsumerSimUpdate, num, temperature, disease_idx, num2, true, -1); } else { element.substance.SpawnResource(Grid.CellToPosCCC(num3, Grid.SceneLayer.Ore), num, temperature, disease_idx, num2, false, false, false); } KPrefabID component2 = owner.GetComponent <KPrefabID>(); if (!Game.Instance.savedInfo.creaturePoopAmount.ContainsKey(component2.PrefabTag)) { Game.Instance.savedInfo.creaturePoopAmount.Add(component2.PrefabTag, 0f); } Dictionary <Tag, float> creaturePoopAmount; Tag prefabTag; (creaturePoopAmount = Game.Instance.savedInfo.creaturePoopAmount)[prefabTag = component2.PrefabTag] = creaturePoopAmount[prefabTag] + num; PopFXManager.Instance.SpawnFX(PopFXManager.Instance.sprite_Resource, element.name, owner.transform, 1.5f, false); } }