### Getting Started

### Entities

### Levels

# Utility Curve

### What is a Utility Curve?

In Total AI Utility Curves are used to transform a value with a known range into a new value between 0-1. This is simlar
to normalization, taking a value subtracting by its min and dividing by its range (max - min) to get a 0-1 value, except there
is an extra step of transforming the normalized value by the Utility Curve. **Utility Curves allows these 0-1 values
to be much more expressive**. An extreme example is the curve could be 0 from [0-0.5] and 1 from (0.5-1] thus causing it to
become a boolean operator. Although it is more common is to see S curves and various exponential curves.

Utility Curves are currently used in TAI to determine
an Agent's Drive Type priority, used in Target Factors to determine the best Entity Target for a Mapping,
and can be used by Selector Types determine values for Output Changes or Behaviors.

For a more in depth talk on Utility Curves
and Utility AI in general see an excellent GDC Talk by Kevin Dill and Dave Mark:

Improving AI Decision Modeling Through Utility Theory

Also check out more info in External Links.

### MinMaxCurve

A MinMaxCurve is a ScriptableObject that holds a min, a max, and an AnimationCurve. The min and max value represents
the range for the Output. The input value will be normalized by the MinMaxClass and then inputed into the Curve as the
x value. The y value of the curve will then be denormalized based on the min and max.

The MinMaxCurve ScriptableObject
asset is used throughout TAI. Although it can be slightly annoying in locations when you just need a constant value
overall it helps to reduce memory and provides a central location for logic around evaluating curves.