UnitExtensions.cs

Extension methods converting between engine world units (inches) and metres, and helpers to get/set GameObject positions in metres using Units.ToMeters/ToInches.

Native Interop
using Sandbox;

namespace Metrify;
public static class UnitExtensions
{
	/// <summary>Inches (world units) to metres.</summary>
	public static float ToMeters( this float inches ) => Units.ToMeters( inches );

	/// <summary>Metres to inches (world units).</summary>
	public static float ToWorldUnits( this float meters ) => Units.ToInches( meters );

	/// <summary>Inches (world units) to metres.</summary>
	public static Vector3 ToMeters( this Vector3 inches ) => Units.ToMeters( inches );

	/// <summary>Metres to inches (world units).</summary>
	public static Vector3 ToWorldUnits( this Vector3 meters ) => Units.ToInches( meters );

	/// <summary>This object's world position in metres.</summary>
	public static Vector3 WorldPositionMeters( this GameObject go ) => Units.ToMeters( go.WorldPosition );

	/// <summary>This object's local position in metres.</summary>
	public static Vector3 LocalPositionMeters( this GameObject go ) => Units.ToMeters( go.LocalPosition );

	/// <summary>Set this object's world position from metres.</summary>
	public static void SetWorldPositionMeters( this GameObject go, Vector3 meters )
		=> go.WorldPosition = Units.ToInches( meters );

	/// <summary>Set this object's local position from metres.</summary>
	public static void SetLocalPositionMeters( this GameObject go, Vector3 meters )
		=> go.LocalPosition = Units.ToInches( meters );
}