From 3af4c218c0e70167db23a6303d2af30aff37d2fe Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Thu, 20 Aug 2020 23:40:50 -0400 Subject: Removed a bunch of stuff; Changes --- .../Scripts/Util/G_FloatString.cs | 232 +++++++++++++++++++++ 1 file changed, 232 insertions(+) create mode 100644 Assets/Thirdparty/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_FloatString.cs (limited to 'Assets/Thirdparty/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_FloatString.cs') diff --git a/Assets/Thirdparty/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_FloatString.cs b/Assets/Thirdparty/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_FloatString.cs new file mode 100644 index 0000000..9a112d6 --- /dev/null +++ b/Assets/Thirdparty/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_FloatString.cs @@ -0,0 +1,232 @@ +/* --------------------------------------- + * Author: Started by David Mkrtchyan, modified by Martin Pane (martintayx@gmail.com) (@tayx94) + * Collaborators: Lars Aalbertsen (@Rockylars) + * Project: Graphy - Ultimate Stats Monitor + * Date: 18-May-18 + * Studio: Tayx + * + * This project is released under the MIT license. + * Attribution is not required, but it is always welcomed! + * -------------------------------------*/ + +using UnityEngine; + +namespace Tayx.Graphy.Utils.NumString +{ + public static class G_FloatString + { + /* ----- TODO: ---------------------------- + * Try and move the Init to a core method. + * Try and replace the Pow function with a better algorithm. + * --------------------------------------*/ + + #region Variables -> Private + + /// + /// Float represented as a string, formatted. + /// + private const string floatFormat = "0.0"; + + /// + /// The currently defined, globally used decimal multiplier. + /// + private static float decimalMultiplier = 1f; + + /// + /// List of negative floats casted to strings. + /// + private static string[] negativeBuffer = new string[0]; + + /// + /// List of positive floats casted to strings. + /// + private static string[] positiveBuffer = new string[0]; + + #endregion + + #region Properties -> Public + + /// + /// Have the int buffers been initialized? + /// + public static bool Inited + { + get + { + return negativeBuffer.Length > 0 || positiveBuffer.Length > 0; + } + } + + /// + /// The lowest float value of the existing number buffer. + /// + public static float MinValue + { + get + { + return -(negativeBuffer.Length - 1).FromIndex(); + } + } + + /// + /// The highest float value of the existing number buffer. + /// + public static float MaxValue + { + get + { + return (positiveBuffer.Length - 1).FromIndex(); + } + } + + #endregion + + #region Methods -> Public + + //TODO: Figure out what the negative buffer doe, why we dont have default values and why the range is so high. + /// + /// Initialize the buffers. + /// + /// + /// Lowest negative value allowed. + /// + /// + /// Highest positive value allowed. + /// + /// + /// How many decimals will the values use? + /// + public static void Init(float minNegativeValue, float maxPositiveValue, int decimals = 1) + { + decimalMultiplier = Pow(10, Mathf.Clamp(decimals, 1, 5)); + + int negativeLength = minNegativeValue.ToIndex(); + int positiveLength = maxPositiveValue.ToIndex(); + + if (negativeLength >= 0) + { + negativeBuffer = new string[negativeLength]; + for (int i = 0; i < negativeLength; i++) + { + negativeBuffer[i] = (-i).FromIndex().ToString(floatFormat); + } + } + + if (positiveLength >= 0) + { + positiveBuffer = new string[positiveLength]; + for (int i = 0; i < positiveLength; i++) + { + positiveBuffer[i] = i.FromIndex().ToString(floatFormat); + } + } + } + + /// + /// Returns this float as a cached string. + /// + /// + /// The required float. + /// + /// + /// A cached number string. + /// + public static string ToStringNonAlloc(this float value) + { + int valIndex = value.ToIndex(); + + if (value < 0 && valIndex < negativeBuffer.Length) + { + return negativeBuffer[valIndex]; + } + + if (value >= 0 && valIndex < positiveBuffer.Length) + { + return positiveBuffer[valIndex]; + } + + return value.ToString(); + } + + //TODO: Convert this to use floatFormat instead, but investigate which functions require and dont require one first. + /// + /// Returns this float as a cached string. + /// + /// + /// The required float. + /// + /// + /// A cached number string. + /// + public static string ToStringNonAlloc(this float value, string format) + { + int valIndex = value.ToIndex(); + + if (value < 0 && valIndex < negativeBuffer.Length) + { + return negativeBuffer[valIndex]; + } + + if (value >= 0 && valIndex < positiveBuffer.Length) + { + return positiveBuffer[valIndex]; + } + + return value.ToString(format); + } + + /// + /// Returns a float as a casted int. + /// + /// + /// The given float. + /// + /// + /// The given float as an int. + /// + public static int ToInt(this float f) + { + return (int)f; + } + + /// + /// Returns an int as a casted float. + /// + /// + /// The given int. + /// + /// + /// The given int as a float. + /// + public static float ToFloat(this int i) + { + return (float)i; + } + + #endregion + + #region Methods -> Private + + //TODO: Replace this with a better algorithm. + private static int Pow(int f, int p) + { + for (int i = 1; i < p; i++) + { + f *= f; + } + return f; + } + + private static int ToIndex(this float f) + { + return Mathf.Abs((f * decimalMultiplier).ToInt()); + } + + private static float FromIndex(this int i) + { + return (i.ToFloat() / decimalMultiplier); + } + + #endregion + } +} -- cgit v1.2.3