
    Ii^                     b    S r SSKJrJr  \(       a  SSKJrJr  SSKJr  SSK	J
r
   " S S5      rg	)
z0Mixin providing communication helpers for games.    )TYPE_CHECKINGCallable   )GamePlayer)User)Localizationc                       \ rS rSrSrSS\S\SSSS4S	 jjr  SS
\S\SSSS4S jjr SSSS\S\S\SS4
S jjrS
\S\	SS/\4   4S jr
Srg)GameCommunicationMixin   zProvide message broadcasting and localization helpers.

Expected Game attributes:
    players: list[Player].
    get_user(player) -> User | None.
NtextbufferexcludezPlayer | Nonereturnc                     U R                    HW  nXCL a  M	  [        U S5      (       a  U R                  XAU5        U R                  U5      nU(       d  MF  UR	                  X5        MY     g)z8Send a message to all players, optionally excluding one.record_transcript_eventN)playershasattrr   get_userspeak)selfr   r   r   playerusers         Ic:\Users\dbart\PlayPalace11\server\game_utils\game_communication_mixin.py	broadcast GameCommunicationMixin.broadcast   sV    llF t677,,V6B==(Dt

4( #    
message_idc                 .   U R                    H  nXSL a  M	  U R                  U5      nU(       a  UR                  OSn[        R                  " Xq40 UD6n[        U S5      (       a  U R                  XXU5        U(       d  Mr  UR                  " X40 UD6  M     g)zCSend a localized message to all players (each in their own locale).enr   N)r   r   localer	   getr   r   speak_l)	r   r   r   r   kwargsr   r   r!   	localizeds	            r   broadcast_l"GameCommunicationMixin.broadcast_l   s     llF ==(D$(T[[dF$((FvFIt677,,VGtZ:6: #r   r   r   personal_message_idothers_message_idc                 R   U R                  U5      nU(       a  UR                  OSn[        R                  " Xr40 UD6n[	        U S5      (       a  U R                  XU5        U(       a  UR                  " X$40 UD6  U R                   H  n	XL a  M	  U R                  U	5      n
U
(       a  U
R                  OSn[        R                  " Xs4SUR                  0UD6n[	        U S5      (       a  U R                  XU5        U
(       d  M~  U
R                  " X44SUR                  0UD6  M     g)a  
Send a personalized message to one player and a different message to everyone else.

The player receives personal_message_id, while all other players receive
others_message_id with an additional player=player.name argument.

Args:
    player: The player who gets the personal message.
    personal_message_id: Message ID for the player (e.g., "you-rolled").
    others_message_id: Message ID for everyone else (e.g., "player-rolled").
    buffer: Audio buffer for speech.
    **kwargs: Additional arguments passed to all speak_l calls.
r    r   r   N)	r   r!   r	   r"   r   r   r#   r   name)r   r   r(   r)   r   r$   r   r!   personal_textpuothers_texts               r   broadcast_personal_l+GameCommunicationMixin.broadcast_personal_l2   s    * }}V$ $$$((OO4233((GLL,??A{a A!"QXXF&**6cV[[c\bcKt677,,QVDq		+RFKKR6R r   r   c                 ,   ^ SSSSS[         4U4S jjnU$ )z
Create a localized label callable for use in action definitions.

Usage:
    self.define_action("roll", label=self.label_l("pig-roll"), ...)
gamer   r   r   r   c                 ~   > U R                  U5      nU(       a  UR                  OSn[        R                  " UT5      $ )z2Resolve a localized label for the player's locale.r    )r   r!   r	   r"   )r3   r   r   r!   r   s       r   	get_label1GameCommunicationMixin.label_l.<locals>.get_labelb   s1    ==(D$(T[[dF##FJ77r   )str)r   r   r5   s    ` r   label_lGameCommunicationMixin.label_lZ   s%    	8F 	8H 	8 	8 r    )tableN)r;   )__name__
__module____qualname____firstlineno____doc__r7   r   r&   r0   r   r8   __static_attributes__r:   r   r   r   r      s    	)c 	)3 	)? 	)^b 	) #'	;; ; !	; 
;0 &S&S !&S 	&S
 &S 
&SP# (FH3Es3J*K r   r   N)r@   typingr   r   
games.baser   r   server.core.users.baser   messages.localizationr	   r   r:   r   r   <module>rF      s#    6 *)+ 0\ \r   