
    Ii0                     V    S r SSKJr  \(       a  SSKJr  SSKJrJrJr   " S S5      r	g	)
z0Mixin providing action set management for games.    )TYPE_CHECKING   )Player   )Action	ActionSetResolvedActionc                       \ rS rSrSrSSS\\   4S jrSSS\S\S-  4S	 jr	SSS
\SS4S jr
SSS\SS4S jrSSS\S\S-  4S jrSSS\S\4S jrSSS\\   4S jrSSS\\   4S jrSrg)ActionSetSystemMixin   zManage per-player action sets and resolve action state.

Expected Game attributes:
    player_action_sets: dict[str, list[ActionSet]].
playerr   returnc                 N    U R                   R                  UR                  / 5      $ )z-Get ordered list of action sets for a player.)player_action_setsgetid)selfr   s     Hc:\Users\dbart\PlayPalace11\server\game_utils\action_set_system_mixin.pyget_action_sets$ActionSetSystemMixin.get_action_sets   s    &&**699b99    nameNc                 \    U R                  U5       H  nUR                  U:X  d  M  Us  $    g)z/Get a specific action set by name for a player.N)r   r   )r   r   r   
action_sets       r   get_action_set#ActionSetSystemMixin.get_action_set   s.    ..v6J$&!! 7 r   r   c                     UR                   U R                  ;  a  / U R                  UR                   '   U R                  UR                      R                  U5        g)z8Add an action set to a player (appended to end of list).N)r   r   append)r   r   r   s      r   add_action_set#ActionSetSystemMixin.add_action_set   sE    99D33313D##FII.		*11*=r   c                     UR                   U R                  ;   aS  U R                  UR                       Vs/ s H  o3R                  U:w  d  M  UPM     snU R                  UR                   '   ggs  snf )z+Remove an action set from a player by name.N)r   r   r   )r   r   r   ss       r   remove_action_set&ActionSetSystemMixin.remove_action_set#   s^    99///22699=2=a4=2D##FII. 02s   A/A/	action_idc                 l    U R                  U5       H  nUR                  U5      nU(       d  M  Us  $    g)z:Find an action by ID across all of a player's action sets.N)r   
get_action)r   r   r%   r   actions        r   find_action ActionSetSystemMixin.find_action*   s6    ..v6J**95Fv 7 r   r(   c                     U R                  U5       H7  nUR                  UR                  5      (       d  M%  UR                  XU5      s  $    [	        UUR
                  SSSS9$ )z-Resolve a single action's state for a player.TN)r(   labelenableddisabled_reasonvisible)r   r'   r   resolve_actionr	   r,   )r   r   r(   r   s       r   r0   #ActionSetSystemMixin.resolve_action2   sc     ..v6J$$VYY//!00vFF 7 ,, 
 	
r   c                 z    / nU R                  U5       H#  nUR                  UR                  X5      5        M%     U$ )zHGet all visible (enabled and not hidden) actions for a player, in order.)r   extendget_visible_actionsr   r   resultr   s       r   get_all_visible_actions,ActionSetSystemMixin.get_all_visible_actionsA   8    ..v6JMM*88FG 7r   c                 z    / nU R                  U5       H#  nUR                  UR                  X5      5        M%     U$ )zFGet all enabled actions for a player (for the actions menu), in order.)r   r3   get_enabled_actionsr5   s       r   get_all_enabled_actions,ActionSetSystemMixin.get_all_enabled_actionsH   r9   r    )__name__
__module____qualname____firstlineno____doc__listr   r   strr   r   r#   r   r)   r	   r0   r7   r<   __static_attributes__r>   r   r   r   r      s    :h :4	? :X S Y=M >X >9 > >   ( s v} 
X 
v 
. 
h 4;O h 4;O r   r   N)
rC   typingr   
games.baser   actionsr   r   r	   r   r>   r   r   <module>rJ      s#    6  # 6 6B Br   