public static bool TryPortAxisSnap(
Vector3 basePos, // pass in hit.point (or grid-snapped hit.point)
Quaternion baseRot, // current hologram rotation
float snapRange,
float softTolerance,
float hardTolerance,
bool ctrlHeld,
LayerMask snapTargetsMask, // machines and port layer mby
Transform ignore,
Port[] hologramPorts,
out Vector3 snappedPos,
out Quaternion snappedRot)
{
snappedPos = basePos;
snappedRot = baseRot;
bool didSnap = false;
float tol = ctrlHeld ? hardTolerance : softTolerance;
float bestScore = float.MaxValue;
for (int i = 0; i < hologramPorts.Length; i++) {
var port = hologramPorts[i];
Vector3 origin = port.transform.position + port.transform.forward * 0.01f;
Ray ray = new Ray(origin, port.transform.forward);
Debug.DrawRay(ray.origin, ray.direction.normalized * snapRange, Color.grey);
if (Physics.Raycast(ray, out RaycastHit hit, snapRange, snapTargetsMask)) {