
    pHh                     >    S SK 7  SSKrSSKrSSKJr   " S S5      rg)   )*    N)	Stopwatchc                      \ rS rSr/ SQr\R                  " 5         \R                  R                  5         \R                  R                  SS5      r	SSS/4S\
S\4S jjrS	 rS
 rS rS rS\
4S jrS rSS jrSS jrS rSS jrSrg)Core   )@)   r	   r	   )r   =      )r         )D   r      )   r   ^   )   r   (   )      r   )      r   )\   /   r   )   E   r   )   J   r   )r   G   .   )r   A   f   r   r   r   r   r   r   r#   )r   r   r   )r   w      )!   U   r%   )   7      )   r      )r%   )   P   )r%   "   r   )   2   r   )   b   r   )5   r	   r   )r      r   )r      r'   )r         )r&   r&   r&   	   r:   r:   r9   r%   r%   r%   )      r%   )i      r%   )   r	   r%   )r%   r      )r%   a      )r%      3   )r%      r   )r*          )         )+      r4   )   rM      )r      r%   )r   r   r      rR   rR   rQ   r;   )r      r%   )      r%   )      r+   )r%         )r%   rW   rT   )r%      r   )r%      r   )r%      rF   )r=         )r         )r?      rV   )r7   r%   rS   )   rb   rb      rd   rd   rc   Consolas   Ncartcontrollersc                    S U l         [        5       U l        [        S5       Vs/ s H  nSPM     snU l        SU l        SU l        [        S5       n[        R                  " U5      U l
        S S S 5        SU R                  R                  5       ;   a  U R                  S   nU[        L at  [        US5       nUR                  5       nS S S 5        / U l        [        S[        U5      S5       H-  nU R                  R!                  XS   XSS-      XSS	-      45        M/     OXPl        O["        R$                  U l        S U l        S S /U l        [+        U R                  5      U l        [.        R1                  U R,                  5      U l        U R.                  U R.                  R,                  l        [3        U R.                  5      U l        [6        R9                  U R4                  5      U l        US   b  U R;                  US   5        US   b  U R;                  US   SS
9  Ub  U R=                  U5        g g s  snf ! , (       d  f       GN= f! , (       d  f       GN= f)Nc                      g N rl       :c:\Users\trevor\Downloads\nes_v0.5\nes_v0.5\engine\core.py<lambda>Core.__init__.<locals>.<lambda>$   s    Trm   @   r   r   zconfig.jsonpalleterb      player)	interruptr   	stopwatchrangefps_listfps_ptrfpsopenjsonloadconfigkeysstrreadpalettelenappendr   DEFAULT_PALETTErg   rh   FrameframeppuPPUBusbuscpuCPUattach_controllerattach_cart)selfrg   rh   ifpals         rn   __init__Core.__init__"   s   !DN[DN %b	*	1Q	*DMDLDH 
m	IIaLdk 
 DKK$$&&KK	"c	#t_# q#c(A&A
,,

svsQ3xqS:
; ' ))dlDId|Dt||$DJwwtzz"DHDHHNN488}DHwwtxx DH1~!
[^,1~!
[^A6
t I +
 
	 _s   H6H;8I;
I

Ic                 J    U R                   R                  U R                  S9  g N)frame_interrupt)r   reset_and_runcore_interruptr   s    rn   runCore.runN   s    HH4+>+>?rm   c                 J    U R                   R                  U R                  S9  g r   )r   r   r   r   s    rn   run_without_resetCore.run_without_resetQ   s    HHLL!4!4L5rm   c                     U R                   R                  5         U R                  R                  5         U R                  R                  5         g rk   )r   resetr   r   r   s    rn   r   
Core.resetT   s,    HHNNHHNNHHNNrm   c                    U R                   R                  U R                  SS9  U R                  R	                  5       nXR
                  U R                  '   U R                  S-   S-  U l        S[        U R
                  5      -  U l        SU-
  nU R                  5         U R                   R                  U R                  5        g )NT)	new_framer   ?   rq   g?)r   renderr   ry   lapr{   r|   sumr}   rx   update)r   	frametime
