Last active
April 9, 2020 05:27
-
-
Save d3x0r/e53303364ce8f28ec97eae12a4db928e to your computer and use it in GitHub Desktop.
Utility to convert binary array buffer to usable card information.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // buffer is an array buffer, this routine will apply a Uint8Array to it. | |
| // numbers is the numbers of the game (0 or 75 is 75, or 90 number which is different) | |
| // call with '75' | |
| function MakeCardFromBuffer( buffer, numbers ) { | |
| buffer = new Uint8Array(buffer); | |
| //console.log( "Length...", buffer.byteLength, buffer[0] ); | |
| if( buffer.byteLength == 12 ) { | |
| if( !numbers || numbers === 75 ) { | |
| var card = [[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]]; | |
| var row,col, n = 0; | |
| if( !buffer ) | |
| return undefined; | |
| //console.log( "doing for buffer", buffer) | |
| for( col = 0; col < 5; col++ ) { | |
| var base = col * 15; | |
| for( row = 0; row < (col==2?4:5); row++) { | |
| //console.log( "Buffer ", buffer[n>>1].toString(16), " base ", base, ' n ', n ); | |
| if( n & 1 ) | |
| card[col][row] = base + ( buffer[n>>1] & 0xF ); | |
| else | |
| card[col][row] = base + ( buffer[n>>1] >> 4 ); | |
| n++; | |
| } | |
| } | |
| }else{ | |
| var bufData = new ArrayBuffer(buffer.buffer); | |
| //var buf = new Uint8Array( bufData ); | |
| //console.log( "buf is ", bufData, buffer.data, typeof buffer, Object.getPrototypeOf( buffer ) ); | |
| var card = expand(buffer.slice( 0, 4 ), buffer.slice( 4, 12 ) ) | |
| //console.log( "buf is ", card ); | |
| } | |
| return card; | |
| } | |
| if( (buffer.length==8) || ( buffer.length == 7 ) ) { | |
| // upick 7 or 8 dat buffer | |
| var card = []; | |
| buffer.forEach( (val)=>{ card.push(val); }) | |
| return card; | |
| } | |
| return undefined; | |
| } | |
| function writeOne( n, card ){ | |
| //var test_buf; | |
| test_buf = cardUtils.MakeCardFromBuffer( card, 75 ); | |
| var nums = []; | |
| card = new Uint8Array(card); | |
| //console.log( "card:", card ); | |
| // this sorts the resulting card face array into 'nums' for ordered count | |
| // 0 is the N free space. | |
| for( let c = 0; c < 5; c++ ) for( let r = 0; r < 5; r++ ) { | |
| for( let n = 0; n < nums.length; n++ ) { | |
| if( test_buf[c][r] < nums[n] ){ | |
| nums.splice( n, 0, test_buf[c][r] ); | |
| break; | |
| } | |
| } | |
| if( n == nums.length ) | |
| nums.push( test_buf[c][r] ); | |
| } | |
| // previous colum values are now `nums.join(',')` which is SortCardNumber | |
| // CardNumber is like `test_buf.map( row=>row.join(",") ).join("," )` | |
| // CardJson is `JSON.stringify(card)` | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment