a
    }h0                    @   s   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
mZ d dlmZ d dlmZ d dlmZ d dlmZmZmZmZ ejdkrd dlZG dd	 d	ZdS )
    N)Image	ImageGrab)timezone)mean)BASE_DIR)	new_printset_sub_logset_sbc_statusget_image_positionntc                   @   s:  e Zd ZdddddZed d ed d  ed	< ed
 d ed d  ed< dd Zdd Zdde fddZdd Z	dd Z
dDddZdEddZdFddZdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 ZdGd5d6ZdHd7d8Zd9d: Zd;d< Zd=d> Zd?d@ ZdIdAdBZdCS )JPlayFootballUtils)/  >  )r     )L  r   )r   r   )left_topleft_button	right_topright_buttonr   r   r   widthr      heightc                 C   s4   ddl m} || _| jj| _| jj| _| jj| _d S )Nr   )PublicMoves)utils.public_movesr   public_movesfifa_account
sbc_workerps4_buttons)selfpublic_moves_instancer    r    KC:\Users\Administrator\Downloads\futplus_django\utils\play_footbal_utils.py__init__   s
    

zPlayFootballUtils.__init__c           +   	   C   sL  t j| jd  d| _t| jd d}d}dddd| jj}g }| jj}| j	
  t }t }t  }}	t }
