§
    ŠÂªj}  ã                  óh   — d Z ddlmZ ddlmZmZmZmZmZ ddl	m
Z
 ddlmZmZ  G d„ d¦  «        ZdS )	u0  AutoPOE2 - Skill Popup Scanner.

PhÃ¡t hiá»‡n tráº¡ng thÃ¡i hiá»ƒn thá»‹ cá»§a Pop-up Menu Actions/Skills/Gem Skills vÃ 
xÃ¡c Ä‘á»‹nh vá»‹ trÃ­ cÃ¡c icon ká»¹ nÄƒng Ä‘á»ƒ chá»�n ngá»�c tá»± Ä‘á»™ng.
TuÃ¢n thá»§ Rule 1, Rule 4 (Kiáº¿n trÃºc Module HÃ³a), Rule 5 (Thá»±c nghiá»‡m 100% dá»¯ liá»‡u tháº­t).
é    )Úannotations)ÚAnyÚDictÚListÚOptionalÚTuple)ÚImage)ÚSkillPopupGeometryÚSKILL_POPUP_GEOMETRYc                  óV   — e Zd ZdZefdd„Z	 ddd„Zd d„Zd d„Zd!d„Z	d"d„Z
	 d#d$d„ZdS )%ÚSkillPopupScanneru6   QuÃ©t vÃ  phÃ¢n tÃ­ch tráº¡ng thÃ¡i Pop-up Skill menu.Úgeor
   c                ó   — || _         d S )N)r   )Úselfr   s     úEC:\Projects\AutoPOE2\src\assistant_tool\skills\skill_popup_scanner.pyÚ__init__zSkillPopupScanner.__init__   s   € ØˆŒˆˆó    çÍÌÌÌÌÌä?ÚimageúImage.ImageÚbboxúTuple[int, int, int, int]Ú	thresholdÚfloatÚreturnÚboolc           
     ó¾  ‡‡‡— |\  }}}}‰j         \  }}	t          dt          ||dz
  ¦  «        ¦  «        }t          dt          ||	dz
  ¦  «        ¦  «        }t          |dz   t          ||¦  «        ¦  «        }t          |dz   t          ||	¦  «        ¦  «        }||z
  }
||z
  }|
dk     s|dk     rdS t          d|
dz  ¦  «        }t          dt          ||	dz
  ¦  «        ¦  «        Šˆˆfd„t          |dz   |dz
  |¦  «        D ¦   «         }t	          d„ |D ¦   «         ¦  «        }|t          dt          |¦  «        ¦  «        z  }t          dt          |t          |d	z  ¦  «        z   |	dz
  ¦  «        ¦  «        Šˆˆfd
„t          |dz   |dz
  |¦  «        D ¦   «         }t	          d„ |D ¦   «         ¦  «        }|t          dt          |¦  «        ¦  «        z  }|dk    o|dk    S )uá   Kiá»ƒm tra xem Pop-up Menu cÃ³ Ä‘ang má»Ÿ táº¡i vÃ¹ng bbox (left, top, right, bottom) hay khÃ´ng.

        PhÃ¢n tÃ­ch Ä‘áº·c trÆ°ng mÃ u ná»�n tá»‘i má»� Ä‘áº·c thÃ¹ (RGB < 40) vÃ  viá»�n vÃ ng Ä‘á»“ng (gold/brown).
        r   é   é2   Fé   c                ó>   •— g | ]}‰                      |‰f¦  «        ‘ŒS © ©Úgetpixel)Ú.0ÚxÚborder_yr   s     €€r   ú
