private Vector3 GetNewPosition(Vector3 refPosition, Vector3 oldPosition, TargetAxes axes)
    {
        Vector3 newPosition;

        switch (axes)
        {
            case TargetAxes.x:
                newPosition = new Vector3(refPosition.x, oldPosition.y, oldPosition.z);
                break;
            case TargetAxes.y:
                newPosition = new Vector3(oldPosition.x, refPosition.y, oldPosition.z);
                break;
            case TargetAxes.z:
                newPosition = new Vector3(oldPosition.x, oldPosition.y, refPosition.z);
                break;
            default:
                newPosition = oldPosition;
                break;
        }

        return newPosition;
    }
    private Vector3 GetPositionFrom(AlignmentTypes type, TargetAxes axes, Vector3 oldPosition, IEnumerable<Transform> possibleReferences)
    {
        switch (type)
        {
            case AlignmentTypes.Origin:
                return GetNewPosition(oldPosition, axes);

            case AlignmentTypes.FirstSelected:
                var first = possibleReferences.First().position;
                return GetNewPosition(first, oldPosition, axes);

            case AlignmentTypes.LastSelected:
                var last = possibleReferences.Last().position;
                return GetNewPosition(last, oldPosition, axes);

            case AlignmentTypes.CenterOfMass:

                var sum = possibleReferences.Select(t => t.position).Aggregate((t_A, t_B) => t_A + t_B);
                var count = possibleReferences.Count();
                var avg = new Vector3(sum.x / count, sum.y / count, sum.z / count);
                return avg;

            default:
                return oldPosition;
        }
    }