t }d}t }t }t }d}t }t }d| _d}|d	7 }| j}|d
}dddd|}dddd|}| jdkrdddd|}|rtd| jd  |d   k rVtd| jd  k sdn | jdkr|  }|r|| jkr|d	7 }|d| j|f n
|rd}|dkrd}|d| j|f || _| jd	kr|d td| jd  k rd}d}n:| jdkr.|d td| jd  kr.d}d}nd}d}|t tj|d k rtt }| j	jdd | j	jdd |t tj|d k r|t tjdd k r|t tjdd k rt }| j	jddd | j	jdd | j	jdd d}t }| jd	krj|d td| jd  k rj|t tjd d k rj| j	jd!d | j	j
dd t }nf| jdkr|d td"| jd  kr|t tjd d k r| j	jd!d | j	j
dd t }| jd	krN|d td#| jd  k s|d td"| jd  krN| jd	krN|	t tjdd k rN| j	jd!d d| _| jdkr|d td$| jd  ks|d td| jd  k r| jd	kr|	t tjdd k r| j	jd!d d| _| jd	krF|d td%| jd  krFtd&| jd'  |d	   kr,td(| jd'  krFn n| | t }qF| jdkr|d td)| jd  k rtd&| jd'  |d	   krtd(| jd'  krn n| | t }qFt| |d*| jd |d  td+| jd  k rJtd&| jd'  |d	   kr0td(| jd'  krJn n| | t }qFt|d,d-d.k r|rt| j	  d}| |d
|d,|d*| j}| |d,| j}|d }|  |d*d| j d }| jd	krL|d
d td/| jd  k rL| jdkrL|d
d |krL|	t tjdd k rL| j	j!dd d	| _| jdkr|d
d td0| jd  kr|d
d |k r| jdkr|	t tjdd k r| j	j!dd d	| _| jd	krpd|| k rp|d
d |d k rptd1| jd  |  k r.td2| jd  k rpn n>|t tjdd k rp| "|||  t }t }	q| jdk	rd|| k 	r|d
d |d k	rtd3| jd  |  krtd4| jd  k	rn n>|t tjdd k 	r| "|||  t }t }	q|	r|t tjdd k 	r| #|d
|}| j$|d5d6\} }!| j	j%| |!d7d | j	jd!d | j	j
d7d t }q|t tjdd k 
r| jd	k
r|d
d td2| jd  k
r|d
d	 d8k 
s|d
d	 d9k
r|d
d	 d8k 
rJ| j	jdd | j	j%dd:dd | j	j&dd nB|d
d	 d9k
r| j	jdd | j	j%dd	dd | j	j&dd t }q|t tjdd k r| jdkr|d
d td4| jd  k r|d
d	 d8k s|d
d	 d9kr|d
d	 d8k rL| j	jdd | j	j%dd:dd | j	j&dd nB|d
d	 d9kr| j	jdd | j	j%dd	dd | j	j&dd t }nt| '|d
|d,|d*| j}"z,| j$|"d d5d6\}#}$| j	j%|#|$dd W n"   t(d;|" t(t)*  Y n0 qFt|d,d-d.krF| jd	kr|d
d td| jd  k r| jsp| j	j!dd d	| _|  |d,| jd }%|d
d |%kr|d
d td<| jd  krd=|d
d	   k rd>k rn n| j	+  d5}n| jdkrF|d
d td| jd  krF| js>| j	j!dd d	| _|  |d,| jd }%|d
d |%krF|d
d td?| jd  k rFd=|d
d	   k rd>k rFn n| j	+  d5}qg }|dkrt }|d	7 }d}&| j,s|t tjdd k r| j	-  | j./  | j,sV| j.0t1j23t4d@| jj dAdBrV| j	j&dCd | j,s| j.0t1j23t4d@| jj dDdBr| j	5  t67d7 d5}&| j,s|t tjdEd k r| j.0t1j23t4d@| jj dFdBs
| j.0t1j23t4d@| jj dGdBr,t| jdH | j.8  t67d	 q| j.0t1j23t4d@| jj dIdBrt| jdJ d5| _9| j.:  t67d	 | j	5  t67d	 | j	;  t67d	 dKS | j.0t1j23t4d@| jj dLdBrt| jdM d5| _9| j.:  t67d	 | j	;  t67d	 dKS | j.0t1j23t4d@| jj dNdBrXt| jdO d5| _9| j.:  t67d	 dKS | j,s| j.0t1j23t4d@| jj dPdBrt| jdQ d5| _9| j.:  dRS | j,sJ| j.0t1j23t4d@| jj dSdBs | j.0t1j23t4d@| jj dTdBs | j.0t1j23t4d@| jj dUdBrJt| jdV d5| _9| j.:  t67d	 dWS | j,s| j.0t1j23t4d@| jj dXdBs| j.0t1j23t4d@| jj dYdBrt| jdZ d5| _9| j.:  t67d	 dWS | j.0t1j23t4d@| jj d[dBr&t| jd\ | j.:  t67d	 | j	<  t67d dKS | j,s| j.0t1j23t4d@| jj d]dBrt| jd^ t=dD ]t}'| j	5  t67d	 | j./  | j.0t1j23t4d@| jj d_dBrht| jd` | j	  | j.8  | j	
  qh|dakr|| j.> r&t| jdb| j.>  d5| _9| j.:  t67d	 dRS | j.0t1j23t4d@| jj dcdBrt| jdd | j	?  t=dED ]}(| j	@  | j	<  qjnr|dekr|da dkrt| jdf | j	?  | j./  | j.8 })|)r| j.8  n| j	  | j	
  t67d7 |da dkr| j.0t1j23t4d@| jj dgdBrt| jdh d5| _9| j.:  t67d	 | j.A  t67dE | j.B  t67dE | j.Cdidj dRS | j.0t1j23t4d@| jj dkdBrt| jdl | j	?  t67d	 t=dD ]}*| j	5  t67dE qn|dm dkrFt| jdn| do | j	?  t67d	 | j	5  t67d	 n<t| jdn| dp | j	?  t67d	 | j	<  t67d	 |r|dq dkr| jDE  t| jdr|  dr| | jD_F| jDG  |r,|dqkr,|da dkr,t| jds | j	?  t67d	 t=daD ]}*| j	5  t67d	 q|t tjdmdt k r|t| jdu | j.:  | jDE  du| jD_F| jDG  dRS |d dkr| j	H  | j	  | j	I  | j	  | j	?  d| _| j	J|| |
t tjdvd k r|&r|
t tjdwd k r4|&r4| j	  | j	
  t }t }
