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); } }
public static bool Prefix(Stomach __instance, ref GameObject ___owner, ref List <CreatureCalorieMonitor.Stomach.CaloriesConsumedEntry> ___caloriesConsumed) { if (___owner.PrefabID() == FloralHatchConfig.Id || ___owner.PrefabID() == FloralHatchConfig.BabyId || ___owner.PrefabID() == WoodenHatchConfig.Id || ___owner.PrefabID() == WoodenHatchConfig.BabyId) { float num = 0f;//consumed calories acumulated Tag tag = Tag.Invalid; byte disease_idx = byte.MaxValue; int num2 = 0;//total germs bool flag = false; for (int i = 0; i < ___caloriesConsumed.Count; i++) { CreatureCalorieMonitor.Stomach.CaloriesConsumedEntry value = ___caloriesConsumed[i]; if (value.calories > 0f) { Diet.Info dietInfo = __instance.diet.GetDietInfo(value.tag); if (dietInfo != null) { if (!(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) { Debug.Log("tag invalid"); return(false); } Element element = ElementLoader.GetElement(tag); if (element == null) { //for food and others GameObject prefab = Assets.GetPrefab(tag); GameObject gameObject2 = GameUtil.KInstantiate(prefab, Grid.SceneLayer.Ore, null, 0); int units_c = 0; PrimaryElement component2 = null; if (___owner.PrefabID() == WoodenHatchConfig.Id || ___owner.PrefabID() == WoodenHatchConfig.BabyId) { // EdiblesManager.FoodInfo food_info = EdiblesManager.GetFoodInfo(tag.ToString()); var out_put = prefab.GetComponent <PrimaryElement>(); units_c = (int)(num / out_put.Mass); Facing component = ___owner.GetComponent <Facing>(); int num3 = Grid.PosToCell(___owner.transform.GetPosition()); var pos = Grid.CellToPosCCC(num3, Grid.SceneLayer.Ore); gameObject2.transform.SetPosition(pos); component2 = gameObject2.GetComponent <PrimaryElement>(); component2.Units = units_c; } else { var out_put_edible = prefab.GetComponent <Edible>(); var out_put_food_info = out_put_edible.FoodInfo; units_c = (int)(num / out_put_food_info.CaloriesPerUnit); Facing component = ___owner.GetComponent <Facing>(); int num3 = Grid.PosToCell(___owner.transform.GetPosition()); var pos = Grid.CellToPosCCC(num3, Grid.SceneLayer.Ore); gameObject2.transform.SetPosition(pos); component2 = gameObject2.GetComponent <PrimaryElement>(); component2.Mass = num; } float temperature = ___owner.GetComponent <PrimaryElement>().Temperature; component2.Temperature = temperature; gameObject2.SetActive(true); component2.AddDisease(disease_idx, num2, "ComplexFabricator.CompleteOrder"); KPrefabID component3 = ___owner.GetComponent <KPrefabID>(); if (!Game.Instance.savedInfo.creaturePoopAmount.ContainsKey(component3.PrefabTag)) { Game.Instance.savedInfo.creaturePoopAmount.Add(component3.PrefabTag, 0f); } Dictionary <Tag, float> creaturePoopAmount; Tag prefabTag; (creaturePoopAmount = Game.Instance.savedInfo.creaturePoopAmount)[prefabTag = component3.PrefabTag] = creaturePoopAmount[prefabTag] + num; PopFXManager.Instance.SpawnFX(PopFXManager.Instance.sprite_Resource, prefab.name, ___owner.transform, 1.5f, false); } else { ///default option global::Debug.Assert(element != null, "Fail at default option"); 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, (int)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)) { global::Debug.LogWarningFormat("{0} attemping to Poop {1} on invalid cell {2} from cell {3}", new object[] { ___owner, element.name, num4, num3 }); num4 = num3; } SimMessages.AddRemoveSubstance(num4, (int)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); } return(false); } else { return(true); } }