void Update()
    {
        //set the Update Category (is the HP going up, down, or not moving)
        if (Mathf.Round(Value * 100f) / 100f == Mathf.Round(NewValue * 100f) / 100f)
        {
            UpdateCategory = Categories.NA;
        }
        else if (Value > NewValue)
        {
            UpdateCategory = Categories.decrease;
        }
        else if (Value < NewValue)
        {
            UpdateCategory = Categories.increase;
        }

        //Update the Mask locations (needed if you are going to move stuff arround)
        RectTransform MRT = (Mask.transform as RectTransform);

        if (FillStyle == FillStyles.horizontal)
        {
            Mask1 = new Vector3(MRT.position.x, MRT.position.y, MRT.position.z);
            Mask0 = new Vector3(MRT.position.x - MRT.rect.width + MaskOffset, MRT.position.y, MRT.position.z);
        }
        else
        {
            Mask1 = new Vector3(MRT.position.x, MRT.position.y, MRT.position.z);
            Mask0 = new Vector3(MRT.position.x, MRT.position.y - MRT.rect.height + MaskOffset, MRT.position.z);
        }

        //move the Current Value to the NewValue
        Value = Mathf.Lerp(Value, NewValue, Speed * Time.deltaTime);
        Value = Mathf.Clamp(Value, 0f, 1f);      //make sure the Value is between 0 and 1

        //move the Filler position to display the Correct Percent
        RectTransform FRT = (Filler.transform as RectTransform);

        FRT.position = Vector3.Lerp(Mask0, Mask1, Value);

        //set the color for the Fill Image, and the Text Objects
        Filler.GetComponent <Image>().color    = HPColor.Evaluate(Value);
        PercentTxt.GetComponent <Text>().color = TextColor.Evaluate(Value);
        RatioTxt.GetComponent <Text>().color   = TextColor.Evaluate(Value);

        //Execute Each Criteria Rule
        foreach (CriteriaRule CR in CriteriaRules)
        {
            if (CR.isImage())
            {
                CR.DefaultColor = HPColor.Evaluate(Value);
            }
            else
            {
                CR.DefaultColor = TextColor.Evaluate(Value);
            }

            CR.Use(Mathf.Round(Value * 100f) / 100f);
        }

        //Execute Each Update Animation Rule
        foreach (UpdateAnimationRule UAR in UpdateAnimationRules)
        {
            if (StartAnimate)
            {
                if (UAR.Category.ToString() == UpdateCategory.ToString())
                {
                    UAR.StartAnimation = true;
                }
            }

            UAR.Use();
        }

        //reset the StartAnimate variable
        StartAnimate = false;

        //activate or inactivate the text objects
        PercentTxt.SetActive(DisplayPercentTxt);
        RatioTxt.SetActive(DisplayRatioTxt);

        //update the PercentTxt
        PercentTxt.GetComponent <Text>().text = (Mathf.Round(Value * 100f)).ToString() + "%";
    }