U
    ^'^ 8                     @   s  d dl Z d dlZd dlZd dl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 d dlmZ d dlZd dlmZmZ dZdZdZd	Zd
Zd	ZdZdZdZdd Zejdkre
dZne
dZd!ddZ dd Z!dd Z"d"ddZ#d#ddZ$dd Z%e&dkre%ej'd d   dS )$    N)	TurboJPEG)get_terminal_size)platform)Image
ImageChopsFTP   z.pngz.jpg)   -   3         c              
   C   sX   zFt  d }td| d|tt| |  t|  d  ddd W n   Y nX d S )Nr   z{}{}
     T)endflush)tsizeprintformatmathceillen)argtsiz r   GD:\Dropbox\games\factorio\mods-live\L0laapk3_FactorioMaps_3.5.5\zoom.py
printErase    s
    
<r   ntzmozjpeg/turbojpeg.dllzmozjpeg/libturbojpeg.soc              
   C   s\   t r| j|dddS t|d}|tt| d d d d d d df   |	  d S )Nr   d   )Zsubsamplingqualitywb)

maxQualitysaveopenwritejpegencodenumpyarraycopyclose)imgpathZinpathout_filer   r   r   saveCompress2   s
    
2r/   c           	   	   C   s  | D ]\}}}}t j|t||}tj|t ddd}ttkrht	||t |t  t 
|t  t|d |d dD ]}|jd td kr|jd td kr||jd d |jd d ftj}t j|t|}t j|st | t	|t j||t  q|qd S )NrmodeRGBr   r!   r   r   )osr-   joinstrr   r$   EXTconvertOUTEXTr/   removerangesizeMINRENDERBOXSIZEresize	ANTIALIASexistsmkdir)	Z	workQueuefolderstartstopfilenamer-   r,   zZzFolderr   r   r   
simpleZoom;   s    $&
rG   c                 K   s  t tj|dd@}t|}tjtj|d}t tj|dd}|r\t|}	ndi i}	t|d D ] \}
}|d |krp|}t|
}qp||	d krdi i|	d |< t	 }| 
 D ]t\}}i }|D ]0}|d | d d |d | d d	  ||< q|d 
 D ]"\}}d
|kr||	d | d krJi |	d | d |< d
|	d | d | kr|g |	d | d | d
< t|d
 D ]\}}|d dkrd|krd}|d 
 D ]&\}}||krt||||  }q|	d | d | d
 | si |	d | d | d
 |< d|	d | d | d
 | kr^i |	d | d | d
 | d< |d d | |d d	< |d d	 |	d | d | d
 | d d	< d|kr|n|	d | d | d
 | d |kr|tjtj||d |d |d r|ndd|d d |d d	 |d f qqq|d t|	| |  W 5 Q R X t||d rndnd }g }t|}tdt|t|D ]2}
tjt||
d | fd}|  || q|D ]}|  qd S )NmapInfo.jsonzr+zmapInfo.out.jsonmapsr-   surfaceszoommaxminlinkstypelink_renderbox_arear   ZmaxZoomFromSurfaces	toSurfacedaynightdayrenderboxesrE   zoomthreads
maxthreadstargetargs)r$   r4   r-   r5   jsonloadisfile	enumerater6   setitemsrL   addabspathseekdumptruncateintlistr;   rM   r   mpProcessrG   rC   append)daytimeSurfaces
workfolder	timestampsubpathkwargsZmapInfoFilemapInfoZoutFileExistsZmapInfoOutFileZoutInfoimZmapLayermapIndexZzoomWorkdaytimeZactiveSurfacesZsurfaceZoomLevelssurfaceNamesurface	linkIndexlinkZtotalZoomLevelsRequiredZzoomSurfaceZ	zoomLevelrV   	processespr   r   r   zoomRenderboxesL   sd    

.

" ,4^
rz   c
                    s  d||  }
||kr|t ||dD ]T|
|d  }|
|d  }t |||
 dD ]t |||
 dD ]ddddg} fd	d
|D }tdd |D rftjtj d td td s(z4ttj d td td  W n tk
r&   Y nX g }t t	|D ]}|
tj||  || s8t dt	D ]f}tj | tt|| d  t|| d  t ||< tj|| rj q8qjq8td||ft}g }t t	|D ]}tj|| rtj|| ddd}|j|| d | d || d | d f||d |d ftjd || r|
||| f q|d krt|tj d td td td t  ttkr6|d ks|	r6|tj d td td td t  ttkrf|D ](\}}t||tt| t| qBqfqP|
d }
q"nt||krtj d t|t|d t|d }tj|t ddd}t||t |t  t|t  d S )Nr   r!   r   r   )r   r   )r   r   r   r   )r   r   c                    sH   g | ]@}t j d  tt|d   t|d  t qS r{   )r4   r-   r5   r6   r7   ).0coordbasepathrs   rp   jkpathListrt   r   r   
<listcomp>   s     zwork.<locals>.<listcomp>c                 s   s   | ]}t j|V  qd S )N)r4   r-   r\   )r|   r-   r   r   r   	<genexpr>   s     zwork.<locals>.<genexpr>r3   r0   r1   boxim)r;   anyr4   r-   r@   r5   r6   makedirsOSErrorr   ri   r\   r9   r   newBACKGROUNDCOLORr$   r8   paster>   r?   r/   r7   r#   replacer:   )r   r   rt   rs   r<   rC   rD   lastchunkkeepLast	chunksizexyZcoordspathsZ
isOriginalrq   nresultZimgsr,   r-   r   r~   r   work   sZ    
44
HH
>>
0r   c                 C   sl   |	  , |	jd }|dk r*W 5 Q R  d S ||	_W 5 Q R X || }t| |||||||||
 |