sleep_times      rn   r   Core.core_interruptY   s    JJdhh$/""$I"+MM$,,<<!#b(DLC&&DH	!JNNJJdhhrm   c                 F    Xl         U R                  R                  U5        g rk   )rg   r   r   )r   rg   s     rn   r   Core.attach_cartd   s    IHHrm   c                 F    S U l         U R                  R                  5         g rk   )rg   r   detach_cartr   s    rn   r   Core.detach_carth   s    DIHHrm   c                 R    XR                   U'   U R                  R                  XS9  g Nrv   )rh   r   r   )r   
controllerrw   s      rn   r   Core.attach_controllerl   s%    )VHHz9rm   c                 T    S U R                   U'   U R                  R                  US9  g r   )rh   r   detach_controller)r   rw   s     rn   r   Core.detach_controllerp   s'    #DVHHf-rm   c                   ^  U 4S jnU" UR                  S5      5        SnSnU(       Ga  [        R                  R                  5        H  nUR                  [        R
                  :X  a  ST R                  l        SnSq[        5         UR                  [        R                  :X  d  M`  UR                  [        R                  :X  a  SnM  UR                  [        R                  :X  a  US S nM  UR                  [        R                  :X  a  Sn  g X5R                  -  nM     U" X-   R                  S5      5        U(       a  GM  U$ )Nc                   > U  Vs/ s H$  n[         R                  R                  USS5      PM&     nn[        S U 5       5      n[	        S U 5       5      n[
        R                  " US-   US-   45      nUR                  S5        SnU H)  nUR                  USU45        XgR                  5       -  nM+     TR                  R                  R                  US5        [
        R                  R                  5         g s  snf )	NTr;   c              3   @   #    U  H  oR                  5       v   M     g 7frk   	get_width.0texts     rn   	<genexpr>8Core.input_prompt.<locals>.render_box.<locals>.<genexpr>{        >~t..""~   c              3   @   #    U  H  oR                  5       v   M     g 7frk   
get_heightr   s     rn   r   r   |        @??$$r   rf   r"   
   r   r   r   FONTr   maxr   pygameSurfacefillblitr   r   windowdisplayflip	
text_lineslinerendered_lineswidthheightboxy_offsetr   r   s	           rn   
render_box%Core.input_prompt.<locals>.render_boxy       R\]R\$		((t_ER\n]>~>>e@@@fNNEBJ45c	hhyh $H~&OO%% ! jjS&)nn ^   +C<
 TF)splitr   eventgettypeQUITr   killedkeep_runningexitKEYDOWNkeyK_RETURNK_BACKSPACEK_ESCAPEunicode)r   prompt_textr   	input_strinput_activer   s   `     rn   input_promptCore.input_promptw   s     {  &'IL
<<##%%::$ $((/,,
&::'YY&//) LyyF...!#2IyyFOO+ L&I! &$ +)0067' ,( rm   c                 
  ^  U 4S jnU" UR                  S5      5        [        5       nUR                  5         UR                  5       U:  a  [        R
                  R                  5        H~  nUR                  [        R                  :X  a  ST R                  l
        Sq[        5         UR                  [        R                  :X  d  M^  UR                  [        R                  :X  d  M~    g    UR                  5       U:  a  M  g g )Nc                   > U  Vs/ s H$  n[         R                  R                  USS5      PM&     nn[        S U 5       5      n[	        S U 5       5      n[
        R                  " US-   US-   45      nUR                  S5        SnU H)  nUR                  USU45        XgR                  5       -  nM+     TR                  R                  R                  US5        [
        R                  R                  5         g s  snf )	NTr;   c              3   @   #    U  H  oR                  5       v   M     g 7frk   r   r   s     rn   r   ;Core.display_message.<locals>.render_box.<locals>.<genexpr>   r   r   c              3   @   #    U  H  oR                  5       v   M     g 7frk   r   r   s     rn   r   r      r   r   rf   r"   r   r   r   r   s	           rn   r   (Core.display_message.<locals>.render_box   r   r   r   TF)r   r   r   timer   r   r   r   r   r   r   r   r   r   r   r   )r   messagedurationr   ry   r   s   `     rn   display_messageCore.display_message   s     w}}T"#IOO
..
X
%<<##%%::$ $((/,
&::'YY&//) & ..
X
%rm   )r   rg   r   rh   r   r}   r{   r|   r   rx   r   r   ry   )r   )ru   )__name__
__module____qualname____firstlineno__r   r   initfontSysFontr   Cart
Controllerr   r   r   r   r   r   r   r   r   r   r  __static_attributes__rl   rm   rn   r   r      s    /& 	++-++			Z	,$"&4, *4 *Z *X@6
	 d :.%Prm   r   )r   r   r   engine.stopwatchr   r   rl   rm   rn   <module>r     s       &p prm   