
    Ii                         S r SSKJrJr  \(       a  SSKJr   " S S5      rS\S   S	\S   4S
 jrS\S	\S   S-  4S jr	g)z8Game registry for registering and looking up game types.    )TypeTYPE_CHECKING   )Gamec                      \ rS rSr% Sr0 r\\\S   4   \	S'   \
S\S   SS4S j5       r\
S	\S\S   S-  4S
 j5       r\
S	\S\S   S-  4S j5       r\
S\\S      4S j5       r\
S\S\\   4S j5       r\
S\\\\S      4   4S j5       rSrg)GameRegistry	   z%Registry of all available game types.r   _games
game_classreturnNc                 @    UR                  5       nXR                  U'   g)zRegister a game class.N)get_typer
   )clsr   	game_types      4c:\Users\dbart\PlayPalace11\server\games\registry.pyregisterGameRegistry.register   s     '')	 *

9    r   c                 8    U R                   R                  U5      $ zGet a game class by type.)r
   getr   r   s     r   r   GameRegistry.get   s     zz~~i((r   c                 $    U R                  U5      $ )z;Backward compatible alias for getting a game class by type.)r   r   s     r   get_game_classGameRegistry.get_game_class   s     wwy!!r   c                 H    [        U R                  R                  5       5      $ )z Get all registered game classes.)listr
   values)r   s    r   get_allGameRegistry.get_all   s     CJJ%%'((r   	pref_namec                     / nU R                   R                  5        H)  u  p4U[        US/ 5      ;   d  M  UR                  U5        M+     UR	                  5         U$ )zReturn game type strings that declare a given preference as relevant.

Results are sorted alphabetically for stable menu ordering.
relevant_preferences)r
   itemsgetattrappendsort)r   r"   resultr   game_clss        r   get_games_for_preference%GameRegistry.get_games_for_preference#   sQ     #&::#3#3#5IGH.DbIIi( $6 	r   c                     0 nU R                   R                  5        H/  nUR                  5       nX1;  a  / X'   X   R                  U5        M1     U$ )z Get games organized by category.)r
   r   get_categoryr'   )r   
categoriesr   categorys       r   get_by_categoryGameRegistry.get_by_category0   sU     57
**++-J!..0H)')
$ ''
3	 .
 r    )__name__
__module____qualname____firstlineno____doc__r
   dictstrr   __annotations__classmethodr   r   r   r   r    r+   r1   __static_attributes__r3   r   r   r   r   	   s   /&(FDd6l"#(+$v, +4 + +
 )C )DL4$7 ) ) "s "tF|d/B " " )T&\* ) ) 
 
c 
 
 S$tF|*<%< =  r   r   r   r   r   c                 0    [         R                  U 5        U $ )z#Decorator to register a game class.)r   r   )r   s    r   register_gamer?   <   s    *%r   r   Nc                 ,    [         R                  U 5      $ r   )r   r   )r   s    r   r   r   B   s    I&&r   )
r8   typingr   r   baser   r   r?   r:   r   r3   r   r   <module>rC      sS    > &0 0fd6l tF| 'c 'd6lT&9 'r   