class_docstr: A high level game controller class.
  
  The class allows interacting with DMLab environment using high level actions,
  such as look at specific direction, move to specific coordinates etc.
class_docstr_tok: ["A","high","level","game","controller","class",".","The","class","allows","interacting","with","DMLab","environment","using","high","level","actions",",","such","as","look","at","specific","direction",",","move","to","specific","coordinates","etc","."]
docstr: Rotate the player delta_angle degrees in horizontal plane.
docstr_tok: ["Rotate","the","player","delta_angle","degrees","in","horizontal","plane","."]
code: def rotate(self, delta_angle, steps=10):
      """Rotate the player delta_angle degrees in horizontal plane."""
      start = self.orientation
      target = np.array([start[0], start[1] + delta_angle, 0.0])
  
      speed = self._rotation_speed(delta_angle, steps=steps)
  
      if np.abs(speed) < 1.0:
          return
  
      actions = self._get_actions(_TURN_ACTION_NAME, speed)
  
      error_message = (
          "Failed to reach requested orientation. Start: {0}, "
          "target: {1}, current: {2}."
      )
      for _ in six.moves.range(steps):
          if self._env.is_running():
              self._step(actions, 1)
          else:
              raise AssertionError(
                  error_message.format(
                      start[1], target[1], self.orientation[1]
                  )
              )
  
      if (
          abs(
              math_utils.delta_angle_degrees(
                  self.orientation[1], target[1]
              )
          )
          >= _INTERNAL_ROTATION_TOLERANCE
      ):
          if steps == 1:
              raise AssertionError(
                  error_message.format(
                      start[1], target[1], self.orientation[1]
                  )
              )
          else:
              self.rotate(
                  math_utils.delta_angle_degrees(
                      self.orientation[1], target[1]
                  ),
                  steps=1,
              )
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import numpy
  import six
  from python.tests.utils import math_utils
label_desc: Use image node_id 3 for calling the GameController obj's underlying member method code with example usage: obj.rotate(delta_angle, steps) without return types