§
    Tj®jP3  ã                  óf  — d Z ddlmZ ddlmZmZ ddlmZ ddlZddl	Z	ddl
mZmZmZmZmZmZmZ ddlZ	 ddlmZ n# e$ r dZY nw xY wddlmZ dd	lmZmZmZ dd
lmZmZm Z m!Z! ddl"m#Z# ddl$m%Z%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+  G d„ de,e¦  «        Z-e G d„ d¦  «        ¦   «         Z. G d„ d¦  «        Z/dS )uý  AutoPOE2 - Frontier-Based Minimap Exploration Engine (Doc 69 Â§3.4 / Stage 5).
==================================================================================
Ä�á»™ng cÆ¡ Ä‘iá»�u hÆ°á»›ng sÆ°Æ¡ng mÃ¹ liÃªn tá»¥c theo Ä‘Æ°á»�ng biÃªn Frontier (Frontier-Based Navigation):
- Thay vÃ¬ Ä‘i ngáº«u nhiÃªn hoáº·c dá»«ng láº¡i sá»›m sau khi gáº·p bÃ£i quÃ¡i Ä‘áº§u tiÃªn, Ä‘á»™ng cÆ¡ nÃ y
  liÃªn tá»¥c trÃ­ch xuáº¥t cÃ¡c Frontier Nodes tá»« Minimap vÃ  Ä‘á»‹nh hÆ°á»›ng nhÃ¢n váº­t thÃ¢m nháº­p
  sÃ¢u vÃ o cÃ¡c vÃ¹ng tá»‘i chÆ°a khÃ¡m phÃ¡ cho Ä‘áº¿n khi Ä‘á»™ phá»§ Ä‘áº¡t >= 80%.
- TÃ­ch há»£p liá»�n máº¡ch:
  1. MinimapFogExplorer: TrÃ­ch xuáº¥t vÃ  gom cá»¥m mÃ©p sÆ°Æ¡ng mÃ¹, cáº¯t tá»‰a ngÃµ cá»¥t.
  2. BossArenaDetector: GiÃ¡m sÃ¡t cá»•ng sÆ°Æ¡ng mÃ¹ vÃ  thanh mÃ¡u Boss trÃªn HUD.
  3. MonsterDensityHeatmap: Theo dÃµi bÃ£i quÃ¡i váº­t, sá»‘ lÆ°á»£ng tiÃªu diá»‡t, ngÄƒn cháº·n clear sá»›m.
- Ä�iá»�u phá»‘i tá»± Ä‘á»™ng giá»¯a 3 cháº¿ Ä‘á»™ váº­n hÃ nh:
  - `FRONTIER_EXPLORE`: Di chuyá»ƒn sÃ¢u vÃ o sÆ°Æ¡ng mÃ¹ chÆ°a má»Ÿ khi xung quanh an toÃ n.
  - `COMBAT_ENGAGE`: Táº¡m dá»«ng thÃ¡m hiá»ƒm Ä‘á»ƒ dá»“n DPS tiÃªu diá»‡t quÃ¡i váº­t khi cháº¡m trÃ¡n.
  - `BOSS_FIGHT`: Chiáº¿n Ä‘áº¥u vá»›i Boss báº£n Ä‘á»“ hoáº·c chuáº©n bá»‹ tiá»�n buff trÆ°á»›c cá»•ng sÆ°Æ¡ng mÃ¹.