<listcomp>z3SkillPopupScanner.is_popup_open.<locals>.<listcomp>6   s9   ø€ ð 
ð 
ð 
àð �NŠN˜A˜x˜=Ñ)Ô)ð
ð 
ð 
r   é   c              3  ó°   K  — | ]Q}t          |¦  «        d k    ¯d|d         cxk     rdk     ¯(n n&d|d         cxk     rdk     ¯>n n|d         dk     ¯MdV — ŒRd	S )
é   é<   r   éŒ   r   r   én   é   éP   N©Úlen©r%   Úps     r   ú	<genexpr>z2SkillPopupScanner.is_popup_open.<locals>.<genexpr>:   s   è è € ð "
ð "
àÝ�1‰vŒv˜Š{ˆ{  Q q¤T  ¢ ¨C¢    °b¸1¸Q¼4°o°o²o°oÀ#²o°o°o°o°oÈAÈaÌDÐSUÊIÈIð àLUÈIÈIÈIð"
ð "
r   gš™™™™™©?c                ó>   •— g | ]}‰                      |‰f¦  «        ‘ŒS r"   r#   )r%   r&   r   Ú
interior_ys     €€r   r(   z3SkillPopupScanner.is_popup_open.<locals>.<listcomp>C   s9   ø€ ð 
ð 
ð 
àð �NŠN˜A˜z˜?Ñ+Ô+ð
ð 
ð 
r   c              3  óˆ   K  — | ]=}t          |¦  «        d k    ¯|d         dk     ¯!|d         dk     ¯-|d         dk     ¯9dV — Œ>dS )r+   r   é-   r   é(   r/   é#   Nr1   r3   s     r   r5   z2SkillPopupScanner.is_popup_open.<locals>.<genexpr>G   s^   è è € ð 
ð 
àÝ�1‰vŒv˜Š{ˆ{˜q œt bšy˜y¨Q¨q¬T°BªY¨Y¸1¸Q¼4À"º9¸9ð à;D¸9¸9¸9ð
ð 
r   gš™™™™™á?gš™™™™™Ù?)ÚsizeÚmaxÚminÚrangeÚsumr2   Úint)r   r   r   r   ÚleftÚtopÚrightÚbottomÚwÚhÚcenter_wÚcenter_hÚstep_xÚborder_pixelsÚgold_border_matchesÚ
gold_ratioÚinterior_pixelsÚdark_matchesÚ
dark_ratior'   r7   s    `                 @@r   Úis_popup_openzSkillPopupScanner.is_popup_open   sJ  øøø€ ð $(Ñ ˆˆc�5˜&ØŒz‰ˆˆ1õ �1•c˜$  A¡Ñ&Ô&Ñ'Ô'ˆÝ�!•S˜˜a !™e‘_”_Ñ%Ô%ˆÝ�D˜1‘H�c %¨™mœmÑ,Ô,ˆÝ�S˜1‘W�c &¨!™nœnÑ-Ô-ˆð ˜4‘<ˆØ˜C‘<ˆØ�bŠ=ˆ=˜H ršM˜MØ�5å�Q˜ B™Ñ'Ô'ˆõ �q�#˜c 1 q¡5™/œ/Ñ*Ô*ˆð
ð 
ð 
ð 
ð 
å˜4 "™9 e¨b¡j°&Ñ9Ô9ð
ñ 
ô 
ˆõ "ð "
ð "
à"ð"
ñ "
ô "
ñ 
ô 
Ðð
 )­3¨qµ#°mÑ2DÔ2DÑ+EÔ+EÑEˆ
õ ˜�C ¥c¨(°T©/Ñ&:Ô&:Ñ :¸AÀ¹EÑBÔBÑCÔCˆ
ð
ð 
ð 
ð 
ð 
å˜4 "™9 e¨b¡j°&Ñ9Ô9ð
ñ 
ô 
ˆõ ð 
ð 
à$ð
ñ 
ô 
ñ 
ô 
ˆð
 "¥C¨­3¨Ñ+?Ô+?Ñ$@Ô$@Ñ@ˆ
ð ˜TÒ!Ð8 j°DÒ&8Ð8r   úTuple[int, int]c                óÜ   — |\  }}}}||z
  }||z
  }|t          t          || j        j        z  ¦  «        ¦  «        z   }|t          t          || j        j        z  ¦  «        ¦  «        z   }	||	fS )uH   Tá»�a Ä‘á»™ pixel cá»§a nÃºt Close [X] á»Ÿ gÃ³c trÃªn bÃªn pháº£i popup.)rA   Úroundr   Úclose_btn_rel_xÚclose_btn_rel_y©
