def _update()

in gym3/interactive.py [0:0]


    def _update(self, dt, keys_clicked, keys_pressed):
        # if we're displaying done info, don't advance the simulation
        if self._display_info_seconds_remaining > 0:
            self._display_info_seconds_remaining -= dt
            return

        first = False

        if self._synchronous:
            keys = keys_clicked
            act = self._keys_to_act(keys)

            if act is not None:
                first = self._act(act)
                print(
                    "first={} steps={} episode_steps={} rew={} episode_return={}".format(
                        int(first),  # shoter than printing True/False
                        self._steps,
                        self._episode_steps,
                        self._last_rew,
                        self._episode_return,
                    )
                )
        else:
            # cap the number of frames rendered so we don't just spend forever trying to catch up on frames
            # if rendering is slow
            max_dt = self._max_sim_frames_per_update * self._sec_per_timestep
            if dt > max_dt:
                dt = max_dt

            # catch up the simulation to the current time
            self._current_time += dt
            while self._sim_time < self._current_time or self._synchronous:
                self._sim_time += self._sec_per_timestep

                # assume that for async environments, we just want to repeat keys for as long as they are held
                keys = keys_pressed

                act = self._keys_to_act(keys)
                if act is None:
                    act = types_np.zeros(self._env.ac_space, bshape=(self._env.num,))

                first = self._act(act)
                if self._steps % self._tps == 0 or first:
                    episode_return_delta = (
                        self._episode_return - self._prev_episode_return
                    )
                    self._prev_episode_return = self._episode_return
                    print(
                        "first={} steps={} episode_steps={} episode_return_delta={} episode_return={}".format(
                            int(first),
                            self._steps,
                            self._episode_steps,
                            episode_return_delta,
                            self._episode_return,
                        )
                    )
                if first:
                    break

        if first:
            print(f"final info={self._last_info}")
            self._episode_steps = 0
            self._episode_return = 0
            self._prev_episode_return = 0
            self._display_info_seconds_remaining = SECONDS_TO_DISPLAY_DONE_INFO