private void Remove(float amount, LiquidQuality quality) { if (IsNone(amount)) { return; } float remaining = amount; liquidItems.Sort(REMOVING_ORDER); foreach (LiquidItem eachLiquidItem in liquidItems) { if (IsEmpty(eachLiquidItem) || eachLiquidItem.m_LiquidQuality != quality) { continue; } float transfer = Mathf.Min(remaining, eachLiquidItem.m_LiquidLiters); eachLiquidItem.m_LiquidLiters -= transfer; remaining -= transfer; if (IsNone(remaining)) { return; } } }
/// <summary> /// Take water out of the bottles for things like cooking /// </summary> /// <param name="amount">Amount of water in liters</param> /// <param name="quality">Potable or Nonpotable</param> internal void Remove(float amount, LiquidQuality quality) { if (IsNone(amount)) //returns true for negative numbers, zero, and small positive numbers { return; } float remaining = amount; liquidItems.Sort(REMOVING_ORDER); //sorts containers by ascending liquid amount, i.e. empty at the start of the list, more fluid at the end foreach (LiquidItem eachLiquidItem in liquidItems) { if (IsEmpty(eachLiquidItem) || eachLiquidItem.m_LiquidQuality != quality) { continue; } float transfer = Mathf.Min(remaining, eachLiquidItem.m_LiquidLiters); //can't take more water than what is in the container eachLiquidItem.m_LiquidLiters -= transfer; remaining -= transfer; if (IsNone(remaining)) { return; } } //It should not be possible for remaining to be nonzero at this point. //That would mean that some kind of error occured and that the game tried to take more water than the player possessed. }
/// <summary> /// Adds water to the bottles in the inventory /// </summary> /// <param name="amount">Amount of water in liters</param> /// <param name="quality">Potable or Nonpotable</param> internal void Add(float amount, LiquidQuality quality) { if (IsNone(amount)) //returns true for negative numbers, zero, and small positive numbers { return; } float remaining = amount; liquidItems.Sort(ADDING_ORDER); //fuller bottles first; if the same fill amount, bigger bottle first //Nonempty bottles foreach (LiquidItem eachLiquidItem in liquidItems) { if (IsEmpty(eachLiquidItem) || eachLiquidItem.m_LiquidQuality != quality) { continue; } //can't add more water than the space available in the bottle float transfer = Mathf.Min(remaining, eachLiquidItem.m_LiquidCapacityLiters - eachLiquidItem.m_LiquidLiters); eachLiquidItem.m_LiquidLiters += transfer; remaining -= transfer; if (IsNone(remaining)) { return; } } //Empty Bottles foreach (LiquidItem eachLiquidItem in liquidItems) { if (!IsEmpty(eachLiquidItem)) { continue; } //can't add more water than the space available in the bottle float transfer = Mathf.Min(remaining, eachLiquidItem.m_LiquidCapacityLiters - eachLiquidItem.m_LiquidLiters); eachLiquidItem.m_LiquidLiters += transfer; eachLiquidItem.m_LiquidQuality = quality; remaining -= transfer; if (IsNone(remaining)) { return; } } //If remaining is still greater than zero at this point, that water becomes the lost amount }
public static float GetRemainingCapacity(LiquidQuality quality) { if (quality == LiquidQuality.NonPotable) { return(WATER.RemainingCapacityNonPotable); } if (quality == LiquidQuality.Potable) { return(WATER.RemainingCapacityPotable); } return(0); }
public static float GetActual(LiquidQuality quality) { if (quality == LiquidQuality.NonPotable) { return(WATER.ActualNonPotable); } if (quality == LiquidQuality.Potable) { return(WATER.ActualPotable); } return(0); }
/// <summary> /// /// </summary> /// <param name="quality"></param> /// <returns></returns> public static float GetRemainingCapacity(LiquidQuality quality) { switch (quality) { case LiquidQuality.NonPotable: return(WATER.RemainingCapacityNonPotable); case LiquidQuality.Potable: return(WATER.RemainingCapacityPotable); default: return(0f); } }
private void Add(float amount, LiquidQuality quality) { if (IsNone(amount)) { return; } float remaining = amount; liquidItems.Sort(ADDING_ORDER); foreach (LiquidItem eachLiquidItem in liquidItems) { if (IsEmpty(eachLiquidItem) || eachLiquidItem.m_LiquidQuality != quality) { continue; } float transfer = Mathf.Min(remaining, eachLiquidItem.m_LiquidCapacityLiters - eachLiquidItem.m_LiquidLiters); eachLiquidItem.m_LiquidLiters += transfer; remaining -= transfer; if (IsNone(remaining)) { return; } } foreach (LiquidItem eachLiquidItem in liquidItems) { if (!IsEmpty(eachLiquidItem)) { continue; } float transfer = Mathf.Min(remaining, eachLiquidItem.m_LiquidCapacityLiters - eachLiquidItem.m_LiquidLiters); eachLiquidItem.m_LiquidLiters += transfer; eachLiquidItem.m_LiquidQuality = quality; remaining -= transfer; if (IsNone(remaining)) { return; } } }
internal static void Postfix(float numLiters, LiquidQuality quality) { Water.AdjustWaterToWaterSupply(); }
private static string GetWaterInfo(LiquidQuality quality) { return(Localization.Get("GAMEPLAY_Water" + quality.ToString()) + ": " + WaterUtils.FormatWaterAmount(Water.GetActual(quality)) + "/" + WaterUtils.FormatWaterAmount(Water.GetCapacity(quality))); }
public static void Prefix(float numLiters, LiquidQuality quality) { Water.AdjustWaterToWaterSupply(); }