|dakrt67d	 qd S )xN)targetFzstart playing one roundr      i0u  )psxboxsxbox360   r   ball  }      igq=
ףp?r   g\(\?zgame round not similar : zi will change round : grh|?g      @      )secondsgMb`?sleep_afterMbP?
press_time{Gz?)r4   r1   g/$?g?皙?gOn?gʡE?g}?5^I?gGz?g?r   gCl?gHzG?
enemy_teamg?5^I?my_team    gE?g!rh?gOn?gm?gm?g~jt?Tfloat_xy      ?)   r   zbest move compassg~jt?   {   gL7A`?utils/z_controls/corner_sign.pngscreen_shot_tmp.jpgg333333?z"_controls/squad_battle_in_game.png   z_controls/r2_player_search.pngz_controls/r2_recently_met.pngz#connect to other players page foundz_controls/instant_replay_2.pngzresume (instant reply 2) foundzits donez_controls/instant_replay.pngzresume (instant reply) foundz_controls/resume_match.pngzresume foundz_controls/opponent_select.pngzopponent selectzgame was donez*_controls/advance_for_end_of_the_match.pngz _controls/after_squad_game_1.pngz _controls/after_squad_game_2.pngz.advance end of game or after game 1 or 2 foundzgame is donez!_controls/win_squad_game_sign.pngz#_controls/win_moments_game_sign.pngzwin status found , game is donez_controls/resume_match_2.pngzresume match 2 foundedz_controls/need_help.pngzneed_help found _controls/injure_middle_game.pngzinjury found
   z%state found. game was done , state : z$_controls/penalty_kick_selection.pngzfind penalty kick selection   z*can not find ball in 30 time. check errorsz%_controls/select_side_middle_game.pngz6find select side middle game that mean connection lostps4_main	home_mainz'_controls/resume_match_after_injury.pngzresume after injury found   zcan not find ball z. press circlez. press cross<   zcan not find ball more than z*can not find ball , try to press 10 circle)minutesz%can not find ball more than 20 minuteg      ?   )K	threadingThreadupdate_minimap_datastartbreak_get_minimap_datar   r   getplatformr   press_crossr   	localtimeroundminimap_dataintmap_positionget_round_numberappend	timedelta
release_r1press_r1l1release_cross	r2_status
release_r2shootabsget_frontestlenZrelease_trianglepassing_best_playerget_second_behindestpress_r2	long_pass!calculate_initial_compass_bearingget_xbox_x_y_with_compasspress_left_joystick_floatsquaremove_best_directionprint	traceback
format_excZpress_trianglemaprelease_left_joystickr   get_screen_shot	has_imageospathjoinr   circletimesleeperrorsbreak_press_r1release_buttons_after_gameleftcrossrangejust_find_statereset_to_defaultup
close_gamelogin_to_accountgo_to_stater   refresh_from_dbstatussavepress_l1
release_l1press_left_joystick)+r   Zball_not_find_counterZnot_similar_round_counterZnot_find_ball_yZbulk_new_printZfifa_account_platformZlast_r1_press_timeZlast_l1_press_timeZlast_pass_timeZlast_long_pass_timeZlast_not_ball_found_crossZlast_shoot_timeminimap_counterZball_not_find_timeZlast_mini_pass_timeZlast_square_timeZtriangle_status	last_timeZlast_ball_found_time	l2_statusrY   ball_positionZenemy_x_numZenemy_y_numZnew_game_roundZlast_r1_sleepZlast_l1_timeZpass_best_playerZfrontest_target_itemfrontest_targetZsecond_behid_targetpass_compassfriend_x_numfriend_y_numZbest_move_compassZ
move_x_numZ
move_y_numZlast_defence_itemZsquad_battle_signr   iinerrors_resultnntr    r    r!   start_playing#   sB   
	
F
((
d
d
"






 

.

.


"




"





































































zPlayFootballUtils.start_playingminimap_screenshot_tmp.pngc           !      C   s8  | j d d | j d d | j d | j d d}t  }t||}W d    n1 s\0    Y  t|}|j\}}	| }
g }g }i }i }i }i }g }g }t	|D ]}t	|	D ]}|
||f }d|d   k rdk r<n nTd|d   k rd	k r<n n4d
|d   k r$dk r<n n|
| |
| d|d   k rXdk rnn nd|d   k rzdk rnn nd
|d   k rdk rnn nd}d}|D ]d}|d |d   k r|d k rn n6|d |d   k r|d k rn nd}|} qq|s&|
||f nH|| v rR|| 
| || 
| n|d g||< |d g||< d|d   k rd	k rn qd|d   k rdk rn qd|d   k rdk rn qd}d}|D ]d}|d |d   k r|d k rn n6|d |d   k r$|d k rn nd}|} q:q|sP|
||f q|| v r||| 
| || 
| q|d g||< |d g||< qqg }g }|D ],}|
tt|| tt|| f q|D ],}|
tt|| tt|| f qg } |r*tt|tt|f} | |||dS )Nr   r   r   r   r   )topr   r   r   F            r,      rG   rL   2   F   Tr+   d   rK   P   )r)   r8   r7   ru   )r[   mssnparraygrabr   	fromarraysizeloadr   r]   keysrZ   r   )!r   screen_namer   Zloop_start_timemonitorsctZ	img_arraylarge_imager   r   pixelsZmy_team_positionsZenemy_team_positionsZenemy_dic_xZenemy_dic_yZ
team_dic_xZ
team_dic_yZball_x_listZball_y_listxycurrent_pixelZbad_itemZbad_item_parentitemZ
bad_item_2Zbad_item_2_parentitem_2Znew_enemy_teamZnew_my_teamZenemyZm_teamr   r    r    r!   read_minimap_data  s    
.









