diff --git a/.eslintrc.js b/.eslintrc.js index c56582457b..63cbcd8b7d 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -7,7 +7,7 @@ module.exports = { 'eslint-config-airbnb-base/rules/strict', ], parserOptions: { - ecmaVersion: 6, + ecmaVersion: 7, sourceType: 'module', ecmaFeatures: { impliedStrict: true diff --git a/src/Controls/GlobeControls.js b/src/Controls/GlobeControls.js index d96601e50f..15f2ec3b3c 100644 --- a/src/Controls/GlobeControls.js +++ b/src/Controls/GlobeControls.js @@ -223,7 +223,7 @@ function GlobeControls(view, targetCoordinate, range, globeRadius, options = {}) }; this.getDollyScale = function getDollyScale() { - return Math.pow(0.95, this.zoomSpeed); + return 0.95 ** this.zoomSpeed; }; this.rotateLeft = function rotateLeft(angle = 0) { diff --git a/src/Controls/PlanarControls.js b/src/Controls/PlanarControls.js index 1e25ad5fcb..50516028cf 100644 --- a/src/Controls/PlanarControls.js +++ b/src/Controls/PlanarControls.js @@ -868,7 +868,7 @@ function onContextMenu(event) { function smooth(value) { // p between 1.0 and 1.5 (empirical) const p = 1.20; - return Math.pow((value * value * (3 - 2 * value)), p); + return (value ** 2 * (3 - 2 * value)) ** p; } export default PlanarControls; diff --git a/src/Core/Geographic/Extent.js b/src/Core/Geographic/Extent.js index 595c1621ae..36611c9fb4 100644 --- a/src/Core/Geographic/Extent.js +++ b/src/Core/Geographic/Extent.js @@ -88,7 +88,7 @@ Extent.prototype.as = function as(crs) { if (this.isTiledCrs()) { if (this._crs == 'WMTS:PM' || this._crs == 'TMS') { // Convert this to the requested crs by using 4326 as an intermediate state. - const nbCol = Math.pow(2, this.zoom); + const nbCol = 2 ** this.zoom; const nbRow = nbCol; const sizeRow = 1.0 / nbRow; // convert row PM to Y PM @@ -120,7 +120,7 @@ Extent.prototype.as = function as(crs) { } } } else if (this._crs == 'WMTS:WGS84G' && crs == 'EPSG:4326') { - const nbRow = Math.pow(2, this.zoom); + const nbRow = 2 ** this.zoom; const size = 180 / nbRow; const north = size * (nbRow - this.row) - 90; const south = size * (nbRow - (this.row + 1)) - 90; @@ -177,7 +177,7 @@ Extent.prototype.offsetToParent = function offsetToParent(other, target = new TH } if (this.isTiledCrs()) { const diffLevel = this.zoom - other.zoom; - const diff = Math.pow(2, diffLevel); + const diff = 2 ** diffLevel; const invDiff = 1 / diff; const r = (this.row - (this.row % diff)) * invDiff; @@ -286,7 +286,7 @@ Extent.prototype.isInside = function isInside(other, epsilon) { return false; } else { const diffLevel = this.zoom - other.zoom; - const diff = Math.pow(2, diffLevel); + const diff = 2 ** diffLevel; const invDiff = 1 / diff; const r = (this.row - (this.row % diff)) * invDiff; @@ -433,7 +433,7 @@ Extent.prototype.extentParent = function extentParent(levelParent) { if (this.isTiledCrs()) { if (levelParent && levelParent < this.zoom) { const diffLevel = this.zoom - levelParent; - const diff = Math.pow(2, diffLevel); + const diff = 2 ** diffLevel; const invDiff = 1 / diff; const r = (this.row - (this.row % diff)) * invDiff; diff --git a/src/Core/Geographic/Projection.js b/src/Core/Geographic/Projection.js index 4063aef515..d25b6976ad 100644 --- a/src/Core/Geographic/Projection.js +++ b/src/Core/Geographic/Projection.js @@ -56,7 +56,7 @@ const Projection = { var zoom = Math.floor( Math.log(Math.PI / MathExt.degToRad(dim.y)) / LOG_TWO + 0.5); - var nY = Math.pow(2, zoom); + var nY = 2 ** zoom; var nX = 2 * nY; var uX = Math.PI * 2 / nX; @@ -83,7 +83,7 @@ const Projection = { function WMTS_WGS84ToWMTS_PM(cWMTS, bbox) { var wmtsBox = []; var level = cWMTS.zoom + 1; - var nbRow = Math.pow(2, level); + var nbRow = 2 ** level; var sizeRow = 1.0 / nbRow; diff --git a/src/Core/Picking.js b/src/Core/Picking.js index bbe90d62f1..82a7759ccc 100644 --- a/src/Core/Picking.js +++ b/src/Core/Picking.js @@ -46,7 +46,7 @@ function screenCoordsToNodeId(view, tileLayer, viewCoords, radius) { const idx = (y * 2 * radius + x) * 4; const data = buffer.slice(idx, idx + 4); depthRGBA.fromArray(data).divideScalar(255.0); - const unpack = unpack1K(depthRGBA, Math.pow(256, 3)); + const unpack = unpack1K(depthRGBA, 256 ** 3); const _id = Math.round(unpack); if (ids.indexOf(_id) < 0) { diff --git a/src/Core/Prefab/Globe/Atmosphere.js b/src/Core/Prefab/Globe/Atmosphere.js index a0d481619e..7a99ddbd9d 100644 --- a/src/Core/Prefab/Globe/Atmosphere.js +++ b/src/Core/Prefab/Globe/Atmosphere.js @@ -90,7 +90,7 @@ Atmosphere.prototype._initRealisticLighning = function _initRealisticLighning() var uniformsSky = { v3LightPosition: { value: LIGHTING_POSITION.clone().normalize() }, - v3InvWavelength: { value: new THREE.Vector3(1 / Math.pow(atmosphere.wavelength[0], 4), 1 / Math.pow(atmosphere.wavelength[1], 4), 1 / Math.pow(atmosphere.wavelength[2], 4)) }, + v3InvWavelength: { value: new THREE.Vector3(1 / atmosphere.wavelength[0] ** 4, 1 / atmosphere.wavelength[1] ** 4, 1 / atmosphere.wavelength[2] ** 4) }, fCameraHeight: { value: 0.0 }, fCameraHeight2: { value: 0.0 }, fInnerRadius: { value: atmosphere.innerRadius }, diff --git a/src/Core/Prefab/Globe/BuilderEllipsoidTile.js b/src/Core/Prefab/Globe/BuilderEllipsoidTile.js index 91a8e23035..1a11e9a0b7 100644 --- a/src/Core/Prefab/Globe/BuilderEllipsoidTile.js +++ b/src/Core/Prefab/Globe/BuilderEllipsoidTile.js @@ -28,7 +28,7 @@ BuilderEllipsoidTile.prototype.constructor = BuilderEllipsoidTile; // init projected object -> params.projected BuilderEllipsoidTile.prototype.Prepare = function Prepare(params) { - params.nbRow = Math.pow(2.0, params.level + 1.0); + params.nbRow = 2 ** (params.level + 1.0); var st1 = WGS84ToOneSubY(params.extent.south()); diff --git a/src/Core/Prefab/Globe/GlobeLayer.js b/src/Core/Prefab/Globe/GlobeLayer.js index 60831c89bb..d32325c600 100644 --- a/src/Core/Prefab/Globe/GlobeLayer.js +++ b/src/Core/Prefab/Globe/GlobeLayer.js @@ -84,7 +84,7 @@ class GlobeLayer extends TiledGeometryLayer { 1 / ellipsoidSizes.y, 1 / ellipsoidSizes.z)); - subdivisionRatio = 1 / Math.pow(2, this.maxDeltaElevationLevel); + subdivisionRatio = 1 / 2 ** this.maxDeltaElevationLevel; } preUpdate(context, changeSources) { @@ -202,7 +202,7 @@ class GlobeLayer extends TiledGeometryLayer { let sinus = distance * preSinus; let zoom = Math.log(Math.PI / (2.0 * Math.asin(sinus))) / Math.log(2); - const delta = Math.PI / Math.pow(2, zoom); + const delta = Math.PI / 2 ** zoom; const circleChord = 2.0 * ellipsoidSizes.x * Math.sin(delta * 0.5); const radius = circleChord * 0.5; @@ -214,7 +214,7 @@ class GlobeLayer extends TiledGeometryLayer { } computeDistanceCameraFromTileZoom(zoom, camera) { - const delta = Math.PI / Math.pow(2, zoom); + const delta = Math.PI / 2 ** zoom; const circleChord = 2.0 * ellipsoidSizes.x * Math.sin(delta * 0.5); const radius = circleChord * 0.5; const error = radius / SIZE_TEXTURE_TILE; diff --git a/src/Core/Prefab/GlobeView.js b/src/Core/Prefab/GlobeView.js index b42f1cd0ef..d43781971a 100644 --- a/src/Core/Prefab/GlobeView.js +++ b/src/Core/Prefab/GlobeView.js @@ -170,7 +170,7 @@ function GlobeView(viewerDiv, coordCarto, options = {}) { // Compute fog distance, this function makes it possible to have a shorter distance // when the camera approaches the ground - this.fogDistance = mfogDistance * Math.pow((len - ellipsoidSizes.x * 0.99) * 0.25 / ellipsoidSizes.x, 1.5); + this.fogDistance = mfogDistance * ((len - ellipsoidSizes.x * 0.99) * 0.25 / ellipsoidSizes.x) ** 1.5; // get altitude camera coordCam.set(this.referenceCrs, this.camera.camera3D.position).as('EPSG:4326', coordGeoCam); diff --git a/src/Core/Prefab/Planar/PlanarLayer.js b/src/Core/Prefab/Planar/PlanarLayer.js index 49a80847ab..19f3a9443b 100644 --- a/src/Core/Prefab/Planar/PlanarLayer.js +++ b/src/Core/Prefab/Planar/PlanarLayer.js @@ -70,7 +70,7 @@ class PlanarLayer extends TiledGeometryLayer { const offsetScale = nodeLayer.offsetScales[0]; const ratio = offsetScale.z; // ratio is node size / texture size - if (ratio < 1 / Math.pow(2, maxDeltaElevationLevel)) { + if (ratio < 1 / (2 ** maxDeltaElevationLevel)) { return false; } } diff --git a/src/Core/Prefab/Planar/PlanarTileBuilder.js b/src/Core/Prefab/Planar/PlanarTileBuilder.js index 663f8c3c2e..098a75c3a4 100644 --- a/src/Core/Prefab/Planar/PlanarTileBuilder.js +++ b/src/Core/Prefab/Planar/PlanarTileBuilder.js @@ -18,7 +18,7 @@ PlanarTileBuilder.prototype.constructor = PlanarTileBuilder; // prepare params // init projected object -> params.projected PlanarTileBuilder.prototype.Prepare = function Prepare(params) { - params.nbRow = Math.pow(2.0, params.zoom + 1.0); + params.nbRow = 2 ** (params.zoom + 1.0); params.projected = new THREE.Vector3(); }; diff --git a/src/Parser/VectorTileParser.js b/src/Parser/VectorTileParser.js index 9d1b2495f4..ea0e51990c 100644 --- a/src/Parser/VectorTileParser.js +++ b/src/Parser/VectorTileParser.js @@ -59,7 +59,7 @@ function project(line, ox, oy, size) { } function toGeoJSON(x, y, z) { - const size = this.extent * Math.pow(2, z); + const size = this.extent * 2 ** z; const x0 = this.extent * x; const y0 = this.extent * y; let coords = this.loadGeometry(); diff --git a/src/Process/PointCloudProcessing.js b/src/Process/PointCloudProcessing.js index cf76fa6bbd..48fd470ecc 100644 --- a/src/Process/PointCloudProcessing.js +++ b/src/Process/PointCloudProcessing.js @@ -60,7 +60,7 @@ function computeScreenSpaceError(context, layer, elt, distance) { if (distance <= 0) { return Infinity; } - const pointSpacing = layer.metadata.spacing / Math.pow(2, elt.name.length); + const pointSpacing = layer.metadata.spacing / 2 ** elt.name.length; // Estimate the onscreen distance between 2 points const onScreenSpacing = context.camera.preSSE * pointSpacing / distance; // [ P1 ]--------------[ P2 ] diff --git a/src/Renderer/c3DEngine.js b/src/Renderer/c3DEngine.js index e5a7b9d6a0..9944b150bb 100644 --- a/src/Renderer/c3DEngine.js +++ b/src/Renderer/c3DEngine.js @@ -256,7 +256,7 @@ c3DEngine.prototype.depthBufferRGBAValueToOrthoZ = function depthBufferRGBAValue const gl_FragDepthEXT = unpack1K(depthRGBA); const logDepthBufFC = 2.0 / (Math.log(camera.far + 1.0) / Math.LN2); // invert function : gl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5; - return Math.pow(2.0, 2.0 * gl_FragDepthEXT / logDepthBufFC); + return 2 ** (2 * gl_FragDepthEXT / logDepthBufFC); } else { let gl_FragCoord_Z = unpack1K(depthRGBA); gl_FragCoord_Z = gl_FragCoord_Z * 2.0 - 1.0;