r   r   rB   rC   rD   rE   ÚpwÚphr&   Úys
             r   Úget_close_button_posz&SkillPopupScanner.get_close_button_posQ   ss   € à#'Ñ ˆˆc�5˜&Ø�T‰\ˆØ�c‰\ˆØ•3•u˜R $¤(Ô":Ñ:Ñ;Ô;Ñ<Ô<Ñ<ˆØ•#•e˜B ¤Ô!9Ñ9Ñ:Ô:Ñ;Ô;Ñ;ˆØ�!ˆtˆr   c                óÜ   — |\  }}}}||z
  }||z
  }|t          t          || j        j        z  ¦  «        ¦  «        z   }|t          t          || j        j        z  ¦  «        ¦  «        z   }	||	fS )uG   Tá»�a Ä‘á»™ pixel cá»§a nÃºt ACTIONS -> Clear/Unbind slot (dáº¥u X to).)rA   rT   r   Úunbind_rel_xÚunbind_rel_yrW   s
             r   Úget_unbind_action_posz'SkillPopupScanner.get_unbind_action_posZ   ss   € à#'Ñ ˆˆc�5˜&Ø�T‰\ˆØ�c‰\ˆØ•3•u˜R $¤(Ô"7Ñ7Ñ8Ô8Ñ9Ô9Ñ9ˆØ•#•e˜B ¤Ô!6Ñ6Ñ7Ô7Ñ8Ô8Ñ8ˆØ�!ˆtˆr   Ú	col_indexrA   c           	     óX  — |\  }}}}||z
  }||z
  }t          dt          |t          | j        j        ¦  «        dz
  ¦  «        ¦  «        }|t          t          || j        j        |         z  ¦  «        ¦  «        z   }	|t          t          || j        j        z  ¦  «        ¦  «        z   }
