
    Ii                         % S r SSKJrJr  SSKJr  SSKJrJrJ	r	  \R                  1r\\   \S'   S\S\4S	 jr\ " S
 S\5      5       rg)z'Race state management for Mile by Mile.    )	dataclassfield)DataClassJSONMixin   )Card
HazardType
SafetyTypeNON_CRITICAL_PROBLEMShazardreturnc                     U [         ;  $ )a  Check if a hazard is a critical problem.

Critical problems prevent playing distance cards entirely.
Non-critical problems (like speed limit) only restrict but don't block.

Args:
    hazard: The hazard type to check.

Returns:
    True if the hazard is critical, False otherwise.
)r
   )r   s    <c:\Users\dbart\PlayPalace11\server\games\milebymile\state.pyis_critical_problemr      s     ...    c                   &   \ rS rSr% SrSr\\S'   \" \	S9r
\	\   \S'   \" \	S9r\	\   \S'   \" \	S9r\	\   \S'   S	r\\S
'   Sr\\S'   Sr\\S'   S\S\4S jrS\S\4S jrS\4S jrS\SS4S jrS\SS4S jrS\SS4S jrS\4S jrSS jrSrg)	RaceState   z8Per-team race state for Mile by Mile (resets each race).r   miles)default_factoryproblemssafetiesbattle_pileFused_200_miledirty_trick_countT	has_karmaproblem_typer   c                     XR                   ;   $ )z%Check if team has a specific problem.)r   selfr   s     r   has_problemRaceState.has_problem)   s    }},,r   safety_typec                     XR                   ;   $ )z$Check if team has a specific safety.)r   r   r"   s     r   
has_safetyRaceState.has_safety-   s    mm++r   c                 :    [        S U R                   5       5      $ )z_Check if team has any critical problems.

Non-critical problems like speed limit are excluded.
c              3   8   #    U  H  n[        U5      v   M     g 7f)N)r   ).0ps     r   	<genexpr>,RaceState.has_any_problem.<locals>.<genexpr>6   s     A=a&q))=s   )anyr   r   s    r   has_any_problemRaceState.has_any_problem1   s    
 A4==AAAr   Nc                 Z    XR                   ;  a  U R                   R                  U5        gg)zAdd a problem to the team.N)r   appendr   s     r   add_problemRaceState.add_problem8   s#    }},MM  . -r   c                 Z    XR                   ;   a  U R                   R                  U5        gg)zRemove a problem from the team.N)r   remover   s     r   remove_problemRaceState.remove_problem=   s#    ==(MM  . )r   c                 Z    XR                   ;  a  U R                   R                  U5        gg)zAdd a safety to the team.N)r   r2   r$   s     r   
add_safetyRaceState.add_safetyB   s#    mm+MM  - ,r   c                     U R                  [        R                  5      (       a:  U R                   H)  nU[        R
                  [        R                  4;  d  M)    g   gU R                  5       (       + $ )z&Check if team can play distance cards.FT)r%   r	   RIGHT_OF_WAYr   r   STOPSPEED_LIMITr/   )r   problems     r   can_play_distanceRaceState.can_play_distanceG   sX     ??:2233==:??J4J4J"KK  ) '')))r   c                     SU l         [        R                  /U l        / U l        / U l        SU l        SU l        SU l        g)zReset state for a new race.r   FTN)	r   r   r>   r   r   r   r   r   r   r.   s    r   resetRaceState.resetS   s=    
#)"!"r   )r   r   r   r   r   r   r   )r   N)__name__
__module____qualname____firstlineno____doc__r   int__annotations__r   listr   strr   r   r   r   boolr   r   r    r%   r/   r3   r7   r:   rA   rD   __static_attributes__ r   r   r   r      s    BE3N5Hd3i55Hd3i5#D9Kd9M4sIt- - -,c ,d ,B B/ / /
/3 /4 /
.c .d .

*4 
*r   r   N)rJ   dataclassesr   r   mashumaro.mixins.jsonr   cardsr   r   r	   r?   r
   setrN   rL   rO   r   r   rQ   r   r   <module>rV      s]    - ( 4 / / $.#9#9": s3x :/ / / =" = =r   