P






P
**z#PlayFootballUtils.read_minimap_datac                 C   sz   d}|d7 }| j |d| _| jr"qv| jd rnt| jdg dkrnt| jdg dkrnd| _| jjd	d
 qd| _qd S )Nr   r   )r   r)   r8   rE   r7   Tr2   r3   F)r   rY   rS   rh   rT   ru   r   rV   r   counterr    r    r!   rQ   a  s    
z%PlayFootballUtils.update_minimap_datac           	      C   s   |   }t|}|j\}}| }t|D ]d}t|D ]V}|||f }|d tddv r8|d tddv r8|d tddv r8||f    S q8q,d S )	Nr        r         r,   -   )get_screen_from_minimapr   openr   r   r   )	r   large_image_namer   r   r   r   r   r   r   r    r    r!   get_ball_positionu  s    

z#PlayFootballUtils.get_ball_positionFc              
   C   s   |dkrt dzHtjg | jd| jdR d}|rB|W S d}|| |W S W n8 ty   t| jd|dt	
  | j|d	 d
 Y S 0 d S )NrG   z%minimap screen shot Permission deniedr   r   )bboxr   zget_screen_from_minimap try : z --- r   )try_counter)	Exceptionr   r   r[   rT   r   PermissionErrorr   r   rs   rt   r   )r   r   r   
return_picsnapshot	save_pathr    r    r!   r     s    

z)PlayFootballUtils.get_screen_from_minimapc              	      s  t  jd |rL fddtdD   fddtdD  t  jd d S |r fddtdD   fddtdD  t  jd	 d S tdD ]} j   j  qd
} jj jj jj jjfD ]P}t	d  j
   j
tjtd jj ddrd} q q|  qΈ j
  |d
krVt  jd  j  t	d nd S |dkrt  jd  j   j  d S  j
tjtd jj ddrЈ j  t	d  |d S d S )Nzselecting opponent .... c                    s   g | ]} j jd dqS r=   r0   r   r   .0ncr   r    r!   
<listcomp>      z4PlayFootballUtils.start_opponent.<locals>.<listcomp>r(   c                    s   g | ]} j jd dqS r   r   r   r   r   r    r!   r     r   zspecial game one selected c                    s   g | ]} j jd dqS r   r   r   r   r    r!   r     r   c                    s   g | ]} j jd dqS r   r   rightr   r   r    r!   r     r   zspecial game two selected r   r   rC   &_controls/select_squad_game_button.pngrD   z"no game left , refresh squad gamesrE   z8can not refresh opponent without loss, loss one opponent_controls/refresh_opponents.png)r   r   r   r   r   downr   r   r}   r~   r   rw   rx   ry   rz   r{   r   rU   rp   r   r|   start_opponent)r   	countdownspecial_game_onespecial_game_twor   Zhas_gameir    r   r!   r     s^    
 









z PlayFootballUtils.start_opponentc              	   C   sV  t | jd |dkrdd gS tdD ]}| j  | j  q$| jj| jj| jj| jjfD ]~}t	d | j
  | j
tjtd| jj ddr|  }|rd|  k rd	krn nd
}||g  S |  qZ|  qZt | jd | j  t	d | j
  | j
