
    `:Jj'                        d Z ddlmZ ddlZddlZddlZddlmZ  ej                  d      Z	ddZ
ddZddZdd	Zdd
ZddZdddZddZddZddZddZedk(  r e        yy)zAExtract field-map transition candidates from scene event records.    )annotationsN)Pathzmap\d+_\d+[a-z]\.cns$c                z    t               }g }| D ])  }||v r|j                  |       |j                  |       + |S )N)setaddappend)valuesseenresultvalues       8/home/exedev/hwanse/tools/summarize_event_transitions.pyuniquer      sE    5DF D=e	
 M    c           	        | j                  dg       D cg c]3  }|j                  dg       D ]  }t        j                  |      r|d d  5 }}}t        |D cg c]  }|| j                  d      k7  s| c}      S c c}}w c c}w )NeventDispatchRefsconditionLinkedStringsmap)getFIELD_MAP_RE	fullmatchr   )recordreflinkedlinkslinks        r   field_map_linksr      s     ::126gg6; !!&) 	sE  EGDTVZZ5F-F4GHH Hs   8A?B4Bc                0    t        | t              sy d| dS )N0x04x)
isinstanceint)r   s    r   hex_scene_idr#   #   s    eS!c{r   c           	        i }|j                  dg       }t        |d d       D ]  \  }}|j                  d      }t        |t              rt        j                  |      s=|d d }|| j                  d      k(  rW||dz      j                  d      }t        |t              s|t        |      |j                  d      t        |j                  d      t              r	d	|d   d
nd d||<    |S )NconditionPayloadDwordsstringr   r      r   conditionPayloadVar   08x)sceneId
sceneIdHex	payloadVapayloadVaHex)r   	enumerater!   strr   r   r"   r#   )	r   r   r   dwordsindexitemr   targetscene_ids	            r   condition_target_scene_idsr6   )   s    FWW-r2F - 
t(#&#&l.D.DV.LVZZ&&%!)$((1(C(&x0!56 cgg&:;SA S-.s34	
v
( Mr   c                   g }| j                  dg       D ]  }t        |j                  dg       D cg c]  }t        j                  |      r|d d  c}      }|D cg c]  }|| j                  d      k7  s| }}|slt	        | |      }|j                  |j                  d      |j                  d      r	d|d   dnd |j                  d      t        |j                  d      t              r	d|d   dnd ||D ci c]  }||v r|||    c}|j                  dg       d	        |S c c}w c c}w c c}w )
Nr   r   r   r   conditionVar   r*   r)   )r8   conditionVaHexr-   r.   targetstargetSceneIdslinkedStrings)r   r   r   r   r6   r   r!   r"   )r   choicesr   r   r:   r4   target_scene_idss          r   condition_choicesr?   C   sk   Gzz-r2 
 "gg&>C))&1 s
 )0Of6VZZ=N3N6OO5fcB"ww}5CF77=CYBs='9#&>"?_c WW%9: "#''*>"?E 12378" #*#!11 ,V44#
 "%)A2!F	

> N; P#s   !D1
D68D6D;c                   g }| D ]  }t        |      }|st        |      }|j                  d      xs |j                  dg       }|j                  d      xs g }|j                  i 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                  d      d|j                  d      dt	        |j                  dg                     |S )NinBoundsPointspointsactivePointsr   r+   r,   	eventKindrecordVarecordVaHexr   r*   r:   conditionChoicesspawnPolicysameTileNearestStandablespawnConfidence	heuristicrawPointCountinBoundsPointCountpointCountHintdispatchRefCountr   )r   r?   r   r   len)eventstransitionsr   r   r=   rB   active_pointss          r   transition_recordsrT   g   s   K 
'#F+,-IHb1I

>28bve}6), f\2 VK0	
 F:. F:$6s#;< 5 #G  & 9 ";  O!< %fjj1E&F !&**-=">  #C

3F(K$L!	

6 r   c                   |dddddddg}| D ]  }dj                  d |j                  dg       d d	 D              }dj                  d
 |d   d d D              }t        |d         dkD  r|dt        |d         dz
   z  }|d   r|d   d   nd }d}|rd| d|d    d|d    d|d    d	}g }	|j                  dg       d d D ]  }
|
j                  d      xs d}g }|
j                  dg       D ]O  }|
j                  di       j                  |i       }|j                  d      }|j                  |r| d| n|       Q |
j                  d      }|r| d | }|	j                  | d!dj                  |               |j                  d"j	                  |d   |d   |d#   |d$   |	rd%j                  |	      ndj                  |d         ||j                  d&d       d'|j                  d(d       d)|xs d|xs d|j                  d*      xs d|d+   ,              |j                  d       d-j                  |      S ).N zLGenerated from `eventDispatchRefs[].conditionLinkedStrings` field-map links.zThese are candidate transitions only. Hotspot tiles use the in-bounds coordinate table from each scene record; `pointCountHint` is retained as metadata because the hinted first point can be a blocked marker rather than a standable trigger.z| source map | scene | kind | record | targets | check link | spawn policy | active points | trigger points | raw points | dispatch refs |zF| --- | --- | ---: | --- | --- | --- | --- | --- | --- | ---: | ---: |z, c              3  6   K   | ]  }|d     d|d      ywx,yN .0points     r   	<genexpr>zmarkdown.<locals>.<genexpr>   s#     !m5U3ZL%*">!m   rC      c              3  6   K   | ]  }|d     d|d      ywrX   r\   r]   s     r   r`   zmarkdown.<locals>.<genexpr>   s#     YEeCj\5:,7Yra   rB      z, ... +r   -z[open](z/game.html?map=r   z&startTile=rY   rZ   r[   z&events=1&overview=1)rG      r9   r:   r;   r,    r.   /z: zs| {source} | {scene} | {kind} | `{record}` | {targets} | {check} | {spawn} | {active} | {points} | {raw} | {refs} |rD   rF   z<br>rH   z (rJ   )rL   rO   )sourcescenekindr   r:   checkspawnactiverB   rawrefs
)joinr   rP   r   format)rR   title
web_prefixlinesr3   rS   rB   first_point
check_linkr=   choicelabeltarget_labelsr4   
scene_infoscene_labelpayloads                    r   markdownr      s   
V
 	z
 	UP	E  &
		!mDHHUcegLhikjkLl!mmYT(^TWUWEXYYtH~#DN 3b 89::F+/>d8nQ't
*_T%[Mk#./qS1A0BBWY  hh126r: 
	CFJJ/07CEM **Y3 [#ZZ(8"=AA&"M
(nn\:$$+xq%>SYZ[ jj0G '7),NNeWBtyy'?&@AB
	C 	 B  I  IE{<(+&M*07G,TYYtI=W -56bBSUX9Y8ZZ[\$+}HH_-4,- I 	
1&
N 
LL99Ur   c                    i }| D ]&  }|j                  |d   g       j                  |       ( t        |      D ci c]  }|||   
 c}S c c}w )Nr   )
