Ejemplo n.º 1
0
        /// <summary>
        /// How much resource would it cost to buy (numItems) items if you already have currentOwned,
        /// the initial price is priceStart and it multiplies by priceRatio each purchase?
        /// </summary>
        public static BigDouble SumGeometricSeries(BigDouble numItems, BigDouble priceStart, BigDouble priceRatio,
                                                   BigDouble currentOwned)
        {
            var actualStart = priceStart * BigDouble.Pow(priceRatio, currentOwned);

            return(actualStart * (1 - BigDouble.Pow(priceRatio, numItems)) / (1 - priceRatio));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// If you're willing to spend 'resourcesAvailable' and want to buy something with
        /// exponentially increasing cost each purchase (start at priceStart, multiply by priceRatio,
        /// already own currentOwned), how much of it can you buy?
        /// <para>
        /// Adapted from Trimps source code.
        /// </para>
        /// </summary>
        public static BigDouble AffordGeometricSeries(BigDouble resourcesAvailable, BigDouble priceStart,
                                                      BigDouble priceRatio, BigDouble currentOwned)
        {
            var actualStart = priceStart * BigDouble.Pow(priceRatio, currentOwned);

            //return Math.floor(log10(((resourcesAvailable / (priceStart * Math.pow(priceRatio, currentOwned))) * (priceRatio - 1)) + 1) / log10(priceRatio));

            return(BigDouble.Floor(BigDouble.Log10(resourcesAvailable / actualStart * (priceRatio - 1) + 1) / BigDouble.Log10(priceRatio)));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// If you're willing to spend 'resourcesAvailable' and want to buy something with
        /// additively increasing cost each purchase (start at priceStart, add by priceAdd,
        /// already own currentOwned), how much of it can you buy?
        /// </summary>
        public static BigDouble AffordArithmeticSeries(BigDouble resourcesAvailable, BigDouble priceStart,
                                                       BigDouble priceAdd, BigDouble currentOwned)
        {
            var actualStart = priceStart + currentOwned * priceAdd;

            //n = (-(a-d/2) + sqrt((a-d/2)^2+2dS))/d
            //where a is actualStart, d is priceAdd and S is resourcesAvailable
            //then floor it and you're done!

            var b  = actualStart - priceAdd / 2;
            var b2 = BigDouble.Pow(b, 2);

            return(BigDouble.Floor(
                       (BigDouble.Sqrt(b2 + priceAdd * resourcesAvailable * 2) - b) / priceAdd
                       ));
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Joke function from Realm Grinder.
 /// </summary>
 public static BigDouble AscensionPenalty(this BigDouble value, double ascensions)
 {
     return(Math.Abs(ascensions) < double.Epsilon ? value : BigDouble.Pow(value, Math.Pow(10, -ascensions)));
 }
Ejemplo n.º 5
0
 public static BigDouble Sqr(this BigDouble value)
 {
     return(BigDouble.Pow(value, 2));
 }
Ejemplo n.º 6
0
 public static BigDouble Pow(this BigDouble value, double power)
 {
     return(BigDouble.Pow(value, power));
 }