@@ -3,8 +3,11 @@ use std::fmt::Write;
33
44use indexmap:: IndexMap ;
55use itertools:: Itertools ;
6+ use prjcombine_entity:: { EntityId , EntityVec } ;
67use prjcombine_types:: bitvec:: BitVec ;
7- use prjcombine_types:: bsdata:: { BsData , DbValue , Tile , TileBit , TileItemKind } ;
8+ use prjcombine_types:: bsdata:: {
9+ BsData , DbValue , RectBitId , RectFrameId , Tile , TileBit , TileItemKind ,
10+ } ;
811
912use crate :: DocgenContext ;
1013
@@ -28,17 +31,17 @@ pub fn gen_tile(
2831 tile : & Tile ,
2932 orientation : TileOrientation ,
3033) {
31- let mut dims: Vec < ( usize , usize ) > = vec ! [ ] ;
34+ let mut dims: EntityVec < _ , ( usize , usize ) > = EntityVec :: new ( ) ;
3235 let mut reverse: HashMap < _ , Vec < _ > > = HashMap :: new ( ) ;
3336 let mut buf = String :: new ( ) ;
3437 let mut item_data: IndexMap < _ , Vec < _ > > = IndexMap :: new ( ) ;
3538 for ( iname, item) in & tile. items {
3639 for ( bidx, & bit) in item. bits . iter ( ) . enumerate ( ) {
37- while bit. tile >= dims. len ( ) {
40+ while bit. rect . to_idx ( ) >= dims. len ( ) {
3841 dims. push ( ( 0 , 0 ) ) ;
3942 }
40- dims[ bit. tile ] . 0 = std:: cmp:: max ( dims[ bit. tile ] . 0 , bit. frame + 1 ) ;
41- dims[ bit. tile ] . 1 = std:: cmp:: max ( dims[ bit. tile ] . 1 , bit. bit + 1 ) ;
43+ dims[ bit. rect ] . 0 = std:: cmp:: max ( dims[ bit. rect ] . 0 , bit. frame . to_idx ( ) + 1 ) ;
44+ dims[ bit. rect ] . 1 = std:: cmp:: max ( dims[ bit. rect ] . 1 , bit. bit . to_idx ( ) + 1 ) ;
4245 let ( bidx, invert) = if let TileItemKind :: BitVec { ref invert } = item. kind {
4346 (
4447 if invert. len ( ) == 1 { None } else { Some ( bidx) } ,
@@ -54,19 +57,19 @@ pub fn gen_tile(
5457 . or_default ( )
5558 . push ( ( iname, & item. bits ) ) ;
5659 }
57- for ( tidx , & ( num_frames, num_bits) ) in dims. iter ( ) . enumerate ( ) {
60+ for ( rect , & ( num_frames, num_bits) ) in & dims {
5861 let frames = if orientation. flip_frame {
59- Vec :: from_iter ( ( 0 ..num_frames) . rev ( ) )
62+ Vec :: from_iter ( ( 0 ..num_frames) . map ( RectFrameId :: from_idx ) . rev ( ) )
6063 } else {
61- Vec :: from_iter ( 0 ..num_frames)
64+ Vec :: from_iter ( ( 0 ..num_frames) . map ( RectFrameId :: from_idx ) )
6265 } ;
6366 let bits = if orientation. flip_bit {
64- Vec :: from_iter ( ( 0 ..num_bits) . rev ( ) )
67+ Vec :: from_iter ( ( 0 ..num_bits) . map ( RectBitId :: from_idx ) . rev ( ) )
6568 } else {
66- Vec :: from_iter ( 0 ..num_bits)
69+ Vec :: from_iter ( ( 0 ..num_bits) . map ( RectBitId :: from_idx ) )
6770 } ;
6871 writeln ! ( buf, r#"<div class="table-wrapper"><table>"# ) . unwrap ( ) ;
69- writeln ! ( buf, r#"<caption>{dbname} {tname} bittile {tidx }</caption>"# ) . unwrap ( ) ;
72+ writeln ! ( buf, r#"<caption>{dbname} {tname} rect {rect }</caption>"# ) . unwrap ( ) ;
7073 writeln ! ( buf, r#"<thead>"# ) . unwrap ( ) ;
7174 match orientation. frame_direction {
7275 FrameDirection :: Horizontal => {
@@ -97,9 +100,9 @@ pub fn gen_tile(
97100 writeln ! ( buf, r#"</thead>"# ) . unwrap ( ) ;
98101 writeln ! ( buf, r#"<tbody>"# ) . unwrap ( ) ;
99102 let emit_bit = |buf : & mut String , tbit : TileBit | {
100- let TileBit { tile , frame, bit } = tbit;
103+ let TileBit { rect , frame, bit } = tbit;
101104 if let Some ( items) = reverse. get ( & tbit) {
102- writeln ! ( buf, r#"<td title="{tile }.{frame}.{bit}">"# ) . unwrap ( ) ;
105+ writeln ! ( buf, r#"<td title="{rect }.{frame}.{bit}">"# ) . unwrap ( ) ;
103106 for & ( iname, bidx, invert) in items {
104107 let inv = if invert { "~" } else { "" } ;
105108 let bidx = if let Some ( bidx) = bidx {
@@ -123,14 +126,7 @@ pub fn gen_tile(
123126 for & frame in & frames {
124127 writeln ! ( buf, r#"<tr><td>{frame}</td>"# ) . unwrap ( ) ;
125128 for & bit in & bits {
126- emit_bit (
127- & mut buf,
128- TileBit {
129- tile : tidx,
130- frame,
131- bit,
132- } ,
133- ) ;
129+ emit_bit ( & mut buf, TileBit { rect, frame, bit } ) ;
134130 }
135131 writeln ! ( buf, r#"</tr>"# ) . unwrap ( ) ;
136132 }
@@ -139,14 +135,7 @@ pub fn gen_tile(
139135 for & bit in & bits {
140136 writeln ! ( buf, r#"<tr><td>{bit}</td>"# ) . unwrap ( ) ;
141137 for & frame in & frames {
142- emit_bit (
143- & mut buf,
144- TileBit {
145- tile : tidx,
146- frame,
147- bit,
148- } ,
149- ) ;
138+ emit_bit ( & mut buf, TileBit { rect, frame, bit } ) ;
150139 }
151140 writeln ! ( buf, r#"</tr>"# ) . unwrap ( ) ;
152141 }
@@ -168,7 +157,7 @@ pub fn gen_tile(
168157 writeln ! (
169158 buf,
170159 "<th>{tile}.{frame}.{bit}</th>" ,
171- tile = bit. tile ,
160+ tile = bit. rect . to_idx ( ) ,
172161 frame = bit. frame,
173162 bit = bit. bit
174163 )
0 commit comments