{"version":3,"file":"bundle.mjs","mappings":"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","sources":["webpack://RouteRenderer/webpack/universalModuleDefinition","webpack://RouteRenderer/webpack/bootstrap","webpack://RouteRenderer/webpack/runtime/define property getters","webpack://RouteRenderer/webpack/runtime/hasOwnProperty shorthand","webpack://RouteRenderer/webpack/runtime/make namespace object","webpack://RouteRenderer/./src/modules/projection.ts","webpack://RouteRenderer/./src/modules/renderer/buffers.ts","webpack://RouteRenderer/./src/modules/renderer/models/grid.ts","webpack://RouteRenderer/./src/modules/renderer/models/path.ts","webpack://RouteRenderer/./src/modules/renderer/scene.ts","webpack://RouteRenderer/./src/modules/renderer/webgl.ts","webpack://RouteRenderer/./src/modules/renderer.ts","webpack://RouteRenderer/./src/modules/webglOverlayView.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"RouteRenderer\"] = factory();\n\telse\n\t\troot[\"RouteRenderer\"] = factory();\n})(self, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var Projection = /** @class */ (function () {\n    function Projection() {\n    }\n    Projection.getTileSize = function (zoomLevel) {\n        return zoomLevel * 256;\n    };\n    ;\n    Projection.getMercatorWorldCoordinateProjection = function (zoomLevel, latitude, longitude) {\n        var tileSize = this.getTileSize(zoomLevel);\n        var latitudeToRadians = ((latitude * Math.PI) / 180);\n        var northing = Math.log(Math.tan((Math.PI / 4) + (latitudeToRadians / 2)));\n        return {\n            left: ((longitude + 180) * (tileSize / 360)),\n            top: ((tileSize / 2) - ((tileSize * northing) / (2 * Math.PI)))\n        };\n    };\n    ;\n    Projection.getPixelCoordinates = function (zoomLevel, leftWorldCoordinate, topWorldCoordinate) {\n        return {\n            left: leftWorldCoordinate * (Math.pow(2, zoomLevel)),\n            top: topWorldCoordinate * (Math.pow(2, zoomLevel))\n        };\n    };\n    ;\n    Projection.projectToPixelCoordinate = function (point, options) {\n        var _a, _b, _c;\n        var worldCoordinates = this.getMercatorWorldCoordinateProjection((_a = options.projectionZoomLevel) !== null && _a !== void 0 ? _a : 2, point.latitude, point.longitude);\n        var pixelCoordinates = this.getPixelCoordinates((_b = options.projectionZoomLevel) !== null && _b !== void 0 ? _b : 2, worldCoordinates.left, worldCoordinates.top);\n        return {\n            x: pixelCoordinates.left,\n            y: pixelCoordinates.top,\n            z: point.altitude * (((_c = options.projectionZoomLevel) !== null && _c !== void 0 ? _c : 2) / 100)\n        };\n    };\n    ;\n    return Projection;\n}());\nexport { Projection };\n;\n","var RendererBuffers = /** @class */ (function () {\n    function RendererBuffers() {\n    }\n    RendererBuffers.initPositionBuffer = function (gl, positions) {\n        // Create a buffer for the square's positions.\n        var positionBuffer = gl.createBuffer();\n        // Select the positionBuffer as the one to apply buffer\n        // operations to from here out.\n        gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);\n        // Now pass the list of positions into WebGL to build the\n        // shape. We do this by creating a Float32Array from the\n        // JavaScript array, then use it to fill the current buffer.\n        gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(positions), gl.STATIC_DRAW);\n        return positionBuffer;\n    };\n    RendererBuffers.initColorBuffer = function (gl, faceColors) {\n        // Convert the array of colors into a table for all the vertices.\n        var colors = [];\n        for (var j = 0; j < faceColors.length; ++j) {\n            var c = faceColors[j];\n            // Repeat each color four times for the four vertices of the face\n            colors = colors.concat(c, c, c, c);\n        }\n        var colorBuffer = gl.createBuffer();\n        gl.bindBuffer(gl.ARRAY_BUFFER, colorBuffer);\n        gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(colors), gl.STATIC_DRAW);\n        return colorBuffer;\n    };\n    RendererBuffers.initIndexBuffer = function (gl, indices) {\n        var indexBuffer = gl.createBuffer();\n        gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);\n        // This array defines each face as two triangles, using the\n        // indices into the vertex array to specify each triangle's\n        // position.\n        // Now send the element array to GL\n        gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW);\n        return indexBuffer;\n    };\n    return RendererBuffers;\n}());\nexport { RendererBuffers };\n;\n","import { RendererBuffers } from \"../buffers\";\nvar RendererGridModel = /** @class */ (function () {\n    function RendererGridModel() {\n    }\n    RendererGridModel.createBuffers = function (gl, options, animationFrame, paths) {\n        var _a, _b, _c;\n        var minX = NaN;\n        var maxX = NaN;\n        var minY = NaN;\n        var maxY = NaN;\n        for (var _i = 0, paths_1 = paths; _i < paths_1.length; _i++) {\n            var path = paths_1[_i];\n            for (var _d = 0, _e = path.points; _d < _e.length; _d++) {\n                var point = _e[_d];\n                if (window.isNaN(minX) || point.x < minX)\n                    minX = point.x;\n                if (window.isNaN(maxX) || point.x > maxX)\n                    maxX = point.x;\n                if (window.isNaN(minY) || point.y < minY)\n                    minY = point.y;\n                if (window.isNaN(maxY) || point.y > maxY)\n                    maxY = point.y;\n            }\n        }\n        var padding = (_a = options.gridPadding) !== null && _a !== void 0 ? _a : 1;\n        var positions = [\n            minY - padding,\n            -0.002,\n            maxX + padding,\n            maxY + padding,\n            -0.002,\n            maxX + padding,\n            maxY + padding,\n            -0.002,\n            minX - padding,\n            minY - padding,\n            -0.002,\n            minX - padding // back left X\n        ];\n        var faceColors = [\n            (_c = (_b = options.gridColor) === null || _b === void 0 ? void 0 : _b.map(function (index) { return index / 255; })) !== null && _c !== void 0 ? _c : [.5, 0, 0, 1]\n        ];\n        var indices = [\n            0, 1, 2,\n            0, 2, 3, // bottom\n        ];\n        var positionBuffer = RendererBuffers.initPositionBuffer(gl, positions);\n        var colorBuffer = RendererBuffers.initColorBuffer(gl, faceColors);\n        var indexBuffer = RendererBuffers.initIndexBuffer(gl, indices);\n        return {\n            verticles: positions.length / 2,\n            position: positionBuffer,\n            color: colorBuffer,\n            indices: indexBuffer,\n        };\n    };\n    ;\n    return RendererGridModel;\n}());\nexport { RendererGridModel };\n;\n","import { RendererBuffers } from \"../buffers\";\nvar RendererPathModel = /** @class */ (function () {\n    function RendererPathModel() {\n    }\n    RendererPathModel.createBuffers = function (gl, path, options, animationFrame) {\n        var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w;\n        var positions = [];\n        var faceColors = [];\n        var indices = [];\n        var indexForIndices = 0;\n        var distance = 0;\n        var breakingPoint = path.fullDistance * animationFrame.distanceFraction;\n        for (var index = 1; index < path.points.length; index++) {\n            var from = path.points[index - 1];\n            var to = path.points[index];\n            var fromElevation = from.z * animationFrame.elevationFraction;\n            var toElevation = to.z * animationFrame.elevationFraction;\n            var pointFraction = 1.0;\n            distance = to.distanceStart;\n            var leftWallColor = (_d = (_a = to.color) !== null && _a !== void 0 ? _a : (_c = ((_b = options.leftWallColor) !== null && _b !== void 0 ? _b : options.wallColor)) === null || _c === void 0 ? void 0 : _c.map(function (index) { return index / 255; })) !== null && _d !== void 0 ? _d : [0, 1, 0, 1];\n            var rightWallColor = (_h = (_e = to.color) !== null && _e !== void 0 ? _e : (_g = ((_f = options.rightWallColor) !== null && _f !== void 0 ? _f : options.wallColor)) === null || _g === void 0 ? void 0 : _g.map(function (index) { return index / 255; })) !== null && _h !== void 0 ? _h : [0, 0, 1, 1];\n            var topColor = (_k = (_j = options.topColor) === null || _j === void 0 ? void 0 : _j.map(function (index) { return index / 255; })) !== null && _k !== void 0 ? _k : [1, 0, 0, 1];\n            var bottomColor = (_m = (_l = options.bottomColor) === null || _l === void 0 ? void 0 : _l.map(function (index) { return index / 255; })) !== null && _m !== void 0 ? _m : [0, 0, 0, 1];\n            var endBlockColor = (_r = (_o = to.color) !== null && _o !== void 0 ? _o : (_q = ((_p = options.endBlockColor) !== null && _p !== void 0 ? _p : options.wallColor)) === null || _q === void 0 ? void 0 : _q.map(function (index) { return index / 255; })) !== null && _r !== void 0 ? _r : [0, 0, 0, 1];\n            var startBlockColor = (_v = (_s = to.color) !== null && _s !== void 0 ? _s : (_u = ((_t = options.startBlockColor) !== null && _t !== void 0 ? _t : options.wallColor)) === null || _u === void 0 ? void 0 : _u.map(function (index) { return index / 255; })) !== null && _v !== void 0 ? _v : [0, 0, 0, 1];\n            if (distance > breakingPoint)\n                break;\n            if (breakingPoint < (distance + to.distance))\n                pointFraction = Math.max(0, Math.min((breakingPoint - to.distanceStart) / to.distance, 1));\n            var difference = {\n                x: (to.x - from.x),\n                y: (to.y - from.y)\n            };\n            var from3 = vec3.fromValues(from.y, from.x, fromElevation);\n            var to3 = vec3.fromValues(from.y + (difference.y * pointFraction), from.x + (difference.x * pointFraction), toElevation);\n            var direction = vec3.sub(vec3.create(), to3, from3);\n            var perpendicular = vec3.normalize(vec3.create(), [-direction[1], direction[0], 0]);\n            var halfWidth = ((_w = options.wallWidth) !== null && _w !== void 0 ? _w : .1) / 2;\n            var topVertices = [\n                vec3.add(vec3.create(), from3, vec3.scale(vec3.create(), perpendicular, halfWidth)),\n                vec3.add(vec3.create(), to3, vec3.scale(vec3.create(), perpendicular, halfWidth))\n            ];\n            var bottomVertices = [\n                vec3.sub(vec3.create(), from3, vec3.scale(vec3.create(), perpendicular, halfWidth)),\n                vec3.sub(vec3.create(), to3, vec3.scale(vec3.create(), perpendicular, halfWidth))\n            ];\n            // the main tunnel\n            {\n                // left wall\n                positions.push(bottomVertices[0][0], // back left Y (bottom)\n                0.0, bottomVertices[0][1], // back left X (bottom)\n                bottomVertices[0][0], // back left Y (top)\n                fromElevation, bottomVertices[0][1], // back left X (top)\n                bottomVertices[1][0], // front left Y (top)\n                toElevation, bottomVertices[1][1], // front left X (top)\n                bottomVertices[1][0], // front left Y (bottom)\n                0.0, bottomVertices[1][1] // front left X (bottom)\n                );\n                // right wall\n                positions.push(topVertices[0][0], // back right Y (bottom)\n                0.0, topVertices[0][1], // back right X (bottom)\n                topVertices[0][0], // back right Y (top)\n                fromElevation, topVertices[0][1], // back right X (top)\n                topVertices[1][0], // front right Y (top)\n                toElevation, topVertices[1][1], // front right X (top)\n                topVertices[1][0], // front right Y (bottom)\n                0.0, topVertices[1][1] // front right X (bottom)\n                );\n                // top face\n                positions.push(topVertices[0][0], // back right Y\n                topVertices[0][2], topVertices[0][1], // back right X\n                topVertices[1][0], // top right Y\n                topVertices[1][2], topVertices[1][1], // top right X\n                bottomVertices[1][0], // top left Y\n                bottomVertices[1][2], bottomVertices[1][1], // top left X,\n                bottomVertices[0][0], // back left Y\n                bottomVertices[0][2], bottomVertices[0][1] // back left X\n                );\n                // bottom face\n                positions.push(topVertices[0][0], // back right Y\n                -0.001, topVertices[0][1], // back right X\n                topVertices[1][0], // top right Y\n                -0.001, topVertices[1][1], // top right X\n                bottomVertices[1][0], // top left Y\n                -0.001, bottomVertices[1][1], // top left X,\n                bottomVertices[0][0], // back left Y\n                -0.001, bottomVertices[0][1] // back left X\n                );\n                faceColors.push.apply(faceColors, [\n                    leftWallColor,\n                    rightWallColor,\n                    topColor,\n                    bottomColor // bottom face\n                ]);\n                indices.push.apply(indices, ([\n                    0, 1, 2,\n                    0, 2, 3,\n                    4, 5, 6,\n                    4, 6, 7,\n                    8, 9, 10,\n                    8, 10, 11,\n                    12, 13, 14,\n                    12, 14, 15, // bottom\n                ].map(function (number) { return indexForIndices + number; })));\n                indexForIndices += 16;\n            }\n            to.verticles = {\n                frontRightX: topVertices[1][1],\n                frontRightY: topVertices[1][0],\n                frontRightZ: topVertices[1][2],\n                frontLeftX: bottomVertices[1][1],\n                frontLeftY: bottomVertices[1][0],\n                frontLeftZ: bottomVertices[1][2]\n            };\n            // the connecting tunnel\n            if (from.verticles) {\n                positions.push(\n                // left face\n                from.verticles.frontLeftY, // back left Y (bottom)\n                0.0, from.verticles.frontLeftX, // back left X (bottom)\n                from.verticles.frontLeftY, // back left Y (top)\n                from.verticles.frontLeftZ, from.verticles.frontLeftX, // back left X (top)\n                bottomVertices[0][0], // front left Y (top)\n                bottomVertices[0][2], bottomVertices[0][1], // front left X (top)\n                bottomVertices[0][0], // front left Y (bottom)\n                0.0, bottomVertices[0][1] // front left X (bottom)\n                );\n                positions.push(\n                // right face\n                from.verticles.frontRightY, // back right Y (bottom)\n                0.0, from.verticles.frontRightX, // back right X (bottom)\n                from.verticles.frontRightY, // back right Y (top)\n                from.verticles.frontRightZ, from.verticles.frontRightX, // back right X (top)\n                topVertices[0][0], // front right Y (top)\n                topVertices[0][2], topVertices[0][1], // front right X (top)\n                topVertices[0][0], // front right Y (bottom)\n                0.0, topVertices[0][1] // front right X (bottom)\n                );\n                positions.push(from.verticles.frontRightY, // back right Y\n                from.verticles.frontRightZ, from.verticles.frontRightX, // back right X\n                topVertices[0][0], // top right Y\n                topVertices[0][2], topVertices[0][1], // top right X\n                bottomVertices[0][0], // top left Y\n                bottomVertices[0][2], bottomVertices[0][1], // top left X,\n                from.verticles.frontLeftY, // back left Y\n                from.verticles.frontLeftZ, from.verticles.frontLeftX // back left X\n                );\n                // bottom face\n                positions.push(from.verticles.frontRightY, // back right Y\n                -0.001, from.verticles.frontRightX, // back right X\n                topVertices[0][0], // top right Y\n                -0.001, topVertices[0][1], // top right X\n                bottomVertices[0][0], // top left Y\n                -0.001, bottomVertices[0][1], // top left X,\n                from.verticles.frontLeftY, // back left Y\n                -0.001, from.verticles.frontLeftX // back left X\n                );\n                faceColors.push.apply(faceColors, [\n                    leftWallColor,\n                    rightWallColor,\n                    topColor,\n                    bottomColor // bottom face\n                ]);\n                indices.push.apply(indices, ([\n                    0, 1, 2,\n                    0, 2, 3,\n                    4, 5, 6,\n                    4, 6, 7,\n                    8, 9, 10,\n                    8, 10, 11,\n                    12, 13, 14,\n                    12, 14, 15, // bottom\n                ].map(function (number) { return indexForIndices + number; })));\n                indexForIndices += 16;\n            }\n            if (index === path.points.length - 1) {\n                // final wall\n                positions.push(\n                // left face\n                topVertices[1][0], // back left Y (bottom)\n                0.0, topVertices[1][1], // back left X (bottom)\n                topVertices[1][0], // back left Y (top)\n                toElevation, topVertices[1][1], // back left X (top)\n                bottomVertices[1][0], // front left Y (top)\n                toElevation, bottomVertices[1][1], // front left X (top)\n                bottomVertices[1][0], // front left Y (bottom)\n                0.0, bottomVertices[1][1] // front left X (bottom)\n                );\n                faceColors.push.apply(faceColors, [\n                    endBlockColor\n                ]);\n                indices.push.apply(indices, ([\n                    0, 1, 2,\n                    0, 2, 3, // front\n                ].map(function (number) { return indexForIndices + number; })));\n                indexForIndices += 4;\n            }\n            else if (index === 1) {\n                // initial wall\n                positions.push(\n                // left face\n                bottomVertices[0][0], // back left Y (bottom)\n                0.0, bottomVertices[0][1], // back left X (bottom)\n                bottomVertices[0][0], // back left Y (top)\n                from.z, bottomVertices[0][1], // back left X (top)\n                topVertices[0][0], // front left Y (top)\n                from.z, topVertices[0][1], // front left X (top)\n                topVertices[0][0], // front left Y (bottom)\n                0.0, topVertices[0][1] // front left X (bottom)\n                );\n                faceColors.push.apply(faceColors, [\n                    startBlockColor\n                ]);\n                indices.push.apply(indices, ([\n                    0, 1, 2,\n                    0, 2, 3, // front\n                ].map(function (number) { return indexForIndices + number; })));\n                indexForIndices += 4;\n            }\n        }\n        var positionBuffer = RendererBuffers.initPositionBuffer(gl, positions);\n        var colorBuffer = RendererBuffers.initColorBuffer(gl, faceColors);\n        var indexBuffer = RendererBuffers.initIndexBuffer(gl, indices);\n        return {\n            verticles: positions.length / 2,\n            position: positionBuffer,\n            color: colorBuffer,\n            indices: indexBuffer,\n        };\n    };\n    return RendererPathModel;\n}());\nexport { RendererPathModel };\n;\n","var RendererScene = /** @class */ (function () {\n    function RendererScene() {\n    }\n    RendererScene.drawScene = function (gl, programInfo, bufferers, options, deltas, matrix) {\n        var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n        if ((_a = options.autoClear) !== null && _a !== void 0 ? _a : true) {\n            gl.clearColor(0.0, 0.0, 0.0, 0.0); // Clear to black, fully opaque\n            gl.clearDepth(1.0); // Clear everything\n            // Clear the canvas before we start drawing on it.\n            gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n        }\n        gl.enable(gl.DEPTH_TEST); // Enable depth testing\n        gl.depthFunc(gl.LEQUAL); // Near things obscure far things\n        // Create a perspective matrix, a special matrix that is\n        // used to simulate the distortion of perspective in a camera.\n        // Our field of view is 45 degrees, with a width/height\n        // ratio that matches the display size of the canvas\n        // and we only want to see objects between 0.1 units\n        // and 100 units away from the camera.\n        var fieldOfView = (((_b = options.cameraFov) !== null && _b !== void 0 ? _b : 45) * Math.PI) / 180; // in radians\n        var aspect = gl.canvas.clientWidth / gl.canvas.clientHeight;\n        var zNear = 0.1;\n        var zFar = 1000.0;\n        var projectionMatrix = mat4.create();\n        if ((_c = options.keepPerspectiveProjection) !== null && _c !== void 0 ? _c : true)\n            mat4.perspective(projectionMatrix, fieldOfView, aspect, zNear, zFar);\n        // note: glmatrix.js always has the first argument\n        // as the destination to receive the result.\n        //mat4.perspective(projectionMatrix, fieldOfView, aspect, zNear, zFar);\n        // Set the drawing position to the \"identity\" point, which is\n        // the center of the scene.\n        var modelViewMatrix = mat4.create();\n        if (matrix) {\n            // Convert the provided matrix values into an array\n            var matrixValues = [\n                matrix[0], matrix[1], matrix[2], matrix[3],\n                matrix[4], matrix[5], matrix[6], matrix[7],\n                matrix[8], matrix[9], matrix[10], matrix[11],\n                matrix[12], matrix[13], matrix[14], matrix[15],\n            ];\n            // Create a mat4 object from the matrix values\n            var transformationMatrix = mat4.fromValues.apply(null, matrixValues);\n            // Multiply the camera's view matrix with the transformation matrix\n            mat4.multiply(modelViewMatrix, modelViewMatrix, transformationMatrix);\n            // Now the camera's view matrix is transformed by the provided matrix\n        }\n        mat4.rotate(modelViewMatrix, modelViewMatrix, 0 * (180 / Math.PI), [0, 0, 1]);\n        // Now move the drawing position a bit to where we want to\n        // start drawing the square.\n        mat4.translate(modelViewMatrix, // destination matrix\n        modelViewMatrix, // matrix to translate\n        (_d = options.cameraTranslation) !== null && _d !== void 0 ? _d : [0.0, 0.0, -25.0]);\n        mat4.rotate(modelViewMatrix, modelViewMatrix, ((_f = (_e = options.cameraRotation) === null || _e === void 0 ? void 0 : _e[1]) !== null && _f !== void 0 ? _f : 0) + (deltas.y * 0.01), [1, 0, 0]);\n        mat4.rotate(modelViewMatrix, modelViewMatrix, ((_h = (_g = options.cameraRotation) === null || _g === void 0 ? void 0 : _g[0]) !== null && _h !== void 0 ? _h : 0) + (deltas.x * 0.01), [0, 1, 0]);\n        mat4.rotate(modelViewMatrix, modelViewMatrix, ((_k = (_j = options.cameraRotation) === null || _j === void 0 ? void 0 : _j[2]) !== null && _k !== void 0 ? _k : 0), [0, 0, 1]);\n        for (var _i = 0, bufferers_1 = bufferers; _i < bufferers_1.length; _i++) {\n            var buffers = bufferers_1[_i];\n            // Tell WebGL how to pull out the positions from the position\n            // buffer into the vertexPosition attribute.\n            this.setPositionAttribute(gl, buffers, programInfo);\n            this.setColorAttribute(gl, buffers, programInfo);\n            // Tell WebGL which indices to use to index the vertices\n            gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffers.indices);\n            // Tell WebGL to use our program when drawing\n            gl.useProgram(programInfo.program);\n            // Set the shader uniforms\n            gl.uniformMatrix4fv(programInfo.uniformLocations.projectionMatrix, false, projectionMatrix);\n            gl.uniformMatrix4fv(programInfo.uniformLocations.modelViewMatrix, false, modelViewMatrix);\n            {\n                var vertexCount = buffers.verticles;\n                var type = gl.UNSIGNED_SHORT;\n                var offset = 0;\n                gl.drawElements(gl.TRIANGLES, vertexCount, type, offset);\n            }\n        }\n    };\n    ;\n    RendererScene.setPositionAttribute = function (gl, buffers, programInfo) {\n        var numComponents = 3;\n        var type = gl.FLOAT; // the data in the buffer is 32bit floats\n        var normalize = false; // don't normalize\n        var stride = 0; // how many bytes to get from one set of values to the next\n        // 0 = use type and numComponents above\n        var offset = 0; // how many bytes inside the buffer to start from\n        gl.bindBuffer(gl.ARRAY_BUFFER, buffers.position);\n        gl.vertexAttribPointer(programInfo.attribLocations.vertexPosition, numComponents, type, normalize, stride, offset);\n        gl.enableVertexAttribArray(programInfo.attribLocations.vertexPosition);\n    };\n    ;\n    RendererScene.setColorAttribute = function (gl, buffers, programInfo) {\n        var numComponents = 4;\n        var type = gl.FLOAT;\n        var normalize = false;\n        var stride = 0;\n        var offset = 0;\n        gl.bindBuffer(gl.ARRAY_BUFFER, buffers.color);\n        gl.vertexAttribPointer(programInfo.attribLocations.vertexColor, numComponents, type, normalize, stride, offset);\n        gl.enableVertexAttribArray(programInfo.attribLocations.vertexColor);\n    };\n    return RendererScene;\n}());\nexport { RendererScene };\n;\n","var RendererWebGL = /** @class */ (function () {\n    function RendererWebGL() {\n    }\n    RendererWebGL.initializeProgram = function (context) {\n        // Vertex shader program\n        var vsSource = \"\\n            attribute vec4 aVertexPosition;\\n            attribute vec4 aVertexColor;\\n\\n            uniform mat4 uModelViewMatrix;\\n            uniform mat4 uProjectionMatrix;\\n\\n            varying lowp vec4 vColor;\\n\\n            void main(void) {\\n                gl_Position = uProjectionMatrix * uModelViewMatrix * aVertexPosition;\\n                vColor = aVertexColor;\\n            }\\n        \";\n        // Fragment shader program\n        var fsSource = \"\\n            varying lowp vec4 vColor;\\n\\n            void main(void) {\\n                gl_FragColor = vColor;\\n            }\\n        \";\n        // Initialize a shader program; this is where all the lighting\n        // for the vertices and so forth is established.\n        var shaderProgram = RendererWebGL.initShaderProgram(context, vsSource, fsSource);\n        if (!shaderProgram)\n            throw new Error(\"shader program\");\n        // Collect all the info needed to use the shader program.\n        // Look up which attributes our shader program is using\n        // for aVertexPosition, aVertexColor and also\n        // look up uniform locations.\n        return {\n            program: shaderProgram,\n            attribLocations: {\n                vertexPosition: context.getAttribLocation(shaderProgram, \"aVertexPosition\"),\n                vertexColor: context.getAttribLocation(shaderProgram, \"aVertexColor\"),\n            },\n            uniformLocations: {\n                projectionMatrix: context.getUniformLocation(shaderProgram, \"uProjectionMatrix\"),\n                modelViewMatrix: context.getUniformLocation(shaderProgram, \"uModelViewMatrix\"),\n            },\n        };\n    };\n    ;\n    RendererWebGL.initShaderProgram = function (gl, vsSource, fsSource) {\n        var vertexShader = this.loadShader(gl, gl.VERTEX_SHADER, vsSource);\n        if (!vertexShader)\n            throw new Error(\"vertex shader\");\n        var fragmentShader = this.loadShader(gl, gl.FRAGMENT_SHADER, fsSource);\n        if (!fragmentShader)\n            throw new Error(\"fragment shader\");\n        // Create the shader program\n        var shaderProgram = gl.createProgram();\n        if (!shaderProgram)\n            throw new Error(\"shader program\");\n        gl.attachShader(shaderProgram, vertexShader);\n        gl.attachShader(shaderProgram, fragmentShader);\n        gl.linkProgram(shaderProgram);\n        // If creating the shader program failed, alert\n        if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {\n            alert(\"Unable to initialize the shader program: \".concat(gl.getProgramInfoLog(shaderProgram)));\n            return null;\n        }\n        return shaderProgram;\n    };\n    RendererWebGL.loadShader = function (gl, type, source) {\n        var shader = gl.createShader(type);\n        if (!shader)\n            throw new Error(\"shader\");\n        // Send the source to the shader object\n        gl.shaderSource(shader, source);\n        // Compile the shader program\n        gl.compileShader(shader);\n        // See if it compiled successfully\n        if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n            alert(\"An error occurred compiling the shaders: \".concat(gl.getShaderInfoLog(shader)));\n            gl.deleteShader(shader);\n            return null;\n        }\n        return shader;\n    };\n    return RendererWebGL;\n}());\nexport { RendererWebGL };\n;\n","var __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nimport { Projection } from \"./projection\";\nimport { RendererGridModel } from \"./renderer/models/grid\";\nimport { RendererPathModel } from \"./renderer/models/path\";\nimport { RendererScene } from \"./renderer/scene\";\nimport { RendererWebGL } from \"./renderer/webgl\";\nvar Renderer = /** @class */ (function () {\n    function Renderer(options) {\n        this.paths = [];\n        this.bufferers = [];\n        this.animations = null;\n        this.previousAnimationsLength = 0;\n        this.deltaX = 0;\n        this.deltaY = 0;\n        this.previous = 0;\n        this.options = options;\n        //window.requestAnimationFrame(this.render.bind(this));\n    }\n    ;\n    Renderer.prototype.setOptions = function (options) {\n        this.options = __assign(__assign({}, this.options), options);\n    };\n    ;\n    Renderer.prototype.setupContext = function (context) {\n        this.programInfo = RendererWebGL.initializeProgram(context);\n    };\n    ;\n    Renderer.prototype.setPaths = function (paths, animations, project, projectionFunction) {\n        var _this = this;\n        if (animations === void 0) { animations = null; }\n        if (project === void 0) { project = true; }\n        var startLeft = NaN;\n        var startTop = NaN;\n        var minimumLeft = NaN;\n        var maximumLeft = NaN;\n        var minimumTop = NaN;\n        var maximumTop = NaN;\n        var minimumAltitude = NaN;\n        var maximumAltitude = NaN;\n        for (var _i = 0, paths_1 = paths; _i < paths_1.length; _i++) {\n            var path = paths_1[_i];\n            for (var _a = 0, path_1 = path; _a < path_1.length; _a++) {\n                var coordinate = path_1[_a];\n                if (!project) {\n                    coordinate.projection = {\n                        x: coordinate.x,\n                        y: coordinate.y,\n                        z: coordinate.z\n                    };\n                }\n                else {\n                    coordinate.projection = (projectionFunction !== null && projectionFunction !== void 0 ? projectionFunction : Projection.projectToPixelCoordinate).call(projectionFunction !== null && projectionFunction !== void 0 ? projectionFunction : Projection, coordinate, this.options);\n                }\n                if (window.isNaN(minimumAltitude) || coordinate.projection.z < minimumAltitude)\n                    minimumAltitude = coordinate.projection.z;\n                if (window.isNaN(maximumAltitude) || coordinate.projection.z > maximumAltitude)\n                    maximumAltitude = coordinate.projection.z;\n                if (window.isNaN(startLeft))\n                    startLeft = coordinate.projection.x;\n                if (window.isNaN(startTop))\n                    startTop = coordinate.projection.y;\n                if (window.isNaN(minimumLeft) || coordinate.projection.x < minimumLeft)\n                    minimumLeft = coordinate.projection.x;\n                if (window.isNaN(maximumLeft) || coordinate.projection.x > maximumLeft)\n                    maximumLeft = coordinate.projection.x;\n                if (window.isNaN(minimumTop) || coordinate.projection.y < minimumTop)\n                    minimumTop = coordinate.projection.y;\n                if (window.isNaN(maximumTop) || coordinate.projection.y > maximumTop)\n                    maximumTop = coordinate.projection.y;\n            }\n        }\n        var centerLeft = (maximumLeft - minimumLeft) / 2;\n        var centerTop = (maximumTop - minimumTop) / 2;\n        var green = [0, 1, 0, 1];\n        var red = [1, 0, 0, 1];\n        if (this.options.keepMinimumAltitude)\n            minimumAltitude = 0;\n        this.paths = paths.map(function (path) {\n            var points = [];\n            var fullDistance = 0;\n            path.forEach(function (coordinate, index) {\n                var _a, _b, _c, _d;\n                var colorMultiplier = (coordinate.projection.z - minimumAltitude) / (maximumAltitude - minimumAltitude);\n                var x = coordinate.projection.x;\n                var y = coordinate.projection.y;\n                if (!((_a = _this.options.keepMinimumPositions) !== null && _a !== void 0 ? _a : false) && _this.options.center) {\n                    x = ((startLeft > coordinate.projection.x) ? (startLeft - coordinate.projection.x) : (coordinate.projection.x - startLeft));\n                    y = ((startTop < coordinate.projection.y) ? (startTop - coordinate.projection.y) : (coordinate.projection.y - startTop));\n                }\n                else if (!((_b = _this.options.keepMinimumPositions) !== null && _b !== void 0 ? _b : false)) {\n                    x = coordinate.projection.x - startLeft;\n                    y = startTop - coordinate.projection.y;\n                }\n                if ((_c = _this.options.center) !== null && _c !== void 0 ? _c : true) {\n                    x -= centerLeft;\n                    y += centerTop;\n                }\n                var z = (coordinate.projection.z - minimumAltitude);\n                var distanceX = (index === 0) ? (0) : (Math.abs(x - points[index - 1].x));\n                var distanceY = (index === 0) ? (0) : (Math.abs(y - points[index - 1].y));\n                var distance = Math.sqrt(Math.pow(distanceX, 2) + Math.pow(distanceY, 2));\n                var point = {\n                    x: x,\n                    y: y,\n                    z: z,\n                    distanceX: distanceX,\n                    distanceY: distanceY,\n                    distance: distance,\n                    distanceStart: fullDistance,\n                    verticles: null,\n                    color: (!_this.options.elevationGradient) ? ((_d = coordinate.color) === null || _d === void 0 ? void 0 : _d.map(function (index) { return index / 255; })) : ((_this.options.elevationGradientColors) ? ([\n                        ((_this.options.elevationGradientColors[0][0] + (_this.options.elevationGradientColors[1][0] - _this.options.elevationGradientColors[0][0]) * colorMultiplier)) / 255,\n                        ((_this.options.elevationGradientColors[0][1] + (_this.options.elevationGradientColors[1][1] - _this.options.elevationGradientColors[0][1]) * colorMultiplier)) / 255,\n                        ((_this.options.elevationGradientColors[0][2] + (_this.options.elevationGradientColors[1][2] - _this.options.elevationGradientColors[0][2]) * colorMultiplier)) / 255,\n                        ((_this.options.elevationGradientColors[0][3] + (_this.options.elevationGradientColors[1][3] - _this.options.elevationGradientColors[0][3]) * colorMultiplier)) / 255\n                    ]) : ([\n                        (green[0] + (red[0] - green[0]) * colorMultiplier),\n                        (green[1] + (red[1] - green[1]) * colorMultiplier),\n                        (green[2] + (red[2] - green[2]) * colorMultiplier),\n                        1.0\n                    ]))\n                };\n                points.push(point);\n                fullDistance += distance;\n            });\n            return {\n                points: points,\n                fullDistance: fullDistance\n            };\n        });\n        this.animations = animations;\n        this.bufferers = [];\n    };\n    ;\n    Renderer.prototype.getAnimationFrame = function (now) {\n        if (now === void 0) { now = 0; }\n        var frame = {\n            distanceFraction: 1,\n            elevationFraction: 1\n        };\n        if (this.animations) {\n            var delta = now - this.previous;\n            this.previous = now;\n            for (var index = 0; index < this.animations.length; index++) {\n                var animation = this.animations[index];\n                if (!animation.progress) {\n                    animation.progress = {\n                        elapsed: 0\n                    };\n                }\n                animation.progress.elapsed += delta;\n                var fraction = Math.max(Math.min(animation.progress.elapsed / animation.interval, 1), 0);\n                if (!animation.forwards)\n                    fraction = 1 - fraction;\n                if (fraction === ((animation.forwards) ? (1) : (0))) {\n                    if (!animation.repeat) {\n                        this.animations.splice(index, 1);\n                        index--;\n                    }\n                    else {\n                        animation.forwards = !animation.forwards;\n                        delete animation.progress;\n                    }\n                }\n                switch (animation.type) {\n                    case \"distance\": {\n                        frame.distanceFraction = fraction;\n                        break;\n                    }\n                    case \"elevation\": {\n                        frame.elevationFraction = fraction;\n                        break;\n                    }\n                }\n            }\n        }\n        return frame;\n    };\n    ;\n    Renderer.prototype.registerMouseEvents = function (canvas) {\n        var _this = this;\n        var mouseDown = false;\n        var lastMouseX = null;\n        var lastMouseY = null;\n        canvas.addEventListener(\"mousedown\", function (event) {\n            mouseDown = true;\n            lastMouseX = event.pageX;\n            lastMouseY = event.pageY;\n        });\n        document.body.addEventListener(\"mouseup\", function (event) {\n            mouseDown = false;\n        });\n        document.body.addEventListener(\"mousemove\", function (event) {\n            if (!mouseDown || lastMouseX === null || lastMouseY === null) {\n                return;\n            }\n            var newX = event.pageX;\n            var newY = event.pageY;\n            _this.deltaX += newX - lastMouseX;\n            _this.deltaY += newY - lastMouseY;\n            lastMouseX = newX;\n            lastMouseY = newY;\n        });\n    };\n    ;\n    Renderer.prototype.render = function (context, now, matrix) {\n        var _a, _b, _c, _d;\n        if (!this.programInfo)\n            throw new Error(\"Program info is not set up yet, you must call setupContext before rendering!\");\n        var animations = (_b = (_a = this.animations) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;\n        if (this.bufferers.length !== this.paths.length || ((_c = this.animations) === null || _c === void 0 ? void 0 : _c.length) || ((_d = this.animations) === null || _d === void 0 ? void 0 : _d.length) !== this.previousAnimationsLength)\n            this.bufferers = this.createBuffers(context, now);\n        RendererScene.drawScene(context, this.programInfo, this.bufferers, this.options, {\n            x: this.deltaX,\n            y: this.deltaY\n        }, matrix);\n        this.previousAnimationsLength = animations;\n        //window.requestAnimationFrame((now) => this.render(now, animations));\n    };\n    ;\n    Renderer.prototype.createBuffers = function (context, now) {\n        var _this = this;\n        var buffers = [];\n        var animationFrame = this.getAnimationFrame(now);\n        buffers.push.apply(buffers, this.paths.map(function (path) { return RendererPathModel.createBuffers(context, path, _this.options, animationFrame); }));\n        if (this.options.grid)\n            buffers.push(RendererGridModel.createBuffers(context, this.options, animationFrame, this.paths));\n        return buffers;\n    };\n    ;\n    return Renderer;\n}());\nexport default Renderer;\n;\n","var WebGLOverlayView = /** @class */ (function () {\n    function WebGLOverlayView(renderer, paths) {\n        var overlay = new google.maps.WebGLOverlayView();\n        overlay.onAdd = overlay.onStateUpdate = overlay.onContextLost = overlay.onRemove = function () { };\n        overlay.onContextRestored = function (_a) {\n            var gl = _a.gl;\n            renderer.setOptions({\n                autoClear: false,\n                center: false,\n                keepPerspectiveProjection: false\n            });\n            renderer.setupContext(gl);\n        };\n        overlay.onDraw = function (_a) {\n            var gl = _a.gl, transformer = _a.transformer;\n            if (!renderer.paths.length) {\n                renderer.setPaths(paths, null, true, function (point, options) {\n                    var matrix = transformer.fromLatLngAltitude({\n                        lat: point.latitude,\n                        lng: point.longitude,\n                        altitude: 0,\n                    });\n                    var inverseMatrix = mat4.create();\n                    var homogeneousCoord = vec4.fromValues(0, 0, 0, 1);\n                    var result = vec4.create();\n                    mat4.invert(inverseMatrix, matrix);\n                    vec4.transformMat4(result, homogeneousCoord, inverseMatrix);\n                    return {\n                        x: result[1] / 3 * 2,\n                        y: result[0] / 3 * 2,\n                        z: point.altitude * 20\n                    };\n                });\n            }\n            // Render objects.\n            var matrix = transformer.fromLatLngAltitude({\n                lat: paths[0][0].latitude,\n                lng: paths[0][0].longitude,\n                altitude: 0,\n            });\n            overlay.requestRedraw();\n            renderer.render(gl, performance.now(), matrix);\n        };\n        return overlay;\n    }\n    ;\n    return WebGLOverlayView;\n}());\nexport default WebGLOverlayView;\n;\n"],"names":["root","factory","exports","module","define","amd","self","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","Projection","getTileSize","zoomLevel","getMercatorWorldCoordinateProjection","latitude","longitude","tileSize","this","latitudeToRadians","Math","PI","left","top","log","tan","getPixelCoordinates","leftWorldCoordinate","topWorldCoordinate","pow","projectToPixelCoordinate","point","options","_a","_b","_c","worldCoordinates","projectionZoomLevel","pixelCoordinates","x","y","z","altitude","RendererBuffers","initPositionBuffer","gl","positions","positionBuffer","createBuffer","bindBuffer","ARRAY_BUFFER","bufferData","Float32Array","STATIC_DRAW","initColorBuffer","faceColors","colors","j","length","c","concat","colorBuffer","initIndexBuffer","indices","indexBuffer","ELEMENT_ARRAY_BUFFER","Uint16Array","RendererGridModel","createBuffers","animationFrame","paths","minX","NaN","maxX","minY","maxY","_i","paths_1","_d","_e","points","window","isNaN","padding","gridPadding","gridColor","map","index","verticles","position","color","RendererPathModel","path","_f","_g","_h","_j","_k","_l","_m","_o","_p","_q","_r","_s","_t","_u","_v","_w","indexForIndices","distance","breakingPoint","fullDistance","distanceFraction","from","to","fromElevation","elevationFraction","toElevation","pointFraction","distanceStart","leftWallColor","wallColor","rightWallColor","topColor","bottomColor","endBlockColor","startBlockColor","max","min","difference","from3","vec3","fromValues","to3","direction","sub","create","perpendicular","normalize","halfWidth","wallWidth","topVertices","add","scale","bottomVertices","push","apply","number","frontRightX","frontRightY","frontRightZ","frontLeftX","frontLeftY","frontLeftZ","RendererScene","drawScene","programInfo","bufferers","deltas","matrix","autoClear","clearColor","clearDepth","clear","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","enable","DEPTH_TEST","depthFunc","LEQUAL","fieldOfView","cameraFov","aspect","canvas","clientWidth","clientHeight","projectionMatrix","mat4","keepPerspectiveProjection","perspective","modelViewMatrix","matrixValues","transformationMatrix","multiply","rotate","translate","cameraTranslation","cameraRotation","bufferers_1","buffers","setPositionAttribute","setColorAttribute","useProgram","program","uniformMatrix4fv","uniformLocations","vertexCount","type","UNSIGNED_SHORT","drawElements","TRIANGLES","FLOAT","vertexAttribPointer","attribLocations","vertexPosition","enableVertexAttribArray","vertexColor","RendererWebGL","initializeProgram","context","shaderProgram","initShaderProgram","Error","getAttribLocation","getUniformLocation","vsSource","fsSource","vertexShader","loadShader","VERTEX_SHADER","fragmentShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","alert","getProgramInfoLog","source","shader","createShader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","deleteShader","__assign","assign","t","s","i","n","arguments","p","Renderer","animations","previousAnimationsLength","deltaX","deltaY","previous","setOptions","setupContext","setPaths","project","projectionFunction","_this","startLeft","startTop","minimumLeft","maximumLeft","minimumTop","maximumTop","minimumAltitude","maximumAltitude","path_1","coordinate","projection","centerLeft","centerTop","green","red","keepMinimumAltitude","forEach","colorMultiplier","keepMinimumPositions","center","distanceX","abs","distanceY","sqrt","elevationGradient","elevationGradientColors","getAnimationFrame","now","frame","delta","animation","progress","elapsed","fraction","interval","forwards","repeat","splice","registerMouseEvents","mouseDown","lastMouseX","lastMouseY","addEventListener","event","pageX","pageY","document","body","newX","newY","render","grid","renderer","overlay","google","maps","WebGLOverlayView","onAdd","onStateUpdate","onContextLost","onRemove","onContextRestored","onDraw","transformer","fromLatLngAltitude","lat","lng","inverseMatrix","homogeneousCoord","vec4","result","invert","transformMat4","requestRedraw","performance"],"sourceRoot":""}