mirror of
https://github.com/rastapasta/mapscii.git
synced 2024-11-24 17:13:57 +01:00
🎨 welcome message, callbacks, latlng normalization
This commit is contained in:
parent
ca6a4e27ae
commit
3888293f0e
@ -55,6 +55,7 @@ module.exports = class Mapscii
|
||||
|
||||
.then =>
|
||||
@_draw()
|
||||
.then => @notify("Welcome to MapSCII! Use your cursors to navigate, a/z to zoom, q to quit.")
|
||||
|
||||
_initTileSource: ->
|
||||
@tileSource = new TileSource()
|
||||
@ -62,7 +63,7 @@ module.exports = class Mapscii
|
||||
|
||||
_initKeyboard: ->
|
||||
keypress config.input
|
||||
config.input.setRawMode true
|
||||
config.input.setRawMode true if config.input.setRawMode
|
||||
config.input.resume()
|
||||
|
||||
config.input.on 'keypress', (ch, key) => @_onKey key
|
||||
@ -108,9 +109,11 @@ module.exports = class Mapscii
|
||||
|
||||
z = utils.baseZoom @zoom
|
||||
center = utils.ll2tile @center.lon, @center.lat, z
|
||||
@mousePosition = utils.tile2ll center.x+(dx/size), center.y+(dy/size), z
|
||||
|
||||
@mousePosition = utils.normalize utils.tile2ll center.x+(dx/size), center.y+(dy/size), z
|
||||
|
||||
_onClick: (event) ->
|
||||
return if event.x < 0 or event.x > @width/2 or event.y < 0 or event.y > @height/4
|
||||
@_updateMousePosition event
|
||||
|
||||
if @mouseDragging and event.button is "left"
|
||||
@ -127,6 +130,9 @@ module.exports = class Mapscii
|
||||
@_draw()
|
||||
|
||||
_onMouseMove: (event) ->
|
||||
return if event.x < 0 or event.x > @width/2 or event.y < 0 or event.y > @height/4
|
||||
return if config.mouseCallback and not config.mouseCallback event
|
||||
|
||||
# start dragging
|
||||
if event.button is "left"
|
||||
if @mouseDragging
|
||||
@ -153,16 +159,20 @@ module.exports = class Mapscii
|
||||
@notify @_getFooter()
|
||||
|
||||
_onKey: (key) ->
|
||||
if config.keyCallback and not config.keyCallback key
|
||||
return
|
||||
|
||||
# check if the pressed key is configured
|
||||
draw = switch key?.name
|
||||
when "q"
|
||||
if config.quitCallback
|
||||
config.quitCallback()
|
||||
else
|
||||
process.exit 0
|
||||
|
||||
when "w" then @zoomy = 1
|
||||
when "s" then @zoomy = -1
|
||||
|
||||
when "a" then @zoomBy config.zoomStep
|
||||
when "z" then @zoomBy -config.zoomStep
|
||||
when "z", "y"
|
||||
@zoomBy -config.zoomStep
|
||||
|
||||
when "left" then @moveBy 0, -8/Math.pow(2, @zoom)
|
||||
when "right" then @moveBy 0, 8/Math.pow(2, @zoom)
|
||||
@ -174,9 +184,6 @@ module.exports = class Mapscii
|
||||
|
||||
if draw isnt null
|
||||
@_draw()
|
||||
else
|
||||
# display debug info for unhandled keys
|
||||
@notify JSON.stringify key
|
||||
|
||||
_draw: ->
|
||||
@renderer
|
||||
@ -186,13 +193,6 @@ module.exports = class Mapscii
|
||||
@notify @_getFooter()
|
||||
.catch =>
|
||||
@notify "renderer is busy"
|
||||
.then =>
|
||||
if @zoomy
|
||||
if (@zoomy > 0 and @zoom < config.maxZoom) or (@zoomy < 0 and @zoom > @minZoom)
|
||||
@zoom += @zoomy * config.zoomStep
|
||||
else
|
||||
@zoomy *= -1
|
||||
setImmediate => @_draw()
|
||||
|
||||
_getFooter: ->
|
||||
# tile = utils.ll2tile @center.lon, @center.lat, @zoom
|
||||
@ -203,6 +203,7 @@ module.exports = class Mapscii
|
||||
"mouse: #{utils.digits @mousePosition.lat, 3}, #{utils.digits @mousePosition.lon, 3} "
|
||||
|
||||
notify: (text) ->
|
||||
config.onUpdate() if config.onUpdate
|
||||
@_write "\r\x1B[K"+text unless config.headless
|
||||
|
||||
_write: (output) ->
|
||||
@ -218,11 +219,4 @@ module.exports = class Mapscii
|
||||
@setCenter @center.lat+lat, @center.lon+lon
|
||||
|
||||
setCenter: (lat, lon) ->
|
||||
lon += 360 if lon < -180
|
||||
lon -= 360 if lon > 180
|
||||
|
||||
lat = 85.0511 if lat > 85.0511
|
||||
lat = -85.0511 if lat < -85.0511
|
||||
|
||||
@center.lat = lat
|
||||
@center.lon = lon
|
||||
@center = utils.normalize lon: lon, lat: lat
|
||||
|
Loading…
Reference in New Issue
Block a user