mirror of
https://github.com/rastapasta/mapscii.git
synced 2025-02-18 02:10:47 +01:00
💼 canvas matrix save/store lifo buffer
This commit is contained in:
parent
61be4181fd
commit
ea879a77f7
@ -23,6 +23,7 @@ mat2d = glMatrix.mat2d
|
|||||||
|
|
||||||
module.exports = class Canvas
|
module.exports = class Canvas
|
||||||
matrix: null
|
matrix: null
|
||||||
|
stack: []
|
||||||
|
|
||||||
constructor: (@width, @height) ->
|
constructor: (@width, @height) ->
|
||||||
@buffer = new BrailleBuffer @width, @height
|
@buffer = new BrailleBuffer @width, @height
|
||||||
@ -40,6 +41,13 @@ module.exports = class Canvas
|
|||||||
rotate: (angle) ->
|
rotate: (angle) ->
|
||||||
mat2d.rotate @matrix, @matrix, angle/180*Math.PI
|
mat2d.rotate @matrix, @matrix, angle/180*Math.PI
|
||||||
|
|
||||||
|
save: ->
|
||||||
|
@stack.push mat2d.clone mat2d.create(), @matrix
|
||||||
|
|
||||||
|
restore: ->
|
||||||
|
return unless last = @stack.pop()
|
||||||
|
@matrix = last
|
||||||
|
|
||||||
clear: ->
|
clear: ->
|
||||||
@buffer.clear()
|
@buffer.clear()
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ module.exports = class Renderer
|
|||||||
setSize: (@width, @height) ->
|
setSize: (@width, @height) ->
|
||||||
@canvas = new Canvas @width, @height
|
@canvas = new Canvas @width, @height
|
||||||
|
|
||||||
draw: (center, zoom, rotation) ->
|
draw: (center, zoom, rotation = 0) ->
|
||||||
return Promise.reject() if @isDrawing
|
return Promise.reject() if @isDrawing
|
||||||
@isDrawing = true
|
@isDrawing = true
|
||||||
|
|
||||||
@ -102,11 +102,10 @@ module.exports = class Renderer
|
|||||||
|
|
||||||
Promise
|
Promise
|
||||||
.resolve @_visibleTiles center, zoom
|
.resolve @_visibleTiles center, zoom
|
||||||
.map (tile) => @_getTile tile.xyz, tile
|
.map (tile) => @_getTile tile
|
||||||
.map (tile) => @_getTileFeatures tile
|
.map (tile) => @_getTileFeatures tile
|
||||||
.then (tiles) => @_renderTiles tiles
|
.then (tiles) => @_renderTiles tiles
|
||||||
.then =>
|
.then => @_writeFrame()
|
||||||
@_writeFrame()
|
|
||||||
|
|
||||||
.catch (e) ->
|
.catch (e) ->
|
||||||
console.log e
|
console.log e
|
||||||
@ -145,19 +144,17 @@ module.exports = class Renderer
|
|||||||
|
|
||||||
tiles
|
tiles
|
||||||
|
|
||||||
_getTile: (tile, meta = {}) ->
|
_getTile: (tile) ->
|
||||||
@tileSource
|
@tileSource
|
||||||
.getTile tile.z, tile.x, tile.y
|
.getTile tile.xyz.z, tile.xyz.x, tile.xyz.y
|
||||||
.then (data) =>
|
.then (data) =>
|
||||||
data: data
|
tile.data = data
|
||||||
meta: meta
|
tile
|
||||||
|
|
||||||
_getTileFeatures: (tile) ->
|
_getTileFeatures: (tile) ->
|
||||||
zoom = tile.meta.xyz.z
|
zoom = tile.xyz.z
|
||||||
position = tile.meta.position
|
position = tile.position
|
||||||
scale = tile.meta.zoom
|
scale = tile.scale
|
||||||
|
|
||||||
#TODO: if not filter or feature.data.properties[filterField] is filterValue
|
|
||||||
|
|
||||||
box =
|
box =
|
||||||
minX: -position[0]*scale
|
minX: -position[0]*scale
|
||||||
@ -175,11 +172,8 @@ module.exports = class Renderer
|
|||||||
filter = false
|
filter = false
|
||||||
|
|
||||||
continue unless tile.data.layers?[layer]
|
continue unless tile.data.layers?[layer]
|
||||||
|
#if not filter or feature.data.properties[filterField] is filterValue
|
||||||
if @config.layers[layer]?.minZoom and zoom > @config.layers[layer].minZoom
|
features[idx] = tile.data.layers[layer].tree.search box
|
||||||
continue
|
|
||||||
|
|
||||||
features[idx] = tile.data.layers[layer].tree.all() #search box
|
|
||||||
|
|
||||||
tile.features = features
|
tile.features = features
|
||||||
tile
|
tile
|
||||||
@ -194,14 +188,16 @@ module.exports = class Renderer
|
|||||||
for tile in tiles
|
for tile in tiles
|
||||||
continue unless tile.features[layer]?.length
|
continue unless tile.features[layer]?.length
|
||||||
|
|
||||||
@canvas.reset()
|
@canvas.save()
|
||||||
@canvas.translate tile.meta.position[0], tile.meta.position[1]
|
@canvas.translate tile.position[0], tile.position[1]
|
||||||
|
|
||||||
for feature in tile.features[layer]
|
for feature in tile.features[layer]
|
||||||
continue if feature.data.id and drawn[feature.data.id]
|
continue if feature.data.id and drawn[feature.data.id]
|
||||||
drawn[feature.data.id] = true
|
drawn[feature.data.id] = true
|
||||||
|
|
||||||
@_drawFeature short, feature, tile.meta.scale, tile.meta.xyz.z
|
@_drawFeature short, feature, tile.scale, tile.xyz.z
|
||||||
|
|
||||||
|
@canvas.restore()
|
||||||
|
|
||||||
_writeFrame: ->
|
_writeFrame: ->
|
||||||
unless @lastDrawAt
|
unless @lastDrawAt
|
||||||
|
Loading…
Reference in New Issue
Block a user