You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

108 lines
3.1 KiB

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
/// <summary>
/// Class used to write extension methodes in
/// </summary>
public static class ExtensionMethods
{
/// <summary>
/// Converts provided Direction to Global Vector3
/// </summary>
/// <param name="direction">Direction to convert</param>
/// <returns>Global Vector3 direction</returns>
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;
}
}
/// <summary>
/// Converts provided Direction to local Vector3
/// </summary>
/// <param name="direction">Direction to convert</param>
/// <param name="transform">Transform to use as directions local space</param>
/// <returns>Local Vector3 direction</returns>
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;
}
}
/// <summary>
/// Gets the rect of a RectTransform in World coordinates
/// </summary>
/// <param name="rt">RectTransform to get rect from</param>
/// <returns>rect of a RectTransform in World coordinates </returns>
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;
}
/// <summary>
/// Applies an action to each element in an IEnumerable
/// </summary>
/// <param name="enumeration">IEnumerable to loop therough</param>
/// <param name="action">Action to apply to each element</param>
public static void ForEach<T>(this IEnumerable<T> enumeration, System.Action<T> action)
{
foreach (T item in enumeration)
action(item);
}
public static T maxBy<T>(this IEnumerable<T> values, Func<T, IComparable> 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;
}
}