11import { loadScript } from './file' ;
2- import { logger } from '#components/file/map- debug' ;
2+ import { logger } from './ debug' ;
33import { toJS } from 'mobx' ;
44
55const binary = Symbol ( 'binary' ) ;
@@ -60,17 +60,13 @@ function makeOffsetTable({ read, write }) {
6060 a = header ;
6161 }
6262 }
63- ref . global . cleanup . push ( ( { sprites } ) => {
64- const clone = [ ...sprites ] ;
63+ ref . global . cleanup . push ( ( { sprites, spritesAddr } ) => {
6564 sprites . splice ( 0 , sprites . length ) ;
6665 headers . forEach ( header => {
6766 if ( header === 0 ) {
6867 sprites . push ( [ ] ) ; // handle zero header optimization
6968 } else {
70- const sprite = clone . shift ( ) ;
71- if ( sprite ) {
72- sprites . push ( sprite ) ;
73- }
69+ sprites . push ( spritesAddr [ header ] ) ;
7470 }
7571 } ) ;
7672 } ) ;
@@ -120,6 +116,7 @@ export default catchFunc((file) => {
120116 const readLimit = 1e3 ;
121117
122118 const createReader = ( sectionList = [ ] ) => catchFunc ( ( buffer ) => {
119+ logger ( 'buf length' , buffer . length ) ;
123120 const bitBuffer = [ ] ;
124121 let cursor = 0 ;
125122 let bufferOverflow = false ;
@@ -134,6 +131,7 @@ export default catchFunc((file) => {
134131 const bytesNeeded = Math . ceil ( nextBitQty / 8 ) ;
135132
136133 const bytes = Array . from ( buffer . slice ( cursor , cursor + bytesNeeded ) ) ;
134+ logger ( 'buffer' , ...bytes . map ( b => b . toString ( 16 ) ) )
137135
138136 const bits = bytes . map ( d => d . toString ( 2 ) . padStart ( 8 , 0 ) )
139137 . join ( '' )
@@ -144,26 +142,32 @@ export default catchFunc((file) => {
144142 bitBuffer . push ( ...bits ) ;
145143 }
146144 }
145+
147146 // flush the buffer
148147 const binString = bitBuffer . splice ( 0 , size ) . join ( '' )
149148 if ( type === signed && binString [ 0 ] === '1' ) {
150149 return ( ( 1 << size ) - parseInt ( binString , 2 ) ) * - 1 ;
151150 }
152151 const value = parseInt ( binString , 2 ) ;
153- logger ( 'read' , { size, value, type , cursor, len : buffer . length } ) ;
152+ logger ( 'read' , { size, value} , cursor , binString ) ;
154153 return value ;
155154 } ) ;
156155
157156 const global = { cleanup : [ ] } ;
158157 const sprites = [ ] ;
158+ const spritesAddr = { } ;
159159 sectionList . forEach ( ( [ readFrame ] , i ) => {
160- logger ( `section ` , i ) ;
160+ logger ( `--- section ` , i ) ;
161161 read: for ( let spriteIndex = 0 ; spriteIndex < readLimit ; spriteIndex ++ ) {
162+ logger ( `--sprite ${ spriteIndex . toString ( 16 ) } ` ) ;
162163 const sprite = [ ] ;
163164 const ref = { global } ;
165+ spritesAddr [ cursor ] = sprite ;
164166 const readMapping = readFrame ( spriteIndex ) ;
165167 if ( readMapping ) {
168+ logger ( 'read mapping' ) ;
166169 for ( let frameIndex = 0 ; frameIndex < readLimit ; frameIndex ++ ) {
170+ logger ( `-frame ${ frameIndex . toString ( 16 ) } ` ) ;
167171 const mapping = { } ;
168172 const param = {
169173 mapping,
@@ -181,8 +185,10 @@ export default catchFunc((file) => {
181185 if ( result === constants . endSection || bufferOverflow ) {
182186 break read;
183187 }
188+ logger ( 'mapping' , mapping ) ;
184189 sprite . push ( mapping ) ;
185190 if ( result === constants . endFrame ) {
191+ logger ( 'end frame' ) ;
186192 break ;
187193 }
188194 }
@@ -192,7 +198,7 @@ export default catchFunc((file) => {
192198
193199 } ) ;
194200
195- global . cleanup . forEach ( task => task ( { sprites } ) ) ;
201+ global . cleanup . forEach ( task => task ( { sprites, spritesAddr } ) ) ;
196202
197203 return { sprites} ;
198204 } ) ;
0 commit comments