Code/UnitExtensions.cs

Extension methods that convert between world units (inches) and metres. Adds float and Vector3 conversion helpers and convenience getters/setters for GameObject positions in metres.

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 );
}