§
    ]‘¦j8  ã                  ó  — d Z ddlmZ ddlZddlZddlZddlZddlmZ ddl	m
Z
mZmZ  ej        d¦  «        ZdZdZd	Zd
ZdZdZdZeeez  z   Ze G d„ d¦  «        ¦   «         Ze G d„ d¦  «        ¦   «         Z G d„ d¦  «        ZdS )a  POI Radar Overlay & Shared Memory IPC Consumer for Poe2VisualTool v1.2.0.

Reads real-time POI coordinates (Bosses, Strongboxes, Shrines) from the C++
engine's shared memory segment (`Poe2VisualTool_Poi_v1`) with seqlock
synchronization and triggers proximity audio alarms.
é    )ÚannotationsN)Ú	dataclass)ÚCallableÚListÚOptionalzPoe2VisualTool.RadarÚPoe2VisualTool_Poi_v1i1IOPé@   z<IIII4fé    z<QI5fB3sff32séL   c                  óÞ   — e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded	<   d
ed<   ded<   ded<   ded<   edd„¦   «         Zedd„¦   «         Zedd„¦   «         Zedd„¦   «         ZdS )ÚRadarEntityÚintÚidÚpoi_typeÚfloatÚworld_xÚworld_yÚworld_zÚscreen_xÚscreen_yÚboolÚ	on_screenÚdistanceÚ
health_pctÚstrÚnameÚreturnc                ó   — | j         dk    S )Né   ©r   ©Úselfs    ú9C:\Projects\Poe2VisualTool\src\assistant\radar_overlay.pyÚis_bosszRadarEntity.is_boss1   ó   € àŒ} Ò!Ð!ó    c                ó   — | j         dk    S )Né   r    r!   s    r#   Úis_rarezRadarEntity.is_rare5   r%   r&   c                ó   — | j         dk    S )Né   r    r!   s    r#   Úis_strongboxzRadarEntity.is_strongbox9   r%   r&   c                ó   — | j         dk    S )Né   r    r!   s    r#   Ú	is_shrinezRadarEntity.is_shrine=   r%   r&   N©r   r   )	Ú__name__Ú
__module__Ú__qualname__Ú__annotations__Úpropertyr$   r)   r,   r/   © r&   r#   r   r   #   sú   € € € € € € à€G€G�GØ€M€M�MØ€N€N�NØ€N€N�NØ€N€N�NØ€O€O�OØ€O€O�OØ€O€O�OØ€O€O�OØÐÐÑØ€I€I�Iàð"ð "ð "ñ „Xð"ð ð"ð "ð "ñ „Xð"ð ð"ð "ð "ñ „Xð"ð ð"ð "ð "ñ „Xð"ð "ð "r&   r   c                  óL   — e Zd ZU ded<   ded<   ded<   ded<   ded<   ded	<   d
S )ÚRadarSnapshotr   Úcountr   Úplayer_xÚplayer_yÚplayer_zÚ
camera_yawúList[RadarEntity]ÚentitiesN)r1   r2   r3   r4   r6   r&   r#   r8   r8   B   sN   € € € € € € à€J€J�JØ€O€O�OØ€O€O�OØ€O€O�OØÐÐÑØÐÐÑÐÐr&   r8   c                  óF   — e Zd ZdZefdd„Zdd„Zdd	„Zddd„Z	 	 ddd„Z	dS ) ÚPoiRadarReaderz5Consumes Poe2VisualTool_Poi_v1 shared memory segment.Úipc_namer   r   ÚNonec                óÀ   — || _         d | _        t          j        t          ¦  «        | _        t          j        t          ¦  «        | _        t          ¦   «         | _	        d S ©N)
rB   Ú_mmapÚstructÚStructÚHEADER_FORMATÚ_header_structÚENTITY_FORMATÚ_entity_structÚsetÚ_seen_high_value_ids)r"   rB   s     r#   Ú__init__zPoiRadarReader.__init__O   sF   € Ø ˆŒØ*.ˆŒ
Ý$œm­MÑ:Ô:ˆÔÝ$œm­MÑ:Ô:ˆÔÝ.1©e¬eˆÔ!Ð!Ð!r&   r   c                óü   — | j         �dS 	 t          j        dt          | j        t          j        ¬¦  «        | _         dS # t
          $ r3}t                               d| j        |¦  «         d| _         Y d}~dS d}~ww xY w)zOpens the named memory mapping.NTéÿÿÿÿ)ÚtagnameÚaccessz)Failed to open POI shared memory (%s): %sF)rF   ÚmmapÚTOTAL_STATE_SIZErB   ÚACCESS_READÚ	ExceptionÚloggerÚdebug)r"   Úerrs     r#   ÚopenzPoiRadarReader.openV   s‘   € àŒ:Ð!Ø�4ð	ÝœØÝ ØœÝÔ'ð	ñ ô ˆDŒJð �4øÝð 	ð 	ð 	Ý�LŠLÐDÀdÄmÐUXÑYÔYÐYØˆDŒJØ�5�5�5�5�5øøøøð	øøøs   ‹1> ¾
