Beispiel #1
0
        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;
                }
            }
        }
Beispiel #2
0
        /// <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.
        }
Beispiel #3
0
        /// <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
        }
Beispiel #4
0
        public static float GetRemainingCapacity(LiquidQuality quality)
        {
            if (quality == LiquidQuality.NonPotable)
            {
                return(WATER.RemainingCapacityNonPotable);
            }

            if (quality == LiquidQuality.Potable)
            {
                return(WATER.RemainingCapacityPotable);
            }

            return(0);
        }
Beispiel #5
0
        public static float GetActual(LiquidQuality quality)
        {
            if (quality == LiquidQuality.NonPotable)
            {
                return(WATER.ActualNonPotable);
            }

            if (quality == LiquidQuality.Potable)
            {
                return(WATER.ActualPotable);
            }

            return(0);
        }
Beispiel #6
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);
            }
        }
Beispiel #7
0
        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();
 }
Beispiel #9
0
 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();
 }