TuÃ¢n thá»§ nghiÃªm ngáº·t:
- Rule 1: Python 3.11 Cold Path Tier 2.
- Rule 4: Module hÃ³a Ä‘á»™c láº­p tráº§n < 500 dÃ²ng.
- Rule 16: Google Docstrings chuáº©n má»±c.
- Báº¥t biáº¿n: INV-MAP-LEGITIMATE-CLEAR, INV-WASD-MIN-DWELL, INV-WASD-NO-BLIND-LMB.
é    )Úannotations)Ú	dataclassÚfield)ÚEnumN)ÚAnyÚCallableÚDictÚListÚOptionalÚTupleÚUnion)ÚImage)ÚMinimapCameraCalibrator)ÚCANONICAL_MINIMAP_BBOX_1080PÚExplorationTargetÚMinimapFogExplorer)ÚMinimapNavigationAdapterÚProjectionModeÚWasdCommandÚWasdDirection)ÚMonsterDensityHeatmap)ÚBossArenaDetectorÚBossArenaState)Ú
ResolutionÚ	RES_1080PÚ	RES_1440PÚresolve_resolutionc                  ó*   — e Zd ZdZdZdZdZdZdZdZ	dS )	ÚInMapOperationModeuE   Cháº¿ Ä‘á»™ tÃ¡c chiáº¿n trong map cá»§a Frontier Exploration Engine.ÚFRONTIER_EXPLOREÚCOMBAT_ENGAGEÚBOSS_PRE_BUFFÚBOSS_COMBATÚ	BOSS_KITEÚMAP_COMPLETEDN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r    r!   r"   r#   r$   r%   © ó    úQC:\Projects\AutoPOE2\src\assistant_tool\navigation\frontier_exploration_engine.pyr   r   7   s3   € € € € € ØOÐOØ)ÐØ#€MØ#€MØ€KØ€IØ#€M€M€Mr+   r   c                  ó€   — e Zd ZU dZded<   dZded<   dZded	<   d
Zded<   dZded<   dZ	ded<   dZ
ded<   dZded<   dS )ÚExplorationStepDecisionuH   Quyáº¿t Ä‘á»‹nh hÃ nh Ä‘á»™ng trong má»™t nhá»‹p tuáº§n tra báº£n Ä‘á»“.r   ÚmodeNzOptional[WasdCommand]Úwasd_cmd©ç        r2   zTuple[float, float]Útarget_vectorr2   ÚfloatÚcoverage_ratior   ÚintÚpacks_encounteredFÚboolÚboss_detectedÚ
boss_slainÚ ÚstrÚreason)r&   r'   r(   r)   Ú__annotations__r0   r3   r5   r7   r9   r:   r=   r*   r+   r,   r.   r.   A   sœ   € € € € € € àRÐRØÐÐÑØ&*€HÐ*Ð*Ð*Ñ*Ø)3€MÐ3Ð3Ð3Ñ3Ø€NÐÐÐÑØÐÐÐÐÑØ€MÐÐÐÑØ€JÐÐÐÑØ€FÐÐÐÑÐÐr+   r.   c                  óD   — e Zd ZdZeddddddfd#d„Zd$d„Z	 	 	 	 d%d&d"„ZdS )'ÚFrontierExplorationEngineuh   Ä�á»™ng cÆ¡ Ä‘iá»�u phá»‘i thÃ¡m hiá»ƒm sÆ°Æ¡ng mÃ¹ liÃªn tá»¥c vÃ  Ä‘Ã¡nh giÃ¡ hoÃ n táº¥t báº£n Ä‘á»“.gš™™™™™é?é   NÚtarget_resolutionú"Union[Resolution, Tuple[int, int]]Útarget_coverager4   Úmin_required_packsr6   Úfog_explorerúOptional[MinimapFogExplorer]Úboss_detectorúOptional[BossArenaDetector]Údensity_heatmapúOptional[MonsterDensityHeatmap]Únavigation_adapterú"Optional[MinimapNavigationAdapter]ÚreturnÚNonec                ó®  — t          |¦  «        | _        || _        || _        |pt	          dd¬¦  «        | _        |p%t          | j        j        | j        j        f¬¦  «        | _	        |pt          ¦   «         | _        |p t          | j        | j        | j        ¬¦  «        | _        t          j        | _        t#          j        ¦   «         | _        d| _        dS )u£  Khá»Ÿi táº¡o Ä‘á»™ng cÆ¡ thÃ¡m hiá»ƒm sÆ°Æ¡ng mÃ¹ liÃªn tá»¥c.

        Args:
            target_resolution: Ä�á»™ phÃ¢n giáº£i mÃ n hÃ¬nh game.
            target_coverage: NgÆ°á»¡ng Ä‘á»™ phá»§ sÆ°Æ¡ng mÃ¹ cáº§n Ä‘áº¡t (máº·c Ä‘á»‹nh >= 80%).
            min_required_packs: Sá»‘ bÃ£i quÃ¡i tá»‘i thiá»ƒu pháº£i cháº¡m trÃ¡n (khÃ¡ng lá»—i Ä‘Ã¡nh 1 quÃ¡i rá»“i dá»«ng).
            fog_explorer: Bá»™ phÃ¢n tÃ­ch sÆ°Æ¡ng mÃ¹ Minimap.
            boss_detector: Bá»™ phÃ¡t hiá»‡n cá»•ng sÆ°Æ¡ng mÃ¹ vÃ  thanh mÃ¡u Boss.
            density_heatmap: Báº£n Ä‘á»“ nhiá»‡t máº­t Ä‘á»™ quÃ¡i váº­t.
            navigation_adapter: Bá»™ thÃ­ch á»©ng Ä‘iá»�u hÆ°á»›ng WASD.
        é@   )Ú
