
    UHj                        d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	  e	e
      j                         j                  d   ZddZddZdd	Zdd
ZddZedk(  r e        yy)z;Summarize map layer tile pairs for collision-rule analysis.    )annotationsN)Counter)Path   c                    | j                  d      }t        j                  d|t        j                        }|st	        |  d      t        j                  |j                  d            S )Nutf-8encodingzwindow\.HWANSE_MAPS = (.*);\n?z& does not contain the expected wrapperr   )	read_textre	fullmatchS
ValueErrorjsonloadsgroup)pathtextmatchs      0/home/exedev/hwanse/tools/summarize_map_tiles.py	load_mapsr      sV    >>7>+DLL:D"$$GED6!GHII::ekk!n%%    c                   t        fdt        | |      D              t        fdt        | |      D              t        d t        | |      D              t        d | D              t        d |D              t        d | D              t        d |D              t        d t        | |      D              t        d	 t        | |      D              d
	S )Nc              3  >   K   | ]  \  }}|vs|d k(  sd  ywr   r   N .0abterrain_blockeds      r   	<genexpr>z"passable_counts.<locals>.<genexpr>   s%     idaQoE]bcghbhi   c              3  >   K   | ]  \  }}|v s|d k(  sd  ywr   r   r   s      r   r"   z"passable_counts.<locals>.<genexpr>   s%     #i$!QoI]bcghbhA#ir#   c              3  >   K   | ]  \  }}|d kD  s|dk(  sd   yw)r   r   Nr   r   r   r    s      r   r"   z"passable_counts.<locals>.<genexpr>   s!     S41a!a%AQRFQS   c              3  ,   K   | ]  }|d kD  s	d   yw)r   Nr   r   values     r   r"   z"passable_counts.<locals>.<genexpr>   s     AEuqyaA   
c              3  ,   K   | ]  }|d k(  s	d  ywr   r   r)   s     r   r"   z"passable_counts.<locals>.<genexpr>   s     ?EQJ1?r+   c              3  ,   K   | ]  }|d k7  s	d  ywr   r   r)   s     r   r"   z"passable_counts.<locals>.<genexpr>        :Euza:r+   c              3  ,   K   | ]  }|d k7  s	d  ywr   r   r)   s     r   r"   z"passable_counts.<locals>.<genexpr>   r.   r+   c              3  >   K   | ]  \  }}|d k7  s|d k7  sd  ywr   r   r&   s      r   r"   z"passable_counts.<locals>.<genexpr>    s      K$!QaAFAKr'   c              3  <   K   | ]  \  }}|d k7  s|d k7  sd  ywr   r   r&   s      r   r"   z"passable_counts.<locals>.<genexpr>!   s      LDAq16Q!VaLs   )	terrainCandidatedarkTerrainCandidatewalkCandidatelayer0NonEmptylayer1Emptylayer0layer1botheither)sumzip)r7   r8   r!   s     `r   passable_countsr=      s    ic&&.Aii ##i#ff2E#i iS3vv+>SSAVAA?&??:V:::V::K#ff"5KKLC$7LL
 
