§
    ¯a»jq
  ã                   ót   — d Z ddlZddlmZmZ  G d„ de¦  «        Z G d„ de¦  «        Z G d„ d	¦  «        ZdS )
zÞ
Shared 2.5D Isometric Coordinate and Mathematical System for FreeExile (Server Core).
Implements standard 2:1 isometric projection, reverse projection (raycasting),
height layering, and hardware depth value calculations.
é    N)ÚTupleÚ
NamedTuplec                   ó$   — e Zd ZU eed<   eed<   dS )ÚVector2DÚxÚyN©Ú__name__Ú
__module__Ú__qualname__ÚfloatÚ__annotations__© ó    ú4C:\Projects\FreeExile\server\world\isometric_math.pyr   r      s"   € € € € € € Ø€H€H�HØ€H€H�H€H€Hr   r   c                   ó.   — e Zd ZU eed<   eed<   eed<   dS )ÚVector3Dr   r   ÚzNr	   r   r   r   r   r      s+   € € € € € € Ø€H€H�HØ€H€H�HØ€H€H�H€H€Hr   r   c                   ó  — e Zd ZU dZeed<   dZeed<   dZeed<   dZeed<   e	dd
ededede
fd„¦   «         Ze	ddededede
fd„¦   «         Ze	ddedededefd„¦   «         Ze	efdedededefd„¦   «         Ze	dededededef
d„¦   «         ZdS ) ÚIsometricMathg      P@Ú
TILE_WIDTHg      @@ÚTILE_HEIGHTg      8@ÚHEIGHT_SCALEgÍÌÌÌÌÌü?ÚCAPSULE_HEIGHTç        Úworld_xÚworld_yÚworld_zÚreturnc                 ó–   — | |z
  t           j        dz  z  }| |z   t           j        dz  z  |t           j        z  z
  }t	          ||¦  «        S )z‰
        Converts 2.5D world coordinates (X, Y ground plane, Z elevation)
        to 2D isometric screen projection coordinates.
        g       @)r   r   r   r   r   )r   r   r   Úscreen_xÚscreen_ys        r   Úworld_to_screenzIsometricMath.world_to_screen   sP   € ð ˜gÑ%­-Ô*BÀSÑ*HÑIˆØ˜gÑ%­-Ô*CÀcÑ*IÑJÈgÕXeÔXrÑNrÑsˆÝ˜ (Ñ+Ô+Ð+r   r!   r"   c                 óÂ   — ||t           j        z  z   }| t           j        z  |t           j        z  z   }|t           j        z  | t           j        z  z
  }t	          ||¦  «        S )z§
        Reverse projection: maps 2D screen coordinates back to 2.5D world coordinates on plane Z.
        Used for touch raycasting and ground target aiming.
        )r   r   r   r   r   )r!   r"   r   Ú
adjusted_yr   r   s         r   Úscreen_to_worldzIsometricMath.screen_to_world'   sZ   € ð  ­=Ô+EÑ!EÑFˆ
Ø�mÔ6Ñ6¸:ÍÔHaÑ;aÑbˆØ¥Ô 9Ñ9¸hÍÔIaÑ>aÑbˆÝ˜ Ñ)Ô)Ð)r   Úlayer_offsetc                 ó   — | dz  |z   |z   S )z½
        Calculates a monotonic depth sorting key for hardware Z-buffer.
        In 2.5D isometric view, objects with larger Y coordinates are rendered in front (closer to camera).
        g      $@r   )r   r   r'   s      r   Úcalculate_depth_keyz!IsometricMath.calculate_depth_key2   s   € ð ˜$‘ 'Ñ)¨LÑ8Ð8r   Úz_aÚz_bÚ	thresholdc                 ó.   — t          | |z
  ¦  «        |k     S )z¸
        Determines whether two entities occupy the same vertical slice for collision.
        Allows characters on bridges (Z=1.0) to walk over characters underneath (Z=0.0).
        )Úabs)r*   r+   r,   s      r   Úcheck_height_overlapz"IsometricMath.check_height_overlap:   s   € õ �3˜‘9‰~Œ~ 	Ò)Ð)r   Úx1Úy1Úx2Úy2c                 ó8   — t          j        || z
  ||z
  ¦  «        S )N)ÚmathÚhypot)r0   r1   r2   r3   s       r   Údistance_2dzIsometricMath.distance_2dB   s   € åŒz˜"˜r™' 2¨¡7Ñ+Ô+Ð+r   N)r   )r   r   )r
   r   r   r   r   r   r   r   r   Ústaticmethodr   r#   r&   r)   Úboolr/   r7   r   r   r   r   r      s£  € € € € € € à€J�ÐÐÑØ€K�ÐÐÑØ€L�%ÐÐÑØ€N�EÐÐÑàð,ð , ð ,°ð ,Àð ,ÐQYð ,ð ,ð ,ñ „\ð,ð ð*ð * %ð *°5ð *À5ð *ÐS[ð *ð *ð *ñ „\ð*ð ð9ð 9 Uð 9°Uð 9ÐPUð 9Ð`eð 9ð 9ð 9ñ „\ð9ð ØHVð *ð * %ð *¨eð *Àð *Ð[_ð *ð *ð *ñ „\ð*ð ð,˜ð , 5ð ,¨eð ,¸ð ,À5ð ,ð ,ð ,ñ „\ð,ð ,ð ,r   r   )Ú__doc__r5   Útypingr   r   r   r   r   r   r   r   ú<module>r<      s¸   ððð ð €€€Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $ðð ð ð ð ˆzñ ô ð ð
ð ð ð ð ˆzñ ô ð ð.,ð .,ð .,ð .,ð .,ñ .,ô .,ð .,ð .,ð .,r   