d q d S )Nr   r   T)Zget_lockvaluer   put)r   r   rt   rs   r<   rC   rD   r   	allChunkscounterresultQueuer   rp   r   r   r   r   thread   s    

r   c            5      O   s  t t tjdkrt jnd t| dkrDt| d 	 dknd}tj
t| dkrb| d nd| d }tj
|d	}tj
|d
}t||d rdnd }t|ddd}t|}W 5 Q R X t|d D ]\}	}
t| dks|
d | d kr|
d  D ]\}}t| dks*|| d kr|d d }|d d }g }z|d r\|d W n tk
rt   Y nX z|d r|d W n tk
r   Y nX |D ]}t| dks|| d krtj
tj
|d
t|
d ||t|d stdddt d d  dd |op|	t|d d kop|d |
d krNd nt|
d  d kop||d k}i }td!}td"}td!}td"}d }ttj
|t|
d ||t|D ]}t|}t||}t||}ttj
|t|
d ||t||D ]}|d krJtjtj
|t|
d ||t|||dd#jd }t| d$dd }t||}t||}d|||| ? ||| ? f< qqt|dkrqg }t!|	d%d%D ] }|t|d | d  qd}d| t| |k r |d }qtt|| d d|d }g }t"|D ]\} t!d| D ]H}!t!d| D ]4}"|| d d|  |! | d d|  |" f qHq8q(tt||}#g }$t|}%t#$d&|%}&t#% }'t!d|#D ]B}(t#jt&|||||||| |||&|'|fd'})|)'  |$|) qd}*t!|%D ]n}(|'(d |*d7 }*t|*|% }+t d d },td(t)|+d) dd*t|+|,  d|,t|+|,   dd q|$D ]})|)  q|dkrg }$t|d }!t"|D ]F}-t#jt*||||||| |||-|f
d'})|!d }!|)'  |$|) q|$D ]})|)  q |rt+d+ tj
|t|
d ||t|}.t,d,|| d | || ? || d | || ? ft-}/||| ? }0||| ? }1|0| || > ||  || ? }2|1| || > ||  || ? }3t"|D ]}-tj
|.t|-d t|-d t. }4|/j/|2|-d |0 |  |3|-d |1 |  ftj|4dd#0d,1||ftj2d- t3t.krt4|4 q|/5tj
|d.t6  td/d0d*t d d   qqqd S )1Nr   
      falseT   z ../../script-output/FactorioMapsr   rH   ImagesrU   rV   r0   zutf-8)encodingrI   r   r-   rJ   r   rK   rL   rM   rS   night   zzoom {:5.1f}% [{}]r      r   )r   Znauvisinfz-infr1   .r!   rp   rW   zzoom {:5.1f}% [{}{}]b   =zgenerating thumbnailr3   r   	thumbnailzzoom {:5.1f}% [{}]r   )7psutilrh   r4   getpidnicenameBELOW_NORMAL_PRIORITY_CLASSr   r6   lowerr-   r5   re   r$   rZ   r[   r]   r_   ri   KeyErrorisdirr   r   r   sortedkeysfloatlistdirrM   rL   r   r<   splitr;   rf   rg   ValueQueuer   rC   getroundr   r   r   r   r7   r   r8   r>   r?   r9   r:   r#   THUMBNAILEXT)5rY   rn   needsThumbnailtoppathdatapathr   rV   fdatarr   maprt   ru   ZmaxzoomZminzoomZdaytimesrs   ZgenerateThumbnailZallBigChunksZminXZmaxXZminYZmaxYZ	imageSizeZxStrr   ZyStrr   r   ZotherMapIndexZthreadsplitr   posrp   r   threadsrx   originalSizer   r   _ry   doneSizeprogressr   r   Zminzoompathr   ZbigMinXZbigMinYZxOffsetZyOffsetr-   r   r   r   rK      s    $$&
  
  
0"(
*

,
4

$:*
@
& :  $P
rK   __main__r   )N)F)F)(rZ   r   multiprocessingrg   r4   
subprocesssystimer(   Z	turbojpegr   shutilr   r   r   	_platformr   PILr   r   r"   ZuseBetterEncoderr   r7   r9   r   r   ZTHUMBNAILSCALEr=   r   r   r&   r/   rG   rz   r   r   rK   __name__argvr   r   r   r   <module>   sD   



	M
=
 
