{"version":3,"file":"CSS2DRenderer.mjs","sources":["../../../../packages/ThreeLayer/CSS2DRenderer.js"],"sourcesContent":["import { Matrix4, Object3D, Vector2, Vector3 } from 'three';\r\n\r\nclass CSS2DObject extends Object3D {\r\n  constructor(element = document.createElement('div')) {\r\n    super();\r\n\r\n    this.isCSS2DObject = true;\r\n\r\n    this.element = element;\r\n\r\n    this.element.style.position = 'absolute';\r\n    this.element.style.userSelect = 'none';\r\n\r\n    this.element.setAttribute('draggable', false);\r\n\r\n    this.center = new Vector2(0.5, 0.5); // ( 0, 0 ) is the lower left; ( 1, 1 ) is the top right\r\n\r\n    this.addEventListener('removed', function () {\r\n      this.traverse(function (object) {\r\n        if (object.element instanceof Element && object.element.parentNode !== null) {\r\n          object.element.parentNode.removeChild(object.element);\r\n        }\r\n      });\r\n    });\r\n  }\r\n\r\n  copy(source, recursive) {\r\n    super.copy(source, recursive);\r\n\r\n    const self = this;\r\n\r\n    self.element = source.element.cloneNode(true);\r\n\r\n    self.center = source.center;\r\n\r\n    return self;\r\n  }\r\n}\r\n\r\n//\r\n\r\nconst _vector = new Vector3();\r\nconst _viewMatrix = new Matrix4();\r\nconst _viewProjectionMatrix = new Matrix4();\r\nconst _a = new Vector3();\r\nconst _b = new Vector3();\r\n\r\nclass CSS2DRenderer {\r\n  constructor(parameters = {}) {\r\n    const _this = this;\r\n\r\n    let _width, _height;\r\n    let _widthHalf, _heightHalf;\r\n\r\n    const cache = {\r\n      objects: new WeakMap(),\r\n    };\r\n\r\n    const domElement =\r\n      parameters.element !== undefined ? parameters.element : document.createElement('div');\r\n\r\n    domElement.style.overflow = 'hidden';\r\n\r\n    this.domElement = domElement;\r\n\r\n    this.getSize = function () {\r\n      return {\r\n        width: _width,\r\n        height: _height,\r\n      };\r\n    };\r\n\r\n    this.render = function (scene, camera) {\r\n      if (scene.matrixWorldAutoUpdate === true) scene.updateMatrixWorld();\r\n      if (camera.parent === null && camera.matrixWorldAutoUpdate === true)\r\n        camera.updateMatrixWorld();\r\n\r\n      _viewMatrix.copy(camera.matrixWorldInverse);\r\n      _viewProjectionMatrix.multiplyMatrices(camera.projectionMatrix, _viewMatrix);\r\n\r\n      renderObject(scene, scene, camera);\r\n      zOrder(scene);\r\n    };\r\n\r\n    this.setSize = function (width, height) {\r\n      _width = width;\r\n      _height = height;\r\n\r\n      _widthHalf = _width / 2;\r\n      _heightHalf = _height / 2;\r\n\r\n      domElement.style.width = width + 'px';\r\n      domElement.style.height = height + 'px';\r\n    };\r\n\r\n    function renderObject(object, scene, camera) {\r\n      if (object.isCSS2DObject) {\r\n        _vector.setFromMatrixPosition(object.matrixWorld);\r\n        _vector.applyMatrix4(_viewProjectionMatrix);\r\n\r\n        const visible =\r\n          object.visible === true &&\r\n          _vector.z >= -1 &&\r\n          _vector.z <= 1 &&\r\n          object.layers.test(camera.layers) === true;\r\n        object.element.style.display = visible === true ? '' : 'none';\r\n\r\n        if (visible === true) {\r\n          object.onBeforeRender(_this, scene, camera);\r\n\r\n          const element = object.element;\r\n\r\n          element.style.transform =\r\n            'translate(' +\r\n            -100 * object.center.x +\r\n            '%,' +\r\n            -100 * object.center.y +\r\n            '%)' +\r\n            'translate(' +\r\n            (_vector.x * _widthHalf + _widthHalf) +\r\n            'px,' +\r\n            (-_vector.y * _heightHalf + _heightHalf) +\r\n            'px)';\r\n\r\n          if (element.parentNode !== domElement) {\r\n            domElement.appendChild(element);\r\n          }\r\n\r\n          object.onAfterRender(_this, scene, camera);\r\n        }\r\n\r\n        const objectData = {\r\n          distanceToCameraSquared: getDistanceToSquared(camera, object),\r\n        };\r\n\r\n        cache.objects.set(object, objectData);\r\n      }\r\n\r\n      for (let i = 0, l = object.children.length; i < l; i++) {\r\n        renderObject(object.children[i], scene, camera);\r\n      }\r\n    }\r\n\r\n    function getDistanceToSquared(object1, object2) {\r\n      _a.setFromMatrixPosition(object1.matrixWorld);\r\n      _b.setFromMatrixPosition(object2.matrixWorld);\r\n\r\n      return _a.distanceToSquared(_b);\r\n    }\r\n\r\n    function filterAndFlatten(scene) {\r\n      const result = [];\r\n\r\n      scene.traverse(function (object) {\r\n        if (object.isCSS2DObject) result.push(object);\r\n      });\r\n\r\n      return result;\r\n    }\r\n\r\n    function zOrder(scene) {\r\n      const sorted = filterAndFlatten(scene).sort(function (a, b) {\r\n        if (a.renderOrder !== b.renderOrder) {\r\n          return b.renderOrder - a.renderOrder;\r\n        }\r\n\r\n        const distanceA = cache.objects.get(a).distanceToCameraSquared;\r\n        const distanceB = cache.objects.get(b).distanceToCameraSquared;\r\n\r\n        return distanceA - distanceB;\r\n      });\r\n\r\n      const zMax = sorted.length;\r\n\r\n      for (let i = 0, l = sorted.length; i < l; i++) {\r\n        sorted[i].element.style.zIndex = zMax - i;\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nexport { CSS2DObject, CSS2DRenderer };\r\n"],"names":[],"mappings":"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"}