diff options
Diffstat (limited to 'Assets/Packages/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util')
8 files changed, 613 insertions, 0 deletions
diff --git a/Assets/Packages/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_ExtensionMethods.cs b/Assets/Packages/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_ExtensionMethods.cs new file mode 100644 index 0000000..f5ccb87 --- /dev/null +++ b/Assets/Packages/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_ExtensionMethods.cs @@ -0,0 +1,67 @@ +/* --------------------------------------- + * Author: Martin Pane (martintayx@gmail.com) (@tayx94) + * Collaborators: Lars Aalbertsen (@Rockylars) + * Project: Graphy - Ultimate Stats Monitor + * Date: 04-Jan-18 + * Studio: Tayx + * + * This project is released under the MIT license. + * Attribution is not required, but it is always welcomed! + * -------------------------------------*/ + +using UnityEngine; +using System.Collections.Generic; +using UnityEngine.UI; + +namespace Tayx.Graphy.Utils +{ + public static class G_ExtensionMethods + { + /* ----- TODO: ---------------------------- + * Add summaries to the functions. + * --------------------------------------*/ + + #region Methods -> Extension Methods + + /// <summary> + /// Functions as the SetActive function in the GameObject class, but for a list of them. + /// </summary> + /// <param name="gameObjects"> + /// List of GameObjects. + /// </param> + /// <param name="active"> + /// Wether to turn them on or off. + /// </param> + public static List<GameObject> SetAllActive(this List<GameObject> gameObjects, bool active) + { + foreach (var gameObj in gameObjects) + { + gameObj.SetActive(active); + } + + return gameObjects; + } + + public static List<Image> SetOneActive(this List<Image> images, int active) + { + for (int i = 0; i < images.Count; i++) + { + images[i].gameObject.SetActive(i == active); + } + + return images; + } + + public static List<Image> SetAllActive(this List<Image> images, bool active) + { + foreach (var image in images) + { + image.gameObject.SetActive(active); + } + + return images; + } + + #endregion + } +} diff --git a/Assets/Packages/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_ExtensionMethods.cs.meta b/Assets/Packages/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_ExtensionMethods.cs.meta new file mode 100644 index 0000000..0320af9 --- /dev/null +++ b/Assets/Packages/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_ExtensionMethods.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5aef4337f2241ec4d9a2ea5883fd1828 +timeCreated: 1515099756 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_FloatString.cs b/Assets/Packages/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_FloatString.cs new file mode 100644 index 0000000..8e86ea6 --- /dev/null +++ b/Assets/Packages/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 + + /// <summary> + /// Float represented as a string, formatted. + /// </summary> + private const string floatFormat = "0.0"; + + /// <summary> + /// The currently defined, globally used decimal multiplier. + /// </summary> + private static float decimalMultiplier = 1f; + + /// <summary> + /// List of negative floats casted to strings. + /// </summary> + private static string[] negativeBuffer = new string[0]; + + /// <summary> + /// List of positive floats casted to strings. + /// </summary> + private static string[] positiveBuffer = new string[0]; + + #endregion + + #region Properties -> Public + + /// <summary> + /// Have the int buffers been initialized? + /// </summary> + public static bool Inited + { + get + { + return negativeBuffer.Length > 0 || positiveBuffer.Length > 0; + } + } + + /// <summary> + /// The lowest float value of the existing number buffer. + /// </summary> + public static float MinValue + { + get + { + return -(negativeBuffer.Length - 1).FromIndex(); + } + } + + /// <summary> + /// The highest float value of the existing number buffer. + /// </summary> + 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. + /// <summary> + /// Initialize the buffers. + /// </summary> + /// <param name="minNegativeValue"> + /// Lowest negative value allowed. + /// </param> + /// <param name="maxPositiveValue"> + /// Highest positive value allowed. + /// </param> + /// <param name="decimals"> + /// How many decimals will the values use? + /// </param> + 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); + } + } + } + + /// <summary> + /// Returns this float as a cached string. + /// </summary> + /// <param name="value"> + /// The required float. + /// </param> + /// <returns> + /// A cached number string. + /// </returns> + 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. + /// <summary> + /// Returns this float as a cached string. + /// </summary> + /// <param name="value"> + /// The required float. + /// </param> + /// <returns> + /// A cached number string. + /// </returns> + 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); + } + + /// <summary> + /// Returns a float as a casted int. + /// </summary> + /// <param name="f"> + /// The given float. + /// </param> + /// <returns> + /// The given float as an int. + /// </returns> + public static int ToInt(this float f) + { + return (int)f; + } + + /// <summary> + /// Returns an int as a casted float. + /// </summary> + /// <param name="f"> + /// The given int. + /// </param> + /// <returns> + /// The given int as a float. + /// </returns> + 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 + } +} diff --git a/Assets/Packages/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_FloatString.cs.meta b/Assets/Packages/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_FloatString.cs.meta new file mode 100644 index 0000000..1e51e32 --- /dev/null +++ b/Assets/Packages/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_FloatString.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c7eaf0f83a3530240a97ac1c51d6f2e6 +timeCreated: 1538651101 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_Intstring.cs b/Assets/Packages/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_Intstring.cs new file mode 100644 index 0000000..cb102fe --- /dev/null +++ b/Assets/Packages/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_Intstring.cs @@ -0,0 +1,131 @@ +/* --------------------------------------- + * 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_IntString + { + /* ----- TODO: ---------------------------- + * Try and move the Init to a core method. + * --------------------------------------*/ + + #region Variables -> Private + + /// <summary> + /// List of negative ints casted to strings. + /// </summary> + private static string[] negativeBuffer = new string[0]; + + /// <summary> + /// List of positive ints casted to strings. + /// </summary> + private static string[] positiveBuffer = new string[0]; + + #endregion + + #region Properties -> Public + + /// <summary> + /// Have the int buffers been initialized? + /// </summary> + public static bool Inited + { + get + { + return negativeBuffer.Length > 0 || positiveBuffer.Length > 0; + } + } + + /// <summary> + /// The lowest int value of the existing number buffer. + /// </summary> + public static int MinValue + { + get + { + return -(negativeBuffer.Length - 1); + } + } + + /// <summary> + /// The highest int value of the existing number buffer. + /// </summary> + public static int MaxValue + { + get + { + return positiveBuffer.Length - 1; + } + } + + #endregion + + #region Methods -> Public + + /// <summary> + /// Initialize the buffers. + /// </summary> + /// <param name="minNegativeValue"> + /// Lowest negative value allowed. + /// </param> + /// <param name="maxPositiveValue"> + /// Highest positive value allowed. + /// </param> + public static void Init(int minNegativeValue, int maxPositiveValue) + { + if (minNegativeValue <= 0) + { + int length = Mathf.Abs(minNegativeValue); + negativeBuffer = new string[length]; + for (int i = 0; i < length; i++) + { + negativeBuffer[i] = (-i).ToString(); + } + } + if (maxPositiveValue >= 0) + { + positiveBuffer = new string[maxPositiveValue]; + for (int i = 0; i < maxPositiveValue; i++) + { + positiveBuffer[i] = i.ToString(); + } + } + } + + /// <summary> + /// Returns this int as a cached string. + /// </summary> + /// <param name="value"> + /// The required int. + /// </param> + /// <returns> + /// A cached number string. + /// </returns> + public static string ToStringNonAlloc(this int value) + { + if (value < 0 && -value < negativeBuffer.Length) + { + return negativeBuffer[-value]; + } + + if (value >= 0 && value < positiveBuffer.Length) + { + return positiveBuffer[value]; + } + + return value.ToString(); + } + + #endregion + } +} diff --git a/Assets/Packages/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_Intstring.cs.meta b/Assets/Packages/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_Intstring.cs.meta new file mode 100644 index 0000000..a693cc4 --- /dev/null +++ b/Assets/Packages/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_Intstring.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2584aec3ab9f9af49bbdb1477908274e +timeCreated: 1526634575 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_Singleton.cs b/Assets/Packages/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_Singleton.cs new file mode 100644 index 0000000..5feaa7a --- /dev/null +++ b/Assets/Packages/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_Singleton.cs @@ -0,0 +1,135 @@ +/* --------------------------------------- + * Sourced from: https://wiki.unity3d.com/index.php/Singleton + * Modified by: Martín Pane (martintayx@gmail.com) (@tayx94) + * Collaborators: Lars Aalbertsen (@Rockylars) + * Project: Graphy - Ultimate Stats Monitor + * Date: 07-Jul-17 + * 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 +{ + /// <summary> + /// Be aware this will not prevent a non singleton constructor + /// such as `T myT = new T();` + /// To prevent that, add `protected T () {}` to your singleton class. + /// + /// As a note, this is made as MonoBehaviour because we need Coroutines. + /// </summary> + public class G_Singleton<T> : MonoBehaviour where T : MonoBehaviour + { + /* ----- TODO: ---------------------------- + * Check if we can seal this class. + * Add summaries to the variables. + * Add summaries to the functions. + * Check if we should add "private" to the Unity Callbacks. + * Fill in the missing date and author. + * --------------------------------------*/ + + #region Variables -> Private + + private static T _instance; + + private static object _lock = new object(); + + #endregion + + #region Properties -> Public + + public static T Instance + { + get + { + + if (_applicationIsQuitting) + { + //Debug.LogWarning("[Singleton] Instance '" + typeof(T) + + // "' already destroyed on application quit." + + // " Won't create again - returning null."); + return null; + } + + lock (_lock) + { + if (_instance == null) + { + _instance = (T)FindObjectOfType(typeof(T)); + + if (FindObjectsOfType(typeof(T)).Length > 1) + { + //Debug.LogError("[Singleton] Something went really wrong " + + // " - there should never be more than 1 singleton!" + + // " Reopening the scene might fix it."); + return _instance; + } + + if (_instance == null) + { + //GameObject singleton = new GameObject(); + //_instance = singleton.AddComponent<T>(); + //singleton.name = "(singleton) " + typeof(T).ToString(); + + //DontDestroyOnLoad(singleton); + + //Debug.Log("[Singleton] An instance of " + typeof(T) + + // " is needed in the scene, so '" + singleton + + // "' was created with DontDestroyOnLoad."); + + Debug.Log + ( + "[Singleton] An instance of " + typeof(T) + + " is trying to be accessed, but it wasn't initialized first. " + + "Make sure to add an instance of " + typeof(T) + " in the scene before " + + " trying to access it." + ); + } + else + { + //Debug.Log("[Singleton] Using instance already created: " + + // _instance.gameObject.name); + } + } + + return _instance; + } + } + } + + #endregion + + #region Methods -> Unity Callbacks + + void Awake() + { + if (_instance != null) + { + Destroy(gameObject); + } + else + { + _instance = GetComponent<T>(); + } + } + + private static bool _applicationIsQuitting = false; + /// <summary> + /// When Unity quits, it destroys objects in a random order. + /// In principle, a Singleton is only destroyed when application quits. + /// If any script calls Instance after it has been destroyed, + /// it will create a buggy ghost object that will stay on the Editor scene + /// even after stopping playing the Application. Really bad! + /// So, this was made to be sure we're not creating that buggy ghost object. + /// </summary> + void OnDestroy() + { + _applicationIsQuitting = true; + } + + #endregion + } +}
\ No newline at end of file diff --git a/Assets/Packages/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_Singleton.cs.meta b/Assets/Packages/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_Singleton.cs.meta new file mode 100644 index 0000000..6c90242 --- /dev/null +++ b/Assets/Packages/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Util/G_Singleton.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: dbf324bd9d0eaf7408f3b72ed03e2588 +timeCreated: 1512413989 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: |
