// PRAGMA MARK - UI FUNCTIONS
        public void OnSearchValueUpdate(string searchString)
        {
            TweakableVariable <float>[] variables = VariableUIMap.Keys.ToArray();
            Array.Sort(variables, delegate(TweakableVariable <float> var1, TweakableVariable <float> var2) {
                double distance1 = StringMatch.ComputeDistance(searchString, var1.Name);
                double distance2 = StringMatch.ComputeDistance(searchString, var2.Name);
                return(distance2.CompareTo(distance1));
            });

            int index = 0;

            foreach (TweakableVariable <float> variable in variables)
            {
                GameObject variableViewObject = VariableUIMap[variable];

                bool active = index < MAX_VARIABLES_SHOWN;
                variableViewObject.SetActive(active);
                if (active)
                {
                    TweakableVariableView variableView = variableViewObject.GetComponent <TweakableVariableView>();
                    Vector2 offset = new Vector2(0.0f, -index * variableView.Height);
                    variableView.SetOffset(offset);
                }

                index++;
            }
        }
        public void Register(TweakableVariable <float> variable)
        {
            GameObject            variableViewObject = Instantiate(Resources.Load("DT/TweakableVariables/TweakableVariableView")) as GameObject;
            TweakableVariableView view = variableViewObject.GetComponent <TweakableVariableView>();

            view.SetupWithModel(variable);

            variableViewObject.transform.SetParent(CanvasTransform, false);
            variableViewObject.SetActive(false);

            VariableUIMap.Add(variable, variableViewObject);
        }