A;Á(A6Á6A;c                ó|   — | j         �4	 | j                              ¦   «          n# t          $ r Y nw xY wd | _         d S d S rE   )rF   ÚcloserW   r!   s    r#   r]   zPoiRadarReader.closeg   sY   € ØŒ:Ð!ðØ”
× Ò Ñ"Ô"Ð"Ð"øÝð ð ð Ø�ðøøøàˆDŒJˆJˆJð "Ð!s   ‰# £
0¯0r.   Úmax_retriesr   úOptional[RadarSnapshot]c                óÎ  — | j         €|                      ¦   «         sdS | j         €J ‚t          |¦  «        D �]-}	 | j                              d¦  «         | j                              t
          ¦  «        }t          |¦  «        t
          k     rŒV| j                             |¦  «        \  }}}}}}}	}
|t          k    r dS |dz  dk    rŒ‘t          |t          ¦  «        }g }t          |¦  «        D ]Í}| j                              t          ¦  «        }t          |¦  «        t          k     r n“| j                             |¦  «        \  }}}}}}}}}}}}|                     dd¦  «        d                              dd¬¦  «        }|                     t#          |||||||t%          |¦  «        |||¬	¦  «        ¦  «         ŒÎ| j                              d
¦  «         | j                              d
¦  «        }t'          j        d|¦  «        \  }||k    r$t)          t          |¦  «        |||	|
|¬¦  «        c S �Œü# t*          $ r&}t,                               d|¦  «         Y d}~�Œ'd}~ww xY wdS )z@Reads a consistent radar snapshot using seqlock synchronization.Nr   r(   ó    r   zutf-8Úreplace)Úerrors)r   r   r   r   r   r   r   r   r   r   r   r.   z<I)r9   r:   r;   r<   r=   r?   zError reading POI snapshot: %s)rF   r[   ÚrangeÚseekÚreadÚHEADER_SIZEÚlenrJ   ÚunpackÚ	POI_MAGICÚminÚMAX_POI_ENTRIESÚENTITY_SIZErL   ÚsplitÚdecodeÚappendr   r   rG   r8   rW   rX   rY   )r"   r^   Ú_Ú
raw_headerÚmagicÚseq1r9   ÚpxÚpyÚpzÚyawÚclamped_countr?   Úraw_entÚeidÚetypeÚwxÚwyÚwzÚsxÚsyÚon_scrÚdistÚhpÚraw_nameÚname_strÚraw_seq2Úseq2rZ   s                                r#   Úread_snapshotzPoiRadarReader.read_snapshoto   sº  € àŒ:ÐØ—9’9‘;”;ð Ø�tàŒzÐ%Ð%Ð%Ý�{Ñ#Ô#ð D	Dñ D	DˆAðCDØ”
—’ Ñ"Ô"Ð"Ø!œZŸ_š_­[Ñ9Ô9�
Ý�z‘?”?¥[Ò0Ð0Øà9=Ô9L×9SÒ9SÐT^Ñ9_Ô9_Ñ6��t˜U A r¨2¨r°3Ø�IÒ%Ð%Ø˜4˜4à˜!‘8˜q’=�=àå # E­?Ñ ;Ô ;�Ø.0�å˜}Ñ-Ô-ð !ð !�AØ"œjŸošo­kÑ:Ô:�GÝ˜7‘|”|¥kÒ1Ð1Ø˜ð Ô+×2Ò2°7Ñ;Ô;ñØØØØØØØØØØØØ à'Ÿ~š~¨g°qÑ9Ô9¸!Ô<×CÒCÀGÐT]ÐCÑ^Ô^�HØ—O’OÝ#Ø"Ø%*Ø$&Ø$&Ø$&Ø%'Ø%'Ý&*¨6¡l¤lØ%)Ø')Ø!)ðñ ô ñô ð ð ð" ”
—’ Ñ"Ô"Ð"Øœ:Ÿ?š?¨1Ñ-Ô-�Ý œ-¨¨hÑ7Ô7‘�à˜4’<�<Ý(Ý! (™mœmØ!#Ø!#Ø!#Ø#&Ø!)ðñ ô ð ð ð ñ  øõ ð Dð Dð DÝ—’Ð=¸sÑCÔCÐCÐCÐCÐCÐCÑCøøøøðDøøøð ˆts+   ºAH2Â.H2Â=	H2ÃE&H2È2
I"È<IÉI"ç     €f@NÚsnapshotr8   Údistance_thresholdr   Úon_new_targetú'Optional[Callable[[RadarEntity], None]]r>   c                ór  — g }t          ¦   «         }|j        D ]„}|                     |j        ¦  «         |j        s|j        rZ|j        |k    rO|j        | j        vrA| j                             |j        ¦  «         |                     |¦  «         |r ||¦  «         Œ…| j         	                    |¦  «         |S )zIIdentifies new Bosses or Strongboxes within proximity and triggers alert.)
rM   r?   Úaddr   r$   r,   r   rN   rp   Úintersection_update)r"   r‹   rŒ   r�   Únew_targetsÚcurrent_frame_idsÚents          r#   Úcheck_high_value_threatsz'PoiRadarReader.check_high_value_threats¾   sÒ   € ð *,ˆÝ™EœEÐàÔ$ð 	+ð 	+ˆCØ×!Ò! #¤&Ñ)Ô)Ð)Ø”ð +˜sÔ/ð +°S´\ÐEWÒ5WÐ5WØ”6 Ô!:Ð:Ð:ØÔ-×1Ò1°#´&Ñ9Ô9Ð9Ø×&Ò& sÑ+Ô+Ð+Ø$ð +Ø%˜ cÑ*Ô*Ð*øð 	Ô!×5Ò5Ð6GÑHÔHÐHØÐr&   )rB   r   r   rC   r0   )r   rC   )r.   )r^   r   r   r_   )rŠ   N)r‹   r8   rŒ   r   r�   rŽ   r   r>   )
r1   r2   r3   Ú__doc__ÚPOI_IPC_NAMErO   r[   r]   r‰   r•   r6   r&   r#   rA   rA   L   sž   € € € € € Ø?Ð?à'3ð 4ð 4ð 4ð 4ð 4ðð ð ð ð"ð ð ð ðMð Mð Mð Mð Mðd %*ØAEð	ð ð ð ð ð ð r&   rA   )r–   Ú
__future__r   ÚctypesÚloggingrT   rG   Údataclassesr   Útypingr   r   r   Ú	getLoggerrX   r—   rj   rl   rI   rg   rK   rm   rU   r   r8   rA   r6   r&   r#   ú<module>rž      se  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +à	ˆÔ	Ð1Ñ	2Ô	2€à&€Ø€	Ø€ð €Ø€ð  €Ø€à °;Ñ!>Ñ>Ð ð ð"ð "ð "ð "ð "ñ "ô "ñ „ð"ð< ð ð  ð  ð  ð  ñ  ô  ñ „ð ðGð Gð Gð Gð Gñ Gô Gð Gð Gð Gr&   