public AiControllerInputBuilder LookForFood()
        {
            var vectorToFood = Vector2.Normalize(controllerInputs.FoodPosition - controllerInputs.SnakePositions[0]);
            var distance     = Vector2.Distance(controllerInputs.FoodPosition, controllerInputs.SnakePositions[0]);

            inputs.Add(vectorToFood.X);
            inputs.Add(vectorToFood.Y);
            inputs.Add(ActivationFunctions.ExpMinusModX(distance));

            return(this);
        }
        private AiControllerInputBuilder LookInDirection(Direction direction)
        {
            var movement         = direction.ToTranslation();
            var currentIndex     = controllerInputs.SnakePositions[0] + movement;
            var snakeBodyIndices = controllerInputs.SnakePositions.Skip(1);
            var inBounds         = InBoundsConditions[direction];

            var distance = 0f;

            while (inBounds(currentIndex, controllerInputs.GridDescription))
            {
                if (snakeBodyIndices.Contains(currentIndex))
                {
                    break;
                }

                currentIndex += movement;
                distance++;
            }

            inputs.Add(ActivationFunctions.ExpMinusModX(distance));

            return(this);
        }