using System.Collections; using System.Collections.Generic; using UnityEngine; namespace MoreMountains.Tools { /// <summary> /// Array helpers /// </summary> public class MMArray : MonoBehaviour { /// <summary> /// Rounds an int to the closest int in an array (array has to be sorted) /// </summary> /// <param name="value"></param> /// <param name="array"></param> /// <returns></returns> public static int RoundIntToArray(int value, int[] array) { int min = 0; if (array[min] >= value) return array[min]; int max = array.Length - 1; if (array[max] <= value) return array[max]; while (max - min > 1) { int mid = (max + min) / 2; if (array[mid] == value) { return array[mid]; } else if (array[mid] < value) { min = mid; } else { max = mid; } } if (array[max] - value <= value - array[min]) { return array[max]; } else { return array[min]; } } /// <summary> /// Rounds a float to the closest float in an array (array has to be sorted) /// </summary> /// <param name="value"></param> /// <param name="array"></param> /// <returns></returns> public static float RoundFloatToArray(float value, float[] array) { int min = 0; if (array[min] >= value) return array[min]; int max = array.Length - 1; if (array[max] <= value) return array[max]; while (max - min > 1) { int mid = (max + min) / 2; if (array[mid] == value) { return array[mid]; } else if (array[mid] < value) { min = mid; } else { max = mid; } } if (array[max] - value <= value - array[min]) { return array[max]; } else { return array[min]; } } } }