
    kjo                     F    d dl Z d dlmZmZ d dlmZ  G d de          ZdS )    N)AnyOptional)	BaseTimerc                   (   e Zd ZdZdeddfdZedefd            Zedefd            Z	ede
fd            Zej        d	e
ddfd
            Zede
fd            Zede
fd            Zdee
e
f         fdZddZddZddZdee
e
f         fdZdS )TimerzTimer based on python ``time``.kwargsreturnNc                 h    d | _         d | _        d | _        d| _        d| _        d| _        d| _        d S )N        r   )_start_time
_stop_time_pause_time_last_frame_offset_frames_fps)selfr   s     W/home/agentuser/manim-venv/lib/python3.11/site-packages/moderngl_window/timers/clock.py__init__zTimer.__init__
   s:    ,0+/,0			    c                     | j         duS )z"bool: The pause state of the timerNr   r   s    r   	is_pausedzTimer.is_paused   s     t++r   c                     | j         du S )z%bool: Is the timer currently running?Nr   r   s    r   
is_runningzTimer.is_running   s     4''r   c                     | j         dS | j        r| j        | j        | j        z
  | j         z
  S t	          j                    | j         z
  | j        z
  S )zGet or set the current time.
        This can be used to jump around in the timeline.

        Returns:
            The current time in seconds
        Nr   )r   r   r   r   timer   s    r   r   z
Timer.time   sX     #3> 	Fd.:#dl2T5EEEy{{T--<<r   valuec                 F    |dk     rd}| xj         | j        |z
  z  c_         d S )Nr   r   )r   r   )r   r   s     r   r   z
Timer.time-   s+    199E	E))r   c                 :    | j         dk    rdS | j         | j        z  S )z+The average fps since the timer was startedr   r   )r   r   r   s    r   fps_averagezTimer.fps_average4   s%     <13|di''r   c                     | j         S )z"Get the current frames per second.)r   r   s    r   fpsz	Timer.fps;   s     yr   c                     | xj         dz  c_         | j        }|| j        z
  |c}| _        |dk    rd|z  | _        nd| _        ||fS )z
        Get the time and frametime for the next frame.
        This should only be called once per frame.

        Returns:
            tuple[float, float]: current time and frametime
           r   g      ?r   )r   r   r   r   )r   currentdeltas      r   
next_framezTimer.next_frame@   s[     	)")D,<"<gt 199eDIIDI~r   c                     | j         !t          j                    | _         d| _        dS | j        2| xj        t          j                    | j        z
  z  c_        d| _        dS t          d           dS )zStart the timer by recoding the current ``time.time()``
        preparing to report the number of seconds since this timestamp.
        Nr   zThe timer is already started)r   r   r   r   r   printr   s    r   startzTimer.startT   ss     ##y{{D"D)LLDIKK$*:::LL#D011111r   c                 6    t          j                     | _        dS )zHPause the timer by setting the internal pause time using ``time.time()``N)r   r   r   s    r   pausezTimer.pausea   s    9;;r   c                 h    | j         r|                                  dS |                                  dS )zToggle the paused stateN)r   r,   r.   r   s    r   toggle_pausezTimer.toggle_pausee   s.    > 	JJLLLLLJJLLLLLr   c                     | j         dS t          j                    | _        | j        | j         z
  | j        z
  | j        | j         z
  fS )z
        Stop the timer. Should only be called once when stopping the timer.

        Returns:
            tuple[float, float]: Current position in the timer, actual running duration
        N)r   r   )r   r   r   r   r   s    r   stopz
Timer.stopl   sJ     #8)++Od..=Od..
 	
r   )r	   N)__name__
__module____qualname____doc__r   r   propertyboolr   r   floatr   setterr"   r$   tupler)   r,   r.   r0   r2    r   r   r   r      s       ))      ,4 , , , X, (D ( ( ( X( =e = = = X= 
[*% *D * * * [* (U ( ( ( X( U    XE%,/    (2 2 2 2' ' ' '   
eE5L) 
 
 
 
 
 
r   r   )r   typingr   r   moderngl_window.timers.baser   r   r<   r   r   <module>r?      sv                     1 1 1 1 1 1s
 s
 s
 s
 s
I s
 s
 s
 s
 s
r   