tjtd| jj ddrF| jjdd | jjdd | j|d dS )Nzselecting opponent 2.... r   zcan not find good opponentr(   rC   r   rD   r   H   semi_proz'no good game left , refresh squad gamesr   r=   r0   rE   )r   )r   r   r   r   r   r   r   r   r}   r~   r   rw   rx   ry   rz   r{   r   rU   get_opponent_ratingrp   r   start_opponent_2)r   r   r   r   current_opponent_ratingdifficulty_namer    r    r!   r     sD    
 




z"PlayFootballUtils.start_opponent_2c                 C   s\   t d}|ddddf }t d| | jjjdddd	}z
t|W S    Y d S 0 d S )
NrD   i@  i^  i  iC  zcrop_team_rate_tmp.jpgz6--psm 10 --oem 3 -c tessedit_char_whitelist=0123456789T)configconvert)cv2imreadimwriter   screen_utilsget_screen_textrZ   )r   imgcrop_team_nameZ	team_rater    r    r!   r     s    

z%PlayFootballUtils.get_opponent_ratingc                 C   s   |dkr^ddg}ddg}|D ]}|d |d k r|}q|D ] }|d |d k r:||kr:|}q:nTddg}ddg}|D ]}|d |d krr|}qr|D ] }|d |d kr||kr|}q|S )Nr     r   r    )r   points_listround_numberZbehind_pointZsecond_behindpointr    r    r!   rj     s$    z&PlayFootballUtils.get_second_behindestc                 C   sZ   |dkr0ddg}|D ]}|d |d kr|}qn&ddg}|D ]}|d |d k r<|}q<|S )Nr   r   r   r    )r   r   r   Zfront_pointr   r    r    r!   rg     s    zPlayFootballUtils.get_frontestc                 C   s  |  |d| j}|}d}t|d |dd  dk rrd}| jdkr^|d d |d f}n|d d |d f}| |d|}| j|dd	\}}d
}	|dk rd}	| jj|||	d | j  | jj|||	d |r| jj	dd | j
  | jjdd | j  | j	  |r"| j  | jj||dd | jjdd d| _| jdkrh| jjdddd n| jjdddd d}
