mirror of
https://github.com/rastapasta/mapscii.git
synced 2024-11-21 23:53:08 +01:00
🎨 adding braille-free mode, activate with 'c'
This commit is contained in:
parent
46692ec1bb
commit
7e255edc53
@ -6,24 +6,34 @@
|
||||
|
||||
Implementation inspired by node-drawille (https://github.com/madbence/node-drawille)
|
||||
* added color support
|
||||
* added support for filled polygons
|
||||
* added text label support
|
||||
* general optimizations
|
||||
-> more bit shifting/operations, less Math.floors
|
||||
|
||||
Will either be merged into node-drawille or become an own module at some point
|
||||
###
|
||||
stringWidth = require 'string-width'
|
||||
config = require './config'
|
||||
utils = require './utils'
|
||||
|
||||
module.exports = class BrailleBuffer
|
||||
characterMap: [[0x1, 0x8],[0x2, 0x10],[0x4, 0x20],[0x40, 0x80]]
|
||||
brailleMap: [[0x1, 0x8],[0x2, 0x10],[0x4, 0x20],[0x40, 0x80]]
|
||||
asciiMap:
|
||||
#"▬": [2+32, 4+64]
|
||||
# "▌": [1+2+4+8]
|
||||
# "▐": [16+32+64+128]
|
||||
"▀": [1+2+16+32]
|
||||
"▄": [4+8+64+128]
|
||||
"■": [2+4+32+64]
|
||||
#"▓": [1+4+32+128, 2+8+16+64]
|
||||
"█": [255]
|
||||
|
||||
pixelBuffer: null
|
||||
charBuffer: null
|
||||
foregroundBuffer: null
|
||||
backgroundBuffer: null
|
||||
|
||||
asciiToBraille: []
|
||||
|
||||
globalBackground: null
|
||||
|
||||
termReset: "\x1B[39;49m"
|
||||
@ -33,6 +43,8 @@ module.exports = class BrailleBuffer
|
||||
@pixelBuffer = new Buffer size
|
||||
@foregroundBuffer = new Buffer size
|
||||
@backgroundBuffer = new Buffer size
|
||||
|
||||
@_mapBraille()
|
||||
@clear()
|
||||
|
||||
clear: ->
|
||||
@ -63,9 +75,27 @@ module.exports = class BrailleBuffer
|
||||
_locate: (x, y, cb) ->
|
||||
return unless 0 <= x < @width and 0 <= y < @height
|
||||
idx = @_project x, y
|
||||
mask = @characterMap[y&3][x&1]
|
||||
mask = @brailleMap[y&3][x&1]
|
||||
cb idx, mask
|
||||
|
||||
_mapBraille: ->
|
||||
@asciiToBraille = [" "]
|
||||
|
||||
masks = []
|
||||
for char, bits of @asciiMap
|
||||
continue unless bits instanceof Array
|
||||
masks.push mask: mask, char: char for mask in bits
|
||||
|
||||
reducer = (best, mask) ->
|
||||
covered = utils.population(mask.mask&i)
|
||||
return if not best or best.covered < covered
|
||||
char: mask.char, covered: covered
|
||||
else
|
||||
best
|
||||
|
||||
for i in [1..255]
|
||||
@asciiToBraille[i] = masks.reduce(reducer, undefined).char
|
||||
|
||||
_termColor: (foreground, background) ->
|
||||
background = background or @globalBackground
|
||||
if foreground and background
|
||||
@ -102,7 +132,10 @@ module.exports = class BrailleBuffer
|
||||
char
|
||||
else
|
||||
if not skip
|
||||
if config.useBraille
|
||||
String.fromCharCode 0x2800+@pixelBuffer[idx]
|
||||
else
|
||||
@asciiToBraille[@pixelBuffer[idx]]
|
||||
else
|
||||
skip--
|
||||
''
|
||||
|
@ -179,6 +179,10 @@ module.exports = class Mapscii
|
||||
when "up" then @moveBy 6/Math.pow(2, @zoom), 0
|
||||
when "down" then @moveBy -6/Math.pow(2, @zoom), 0
|
||||
|
||||
when "c"
|
||||
config.useBraille = !config.useBraille
|
||||
true
|
||||
|
||||
else
|
||||
null
|
||||
|
||||
|
@ -15,6 +15,8 @@ module.exports =
|
||||
|
||||
simplifyPolylines: false
|
||||
|
||||
useBraille: true
|
||||
|
||||
# Downloaded files get persisted in ~/.mapscii
|
||||
persistDownloadedTiles: true
|
||||
|
||||
|
@ -64,4 +64,11 @@ utils =
|
||||
|
||||
ll
|
||||
|
||||
population: (val) ->
|
||||
bits = 0
|
||||
while val>0
|
||||
bits += val & 1
|
||||
val >>= 1
|
||||
bits
|
||||
|
||||
module.exports = utils
|
||||
|
Loading…
Reference in New Issue
Block a user