
    UHj                    n   d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ  ee      j                         j                   d	   Zed
z  Zedz  Zg dg dg dg dg dg dg dg dg dg dd
Zd dZd!dZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d"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@Render frequently used map tiles with tile IDs and usage counts.    )annotationsN)Counter)Path)	write_png)	parse_map)load_tileset_rgb   extract_fldout)111101r   r   r   )010110r   r   r   )r   001r   100r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )
0123456789c                    |dk  s|dk  ry ||z  |z   dz  }|dk  s|dz   t        |       kD  ry t        |      | ||dz    y )Nr      )lenbytes)canvaswidthxycoloroffsets         9/home/exedev/hwanse/tools/render_tileset_usage_gallery.py	put_pixelr'       sQ    1uA%i!mq FzVaZ#f+-"',F6FQJ    c           
         |}|D ]p  }|dk(  r|dz  }t         j                  |      }|s|dz  }+t        |      D ]3  \  }	}
t        |
      D ]   \  }}|dk(  st        | |||z   ||	z   |       " 5 |dz  }r y )N    r   )DIGITSget	enumerater'   )r    r!   r"   r#   textr$   cursorcharglyphgyrowgxvalues                r&   	draw_textr7   )   s    F 3;aKF

4 aKF ' 	IGB&s^ I	EC<feVb[!b&%HI	I 	!r(   c           	     Z   d}|\  }}	}
}||z  }||z  |z  }||z  |z  }||z   |	kD  ry t        |      D ]v  }t        |      D ]f  }||z   |z  |z   |z   dz  }|
||dz    }||k(  r"t        |      D ]7  }t        |      D ]'  }|||z  z   |z   |z  |z   ||z  z   |z   dz  }|| ||dz    ) 9 h x y )N   r   )range)r    canvas_widthdst_xdst_ytile_idtilesetscale	tile_sizetileset_widthtileset_heightrgbtransparentcolumnssrc_xsrc_yr#   r"   srcr$   sysxdsts                         r&   blit_scaled_tilerM   :   s    I6=3M>3y(Gw)+E9,Ey>)9 	2y! 	2AAI.6:a?CcAg&E#El 2, 2B!AI-2lBUJQQVYVY[[_``C,1F3q)22	2	2r(   c                    t               }|D ]G  }t        |      }t        |d         D ])  \  }}|d   |   | k7  r|j                  d |D               + I |S )NlayerslayerTilesetsc              3  &   K   | ]	  }|s|  y wN .0tiles     r&   	<genexpr>z$usage_for_tileset.<locals>.<genexpr>]        :DT4:   )r   r   r.   update)tileset_namemapscounterrI   infolayer_indexlayers          r&   usage_for_tilesetra   V   sl    #IG ;~"+DN"; 	;KO$[1\ANN:E::	;; Nr(   c                   i }| j                         D ]t  }|j                  d      xs |j                  d      g}t        |d         D ]<  \  }}||   }|j                  |t	                     }|j                  d |D               > v |S )NrP   r?   rO   c              3  &   K   | ]	  }|s|  y wrR   rS   rT   s     r&   rW   z1usage_by_tileset_from_map_data.<locals>.<genexpr>h   rX   rY   )valuesr-   r.   
setdefaultr   rZ   )map_datacountersr^   tilesetsr_   r`   r[   r]   s           r&   usage_by_tileset_from_map_datari   a   s    (*H! ;88O,E)1D0E"+DN"; 	;K#K0L)),	BGNN:E::	;; Or(   c           
     \   |j                  |      }|st        d|        d}d}d}d}t        |      |z   dz
  |z  }	||z  }
|	|z  }t        d      |
z  |z  }t	        |       }t        |      D ]m  \  }\  }}||z  |z  }||z  |z  }t        ||
|dz   |d	z   |||       t        ||
|d	z   |d
z   t        |      d       t        ||
|dz   |d
z   t        |      d       o |j                  j                  dd       t        ||
|t        |             t        dt        |       d|        y )Nzno map usage found for r   H   >      r	   )   rn   rn         3   )   rr   rr   "   )      rr   T)parentsexist_okzwrote z tile usage entries -> )most_common
ValueErrorr   	bytearrayr   r.   rM   r7   strparentmkdirr   r   print)r[   r]   rL   limititemsr@   cell_wcell_hrF   rowsr!   heightr    r?   indexr>   countcell_xcell_ys                      r&   render_gallery_from_counterr   l   s`   &E2<.ABBEFFGJ 1$0DfEF]F|$u,v5F|,G#,U#3 X'/V+7"f,VaZ'SXY&%!Vb[#g,X&%"frk3u:WX JJTD1c5&%-0	F3u:,5cU
;<r(   c                t    t        t        j                  d            }t        | |      }t	        | |||       y )Nzmap[0-9]*.cns)sortedEXTRACT_FLDglobra   r   )r[   rL   r   r\   r]   s        r&   render_galleryr      s1    +""?34Dd3GgsEBr(   c                 b   t        j                  t              } | j                  dd       | j                  dt        t
        dz         | j                  dt        d	       | j                         }t        |j                  |j                  |j                   d
z  |j                         y )N)descriptionr?   ztileset name without .cns)helpz--out
tile_usage)typedefaultz--limit@   z
_usage.png)argparseArgumentParser__doc__add_argumentr   OUTint
parse_argsr   r?   r   r   )parserargss     r&   mainr      s    $$9F
	(CD
dC,4FG
	R8D4<<t||nJ,G!GTr(   __main__)r    rz   r!   r   r"   r   r#   r   r$   tuple[int, int, int]returnNone)r    rz   r!   r   r"   r   r#   r   r/   r{   r$   r   r   r   )r    rz   r;   r   r<   r   r=   r   r>   r   r?   ztuple[int, int, bytes, bytes]r@   r   r   r   )r[   r{   r\   z
list[Path]r   Counter[int])rf   zdict[str, dict]r   zdict[str, Counter[int]])
r[   r{   r]   r   rL   r   r   r   r   r   )r[   r{   rL   r   r   r   r   r   )r   r   )r   
__future__r   r   collectionsr   pathlibr   
decode_cnsr   export_map_jsr   render_map_previewr   __file__resolverv   ROOTr   r   r,   r'   r7   rM   ra   ri   r   r   r   __name__rS   r(   r&   <module>r      s    F "      # / H~''*]"
Ul 
-	,	,	,	,	,	,	,	,	,
/"222 2 	2
 2 +2 2 
28=6CU zF r(   