setdefaultr   sorted)rR   groupedr3   names       r   rows_by_mapr      sV    %'G 94;+22489,27O<DD'$-<<<s   Ac           	     $   |j                  dd       g }t        |       j                         D ]^  \  }}|| dz  }|j                  t	        |d| dd      d       |j                  |t        |      t        d	 |D              |d
       ` |S )NTparentsexist_okz.mdz# z Event Transition Candidatesz	../../webutf-8encodingc              3  R   K   | ]  }t        |j                  d g              ! yw)rB   N)rP   r   )r^   rows     r   r`   z"write_map_pages.<locals>.<genexpr>   s      E#cggh34Es   %')r   rowsrB   path)mkdirr   items
write_textr   r   rP   sum)rR   out_dir
index_rowsmap_namer   r   s         r   write_map_pagesr      s    MM$M.J%k288: $H:S))TRz)EFT 	 	
 	IEEE	
 	 r   c                   g d}| D ]X  }|d   j                  |      }|j                  d|d    d|d    d|d    d|j                   d	|j                          d
       Z |j                  d       dj	                  |      S )N)z"# Event Transition Candidate IndexrV   z,Generated from `out/event_transitions.json`.rV   z| map | rows | points | page |z| --- | ---: | ---: | --- |r   z| r   z | r   rB   z | [z](z) |rV   rr   )relative_tor   r   as_posixrs   )r   r   rw   r   rels        r   index_markdownr      s    E  m&k%%g.r#e*SVSXtCHH:UWX[XdXdXfWggjklm 
LL99Ur   c                 z   t        j                  t              } | j                  dt        t	        d             | j                  dt        t	        d             | j                  dt        t	        d             | j                  d	d
dt        d        | j                  dt        d        | j                         }t        j                  |j                  j                  d            }t        |      }|j                  j                  j                  dd       |j                  j                  t        j                  |dd      dz   d       |j                   j                  dt        j                  |dd      z   dz   d       |j"                  r&|j"                  j                  t%        |      d       |j&                  rJt)        ||j&                        }|j&                  dz  j                  t+        ||j&                        d       t-        dt/        |       d|j                          y )N)descriptionz--eventszout/scene_events.json)typedefaultz
--json-outzout/event_transitions.jsonz--js-outzout/event_transitions.jsz--md-outz--outmd_out)destr   r   z--split-dirr   r   Tr   F   )ensure_asciiindentrr   z"window.HWANSE_EVENT_TRANSITIONS = z;
zindex.mdzwrote z  event transition candidates -> )argparseArgumentParser__doc__add_argumentr   
parse_argsjsonloadsrQ   	read_textrT   json_outparentr   r   dumpsjs_outr   r   	split_dirr   r   printrP   )parserargsrQ   rR   r   s        r   mainr      s   $$9F

t<S7TU
4>Z9[\

t<V7WX

G(tT
D$?DZZ--w-?@F$V,KMMtd;MMTZZ%PQRUYYdklKK,
**[uQ
?	@
	 	   {{x4wG~~$[$..A
	*	$00
DNN1[fm0n	F3{#$$DT]]O
TUr   __main__)r	   	list[str]returnr   )r   dictr   r   )r   z
int | Noner   z
str | None)r   r   r   r   r   zdict[str, dict])r   r   r   
list[dict])rQ   r   r   r   )z# Event Transition Candidatesz../web)rR   r   ru   r0   rv   r0   r   r0   )rR   r   r   zdict[str, list[dict]])rR   r   r   r   r   r   )r   r   r   r   r   r0   )r   None)r   
__future__r   r   r   repathlibr   compiler   r   r   r#   r6   r?   rT   r   r   r   r   r   __name__r\   r   r   <module>r      sz    G "   	  rzz23I4!H@3l=$ V6 zF r   