r   c                   |d   \  }}t        |j                  d      xs g       }t        t        ||            }t	        d |j                         D              }| |d   |d   |d   |d   z  |j                  dg       |j                  d      t        t        |            t        t        |            t        |      |t        |      t        |||      |j                  |      D 	
cg c]  \  \  }}	}
|
||	d c}
}	}d	S c c}
}	}w )
NlayersterrainBlockedTilesc              3  8   K   | ]  \  \  }}}||k7  s|  y w)Nr   )r   r   r    counts       r   r"   z summarize_map.<locals>.<genexpr>)   s     IA!q&eIs   widthheightlayerTilesets
sceneIdHex)rB   r7   r8   )namerC   rD   	tileCounttilesetsrF   uniqueLayer0uniqueLayer1uniquePairsnonmatchingPairsterrainBlockedTileCountpassableCountscommonPairs)	setgetr   r<   r;   itemslenr=   most_common)rG   infolimitr7   r8   r!   pairsnonmatchingr   r    rB   s              r   summarize_maprZ   %   s   (^NFF$((#89?R@OC'(EIIIKgx.']T(^3HH_b1hh|,CK(CK(5z'#&#7)&&/J "'!2!25!9
 
A qA6
 
s   ,D c           
     .   g d}| D ]  }|d   }dj                  d |d   d | D              }|j                  dj                  g d|d    d	|d
    d|d    d	dj                  |d          d	|d    d	|d    d|d    d|d    d	|d    d	|d    d|d    d|d    d|d    d|d    d|d    d|d    d|d    d|d    d	| d              |j                  d       dj                  |      S ) N)z# Map Tile Summary z9Generated from `out/maps.js` for collision-rule analysis.r\   z| map | size | tilesets | terrain blocked | unique L0/L1/pairs | nonmatching | passable bright/dark/walk/L0>1/L1=0/L0/L1/both/either | common pairs |z6| --- | ---: | --- | ---: | ---: | ---: | ---: | --- |rO   z, c              3  D   K   | ]  }|d     d|d    d|d    d  yw)rB   zx(r7   ,r8   )Nr   )r   pairs     r   r"   zmarkdown.<locals>.<genexpr>I   s9      
 G}oRX/qh0@B
s    rP   r\   z| rG   z | rC   xrD   r^   rI   rN   rJ   /rK   rL   rM   r2   r3   r4   r5   r6   r7   r8   r9   r:   z |
)joinappend)	summariesrW   linesitemcountscommons         r   markdownrk   >   s   E  
&' 
]+FU3
 
 	 b f c $w-  $x.1A  xxZ()**--.//2 N#$ %& '+>&:%; <= >B-=P<Q RU &'(	 ),	
 ()*
 +,
 -33I,J+K
 LM
 NTTcMdLe
 fg &'( )* +1*?)@ AB h  !" #)"2!3 45 6<F^4D EF GMXFVEW X[ h 
	

" 
LL99Ur   c            	     T   t        j                  t              } | j                  dt        t
        dz  dz         | j                  dt               | j                  dt               | j                  d	t        d
       | j                         }t        |j                        }t        |j                               D cg c]  \  }}t        |||j                         }}}|j                  rX|j                  j                  j!                  dd       |j                  j#                  t%        ||j                        d       |j&                  r]|j&                  j                  j!                  dd       |j&                  j#                  t)        j*                  |dd      dz   d       |j                  r%t-        dt/        |       d|j                          nt-        dt/        |       d       |j&                  rt-        d|j&                          y y c c}}w )N)descriptionz--mapsoutzmaps.js)typedefaultz--out)ro   z
--json-outz--limit   T)parentsexist_okr   r	   F   )ensure_asciiindentrc   zwrote z map tile summaries -> zbuilt z map tile summarieszwrote JSON -> )argparseArgumentParser__doc__add_argumentr   ROOTint
parse_argsr   mapssortedrS   rZ   rW   rn   parentmkdir
write_textrk   json_outr   dumpsprintrT   )parserargsr~   rG   rV   rf   s         r   mainr   \   s   $$9F
tTE\I5MN
d+
40
	Q7DTYYD !.D$ 	dD$**-I 
 xxdT:HY

;gN}}""4$"?  IERS!TW[![fm nxxs9~&&=dhhZHIs9~&&9:;}}t}}o./ !s   !H$__main__)r   r   returndict)r7   	list[int]r8   r   r!   zset[int]r   zdict[str, int])rG   strrV   r   rW   r|   r   r   )rf   z
list[dict]rW   r|   r   r   )r   None)ry   
__future__r   rw   r   r   collectionsr   pathlibr   __file__resolverr   r{   r   r=   rZ   rk   r   __name__r   r   r   <module>r      sf    A "   	   H~''*&2<0: zF r   