URL: https://wiki.studiominus.nl/internalReference/Utils.html
Title: People Playground Modding - Utils
==================================================

public static class Utils
Class full of utilites that are widely used throughout the game
Nested types
Utils.Activations
Utils.LaserHit
Fields
public const float UnitsToMeters
Multiply this by an amount of units to get back the amount meters it represents
Constant value: Global.MetricMultiplier

public const float MetersToUnits
Multiply this by an amount of meters to get back the amount units it represents
Constant value: 1f / Global.MetricMultiplier

public const float E
Euler's number
Constant value: 2.718281828459045f

Methods
public static bool HasLayer(this LayerMask mask, int layer)
Does the current LayerMask have the given layer enabled? This is an extension method.

public static void Fill(this T[] array, T val)
No description provided

public static Vector2 ClosestPointFix(this Rigidbody2D rb, Vector2 point)
I absolutely fucking hate Unity

public static float SmoothApproach(float pastPosition, float targetPosition, float speed, float deltaTime)
Do magic maths to make a value approach another smoothly over time

public static Vector3 FloatArrayToVector(float[] array)
Converts a float array to a vector.

public static float[] VectorToFloatArray(Vector2 vector)
Converts a vector to a float array

public static float[] VectorToFloatArray(Vector3 vector)
Converts a vector to a float array

public static float[] ColorToFloatArray(Color col)
Converts a color to a float array

public static int[] VectorToIntArray(Vector3 vector)
Converts a vector to an integer array (Rounds to lowest value)

public static Vector2 SmoothApproach(Vector2 pastPosition, Vector2 targetPosition, float speed, float deltaTime)
Do magic maths to make a value approach another smoothly over time

public static bool UniverseMatches(this ActionUniverse uni, ActionUniverse other)
Does the current ActionUniverse match the given universe? This is an extension method.

public static uint ToMD5(this string message)
No description provided

public static uint ToSHA512(this string message)
No description provided

public static void AddRange(this HashSet<T> hashset, IEnumerable<T> range)
Adds a collection to the HashSet. This is an extension method.

public static float DistanceFromPointToLineSegment(Vector2 point, Vector2 lineEnd1, Vector2 lineEnd2)
Calculates the smallest distance from a point to the given line segment

public static float SqrdDistanceFromPointToLineSegment(Vector2 point, Vector2 lineEnd1, Vector2 lineEnd2)
Calculates the smallest distance from a point to the given line segment

public static T PickRandom(this IList<T> collection)
Pick a random entry from a collection. This is an extension method.

public static T PickRandom(this IList<T> collection, int count)
Pick a random entry from a collection. This is an extension method.

public static float Cosh(float x)
oh my cosh

public static void LiquidMixProcess(        BloodContainer container, Liquid a, Liquid b, Liquid result, float delta = 0.05f)
Mix two liquids inside a container. This calls all the proper functions and should always be used if you are mixing liquids inside a container.

public static void LiquidMixProcess(        BloodContainer container,         Liquid a, Liquid b, Liquid c,         Liquid result, float delta = 0.05f)
Mix three liquids inside a container. This calls all the proper functions and should always be used if you are mixing liquids inside a container.

public static void LiquidMixProcess(        BloodContainer container,         Liquid a, Liquid b, Liquid c, Liquid d,         Liquid result, float delta = 0.05f)
Mix four liquids inside a container. This calls all the proper functions and should always be used if you are mixing liquids inside a container.

public static void LiquidMixProcess(BloodContainer container, Liquid[] a, Liquid result, float delta = 0.05f)
Mix n liquids inside a container. This calls all the proper functions and should always be used if you are mixing liquids inside a container.

public static void UpdateOutlineMaterial(ref MaterialPropertyBlock propertyBlock, SpriteRenderer outlineSpriteRenderer, Sprite targetSprite)
Update the outline material property block based on the given renderer and sprite

public static float NaNFallback(this float f, float fallback = 0)
Returns the fallback if the given float is NaN. This is an extension method.

public static Vector2 NaNFallback(this Vector2 f, float fallback = 0)
Returns the fallback if the given float is NaN. This is an extension method.

public static float RandomBetween(Vector2 range)
Returns a random value between the given vector's components

public static Color ChangeRedToOrange(in Color color, float fuzzinessDegrees = 0.03f)
Just in case the colour is red (blood), it will be changed to orange

public static void SetPointVelocity(this Rigidbody2D body, Vector2 vel, Vector2 position)
Set the velocity at the given point in world space. This is an extension method.

public static string AppendPunctuation(string input)
No description provided

public static Bounds GetWorldSpaceBounds(this RectTransform rect)
Calculates the world space bounds of the given RectTransform. This is an extension method.

public static string EscapeRichText(string v)
Escape all rich text from the given string

public static void TransferEnergyFixedRate(PhysicalBehaviour a, PhysicalBehaviour b, float rate = 0.89f)
Transfer electricity between two physical objects based on a constant rate. This has to be called in a fixed update step.

