This AI solution is used to power all of the animals in the game. It is based off of the same AI system that is used by the Sims series. The Utility Ai has a list of needs and will fulfill them based on a few different variables.
It works with "smart objects", which are responsible for giving a score and any other data for the Utility AI to then make its decision.
It was designed with the intention of scaling up quickly; with it, you can easily create new animals, needs, and unique interactions completely in the editor.
This physic's based player controller has been built to be controlled using a state machine. Using the state machine, I was able to make sure that the player was able to run, jump, interact, etc. by using individual states that had their own specific rules of when they can and can't enter a new state.
I also used a lot of techniques to make sure the input and movement felt good for the player, some of these include adding button press buffer, a coyote jump, and applying extra gravity when jumping.
This system is used in order to grab information from relevant components in the camera view. It uses the camera's frustum to determine the bounds and has a distance check for components that are too far away.
The information from the camera view is then used closely with the Utility AI system in order to determine which animals are in frame and whether or not they are currently interacting with a smart object. If the animal is interacting with a smart object, then that information will be passed along to the objective tracker to see whether or not an objective was completed.