
    n@j5                    
   U d Z ddlmZ ddlmZ dZdZdZdZdZ	d	Z
d
Zd-dZedz  ZdZd.dZd/d0dZ G d dee          Zej        j        ej        j        ej        j        ej        j        ej        j        ej        j        ddgZded<   ej        j        ddddej        j        ej        j        dej        j        g	Zded <   eZded!<   ej        j        ej        j        fej        j        ej        j        dfej        j        ej        j        dfej        j        ej        j        dfej        j        ej        j        fej        j        ej        j        fej        j        ej        j        fiZd"ed#<   d1d'Z d2d*Z!d3d4d,Z"d+S )5aK  Pet sprite geometry + animation-state taxonomy.

These values are the common petdex/Codex pet geometry. The real ``pet.json``
usually only carries ``id``/``displayName``/``description``/``spritesheetPath``;
row taxonomy is inferred from the atlas shape so Hermes can render both legacy
8-row sheets and current 9-row Codex sheets.
    )annotations)Enum         iL  gQ?g?g      @scalefloatreturnc                R    t          t          t          t          |                     S )zJClamp *scale* to ``[MIN_SCALE, MAX_SCALE]`` (the single validation point).)max	MIN_SCALEmin	MAX_SCALEr   s    9/home/thesage/.hermes/hermes-agent/agent/pet/constants.pyclamp_scaler   -   s    y#i//000          intc                d    t          t          t          t          | pt          z                      S )a!  Half-block width implied by *scale*, clamped to the legibility floor.

    Above the floor it tracks the kitty cell box (``scaled_px // 8``) so the two
    renderers converge at larger sizes; below it the floor keeps the sprite
    readable rather than letting it devolve into a blob.
    )r   UNICODE_MIN_COLSroundBASE_UNICODE_COLSDEFAULT_SCALEr   s    r   cols_for_scaler   ?   s(     '8E<R]'S!T!TUUUr   unicode_colsc                h    |r"t          |          dk    rt          |          nt          |           S )zLResolve terminal width: explicit *unicode_cols* override, else from *scale*.r   )r   r   )r   r   s     r   resolve_colsr   I   s5     ,a\1B1BQ1F1F3|N[`LaLaar   c                  .    e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )
PetStatea  Animation state a pet can be shown in.

    These are Hermes' activity state names. They are not always identical to the
    source atlas row names: Codex-format pets use rows like ``jumping`` /
    ``running`` while the UI keeps the shorter ``jump`` / ``run`` names.
    idlewaverunfailedreviewjumpwaitingN)__name__
__module____qualname____doc__IDLEWAVERUNFAILEDREVIEWJUMPWAITING r   r   r!   r!   N   s=          DD
CFFDGGGr   r!   extra1extra2	list[str]LEGACY_STATE_ROWSzrunning-rightzrunning-leftwavingjumpingrunningCODEX_STATE_ROWS
STATE_ROWSzdict[str, tuple[str, ...]]STATE_ALIASESstate'PetState | str'tuple[str, ...]c                    t          | t                    r| j        nt          |           }t                              |          }|r|n|fS )z@Return accepted row-name aliases for *state* (always non-empty).)
isinstancer!   valuestrr>   get)r?   rD   aliasess      r   state_aliases_forrH      sF    %eX66FEKKCJJE&&G+77E8+r   	row_count
int | Nonec                    	 t          | pd          }n# t          t          f$ r d}Y nw xY w|t          t                    k    rt          S t
          S )z@Return the row taxonomy for a spritesheet with *row_count* rows.r   )r   	TypeError
ValueErrorlenr<   r8   )rI   rowss     r   state_rows_for_gridrP      se    9>""z"    s#$$$$s    **Nc                    t          |          }t          |           D ])}	 |                    |          c S # t          $ r Y &w xY wdS )zEReturn the spritesheet row index for *state* (clamped, never raises).r   )rP   rH   indexrM   )r?   rI   rO   names       r   state_row_indexrT      sh    y))D!%((  	::d##### 	 	 	H	1s   9
AA)r   r	   r
   r	   )r   r	   r
   r   )r   )r   r	   r   r   r
   r   )r?   r@   r
   rA   )rI   rJ   r
   r7   )N)r?   r@   rI   rJ   r
   r   )#r,   
__future__r   enumr   FRAME_WFRAME_HFRAMES_PER_STATELOOP_MSr   r   r   r   r   r   r   r   rE   r!   r-   rD   r.   r/   r0   r1   r2   r8   __annotations__r3   r<   r=   r>   rH   rP   rT   r4   r   r   <module>r\      s     # " " " " "       

    
 		1 1 1 1 qL   V V V Vb b b b b
    sD   ( MMLOOM	   	 	 	 	 MOO
  
 
 
 
 )
 ( ( ( ( M(--/M(--x8M(--y9L+Y7OHO13OHO13X-35-    , , , ,	 	 	 	      r   