public static void TransferEnergyDeltaTime(PhysicalBehaviour a, PhysicalBehaviour b, float rate, float dt)
Transfer electricity between two physical objects based on a constant rate and a given timestep. This has to be called in an update step.

public static void AverageTemperature(PhysicalBehaviour a, PhysicalBehaviour b, float transferFactor = 0.01f)
Average the temperature between two physical objects based on a constant rate.

public static float GetMinHeatTransferSpeed(PhysicalBehaviour a, PhysicalBehaviour b)
Get the minumum of both object's heat transfer speed

public static string GetHierachyPath(Transform transform)
Get the unique hierarchy path for the transform

public static IEnumerator DelayCoroutine(float delayInSeconds, Action action)
Routine that waits the given amount of seconds and then calls the given function

public static IEnumerator NextFrameCoroutine(Action action)
Routine that waits a frame and then calls the given function

public static float Triangle(float x)
Triangle wave with the same frequency as a sine wave

public static async Task<T> HttpGet(string uri)
Generic HTTP GET function

public static async Task<HttpResponseMessage> HttpPost(string uri, string body)
HTTP POST function

public static async Task<byte[]> HttpDownload(string uri)
Downloads the data at the given endpoint

public static float PreferenceToCelsius(float i)
Converts the given amount to Celsius assuming it's given in whatever the current user preference is set to

public static float CelsiusToPreference(float i)
Converts the given amount to whatever the current user preference is set to assuming it's given in Celsius

public static float CelsiusToFahrenheit(float i)
Degrees Celsius to degrees Fahrenheit

public static float CelsiusToKelvin(float i)
Degrees Celsius to Kelvin

public static float FahrenheitToCelsius(float i)
Degrees Fahrenheit to degrees Celsius

public static float KelvinToCelsius(float i)
Kelvin to degrees Celsius

public static string GetTemperatureUnitSuffix(TemperatureUnit unit)
Returns the unit suffix for the given TemperatureUnit.

public static void DrawCross(Vector3 center, float size, Color color, float duration)
Debug draw a cross

public static byte[] GetMD5(byte[] bytes)
Get the MD5 hash for the given data

public static byte[] GetMD5(string input)
Get the MD5 hash for the given data

public static string GetMD5AsString(string input)
Get the MD5 hash as a string for the given data

public static byte[] GetMD5ForFile(string filePath)
Get the MD5 hash as for the given file

public static Vector3 GetPerlin2Mapped(float x, float y)
Get 2 axes of perlin noise at the given 2D coordinate, returning value ranging from -1, 1

public static float MapRange(float lower1, float upper1, float lower2, float upper2, float value)
Map a value from one range to another

public static T GetMin(ICollection<T> collection, Func<T, float> singleFunc)
Return the smallest value in the collection based on the given function's result

public static SpriteRenderer GetOutlineSprite(Transform transform)
[System.Obsolete]
Returns the outline sprite on the given transform. Null if it has none. This method is cringe. Do not use.

public static bool IsSerialisableType(Type type)
Is the given type serialisable by the contraption serialisation system?

public static string GetFormattedByteString(ulong b)
Turns a countable amount into a formatted string with a proper suffix.Example: GetFormattedByteString(1000) outputs "1 kB"

public static LaserHit MaterialAwareRaycast(Vector2 origin, Vector2 dir, float maxDistance, LayerMask layers, int maxSteps = 8, int depth = 0, float currentDistance = 0)
Raycasts through the world considering physical properties. It will go through glass but won't reflect off of mirrors.

public static float Snap(float v, float snap)
Snap a value to a grid of the given resolution

public static Vector3 Snap(Vector3 v, float snap)
Snap a value to a grid of the given resolution

public static Vector3 Snap(Vector3 v, Vector3 snap)
Snap a value to a grid of the given resolution

public static Vector3 Rotate(Vector2 point, float degrees, Vector2 pivot = default)
Rotate a point around another point

public static float NormaliseAngle(float degrees)
Puts the given degrees in a range from 0 to 360.

public static float Mod(float a, float b)
Modulo

public static void GetLaserEndPoint(Vector2 origin, Vector2 dir, ref List<LaserHit> list, LayerMask layers, float maximumDistance, uint maxIterations = 64)
Does a whole laser raycast considering mirrors and glass. It puts all hit points inside the given list.

public static bool IsFamilyShared()
Returns true if the game is not actually owned by the current account or if either account is invalid.If Steam is not available, this function will return false;

public static void OpenURL(string url)
Opens the given URL in the browser or Steam / GOG Overlay if applicable

public static Sprite LoadSprite(string fullPath, FilterMode mode = FilterMode.Bilinear, float pixelsPerUnit = 35f, bool markNonReadable = true)
Loads the sprite at the given file path

public static Texture2D LoadTexture(string fullPath, FilterMode mode = FilterMode.Bilinear, bool markNonReadable = true)
Loads the texture at the given file path

