so I have two flags, and I can decode them correctly... but when I try to encode it again.. I'm getting a negative number.. but when I try to decode that negative number it decodes it correctly... so I'm confused why it's working but isn't getting the expected result
const encoded = 3221225525;
const FLIPPED_HORIZONTALLY_FLAG = 0x80000000;
const FLIPPED_VERTICALLY_FLAG = 0x40000000;
const FLIPPED_DIAGONALLY_FLAG = 0x20000000;
function decodeTileId(tileId){
let flipHor = !!(tileId & 0x80000000);
let flipVer = !!(tileId & 0x40000000);
let flipDiag = !!(tileId & 0x20000000);
tileId &= ~(FLIPPED_HORIZONTALLY_FLAG |
FLIPPED_VERTICALLY_FLAG |
FLIPPED_DIAGONALLY_FLAG);
return { tileId, flipDiag, flipVer, flipHor }
}
var obj = decodeTileId(encoded);
var { tileId, flipVer, flipHor, flipDiag } =obj;
//tile id is 53 here and flags are correct.
if(flipVer && flipHor) { // these were the flags set to true... try to re-encode
tileId |= FLIPPED_VERTICALLY_FLAG;
tileId |= FLIPPED_HORIZONTALLY_FLAG;
//tileId becomes -1073741771 which if i put through the decode function... i get the same result as 3221225525
}
User contributions licensed under CC BY-SA 3.0