a
    6^i                     @   s  d dl mZmZmZmZmZ d dlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZ d dlZd dlZd dlmZmZ d dlmZmZmZ d dlmZmZmZ d dlZd dlZdd Z d	d
 Z!i Z"i Z#dZ$dZ%dd Z&dd Z'dd Z(dd Z)G dd de*Z+i Z,dd Z-dd Z.dd Z/dS )    )divisionabsolute_importwith_statementprint_functionunicode_literals)PY2
basestringbchrbordchropenpystrrangeroundstrtobytesunicodeN)CONTROLLERDEVICEADDEDCONTROLLERDEVICEREMOVED)CONTROLLERAXISMOTIONCONTROLLERBUTTONDOWNCONTROLLERBUTTONUP)
Controllerget_string_for_axisget_string_for_buttonc                  C   s  z>t jdd} tj|  W d    n1 s20    Y  W n tyP   Y n0 z>t jdd} tj|  W d    n1 s0    Y  W n ty   Y n0 zHttj	
t jjdd} tj|  W d    n1 s0    Y  W n ty   Y n0 d S )Nzrenpycontrollerdb.txtFzgamecontrollerdb.txtrb)renpyloaderloadpygame_sdl2
controlleradd_mappings	Exceptionr   ospathjoinconfig
renpy_base)f r)   >C:\Users\PahaGest\Downloads\Selene\renpy\display\controller.pyload_mappings%   s    ...r+   c                  C   s   t jjjsdS ztj  t  W n ty@   t j	j
  Y n0 t j	jjsz ttj D ]} t|  q\W n ty   t j	j
  Y n0 dS )z%
    Initialize gamepad support.
    N)r   gamepreferencespad_enabledr   r    initr+   r"   displaylog	exception	interface	safe_moder   	get_countstart)ir)   r)   r*   r/   :   s    



r/   i @  Fc                 C   s   t jjjsdS trdS d| |}|r.d| }|g}t jjrP|t j| n|t jj	
|d tjt jjj||dd}tj| dS )zf
    Creates an EVENTNAME event for the given state and name, and post it
    to the event queue.
    Nz	pad_{}_{}Zrepeat_r)   F)
eventnamesr    up)r   r0   r3   keyboard_focusedignoreformatr&   map_pad_eventextendpad_bindingsgetr   eventEventcore	EVENTNAMEpygamepost)controlstaterepeatnamenamesevr)   r)   r*   
post_event]   s     

rM   c                   C   s   t rdS dS dS )zC
    Returns true if a controller exists, and False otherwise.
    TFN)controllersr)   r)   r)   r*   exists|   s    rO   c                 C   s(   | t v r$t |    t | = tj  dS )z(
    Quits the controller at index.
    N)rN   quitr   exportsrestart_interaction)indexr)   r)   r*   rP      s    rP   c                 C   s   t |  t| }| sdS tjd| | | f  tjj	j
dkrztjjD ]$}| |rTtjd  dS qTz|  |t| < W n ty   tjj  Y n0 tj  dS )z)
    Starts the controller at index.
    Nzcontroller: %r %r %rallz)Controller found in blocklist, not using.)rP   r   is_controllerr   rQ   	write_logget_guid_stringget_namer,   r-   r.   r&   controller_blocklist
startswithr/   rN   r"   r0   r1   r2   rR   )rS   cprefixr)   r)   r*   r6      s     "r6   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	PadEventzK
    This stores the information about a PadEvent, to trigger repeats.
    c                 C   s   || _ d | _d| _d S )Nr   )rG   rH   repeat_time)selfrG   r)   r)   r*   __init__   s    zPadEvent.__init__c                 C   sH   || _ tjj tjj | _t| j	| j d tjj
d urDtjj
  d S )NF)rH   r   r0   rC   get_timer&   controller_first_repeatr^   rM   rG   r3   
hide_mouse)r_   rH   r)   r)   r*   rA      s
    zPadEvent.eventc                 C   sh   | j tjjvrd S tjj }|| jk r,d S | jtjj | _| j|k rT|tjj | _t	| j
| j d d S )NT)rH   r   r&   controller_repeat_statesr0   rC   ra   r^   controller_repeatrM   rG   )r_   nowr)   r)   r*   rI      s    

zPadEvent.repeatN)__name__
__module____qualname____doc__r`   rA   rI   r)   r)   r)   r*   r]      s   
r]   c                 C   s2   t | d }|d u r$t|  }t | < || d S N)
pad_eventsr@   r]   rA   )rG   rH   per)   r)   r*   controller_event   s    rn   c                  C   s   t  D ]} |   qd S rk   )rl   valuesrI   )rm   r)   r)   r*   periodic   s    rp   c                 C   s  | j tkrt| j dS | j tkr0t| j dS | j tkr| jtkrJd}n| jt k r\d}nd}t	
| j| jfd}||krdS |t	| j| jf< tt| j| dS | j ttfv r| j tkrd}nd}tt| j| dS | j tjtjtjtjtjtjtjfv rtjjsdS | S )z
    Processes an event and returns the same event, a new event, or None if
    the event has been processed and should be ignored.
    Nposnegzeropressrelease)typer   r6   whichr   rP   r   value	THRESHOLDaxis_positionsr@   axisrn   r   r   r   r   buttonrE   JOYAXISMOTIONJOYHATMOTIONJOYBALLMOTIONJOYBUTTONDOWNJOYBUTTONUPJOYDEVICEADDEDJOYDEVICEREMOVEDr   r&   pass_joystick_events)rL   rq   old_posZprr)   r)   r*   rA      sH    








rA   )0
__future__r   r   r   r   r   renpy.compatr   r   r	   r
   r   r   r   r   r   r   r   r   r#   r   r   r   r   r   r   pygame_sdl2.controllerr   r   r   rE   r   r+   r/   rN   rz   ry   r;   rM   rO   rP   r6   objectr]   rl   rn   rp   rA   r)   r)   r)   r*   <module>   s.   8-	