| jdkr|d dks| jdkr|d dkrd
}
t|
 d S )Nr8   Tr   r)   i  Fr   rG   r;   r6   r   r5   r3   r0   皙?r@   g?r   r,   A   )rg   rT   rX   rf   rm   rn   r   ro   ra   r`   r   r_   triangler   rk   rc   r}   r~   )r   rY   Zdistance_with_defencer   Zfrontest_target_realZl1_r1r   r   r   r4   
sleep_timer    r    r!   rl      sH    





4zPlayFootballUtils.long_passc              	   C   s   d}|d7 }|dkrdS | j   td}|ddddf }td| | j tjt	d| j
j d	| drvq| j  td
 qd}|d7 }|dkrdS | j   td}|ddddf }td| | j tjt	d| j
j d	| drq| j  td
 qdS )Nr   r   r   FrD     zcrop_game_settings_tmp.jpgrC   z_game_settings/r=   rG   T)r   rw   r   r   r   rx   ry   rz   r{   r   r   rU   r   r   r}   r~   r   )r   Zimage_1Zimage_2countr   r   r    r    r!   select_game_setting|  sF    





z%PlayFootballUtils.select_game_settingc                 C   s  | j   td tdD ]}| j   td q| j   td | j   td t| jd | 	dd}|stdD ]}| j 
  qq | 	d	d
}|stdD ]}| j 
  qq | 	dd}|stdD ]}| j 
  qq | j   td | j   td | 	dd}|s>tdD ]}| j 
  q*q | 	dd}|sltdD ]}| j 
  qXq | j 
  td | j 
  td | j 
  td | j 
  td t| jd qq d S )Ng      @rE   r   r(   zi must be in game settingzdefending_select.pngzdefending_option.pngrG   z'auto_swiching_move_assistant_select.pngz'auto_swiching_move_assistant_option.pngz auto_player_switching_select.pngz auto_player_switching_option.pngr,   zuser_radar.pngzradar_red.pngzopponent_radar.pngzradar_blue.pngzend of setting settings ...)r   optionr}   r~   r   r   r   r   r   r   r|   r1r   r   )r   r   Zselect_optionr    r    r!   set_squad_game_settings  sn    


















z)PlayFootballUtils.set_squad_game_settingsc           
      C   sR  | j dd}|j\}}| }d }d }t|D ]}t|D ]}|||f }	|	d tddv r:|	d tddv r:|	d tddv r:|td	| jd
  k r|d u r|}|}|td| jd
  kr:|d u r|}|}q:q.|r
|td	| jd
  k r
|td| jd
  kr
dS |r,|td	| jd
  k r,dS |rN|td| jd
  krNdS dS )NT)r   r      r   r   r   r,   gK7?r   g/$?)r   r   r   r   rZ   r[   )
r   r   r   r   r   Zfirst_pointZ
last_pointr   r   r   r    r    r!   r\     s:    
6z"PlayFootballUtils.get_round_numberc                 C   sp  g }g }d }|dkr.|d t d| jd  ksP|dkrT|d t d| jd  k rT|S |D ]j}|d |d k rt|dks|d |d krX|dkrXt|d |d  t|d |d   dk rX|| qX|rZ|D ]}	| |	|}
zl|	d d |
d   k r|	d d k r>n n.|	d d |
d   k r<|	d d k sHn ||	 W q   Y q0 q|rl| ||}|S )	Nr   r   gd;O?r   r,   g%C?r   rK   )rZ   r[   rf   r]   get_nearest_point)r   r)   r8   r7   r   Zfront_playersZgood_playersZbest_playerr   r   Znearest_enemyr    r    r!   ri      s2    D0*0


z%PlayFootballUtils.passing_best_playerc                    s  |d t d| jd  k rV|dkr8dt d| jd  fn| jd t d| jd  f}n:|dkrtdt d| jd  fn| jd t d| jd  f}| ||}t|d |d  t d	| jd  k r|gS |dkrttt |d
d}ttt |dd}ttd
dd}	ttddd}
nZ|dkrpttt |d
d}ttt |dd}ttd
dd}	ttddd}
nd
gS || |	 |
 }g  d}|D ]}| ||}t|d |d  }t|d |d  }||| kr|| }t|d |d  t|d |d   }|dk rd}n$|dk r(d}n|dk r8d}nd}|dk r ttt || t || 7  q fdd|D }|S )Nr   g
ףp=
?r   r,   r   g rh?r   r=   g;On?r   r@   i  h  Z   r   rG   rK   rL   rH   (   c                    s   g | ]}| vr|qS r    r    )r   r   Zlist_cr    r!   r   y  r   z9PlayFootballUtils.move_best_direction.<locals>.<listcomp>)rZ   r[   rm   rf   listr   )r   r)   r8   r7   r   Zgoal_positionZgoal_compassabcdZcompass_listZmin_distanceZitem3Zenemy_compassZ
x_distanceZ
y_distance
differencedegZbest_directions_listr    r  r!   rq   %  sL    <:&

(



&z%PlayFootballUtils.move_best_directionc                 C   sx   t |ttfvs t |ttfvr(td|d |d  }|d |d  }t||tj d }|dk rpd| }n|}|S )u  
        Calculates the bearing between two points.
        The formulae used is the following:
            θ = atan2(sin(Δlong).cos(lat2),
                      cos(lat1).sin(lat2) − sin(lat1).cos(lat2).cos(Δlong))
        :Parameters:
          - `point_a: The tuple representing the latitude/longitude for the
            first point. Latitude and longitude must be in decimal degrees
          - `point_b: The tuple representing the latitude/longitude for the
            second point. Latitude and longitude must be in decimal degrees
        :Returns:
          The bearing in degrees
        :Returns Type:
          float
        z&Only tuples are supported as argumentsr   r   r   r   )typetupler  	TypeErrormathatan2pi)r   Zpoint_aZpoint_bZdeltaXZdeltaYZdegrees_tempZdegrees_finalr    r    r!   rm   }  s     
z3PlayFootballUtils.calculate_initial_compass_bearingc                 C   st   g }|D ]f}|rft |d |d  t |d |d   t |d |d  t |d |d   krf|}q|s|}q|S )Nr   r   rf   )r   r   r   nearestr   r    r    r!   r     s    *&z#PlayFootballUtils.get_nearest_pointc                 C   sx  | dd td| jd  k rd| jdkrL| jd d td| jd  f}qdtd| jd  f}nB| jdkr| jd d td| jd  f}ndtd| jd  f}| | d|}| j|d	d
\}}| jj||dd d}|r| jjdd | j	  d}| jjdd td| jd  | dd   krNtd| jd  krVn nd}| jj
|d |rt| j  d S )Nr)   r   g^I+?r   r   r(   g+?gv/?Tr;   r5   r3   r   g      ?g/$?r   g;On?)rT   rZ   r[   rX   rm   rn   r   ro   r`   r   r|   r   )r   rY   Zpower_shootdestinationZshoot_compassr   r   r4   r    r    r!   re     s2     
"
"

