Spaces:
Running
Running
import { bin2str } from './common'; | |
export default (data, map) => { | |
let view = new Uint8Array(data); | |
view.forEach((bits, i) => { | |
let xzon = {}; | |
// indicates the tile is a key / corner tile | |
// for a building larger than 1x1 tile | |
xzon.top = (bits & 0b00010000) !== 0; | |
xzon.right = (bits & 0b00100000) !== 0; | |
xzon.bottom = (bits & 0b01000000) !== 0; | |
xzon.left = (bits & 0b10000000) !== 0; | |
// indicates the tile has no key / corners set | |
xzon.none = (bits & 0b11110000) === 0; | |
// tile zone id and type | |
xzon.zone = xzonMap[bits & 0b00001111].id; | |
xzon.zoneType = xzonMap[bits & 0b00001111].type; | |
// raw binary values as strings for research/debug | |
xzon.binaryText = { | |
bits: bin2str(bits, 8), | |
first4bits: bin2str((bits & 0b11110000) >> 4, 4), | |
last4bits: bin2str(bits & 0b00001111, 4) | |
}; | |
map.cells[i]._segmentData.XZON = xzon; | |
}); | |
}; | |
let xzonMap = { | |
0x00: { id: null, type: null }, | |
0x01: { id: 291, type: 'l_res' }, | |
0x02: { id: 292, type: 'd_res' }, | |
0x03: { id: 293, type: 'l_comm' }, | |
0x04: { id: 294, type: 'd_comm' }, | |
0x05: { id: 295, type: 'l_ind' }, | |
0x06: { id: 296, type: 'd_ind' }, | |
0x07: { id: 297, type: 'mil' }, | |
0x08: { id: 298, type: 'air' }, | |
0x09: { id: 299, type: 'sea' }, | |
}; |