|	|
fS )uT   Tá»�a Ä‘á»™ pixel cá»§a ká»¹ nÄƒng vÅ© khÃ­ trong má»¥c SKILLS (col_index: 0, 1, 2).r   r   )r=   r>   r2   r   Úskills_col_rel_xrA   rT   Úskills_row_rel_y)r   r   r`   rB   rC   rD   rE   rX   rY   r&   rZ   s              r   Úget_weapon_skill_posz&SkillPopupScanner.get_weapon_skill_posc   s¥   € ð $(Ñ ˆˆc�5˜&Ø�T‰\ˆØ�c‰\ˆÝ˜�3˜y­#¨d¬hÔ.GÑ*HÔ*HÈ1Ñ*LÑMÔMÑNÔNˆ	Ø•3•u˜R $¤(Ô";¸IÔ"FÑFÑGÔGÑHÔHÑHˆØ•#•e˜B ¤Ô!:Ñ:Ñ;Ô;Ñ<Ô<Ñ<ˆØ�!ˆtˆr   ÚrowÚcolc           	     ó|  — |\  }}}}||z
  }||z
  }	t          dt          |t          | j        j        ¦  «        dz
  ¦  «        ¦  «        }|t          t          || j        j        |         z  ¦  «        ¦  «        z   }
| j        j        || j        j        z  z   }|t          t          |	|z  ¦  «        ¦  «        z   }|
|fS )uX   Tá»�a Ä‘á»™ pixel cá»§a ngá»�c ká»¹ nÄƒng trong má»¥c GEM SKILLS (row: 0..N, col: 0..3).r   r   )	r=   r>   r2   r   Úgem_skills_col_rel_xrA   rT   Úgem_skills_start_rel_yÚgem_skills_row_spacing_ratio)r   r   re   rf   rB   rC   rD   rE   rX   rY   r&   Úy_relrZ   s                r   Úget_gem_skill_posz#SkillPopupScanner.get_gem_skill_poso   s¸   € ð $(Ñ ˆˆc�5˜&Ø�T‰\ˆØ�c‰\ˆÝ�!•S˜�c $¤(Ô"?Ñ@Ô@À1ÑDÑEÔEÑFÔFˆØ•3•u˜R $¤(Ô"?ÀÔ"DÑDÑEÔEÑFÔFÑFˆØ”Ô/°#¸¼Ô8]Ñ2]Ñ]ˆØ•#•e˜B ™JÑ'Ô'Ñ(Ô(Ñ(ˆØ�!ˆtˆr   r/   Úmax_rowsúList[Dict[str, Any]]c                ó  — g }|\  }}}}||z
  }	||z
  }
t          t          |	dz  ¦  «        ¦  «        }t          |¦  «        D �];}t          d¦  «        D �]'}|                      |||¦  «        \  }}t	          d||z
  ¦  «        t	          d||z
  ¦  «        t          |j        ||z   ¦  «        t          |j        ||z   ¦  «        f}|                     |¦  «        }t          |d¦  «        r!t          |                     ¦   «         ¦  «        n t          |                     ¦   «         ¦  «        }|r)t          d„ |D ¦   «         ¦  «        t          |¦  «        z  nd}|                     ||||f|||dk    dœ¦  «         �Œ)�Œ=|S )	uR   TrÃ­ch xuáº¥t danh sÃ¡ch cÃ¡c vá»‹ trÃ­ ngá»�c ká»¹ nÄƒng trong báº£ng GEM SKILLS.g
×£p=
·?é   r   Úget_flattened_datac              3  óP   K  — | ]!}|d          |d         z   |d         z   dz  V — Œ"dS )r   r   r/   g      @Nr"   r3   s     r   r5   z<SkillPopupScanner.extract_gem_skills_grid.<locals>.<genexpr>™   s<   è è € ÐCÐC°q˜˜1œ  !¤™ q¨¤tÑ+¨sÑ2ÐCÐCÐCÐCÐCÐCr   g        g      >@)re   rf   Úposr   Úavg_brightnessÚ	is_active)rA   rT   r?   rl   r=   r>   ÚwidthÚheightÚcropÚhasattrÚlistrq   Úgetdatar@   r2   Úappend)r   r   r   rm   ÚskillsrB   rC   rD   rE   rX   rY   Úicon_half_sizeÚrÚcÚcxÚcyÚiboxÚ	crop_iconÚpixelsrt   s                       r   Úextract_gem_skills_gridz)SkillPopupScanner.extract_gem_skills_grid|   sÀ  € ð ˆØ#'Ñ ˆˆc�5˜&Ø�T‰\ˆØ�c‰\ˆå�U 2¨¡9Ñ-Ô-Ñ.Ô.ˆå�x‘”ð 	ñ 	ˆAÝ˜1‘X”Xð ñ �Ø×/Ò/°°a¸Ñ;Ô;‘��Bõ ˜˜2 Ñ.Ñ/Ô/Ý˜˜2 Ñ.Ñ/Ô/Ý˜œ R¨.Ñ%8Ñ9Ô9Ý˜œ b¨>Ñ&9Ñ:Ô:ð	�ð "ŸJšJ tÑ,Ô,�	õ ˜yÐ*>Ñ?Ô?ð3•D˜×5Ò5Ñ7Ô7Ñ8Ô8Ð8å˜i×/Ò/Ñ1Ô1Ñ2Ô2ð ð ð•CÐCÐC¸FÐCÑCÔCÑCÔCÅcÈ&ÁkÄkÑQÐQàð ð —’ØØØ ˜8Ø Ø&4Ø!/°$Ò!6ðð ñ ô ð ñ ñ-ð< ˆr   N)r   r
   )r   )r   r   r   r   r   r   r   r   )r   r   r   rR   )r   r   r`   rA   r   rR   )r   r   re   rA   rf   rA   r   rR   )r/   )r   r   r   r   rm   rA   r   rn   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   rQ   r[   r_   rd   rl   r†   r"   r   r   r   r      sÅ   € € € € € Ø@Ð@à1Eð ð ð ð ð ð  ð	69ð 69ð 69ð 69ð 69ðpð ð ð ðð ð ð ð
ð 
ð 
ð 
ðð ð ð ð TUð*ð *ð *ð *ð *ð *ð *r   r   N)rŠ   Ú
__future__r   Útypingr   r   r   r   r   ÚPILr	   Ú)src.assistant_tool.skills.skill_constantsr
   r   r   r"   r   r   ú<module>r�      sÃ   ððð ð #Ð "Ð "Ð "Ð "Ð "à 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ðSð Sð Sð Sð Sñ Sô Sð Sð Sð Sr   