zPlayFootballUtils.shootc                 C   s   |d }|dk r|d }t |}|rLtt|}tt|}||fS | jjdv rtt|d }tt|d }n(tt|d }tt|d }t |t |fS )Nr   r   r   )xboxr&   r*   )rZ   r  cosradianssinr   rU   )r   Zcompassr<   Znew_compassZ	joystic_xZ	joystic_yZxbox_xZxbox_yr    r    r!   rn     s    z+PlayFootballUtils.get_xbox_x_y_with_compassc                 C   sX   |d dkrnF|d dkr&| j   n.|d dkr>| j   n|d dkrT| j   d S )Nr.   r   r   r,   r(   )r   r   r   r   r   r    r    r!   do_special_move  s    z!PlayFootballUtils.do_special_movec                 C   s  | j   d}d}| j tjtd| jj ddrt	| jd t
| jd |  }|dkrdd	}n6|d
krt
| jd d	}d
}n|dkrt
| jd dS n| j tjtd| jj ddrt
| jd t	| jd d	}nx| j tjtd| jj ddr(t
| jd t	| jd d	}n2| j tjtd| jj ddst| j tjtd| jj ddrt
| jd t	| jd d	}n| j tjtd| jj ddrt
| jd t	| jd d	}n| j tjtd| jj ddr t
| jd t	| jd d	}n:| j tjtd| jj ddrdt
| jd t	| jd d	}n| j tjtd| jj ddrt
| jd  t	| jd  d	}n| j tjtd| jj d!drt
| jd" t| jd" t	| jd# d	}d$}n^| j tjtd| jj d%drZt	| jd& | j  td' | j  td( dS |rt	| jd) | j  td' | j  td( | j  td( | j  td* | j  d| j_| jjd+gd, t	| jd- | j d.d/ t	| jd0 |r|S d1S d S )2NFr9   rC   z"_controls/injured_or_contracts.pngrD   zinjured or contract needzinjured or contractsnot heal needTlow healzneed heal. buy 5 healcompletezheal used successcontinuez_controls/manager_contract.pngzmanager contract needz_controls/players_banned.pngzplayer ban in squadzplayer banned in squadz_controls/concept_error.pngz_controls/concept_error_2.pngzconcept errorz(concept squad not eligible to play matchz _controls/empty_player_slots.pngzempty playerzCyou currently have less than the minimum required number of playersz%_controls/seassion_creation_error.pngzsession creation errorz!_controls/player_expire_error.pngzplayer expire errorz#_controls/not_available_players.pngznot_available_players errorz_controls/manager_bug.pngzmanager bugzmanager bugedZneed_change_managerz_controls/squad_eligible.pngznothing need , go nextr   r,   z5injured or contracts or Concept or empty player errorrE   
main_squad)update_fieldszneed to reset 1squad_battlesultimate_teamz6need some things in active squad. going to prepare ...z need some things in active squad)r   rw   rx   ry   rz   r{   r   r   rU   r   r   r   find_need_heal_playerr	   r   r   r}   r~   r   r   r|   r  r   r   )r   Zneed_somethingZ	need_textZheal_resultr    r    r!   check_squad_errors  s
   
	












z$PlayFootballUtils.check_squad_errorsc              
      s  j   td fddtdD  fddtdD  tdD ]b}j  jtj	
