using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; /// /// Class used to write extension methodes in /// public static class ExtensionMethods { /// /// Converts provided Direction to Global Vector3 /// /// Direction to convert /// Global Vector3 direction public static Vector3 ToVector(this Direction direction) { switch (direction) { case Direction.Forward: return Vector3.forward; case Direction.Right: return Vector3.right; case Direction.Back: return Vector3.back; case Direction.Left: return Vector3.left; default: return Vector3.zero; } } /// /// Converts provided Direction to local Vector3 /// /// Direction to convert /// Transform to use as directions local space /// Local Vector3 direction public static Vector3 ToVector(this Direction direction, Transform transform) { switch (direction) { case Direction.Forward: return transform.forward; case Direction.Right: return transform.right; case Direction.Back: return -transform.forward; case Direction.Left: return -transform.right; default: return Vector3.zero; } } /// /// Gets the rect of a RectTransform in World coordinates /// /// RectTransform to get rect from /// rect of a RectTransform in World coordinates public static Rect GlobalRect(this RectTransform rt) { var r = rt.rect; Vector2 centre = rt.TransformPoint(r.center); r.size = rt.TransformVector(r.size); r.center = centre; return r; } public static Rect TransformRect(this RectTransform rt, Rect rect) { Vector2 centre = rt.TransformPoint(rect.center); rect.size = rt.TransformVector(rect.size); rect.center = centre; return rect; } /// /// Applies an action to each element in an IEnumerable /// /// IEnumerable to loop therough /// Action to apply to each element public static void ForEach(this IEnumerable enumeration, System.Action action) { foreach (T item in enumeration) action(item); } public static T maxBy(this IEnumerable values, Func predicate) { //Define smallest value as first T max = values.First(); //compare all other values foreach (T item in values) if (predicate(item).CompareTo(predicate(max)) > 0) max = item; return max; } }