grid_widthÚgrid_height)Úref_resolution)rB   ÚexplorerrD   FN)r   Ú
resolutionrD   rE   r   rF   r   ÚwidthÚheightrH   r   rJ   r   Únav_adapterr   r    Úcurrent_modeÚtimeÚmap_start_timer:   )ÚselfrB   rD   rE   rF   rH   rJ   rL   s           r,   Ú__init__z"FrontierExplorationEngine.__init__Q   sÖ   € õ* -Ð->Ñ?Ô?ˆŒØ.ˆÔØ"4ˆÔà(Ð]Õ,>È"ÐZ\Ð,]Ñ,]Ô,]ˆÔØ*ÐÕ.?ÐPTÔP_ÔPeÐgkÔgvÔg}ÐO~Ð.Ñ.Ô.ˆÔØ.ÐIÕ2GÑ2IÔ2IˆÔØ-ð 
Õ1IØ"œoØÔ&Ø Ô0ð2
ñ 2
ô 2
ˆÔõ /Ô?ˆÔÝ%)¤Y¡[¤[ˆÔØ %ˆŒˆˆr+   c                óÊ   — | j                              ¦   «          | j                             ¦   «          t          j        | _        t          j        ¦   «         | _        d| _        dS )u8   Ä�áº·t láº¡i tráº¡ng thÃ¡i cho lÆ°á»£t cháº¡y map má»›i.FN)	rF   ÚresetrJ   r   r    rZ   r[   r\   r:   )r]   s    r,   r`   zFrontierExplorationEngine.resetw   sP   € àÔ×ÒÑ!Ô!Ð!ØÔ×"Ò"Ñ$Ô$Ð$Ý.Ô?ˆÔÝ"œi™kœkˆÔØˆŒˆˆr+   r2   r   FÚframe_inputúUnion[str, np.ndarray, Any]Úplayer_xÚplayer_yÚmonsters_nearÚcore_boss_slain_signalr8   r.   c                ó  — t          j         ¦   «         }t          |t          ¦  «        st          |d¦  «        r-t          �&t          j        t	          j        |¦  «        ¦  «        }| j         	                    ||||¬¦  «         | j
                             |¦  «        }| j                             |j        |j        j        |j        j        ¬¦  «         |s| j        j        rd| _        | j                             |¦  «        }|r|j        n| j        j        }	| j                             | j        ¦  «        \  }
}|	| j        k    rc|
rat4          j        | _        t;          t4          j        dd|	| j        j        | j        j        | j        d|	dz  d	›d
| j        dz  d›d|› �¬¦  «        S |j        r²|j        j        rJt4          j         | _        t;          t4          j         ||r|j!        nd|	| j        j        d| j        d¬¦  «        S t4          j"        | _        t;          t4          j"        ||r|j!        nd|	| j        j        d| j        d|j        j        dz  d	›d�¬¦  «        S |j#        rQ| j        sJt4          j$        | _        t;          t4          j$        ||r|j!        nd|	| j        j        d| j        d¬¦  «        S |dk    rXt4          j%        | _        t;          t4          j%        ||r|j!        nd|	| j        j        | j        j        | j        d|› d�¬¦  «        S t4          j&        | _        t;          t4          j&        ||r|j!        nd|	| j        j        | j        j        | j        d|r|j'        j(        nd› d|	dz  d	›d�¬¦  «        S )u  Xá»­ lÃ½ khung hÃ¬nh vÃ  ra quyáº¿t Ä‘á»‹nh hÃ nh Ä‘á»™ng tá»‘i Æ°u cho nhÃ¢n váº­t.

        Args:
            frame_input: áº¢nh toÃ n mÃ n hÃ¬nh (Ä‘Æ°á»�ng dáº«n, máº£ng NumPy, hoáº·c PIL Image).
            player_x: Tá»�a Ä‘á»™ X tháº¿ giá»›i cá»§a ngÆ°á»�i chÆ¡i.
            player_y: Tá»�a Ä‘á»™ Y tháº¿ giá»›i cá»§a ngÆ°á»�i chÆ¡i.
            monsters_near: Sá»‘ quÃ¡i váº­t sá»‘ng quanh ngÆ°á»�i chÆ¡i tá»« RAM telemetry.
            core_boss_slain_signal: TÃ­n hiá»‡u diá»‡t Boss tá»« C++ Core SHM náº¿u cÃ³.

        Returns:
            ExplorationStepDecision: Quyáº¿t Ä‘á»‹nh hÃ nh vi tá»‘i Æ°u trong nhá»‹p nÃ y.
        Ú
__fspath__N)rc   rd   re   Únow_sec)Úboss_bar_detectedÚhealth_ratioÚ	is_phasedTr1   u   Ä�áº¡t Ä‘á»™ phá»§ sÆ°Æ¡ng mÃ¹ éd   z.1fz% (>= z.0fu   %) vÃ  )r/   r0   r3   r5   r7   r9   r:   r=   uC   Boss Ä‘ang chuyá»ƒn pha báº¥t tá»­ -> Kiting tháº£ diá»�u nÃ© Ä‘Ã²nu"   Giao tranh vá»›i Boss (MÃ¡u cÃ²n: z%)uk   PhÃ¡t hiá»‡n cá»•ng sÆ°Æ¡ng mÃ¹ Ä‘áº¥u trÆ°á»�ng -> KÃ­ch hoáº¡t tiá»�n buff trÆ°á»›c khi bÆ°á»›c qua cá»­aé   u    Cháº¡m trÃ¡n Ä‘Ã n quÃ¡i váº­t (u4    quÃ¡i) -> Æ¯u tiÃªn Stutter-Step Combat dá»�n quÃ¡iu+   Tuáº§n tra sÆ°Æ¡ng mÃ¹ Frontier (HÆ°á»›ng: ÚNONEu   , Ä�á»™ phá»§: ))r[   Ú
isinstancer<   Úhasattrr   ÚnpÚarrayÚopenrJ   Úrecord_telemetry_framerH   Úprocess_frameÚupdate_optical_boss_statusÚboss_bar_activeÚboss_bar_infork   rl   Úboss_slain_opticalr:   rY   Úprocess_fullscreen_framer5   rF   Úis_clearing_legitimaterE   rD   r   r%   rZ   r.   Útotal_packs_countr9   r$   Úvectorr#   Úgate_detectedr"   r!   r    Ú	directionÚvalue)r]   ra   rc   rd   re   rf   ÚnowÚarena_stater0   r5   Úis_legitÚlegit_reasons               r,   Úprocess_frame_and_decidez2FrontierExplorationEngine.process_frame_and_decide   sD  € õ( Œi‰kŒkˆõ �k¥3Ñ'Ô'ð 	@­7°;ÀÑ+MÔ+Mð 	@ÝÐ Ý œh¥u¤z°+Ñ'>Ô'>Ñ?Ô?�ð 	Ô×3Ò3ØØØ'Øð	 	4ñ 	
ô 	
ð 	
ð '+Ô&8×&FÒ&FÀ{Ñ&SÔ&Sˆð 	Ô×7Ò7Ø)Ô9Ø$Ô2Ô?Ø!Ô/Ô9ð 	8ñ 	
ô 	
ð 	
ð "ð 	# TÔ%9Ô%Lð 	#Ø"ˆDŒOð Ô#×<Ò<¸[ÑIÔIˆØ4<Ðb˜Ô0Ð0À$ÔBSÔBbˆð "&Ô!5×!LÒ!LÈTÔMdÑ!eÔ!eÑˆ�,à˜TÔ1Ò1Ð1°hÐ1Ý 2Ô @ˆDÔÝ*Ý'Ô5ØØ(Ø-Ø"&Ô"6Ô"HØ"Ô2Ô@Øœ?ð K¸ÈÑ9Kð  Kð  Kð  KÐW[ÔWkÐloÑWoð  Kð  Kð  Kð  }Ið  Kð  Kð	ñ 	ô 	ð 	ð Ô&ð 	ØÔ(Ô2ð Ý$6Ô$@�Ô!Ý.Ý+Ô5Ø%Ø5=Ð"M (¤/ /À:Ø#1Ø&*Ô&:Ô&LØ"&Ø#œØ`ð	ñ 	ô 	ð 	õ %7Ô$B�Ô!Ý.Ý+Ô7Ø%Ø5=Ð"M (¤/ /À:Ø#1Ø&*Ô&:Ô&LØ"&Ø#œØrÀÔ@YÔ@fÐgjÑ@jÐrÐrÐrÐrð	ñ 	ô 	ð 	ð Ô$ð 	¨T¬_ð 	Ý 2Ô @ˆDÔÝ*Ý'Ô5Ø!Ø19ÐI˜hœo˜o¸zØ-Ø"&Ô"6Ô"HØ"Øœ?ð Eð	ñ 	ô 	ð 	ð ˜AÒÐÝ 2Ô @ˆDÔÝ*Ý'Ô5Ø!Ø19ÐI˜hœo˜o¸zØ-Ø"&Ô"6Ô"HØ"Ô2Ô@Øœ?Ø}¸-Ð}Ð}Ð}ð	ñ 	ô 	ð 	õ /Ô?ˆÔÝ&Ý#Ô4ØØ-5ÐE˜(œ/˜/¸:Ø)Ø"Ô2ÔDØÔ.Ô<Ø”ð ]Ð]eÐAqÀÔASÔAYÐAYÐkqð  ]ð  ]ð  CQð  RUñ  CUð  ]ð  ]ð  ]ð  ]ð	
ñ 	
ô 	
ð 		
r+   )rB   rC   rD   r4   rE   r6   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   )rN   rO   )r2   r2   r   F)ra   rb   rc   r4   rd   r4   re   r6   rf   r8   rN   r.   )r&   r'   r(   r)   r   r^   r`   r†   r*   r+   r,   r@   r@   N   s�   € € € € € ØrÐrð AJØ!%Ø"#Ø59Ø59Ø;?ØAEð$&ð $&ð $&ð $&ð $&ðL ð  ð  ð  ð ØØØ',ðG
ð G
ð G
ð G
ð G
ð G
ð G
r+   r@   )0r)   Ú
__future__r   Údataclassesr   r   Úenumr   Úmathr[   Útypingr   r   r	   r
   r   r   r   Únumpyrr   ÚPILr   ÚImportErrorÚ7src.assistant_tool.navigation.minimap_camera_calibratorr   Ú2src.assistant_tool.navigation.minimap_fog_explorerr   r   r   Ú8src.assistant_tool.navigation.minimap_navigation_adapterr   r   r   r   Ú5src.assistant_tool.navigation.monster_density_heatmapr   Ú-src.assistant_tool.vision.boss_arena_detectorr   r   Úsrc.common.coordinate_transformr   r   r   r   r<   r   r.   r@   r*   r+   r,   ú<module>r•      sO  ððð ð, #Ð "Ð "Ð "Ð "Ð "à (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ø €€€Ø €€€Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ Dà Ð Ð Ð ðØÐÐÐÐÐÐøØð ð ð Ø€E€E€Eðøøøð \Ð [Ð [Ð [Ð [Ð [ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð ð ð ð ð XÐ WÐ WÐ WÐ WÐ WØ [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ø `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `ð$ð $ð $ð $ð $˜˜dñ $ô $ð $ð ð	ð 	ð 	ð 	ð 	ñ 	ô 	ñ „ð	ðx
ð x
ð x
ð x
ð x
ñ x
ô x
ð x
ð x
ð x
s   ¶= ½AÁA