void Turn()
 {
     if (SetHeadingIfExists(pattern))
     {
         return;
     }
     if (pattern != PatrollerPattern.TurnLeft)
     {
         if (SetHeadingIfExists(PatrollerPattern.TurnLeft))
         {
             pattern = PatrollerPattern.TurnLeft;
             return;
         }
     }
     if (pattern != PatrollerPattern.TurnRight)
     {
         if (SetHeadingIfExists(PatrollerPattern.TurnRight))
         {
             pattern = PatrollerPattern.TurnRight;
             return;
         }
     }
     if (pattern != PatrollerPattern.Bounce)
     {
         if (SetHeadingIfExists(PatrollerPattern.Bounce))
         {
             return;
         }
     }
 }
    bool SetHeadingIfExists(PatrollerPattern pattern)
    {
        Vector2Int nextHeading = GetTurnHeading(pattern);

        if (location.GetNeighbour(nextHeading))
        {
            if (heading != nextHeading)
            {
                SetWalkAnimFromHeading(nextHeading);
            }
            heading = nextHeading;
            return(true);
        }
        return(false);
    }
    Vector2Int GetTurnHeading(PatrollerPattern pattern)
    {
        switch (pattern)
        {
        case PatrollerPattern.TurnLeft:
            return(new Vector2Int(-heading.y, heading.x));

        case PatrollerPattern.TurnRight:
            return(new Vector2Int(heading.y, -heading.x));

        case PatrollerPattern.Bounce:
            return(new Vector2Int(-heading.x, -heading.y));
        }
        throw new System.Exception("Illegal turn pattern");
    }