tdjj dd	rHttj	
tdjj dd	}g d
}g d}jjdv r|}n|}|d}|d |d   t| fddd}tjd|d| tt|d D ]4}|d dk r0j   n
j   td qt|d D ]}	j   td qTj   td j  jtj	
tdjj dd	stjd j   td j   td  dS tjd tdD ]l}
j  jtj	
tdjj dd	rjtj	
tdjj dd	rtjd j   td j   td   dS jtj	
tdjj dd	rtjd jjdv r j d d! td j jdd" td j   td# nDj d$d% td j jdd" td j   td& td qj   td j   td tjd'  d(S qHdS ))Nr   c                    s   g | ]} j jd dqS r   r   )r   nmr   r    r!   r   o  r   z;PlayFootballUtils.find_need_heal_player.<locals>.<listcomp>rE   c                    s   g | ]} j jd dqS r   r   )r   ttr   r    r!   r   p  r   r(   rC   z_controls/band_aids.pngrD   ))i  r@   r   )i	  r@   r   )i#  r   r   )i1  r   r   )iY  r   r,   )i  r   r(   )rL   r   r   )iN  r   r   )iv  r   r,   )i  r   r(   )iu  r,   r   ))i0  r@   r   )in  r@   r   )if  r@   r,   )i  r   r   )i  r   r   )i;  r   r(   )iz  r   rE   )   r   r   )i*  r   r,   )i_  r   r.   )ii  r,   r   )r'   r&   top_leftr   c                    s   t | d   S )Nr   r  )r   )image_position2r    r!   <lambda>  r   z9PlayFootballUtils.find_need_heal_player.<locals>.<lambda>)keyzplayer card position : z -- nearest : r=   r,   z(_controls/consumble_heal_need_icon_2.pngzthis player not heal needr  zok this player need healz#_controls/consumble_search_icon.pngzlow heal. need morer  z&_controls/consumble_heal_need_icon.pngzplayer applied heal)r&   r'   i }  ir3   r.      r   rG   z$heal player was success and completer  )r   r   r}   r~   r   r   rw   rx   ry   rz   r{   r   r   rU   r
   rT   minr   rf   r   r   r   rp   r|   r   r   rv   )r   r   Zband_image_posZxbox_players_listZps_players_listplayers_listZimage_positionr  r   Znt2Znt3r    )r&  r   r!   r   l  s    




























z'PlayFootballUtils.find_need_heal_playerc                 C   s   | j   d}| jdu rV|d7 }|d dkrJ| j   td | j   td q| j   | j   d| _| j 	  | j 
  d S )Nr   Fr   rG   r=   )r   rV   r   r_   r}   r~   r`   rd   rc   rb   rv   r   r    r    r!   press_r1_continue  s    







z#PlayFootballUtils.press_r1_continuec              
      s  |dkrt  jd dS  j   j  td tdD ]V}td  j	   j
tjtd jj ddrt  jd	  q j  q> fd
dtdD   fddtdD  dD ]}t|D ]} j	   j
tjtd jj ddr$t  jd  j  td  fddtdD  td  fddttddD  td  j  td tdD ]} j  td q j	   j
tjtd jj ddrt  j  j|d d    S  j  td  j    d S q||d k rt  jd| d|   j  td qt|d D ]} j  td qj j  td |dkr j  td  j  td qƈ j   j|d dS )Nr,   z$try to fix injure but can not fix itzcan not fixr   rE   rC   z"_controls/injure_middle_game_1.pngrD   z"ok i am in searching injure playerc                    s   g | ]} j  qS r    r   r   r   r   r    r!   r     r   z8PlayFootballUtils.swap_injury_player.<locals>.<listcomp>c                    s   g | ]} j  qS r    r   r-  r   r    r!   r     r   )r,   r.   r.   r   z_controls/ambulance_icon.pngzambulance player selectedc                    s   g | ]} j  qS r    )r   r   r-  r   r    r!   r     r   c                    s   g | ]} j  qS r    r   r-  r   r    r!   r     r   r   r(   rF   )r   zcurrent not ambulance :  r=   )r   r   r   r   r   r}   r~   r   r   rw   rx   ry   rz   r{   r   rU   ra   randomrandintr|   swap_injury_playerr   r   r   )r   r   r   r"  r   smr    r   r!   r1    s    




























z$PlayFootballUtils.swap_injury_playerN)r   r   F)r   FF)r   )F)F)r   ) __name__
__module____qualname__r[   r"   r   r   rW   r   rQ   r   r   r   r   r   rj   rg   rl   r   r   r\   ri   rq   rm   r   re   rn   r  r!  r   r,  r1  r    r    r    r!   r      sR        1
 

/
(  ^#8)%X"

'

zqr   )r  ry   r/  rO   r}   rs   r   numpyr   PILr   r   django.utilsr   
statisticsr   futplus.settingsr   sbc.public_methodsr   r   r	   r
   namer   r   r    r    r    r!   <module>   s   