public static AudioClip FileToAudioClip(string path)
Loads the sound at the given path

public static void GetTopMostLayer(SpriteRenderer a, SpriteRenderer b, out int layerId, out int sortingOrder)
Get the topmost layer out of the two given renderers

public static void GetTopMostLayer(SpriteRenderer a, SpriteRenderer b, out PhysicalBehaviour phys)
Get the topmost layer out of the two given renderers

public static byte br(this Color color)
Returns the red component of the given colour as a byte

public static byte bg(this Color color)
Returns the green component of the given colour as a byte

public static byte bb(this Color color)
Returns the blue component of the given colour as a byte

public static void FixColliders(this GameObject instance)
Removes all colliders from the object and adds a PolygonCollider2D

public static T GetOrAddComponent(this GameObject instance)
Gets or adds a component of the given type on the given GameObject

public static bool HasComponent(this GameObject instance)
Returns true of a component of type  exists on the game object

public static void SendAllChannelIsolatedActivation(MonoBehaviour other)
Sends an isolated activation signal on all channels to the given MonoBehaviour

public static void SendAllChannelContinuousIsolatedActivation(MonoBehaviour other)
Sends a continuous isolated activation signal on all channels to the given MonoBehaviour

public static T LoadAddressableSync(string key)
[System.Obsolete]
No description provided

public static void AssertValidThumbnail(string path)
Throws an exception if the thumbnail file at the given location is invalid

public static float GetLerpFactorDeltaTime(float lerpFactor, float deltaTime)
Calculates the lerp factor for the given timestep

public static Vector3 RotatePointAroundPivot(Vector3 point, Vector3 pivot, Vector3 angles)
I'm not sure what this does again. It's apart of the lightmap generation code; some code I wrote a while ago. I've forgotten it's purpose.

public static Vector2 CalculateNormal(Vector2 A, Vector2 B)
Calculates the normal of two points in a specific direction. Used for vertex generation in the lightmap generator.

public static float CalculateBreakForceForCable(AnchoredJoint2D joint, float baseStrength, float referenceMass = 5, float massInfluence = 1)
Calculates the break force threshold for the given joint, based on the given parameters

public static void SetLayer(this GameObject gm, int layer, bool includeChildren = true)
Sets the layer of the given GameObject. This is an extension method.

public static float GetMaxImpulse(ContactPoint2D[] buffer, int count)
Gets the greatest impulse from the given array

public static float GetAverageImpulse(ContactPoint2D[] buffer, int count)
Gets the average impulse from the given array

public static float GetAverageImpulseRemoveOutliers(ContactPoint2D[] buffer, int count, float outlierThreshold = 1)
Gets the average impulse from the given array, removing all outliers outside a range

public static float GetMinImpulse(ContactPoint2D[] buffer, int count)
Gets the smallest impulse from the given array

public static ContactPoint2D GetFirstValidContact(ContactPoint2D[] buffer, int count)
Get the first valid contact point. Returns the default contact point if no valid one is found.

public static bool IsPointInsideBounds(this Bounds bounds, Vector2 point)
Returns true if the given point is inside the bounds. This is an extension method.

public static GameObject CreateLightmap(Vector2 pos, Texture2D lightmap, int res)
No description provided

public static GameObject CreateLightmap(Vector2 pos, Texture2D lightmap, int res, GameObject world, int[] lightPos)
No description provided

public static bool ContainsExpanded(this Bounds bounds, Vector2 point, float expansion = 0)
Returns true if the given point is inside the bounds considering the given bounds expansion. This is an extension method.

public static bool AreHdrRenderTexturesSupported()
Returns true if HDR RenderTextures are supported.

public static void OpenFloatInputDialog(float defaultValue, T callingBehaviour, Action<T, float> setValueFunction, string text, string placeholder)
Open an input dialog box that accepts numbers

public static void OpenIntInputDialog(int defaultValue, T callingBehaviour, Action<T, int> setValueFunction, string text, string placeholder)
Open an input dialog box that accepts integers

public static void OpenTextInputDialog(string defaultValue, T callingBehaviour, Action<T, string> setValueFunction, string message, string placeholder)
Open an input dialog box that accepts text

public static void OpenColourInputDialog(Color initialValue, string title, string description, Action<T, Color> setValueFunction)
Open an input dialog box that accepts colour

public static void OpenColourInputDialog(Color initialValue, string title, string description, UnityEngine.Events.UnityAction<Color> setValueFunction)
Opens an input dialog box that accepts colour

public static Vector2 CastRayUntilOutside(GameObject targetBody, Vector2 minPoint, Vector2 direction, float distance, Collider2D[] buffer = null)
Cast a ray from a point (inside or outside a body) until it comes out the other end of the body, then return that position. You can provide a Collider2D buffer, but it uses an internal one if left to null.

public static async Task<T> TaskTimeout(Task<T> task, TimeSpan timeout)
No description provided

public static int ComputeConvexHull(Vector2[] points, List<Vector2> hull)
No description provided