@aibee/owlly 1.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (500) hide show
  1. package/README.external.md +75 -0
  2. package/README.md +28 -0
  3. package/lib/src/external/lines/line-geometry.d.ts +9 -0
  4. package/lib/src/external/lines/line-geometry.js +52 -0
  5. package/lib/src/external/lines/line-geometry.js.map +1 -0
  6. package/lib/src/external/lines/line-material.d.ts +10 -0
  7. package/lib/src/external/lines/line-material.js +377 -0
  8. package/lib/src/external/lines/line-material.js.map +1 -0
  9. package/lib/src/external/lines/line-segments-2.d.ts +7 -0
  10. package/lib/src/external/lines/line-segments-2.js +144 -0
  11. package/lib/src/external/lines/line-segments-2.js.map +1 -0
  12. package/lib/src/external/lines/line-segments-geometry.d.ts +15 -0
  13. package/lib/src/external/lines/line-segments-geometry.js +141 -0
  14. package/lib/src/external/lines/line-segments-geometry.js.map +1 -0
  15. package/lib/src/external/loaders/gltf-loader.d.ts +77 -0
  16. package/lib/src/external/loaders/gltf-loader.js +2319 -0
  17. package/lib/src/external/loaders/gltf-loader.js.map +1 -0
  18. package/lib/src/external/orbit-controls.d.ts +44 -0
  19. package/lib/src/external/orbit-controls.js +746 -0
  20. package/lib/src/external/orbit-controls.js.map +1 -0
  21. package/lib/src/external/renderers/css-2d-renderer.d.ts +16 -0
  22. package/lib/src/external/renderers/css-2d-renderer.js +122 -0
  23. package/lib/src/external/renderers/css-2d-renderer.js.map +1 -0
  24. package/lib/src/external/renderers/css-3d-renderer.d.ts +18 -0
  25. package/lib/src/external/renderers/css-3d-renderer.js +139 -0
  26. package/lib/src/external/renderers/css-3d-renderer.js.map +1 -0
  27. package/lib/src/external/transform-controls.d.ts +106 -0
  28. package/lib/src/external/transform-controls.js +1113 -0
  29. package/lib/src/external/transform-controls.js.map +1 -0
  30. package/lib/src/external/util/buffer-geometry-utils.d.ts +45 -0
  31. package/lib/src/external/util/buffer-geometry-utils.js +569 -0
  32. package/lib/src/external/util/buffer-geometry-utils.js.map +1 -0
  33. package/lib/src/owlly/controller/aerial-element-controller.d.ts +65 -0
  34. package/lib/src/owlly/controller/aerial-element-controller.js +236 -0
  35. package/lib/src/owlly/controller/aerial-element-controller.js.map +1 -0
  36. package/lib/src/owlly/controller/basic-controller.d.ts +324 -0
  37. package/lib/src/owlly/controller/basic-controller.js +1239 -0
  38. package/lib/src/owlly/controller/basic-controller.js.map +1 -0
  39. package/lib/src/owlly/controller/camera-controller.d.ts +37 -0
  40. package/lib/src/owlly/controller/camera-controller.js +138 -0
  41. package/lib/src/owlly/controller/camera-controller.js.map +1 -0
  42. package/lib/src/owlly/controller/controller.d.ts +61 -0
  43. package/lib/src/owlly/controller/controller.js +24 -0
  44. package/lib/src/owlly/controller/controller.js.map +1 -0
  45. package/lib/src/owlly/controller/index.d.ts +2 -0
  46. package/lib/src/owlly/controller/index.js +14 -0
  47. package/lib/src/owlly/controller/index.js.map +1 -0
  48. package/lib/src/owlly/controller/mouse-indicator-controller.d.ts +34 -0
  49. package/lib/src/owlly/controller/mouse-indicator-controller.js +119 -0
  50. package/lib/src/owlly/controller/mouse-indicator-controller.js.map +1 -0
  51. package/lib/src/owlly/controller/orbit-control.d.ts +147 -0
  52. package/lib/src/owlly/controller/orbit-control.js +265 -0
  53. package/lib/src/owlly/controller/orbit-control.js.map +1 -0
  54. package/lib/src/owlly/controller/panorama-adjust-controller.d.ts +45 -0
  55. package/lib/src/owlly/controller/panorama-adjust-controller.js +158 -0
  56. package/lib/src/owlly/controller/panorama-adjust-controller.js.map +1 -0
  57. package/lib/src/owlly/controller/panorama-controller.d.ts +441 -0
  58. package/lib/src/owlly/controller/panorama-controller.js +1944 -0
  59. package/lib/src/owlly/controller/panorama-controller.js.map +1 -0
  60. package/lib/src/owlly/controller/panorama-transform-controller.d.ts +66 -0
  61. package/lib/src/owlly/controller/panorama-transform-controller.js +137 -0
  62. package/lib/src/owlly/controller/panorama-transform-controller.js.map +1 -0
  63. package/lib/src/owlly/controller/plane-controller.d.ts +43 -0
  64. package/lib/src/owlly/controller/plane-controller.js +174 -0
  65. package/lib/src/owlly/controller/plane-controller.js.map +1 -0
  66. package/lib/src/owlly/controller/texture-controller.d.ts +181 -0
  67. package/lib/src/owlly/controller/texture-controller.js +876 -0
  68. package/lib/src/owlly/controller/texture-controller.js.map +1 -0
  69. package/lib/src/owlly/controller/tile-panorama-controller.d.ts +308 -0
  70. package/lib/src/owlly/controller/tile-panorama-controller.js +1354 -0
  71. package/lib/src/owlly/controller/tile-panorama-controller.js.map +1 -0
  72. package/lib/src/owlly/controller/transform-controller.d.ts +106 -0
  73. package/lib/src/owlly/controller/transform-controller.js +546 -0
  74. package/lib/src/owlly/controller/transform-controller.js.map +1 -0
  75. package/lib/src/owlly/element/bottom-nav-element.d.ts +65 -0
  76. package/lib/src/owlly/element/bottom-nav-element.js +258 -0
  77. package/lib/src/owlly/element/bottom-nav-element.js.map +1 -0
  78. package/lib/src/owlly/element/camera.d.ts +82 -0
  79. package/lib/src/owlly/element/camera.js +284 -0
  80. package/lib/src/owlly/element/camera.js.map +1 -0
  81. package/lib/src/owlly/element/dom-2d-element.d.ts +35 -0
  82. package/lib/src/owlly/element/dom-2d-element.js +49 -0
  83. package/lib/src/owlly/element/dom-2d-element.js.map +1 -0
  84. package/lib/src/owlly/element/dom-3d-element.d.ts +27 -0
  85. package/lib/src/owlly/element/dom-3d-element.js +34 -0
  86. package/lib/src/owlly/element/dom-3d-element.js.map +1 -0
  87. package/lib/src/owlly/element/dom-label-2d.d.ts +116 -0
  88. package/lib/src/owlly/element/dom-label-2d.js +383 -0
  89. package/lib/src/owlly/element/dom-label-2d.js.map +1 -0
  90. package/lib/src/owlly/element/element.d.ts +53 -0
  91. package/lib/src/owlly/element/element.js +76 -0
  92. package/lib/src/owlly/element/element.js.map +1 -0
  93. package/lib/src/owlly/element/floor-model.d.ts +83 -0
  94. package/lib/src/owlly/element/floor-model.js +228 -0
  95. package/lib/src/owlly/element/floor-model.js.map +1 -0
  96. package/lib/src/owlly/element/gif-kit/Gif.d.ts +96 -0
  97. package/lib/src/owlly/element/gif-kit/Gif.js +433 -0
  98. package/lib/src/owlly/element/gif-kit/Gif.js.map +1 -0
  99. package/lib/src/owlly/element/gif-kit/GifColor.d.ts +21 -0
  100. package/lib/src/owlly/element/gif-kit/GifColor.js +38 -0
  101. package/lib/src/owlly/element/gif-kit/GifColor.js.map +1 -0
  102. package/lib/src/owlly/element/gif-kit/GifCompressedCodesToByteArrayConverter.d.ts +20 -0
  103. package/lib/src/owlly/element/gif-kit/GifCompressedCodesToByteArrayConverter.js +51 -0
  104. package/lib/src/owlly/element/gif-kit/GifCompressedCodesToByteArrayConverter.js.map +1 -0
  105. package/lib/src/owlly/element/gif-kit/GifFrame.d.ts +31 -0
  106. package/lib/src/owlly/element/gif-kit/GifFrame.js +97 -0
  107. package/lib/src/owlly/element/gif-kit/GifFrame.js.map +1 -0
  108. package/lib/src/owlly/element/gif-kit/GifImage.d.ts +23 -0
  109. package/lib/src/owlly/element/gif-kit/GifImage.js +8 -0
  110. package/lib/src/owlly/element/gif-kit/GifImage.js.map +1 -0
  111. package/lib/src/owlly/element/gif-kit/GifParser.d.ts +17 -0
  112. package/lib/src/owlly/element/gif-kit/GifParser.js +197 -0
  113. package/lib/src/owlly/element/gif-kit/GifParser.js.map +1 -0
  114. package/lib/src/owlly/element/gif-kit/GifPresenter.d.ts +20 -0
  115. package/lib/src/owlly/element/gif-kit/GifPresenter.js +44 -0
  116. package/lib/src/owlly/element/gif-kit/GifPresenter.js.map +1 -0
  117. package/lib/src/owlly/element/gif-kit/GifVersion.d.ts +10 -0
  118. package/lib/src/owlly/element/gif-kit/GifVersion.js +13 -0
  119. package/lib/src/owlly/element/gif-kit/GifVersion.js.map +1 -0
  120. package/lib/src/owlly/element/gltf-mesh-element.d.ts +31 -0
  121. package/lib/src/owlly/element/gltf-mesh-element.js +137 -0
  122. package/lib/src/owlly/element/gltf-mesh-element.js.map +1 -0
  123. package/lib/src/owlly/element/index.d.ts +20 -0
  124. package/lib/src/owlly/element/index.js +25 -0
  125. package/lib/src/owlly/element/index.js.map +1 -0
  126. package/lib/src/owlly/element/map-kit/area.d.ts +24 -0
  127. package/lib/src/owlly/element/map-kit/area.js +218 -0
  128. package/lib/src/owlly/element/map-kit/area.js.map +1 -0
  129. package/lib/src/owlly/element/map-kit/block-set.d.ts +39 -0
  130. package/lib/src/owlly/element/map-kit/block-set.js +91 -0
  131. package/lib/src/owlly/element/map-kit/block-set.js.map +1 -0
  132. package/lib/src/owlly/element/map-kit/block.d.ts +77 -0
  133. package/lib/src/owlly/element/map-kit/block.js +339 -0
  134. package/lib/src/owlly/element/map-kit/block.js.map +1 -0
  135. package/lib/src/owlly/element/map-kit/index.d.ts +4 -0
  136. package/lib/src/owlly/element/map-kit/index.js +7 -0
  137. package/lib/src/owlly/element/map-kit/index.js.map +1 -0
  138. package/lib/src/owlly/element/map-kit/shape.d.ts +131 -0
  139. package/lib/src/owlly/element/map-kit/shape.js +190 -0
  140. package/lib/src/owlly/element/map-kit/shape.js.map +1 -0
  141. package/lib/src/owlly/element/mesh-element.d.ts +22 -0
  142. package/lib/src/owlly/element/mesh-element.js +64 -0
  143. package/lib/src/owlly/element/mesh-element.js.map +1 -0
  144. package/lib/src/owlly/element/mesh-line-2d.d.ts +82 -0
  145. package/lib/src/owlly/element/mesh-line-2d.js +888 -0
  146. package/lib/src/owlly/element/mesh-line-2d.js.map +1 -0
  147. package/lib/src/owlly/element/meshline-o.d.ts +64 -0
  148. package/lib/src/owlly/element/meshline-o.js +679 -0
  149. package/lib/src/owlly/element/meshline-o.js.map +1 -0
  150. package/lib/src/owlly/element/panorama-group.d.ts +241 -0
  151. package/lib/src/owlly/element/panorama-group.js +967 -0
  152. package/lib/src/owlly/element/panorama-group.js.map +1 -0
  153. package/lib/src/owlly/element/panorama.d.ts +132 -0
  154. package/lib/src/owlly/element/panorama.js +813 -0
  155. package/lib/src/owlly/element/panorama.js.map +1 -0
  156. package/lib/src/owlly/element/path-group.d.ts +69 -0
  157. package/lib/src/owlly/element/path-group.js +172 -0
  158. package/lib/src/owlly/element/path-group.js.map +1 -0
  159. package/lib/src/owlly/element/path.d.ts +99 -0
  160. package/lib/src/owlly/element/path.js +532 -0
  161. package/lib/src/owlly/element/path.js.map +1 -0
  162. package/lib/src/owlly/element/placeable-2d.d.ts +158 -0
  163. package/lib/src/owlly/element/placeable-2d.js +471 -0
  164. package/lib/src/owlly/element/placeable-2d.js.map +1 -0
  165. package/lib/src/owlly/element/polygon-mesh.d.ts +107 -0
  166. package/lib/src/owlly/element/polygon-mesh.js +308 -0
  167. package/lib/src/owlly/element/polygon-mesh.js.map +1 -0
  168. package/lib/src/owlly/element/ring-element.d.ts +79 -0
  169. package/lib/src/owlly/element/ring-element.js +384 -0
  170. package/lib/src/owlly/element/ring-element.js.map +1 -0
  171. package/lib/src/owlly/element/sphere-mesh.d.ts +28 -0
  172. package/lib/src/owlly/element/sphere-mesh.js +70 -0
  173. package/lib/src/owlly/element/sphere-mesh.js.map +1 -0
  174. package/lib/src/owlly/element/svg-floor-model.d.ts +22 -0
  175. package/lib/src/owlly/element/svg-floor-model.js +185 -0
  176. package/lib/src/owlly/element/svg-floor-model.js.map +1 -0
  177. package/lib/src/owlly/element/svg-floors.d.ts +27 -0
  178. package/lib/src/owlly/element/svg-floors.js +110 -0
  179. package/lib/src/owlly/element/svg-floors.js.map +1 -0
  180. package/lib/src/owlly/element/tile-panorama-group.d.ts +335 -0
  181. package/lib/src/owlly/element/tile-panorama-group.js +1007 -0
  182. package/lib/src/owlly/element/tile-panorama-group.js.map +1 -0
  183. package/lib/src/owlly/element/tile-panorama.d.ts +161 -0
  184. package/lib/src/owlly/element/tile-panorama.js +511 -0
  185. package/lib/src/owlly/element/tile-panorama.js.map +1 -0
  186. package/lib/src/owlly/element/tile-plane.d.ts +105 -0
  187. package/lib/src/owlly/element/tile-plane.js +361 -0
  188. package/lib/src/owlly/element/tile-plane.js.map +1 -0
  189. package/lib/src/owlly/element/video-element.d.ts +33 -0
  190. package/lib/src/owlly/element/video-element.js +160 -0
  191. package/lib/src/owlly/element/video-element.js.map +1 -0
  192. package/lib/src/owlly/geometries/ExtrudeGeometry2.d.ts +15 -0
  193. package/lib/src/owlly/geometries/ExtrudeGeometry2.js +211 -0
  194. package/lib/src/owlly/geometries/ExtrudeGeometry2.js.map +1 -0
  195. package/lib/src/owlly/index.d.ts +13 -0
  196. package/lib/src/owlly/index.js +17 -0
  197. package/lib/src/owlly/index.js.map +1 -0
  198. package/lib/src/owlly/overlay/canvas-overlay.d.ts +96 -0
  199. package/lib/src/owlly/overlay/canvas-overlay.js +511 -0
  200. package/lib/src/owlly/overlay/canvas-overlay.js.map +1 -0
  201. package/lib/src/owlly/overlay/css-2d-overlay.d.ts +14 -0
  202. package/lib/src/owlly/overlay/css-2d-overlay.js +36 -0
  203. package/lib/src/owlly/overlay/css-2d-overlay.js.map +1 -0
  204. package/lib/src/owlly/overlay/css-3d-overlay.d.ts +16 -0
  205. package/lib/src/owlly/overlay/css-3d-overlay.js +37 -0
  206. package/lib/src/owlly/overlay/css-3d-overlay.js.map +1 -0
  207. package/lib/src/owlly/overlay/index.d.ts +6 -0
  208. package/lib/src/owlly/overlay/index.js +12 -0
  209. package/lib/src/owlly/overlay/index.js.map +1 -0
  210. package/lib/src/owlly/overlay/label-overlay.d.ts +62 -0
  211. package/lib/src/owlly/overlay/label-overlay.js +329 -0
  212. package/lib/src/owlly/overlay/label-overlay.js.map +1 -0
  213. package/lib/src/owlly/overlay/overlay.d.ts +14 -0
  214. package/lib/src/owlly/overlay/overlay.js +5 -0
  215. package/lib/src/owlly/overlay/overlay.js.map +1 -0
  216. package/lib/src/owlly/overlay/path-overlay.d.ts +39 -0
  217. package/lib/src/owlly/overlay/path-overlay.js +125 -0
  218. package/lib/src/owlly/overlay/path-overlay.js.map +1 -0
  219. package/lib/src/owlly/overlay/path-overlay2.d.ts +35 -0
  220. package/lib/src/owlly/overlay/path-overlay2.js +119 -0
  221. package/lib/src/owlly/overlay/path-overlay2.js.map +1 -0
  222. package/lib/src/owlly/overlay/poi-overlay-3d.d.ts +278 -0
  223. package/lib/src/owlly/overlay/poi-overlay-3d.js +1433 -0
  224. package/lib/src/owlly/overlay/poi-overlay-3d.js.map +1 -0
  225. package/lib/src/owlly/overlay/poi-overlay.d.ts +277 -0
  226. package/lib/src/owlly/overlay/poi-overlay.js +1412 -0
  227. package/lib/src/owlly/overlay/poi-overlay.js.map +1 -0
  228. package/lib/src/owlly/owlly-2d/index.d.ts +28 -0
  229. package/lib/src/owlly/owlly-2d/index.js +93 -0
  230. package/lib/src/owlly/owlly-2d/index.js.map +1 -0
  231. package/lib/src/owlly/screen/index.d.ts +1 -0
  232. package/lib/src/owlly/screen/index.js +2 -0
  233. package/lib/src/owlly/screen/index.js.map +1 -0
  234. package/lib/src/owlly/screen/screen.d.ts +73 -0
  235. package/lib/src/owlly/screen/screen.js +237 -0
  236. package/lib/src/owlly/screen/screen.js.map +1 -0
  237. package/lib/src/owlly/stage/__test__/stage.spec.d.ts +1 -0
  238. package/lib/src/owlly/stage/__test__/stage.spec.js +15 -0
  239. package/lib/src/owlly/stage/__test__/stage.spec.js.map +1 -0
  240. package/lib/src/owlly/stage/externals.d.ts +19 -0
  241. package/lib/src/owlly/stage/externals.js +25 -0
  242. package/lib/src/owlly/stage/externals.js.map +1 -0
  243. package/lib/src/owlly/stage/index.d.ts +4 -0
  244. package/lib/src/owlly/stage/index.js +7 -0
  245. package/lib/src/owlly/stage/index.js.map +1 -0
  246. package/lib/src/owlly/stage/owlly.d.ts +38 -0
  247. package/lib/src/owlly/stage/owlly.js +168 -0
  248. package/lib/src/owlly/stage/owlly.js.map +1 -0
  249. package/lib/src/owlly/stage/stage.d.ts +108 -0
  250. package/lib/src/owlly/stage/stage.js +235 -0
  251. package/lib/src/owlly/stage/stage.js.map +1 -0
  252. package/lib/src/owlly/utils/alignment-utils.d.ts +20 -0
  253. package/lib/src/owlly/utils/alignment-utils.js +64 -0
  254. package/lib/src/owlly/utils/alignment-utils.js.map +1 -0
  255. package/lib/src/owlly/utils/basic-calc.d.ts +18 -0
  256. package/lib/src/owlly/utils/basic-calc.js +130 -0
  257. package/lib/src/owlly/utils/basic-calc.js.map +1 -0
  258. package/lib/src/owlly/utils/basic-tools.d.ts +71 -0
  259. package/lib/src/owlly/utils/basic-tools.js +236 -0
  260. package/lib/src/owlly/utils/basic-tools.js.map +1 -0
  261. package/lib/src/owlly/utils/bvh-tree.d.ts +105 -0
  262. package/lib/src/owlly/utils/bvh-tree.js +540 -0
  263. package/lib/src/owlly/utils/bvh-tree.js.map +1 -0
  264. package/lib/src/owlly/utils/camera.d.ts +37 -0
  265. package/lib/src/owlly/utils/camera.js +51 -0
  266. package/lib/src/owlly/utils/camera.js.map +1 -0
  267. package/lib/src/owlly/utils/cube-texture-cache.d.ts +25 -0
  268. package/lib/src/owlly/utils/cube-texture-cache.js +144 -0
  269. package/lib/src/owlly/utils/cube-texture-cache.js.map +1 -0
  270. package/lib/src/owlly/utils/device-utils.d.ts +18 -0
  271. package/lib/src/owlly/utils/device-utils.js +42 -0
  272. package/lib/src/owlly/utils/device-utils.js.map +1 -0
  273. package/lib/src/owlly/utils/environment-utils.d.ts +37 -0
  274. package/lib/src/owlly/utils/environment-utils.js +74 -0
  275. package/lib/src/owlly/utils/environment-utils.js.map +1 -0
  276. package/lib/src/owlly/utils/event-hub.d.ts +50 -0
  277. package/lib/src/owlly/utils/event-hub.js +107 -0
  278. package/lib/src/owlly/utils/event-hub.js.map +1 -0
  279. package/lib/src/owlly/utils/events.d.ts +219 -0
  280. package/lib/src/owlly/utils/events.js +220 -0
  281. package/lib/src/owlly/utils/events.js.map +1 -0
  282. package/lib/src/owlly/utils/geometry-utils.d.ts +119 -0
  283. package/lib/src/owlly/utils/geometry-utils.js +623 -0
  284. package/lib/src/owlly/utils/geometry-utils.js.map +1 -0
  285. package/lib/src/owlly/utils/helper.d.ts +6 -0
  286. package/lib/src/owlly/utils/helper.js +25 -0
  287. package/lib/src/owlly/utils/helper.js.map +1 -0
  288. package/lib/src/owlly/utils/index.d.ts +14 -0
  289. package/lib/src/owlly/utils/index.js +18 -0
  290. package/lib/src/owlly/utils/index.js.map +1 -0
  291. package/lib/src/owlly/utils/lru-cache.d.ts +26 -0
  292. package/lib/src/owlly/utils/lru-cache.js +110 -0
  293. package/lib/src/owlly/utils/lru-cache.js.map +1 -0
  294. package/lib/src/owlly/utils/map-utils.d.ts +7 -0
  295. package/lib/src/owlly/utils/map-utils.js +53 -0
  296. package/lib/src/owlly/utils/map-utils.js.map +1 -0
  297. package/lib/src/owlly/utils/number-utils.d.ts +8 -0
  298. package/lib/src/owlly/utils/number-utils.js +73 -0
  299. package/lib/src/owlly/utils/number-utils.js.map +1 -0
  300. package/lib/src/owlly/utils/panorama-model-util.d.ts +46 -0
  301. package/lib/src/owlly/utils/panorama-model-util.js +246 -0
  302. package/lib/src/owlly/utils/panorama-model-util.js.map +1 -0
  303. package/lib/src/owlly/utils/path-utils.d.ts +80 -0
  304. package/lib/src/owlly/utils/path-utils.js +729 -0
  305. package/lib/src/owlly/utils/path-utils.js.map +1 -0
  306. package/lib/src/owlly/utils/svgutils.d.ts +138 -0
  307. package/lib/src/owlly/utils/svgutils.js +562 -0
  308. package/lib/src/owlly/utils/svgutils.js.map +1 -0
  309. package/lib/src/owlly/utils/texture-cache.d.ts +29 -0
  310. package/lib/src/owlly/utils/texture-cache.js +116 -0
  311. package/lib/src/owlly/utils/texture-cache.js.map +1 -0
  312. package/lib/src/owlly/utils/tile-util.d.ts +187 -0
  313. package/lib/src/owlly/utils/tile-util.js +457 -0
  314. package/lib/src/owlly/utils/tile-util.js.map +1 -0
  315. package/lib/src/owlly/utils/time-profiler.d.ts +21 -0
  316. package/lib/src/owlly/utils/time-profiler.js +49 -0
  317. package/lib/src/owlly/utils/time-profiler.js.map +1 -0
  318. package/lib/src/owlly/view/__test__/perspective-view.spec.d.ts +0 -0
  319. package/lib/src/owlly/view/__test__/perspective-view.spec.js +22 -0
  320. package/lib/src/owlly/view/__test__/perspective-view.spec.js.map +1 -0
  321. package/lib/src/owlly/view/camera-view.d.ts +35 -0
  322. package/lib/src/owlly/view/camera-view.js +102 -0
  323. package/lib/src/owlly/view/camera-view.js.map +1 -0
  324. package/lib/src/owlly/view/index.d.ts +3 -0
  325. package/lib/src/owlly/view/index.js +6 -0
  326. package/lib/src/owlly/view/index.js.map +1 -0
  327. package/lib/src/owlly/view/orthographic-view.d.ts +40 -0
  328. package/lib/src/owlly/view/orthographic-view.js +95 -0
  329. package/lib/src/owlly/view/orthographic-view.js.map +1 -0
  330. package/lib/src/owlly/view/perspective-view.d.ts +40 -0
  331. package/lib/src/owlly/view/perspective-view.js +96 -0
  332. package/lib/src/owlly/view/perspective-view.js.map +1 -0
  333. package/lib/src/owlly/view/svg-map-view.d.ts +46 -0
  334. package/lib/src/owlly/view/svg-map-view.js +145 -0
  335. package/lib/src/owlly/view/svg-map-view.js.map +1 -0
  336. package/lib/src/owlly/view/view.d.ts +146 -0
  337. package/lib/src/owlly/view/view.js +318 -0
  338. package/lib/src/owlly/view/view.js.map +1 -0
  339. package/lib/src/web/main.centroid.d.ts +0 -0
  340. package/lib/src/web/main.centroid.js +74 -0
  341. package/lib/src/web/main.centroid.js.map +1 -0
  342. package/lib/src/web/main.hyma.meshline2d.d.ts +1 -0
  343. package/lib/src/web/main.hyma.meshline2d.js +76 -0
  344. package/lib/src/web/main.hyma.meshline2d.js.map +1 -0
  345. package/lib/src/web/main.jyfang.sample.d.ts +0 -0
  346. package/lib/src/web/main.jyfang.sample.js +122 -0
  347. package/lib/src/web/main.jyfang.sample.js.map +1 -0
  348. package/lib/src/web/main.rpeng.extrude.d.ts +1 -0
  349. package/lib/src/web/main.rpeng.extrude.js +180 -0
  350. package/lib/src/web/main.rpeng.extrude.js.map +1 -0
  351. package/lib/src/web/main.rpeng.mes.plane.d.ts +1 -0
  352. package/lib/src/web/main.rpeng.mes.plane.js +135 -0
  353. package/lib/src/web/main.rpeng.mes.plane.js.map +1 -0
  354. package/lib/src/web/main.rpeng.sample.d.ts +0 -0
  355. package/lib/src/web/main.rpeng.sample.js +318 -0
  356. package/lib/src/web/main.rpeng.sample.js.map +1 -0
  357. package/lib/src/web/main.rpeng.vr.d.ts +1 -0
  358. package/lib/src/web/main.rpeng.vr.js +141 -0
  359. package/lib/src/web/main.rpeng.vr.js.map +1 -0
  360. package/lib/src/web/main.sample.d.ts +1 -0
  361. package/lib/src/web/main.sample.js +52 -0
  362. package/lib/src/web/main.sample.js.map +1 -0
  363. package/lib/src/web/quattree.hyma.d.ts +0 -0
  364. package/lib/src/web/quattree.hyma.js +150 -0
  365. package/lib/src/web/quattree.hyma.js.map +1 -0
  366. package/lib/src/web/sensor-vr-plugin.d.ts +0 -0
  367. package/lib/src/web/sensor-vr-plugin.js +166 -0
  368. package/lib/src/web/sensor-vr-plugin.js.map +1 -0
  369. package/package.json +142 -0
  370. package/src/@types/SceneUtils.d.ts +9 -0
  371. package/src/@types/chaikin-smooth.d.ts +5 -0
  372. package/src/@types/global.d.ts +3 -0
  373. package/src/@types/snapsvg.d.ts +11 -0
  374. package/src/@types/svgson.d.ts +30 -0
  375. package/src/assets/favicon.ico +0 -0
  376. package/src/external/lines/line-geometry.ts +70 -0
  377. package/src/external/lines/line-material.ts +453 -0
  378. package/src/external/lines/line-segments-2.ts +194 -0
  379. package/src/external/lines/line-segments-geometry.ts +197 -0
  380. package/src/external/loaders/gltf-loader.ts +3004 -0
  381. package/src/external/orbit-controls.ts +1070 -0
  382. package/src/external/renderers/css-2d-renderer.ts +185 -0
  383. package/src/external/renderers/css-3d-renderer.ts +245 -0
  384. package/src/external/transform-controls.ts +1532 -0
  385. package/src/external/util/buffer-geometry-utils.ts +783 -0
  386. package/src/owlly/controller/aerial-element-controller.ts +277 -0
  387. package/src/owlly/controller/basic-controller.ts +1509 -0
  388. package/src/owlly/controller/camera-controller.ts +155 -0
  389. package/src/owlly/controller/controller.ts +76 -0
  390. package/src/owlly/controller/index.ts +15 -0
  391. package/src/owlly/controller/mouse-indicator-controller.ts +157 -0
  392. package/src/owlly/controller/orbit-control.ts +310 -0
  393. package/src/owlly/controller/panorama-adjust-controller.ts +183 -0
  394. package/src/owlly/controller/panorama-controller.ts +2234 -0
  395. package/src/owlly/controller/panorama-transform-controller.ts +151 -0
  396. package/src/owlly/controller/plane-controller.ts +222 -0
  397. package/src/owlly/controller/texture-controller.ts +949 -0
  398. package/src/owlly/controller/tile-panorama-controller.ts +1633 -0
  399. package/src/owlly/controller/transform-controller.ts +684 -0
  400. package/src/owlly/element/bottom-nav-element.ts +352 -0
  401. package/src/owlly/element/camera.ts +389 -0
  402. package/src/owlly/element/dom-2d-element.ts +88 -0
  403. package/src/owlly/element/dom-3d-element.ts +87 -0
  404. package/src/owlly/element/dom-label-2d.ts +497 -0
  405. package/src/owlly/element/element.ts +117 -0
  406. package/src/owlly/element/floor-model.ts +290 -0
  407. package/src/owlly/element/gif-kit/Gif.ts +509 -0
  408. package/src/owlly/element/gif-kit/GifColor.ts +44 -0
  409. package/src/owlly/element/gif-kit/GifCompressedCodesToByteArrayConverter.ts +56 -0
  410. package/src/owlly/element/gif-kit/GifFrame.ts +207 -0
  411. package/src/owlly/element/gif-kit/GifImage.ts +26 -0
  412. package/src/owlly/element/gif-kit/GifParser.ts +254 -0
  413. package/src/owlly/element/gif-kit/GifPresenter.ts +46 -0
  414. package/src/owlly/element/gif-kit/GifVersion.ts +12 -0
  415. package/src/owlly/element/gltf-mesh-element.ts +184 -0
  416. package/src/owlly/element/index.ts +25 -0
  417. package/src/owlly/element/map-kit/area.ts +232 -0
  418. package/src/owlly/element/map-kit/block-set.ts +102 -0
  419. package/src/owlly/element/map-kit/block.ts +417 -0
  420. package/src/owlly/element/map-kit/index.ts +6 -0
  421. package/src/owlly/element/map-kit/shape.ts +285 -0
  422. package/src/owlly/element/mesh-element.ts +94 -0
  423. package/src/owlly/element/mesh-line-2d.ts +1032 -0
  424. package/src/owlly/element/meshline-o.ts +802 -0
  425. package/src/owlly/element/panorama-group.ts +1250 -0
  426. package/src/owlly/element/panorama.ts +1044 -0
  427. package/src/owlly/element/path-group.ts +212 -0
  428. package/src/owlly/element/path.ts +727 -0
  429. package/src/owlly/element/placeable-2d.ts +627 -0
  430. package/src/owlly/element/polygon-mesh.ts +344 -0
  431. package/src/owlly/element/ring-element.ts +517 -0
  432. package/src/owlly/element/sphere-mesh.ts +96 -0
  433. package/src/owlly/element/svg-floor-model.ts +200 -0
  434. package/src/owlly/element/svg-floors.ts +121 -0
  435. package/src/owlly/element/tile-panorama-group.ts +1314 -0
  436. package/src/owlly/element/tile-panorama.ts +636 -0
  437. package/src/owlly/element/tile-plane.ts +430 -0
  438. package/src/owlly/element/video-element.ts +190 -0
  439. package/src/owlly/geometries/ExtrudeGeometry2.ts +255 -0
  440. package/src/owlly/index.ts +19 -0
  441. package/src/owlly/overlay/canvas-overlay.ts +642 -0
  442. package/src/owlly/overlay/css-2d-overlay.ts +48 -0
  443. package/src/owlly/overlay/css-3d-overlay.ts +50 -0
  444. package/src/owlly/overlay/index.ts +11 -0
  445. package/src/owlly/overlay/label-overlay.ts +419 -0
  446. package/src/owlly/overlay/overlay.ts +17 -0
  447. package/src/owlly/overlay/path-overlay.ts +170 -0
  448. package/src/owlly/overlay/path-overlay2.ts +149 -0
  449. package/src/owlly/overlay/poi-overlay-3d.ts +1759 -0
  450. package/src/owlly/overlay/poi-overlay.ts +1739 -0
  451. package/src/owlly/owlly-2d/index.ts +108 -0
  452. package/src/owlly/screen/index.ts +1 -0
  453. package/src/owlly/screen/screen.ts +323 -0
  454. package/src/owlly/stage/__test__/stage.spec.ts +15 -0
  455. package/src/owlly/stage/externals.ts +45 -0
  456. package/src/owlly/stage/index.ts +12 -0
  457. package/src/owlly/stage/owlly.ts +223 -0
  458. package/src/owlly/stage/stage.ts +274 -0
  459. package/src/owlly/utils/alignment-utils.ts +84 -0
  460. package/src/owlly/utils/basic-calc.ts +141 -0
  461. package/src/owlly/utils/basic-tools.ts +286 -0
  462. package/src/owlly/utils/bvh-tree.ts +695 -0
  463. package/src/owlly/utils/camera.ts +72 -0
  464. package/src/owlly/utils/cube-texture-cache.ts +155 -0
  465. package/src/owlly/utils/device-utils.ts +53 -0
  466. package/src/owlly/utils/environment-utils.ts +81 -0
  467. package/src/owlly/utils/event-hub.ts +120 -0
  468. package/src/owlly/utils/events.ts +266 -0
  469. package/src/owlly/utils/geometry-utils.ts +749 -0
  470. package/src/owlly/utils/helper.ts +33 -0
  471. package/src/owlly/utils/index.ts +17 -0
  472. package/src/owlly/utils/lru-cache.ts +126 -0
  473. package/src/owlly/utils/map-utils.ts +55 -0
  474. package/src/owlly/utils/number-utils.ts +75 -0
  475. package/src/owlly/utils/panorama-model-util.ts +255 -0
  476. package/src/owlly/utils/path-utils.ts +837 -0
  477. package/src/owlly/utils/svgutils.ts +732 -0
  478. package/src/owlly/utils/texture-cache.ts +132 -0
  479. package/src/owlly/utils/tile-util.ts +563 -0
  480. package/src/owlly/utils/time-profiler.ts +57 -0
  481. package/src/owlly/view/__test__/perspective-view.spec.ts +23 -0
  482. package/src/owlly/view/camera-view.ts +114 -0
  483. package/src/owlly/view/index.ts +5 -0
  484. package/src/owlly/view/orthographic-view.ts +124 -0
  485. package/src/owlly/view/perspective-view.ts +125 -0
  486. package/src/owlly/view/svg-map-view.ts +187 -0
  487. package/src/owlly/view/view.ts +409 -0
  488. package/src/public/js/jsmpeg.min.js +3129 -0
  489. package/src/web/index.html +52 -0
  490. package/src/web/main.centroid.ts +85 -0
  491. package/src/web/main.hyma.meshline2d.ts +84 -0
  492. package/src/web/main.jyfang.sample.ts +139 -0
  493. package/src/web/main.rpeng.extrude.ts +194 -0
  494. package/src/web/main.rpeng.mes.plane.ts +161 -0
  495. package/src/web/main.rpeng.sample.ts +345 -0
  496. package/src/web/main.rpeng.vr.ts +159 -0
  497. package/src/web/main.sample.ts +59 -0
  498. package/src/web/quattree.hyma.ts +163 -0
  499. package/src/web/sensor-vr-plugin.ts +201 -0
  500. package/src/web/testPixel.png +0 -0
@@ -0,0 +1,949 @@
1
+ /* eslint-disable no-continue */
2
+ /* eslint-disable no-await-in-loop */
3
+ import { Externals, NS_THREE } from '../stage/externals';
4
+ import { Controller, View } from '..';
5
+ import {
6
+ getTextPixel,
7
+ TEXT_SEGMENT,
8
+ TileUtil,
9
+ TileTextureInfo,
10
+ TEXT_MAX,
11
+ USE_CANVAS,
12
+ USE_TEXTURE_BLACK,
13
+ CubeFaceConfig,
14
+ } from '../utils/tile-util';
15
+
16
+ class TextureEventEnum {
17
+ static readonly TEXTURE_UPDATE: string = 'texture.update'
18
+ }
19
+
20
+ // const SHOW_CANVAS = false;
21
+ const DELETE_TIME = 30 * 60;
22
+
23
+ class TextureController extends Controller {
24
+ private static __instance: TextureController;
25
+
26
+ private view: View;
27
+
28
+ private _ctx: CanvasRenderingContext2D;
29
+
30
+ public textures: NS_THREE.Texture[];
31
+
32
+ private addingMap: Map<string, TileTextureInfo>;
33
+
34
+ private deletingMap: Map<string, TileTextureInfo>;
35
+
36
+ private loading: false;
37
+
38
+ private loadingMap: Map<string, TileTextureInfo>;
39
+
40
+ private loadedMap: Map<string, TileTextureInfo>;
41
+
42
+ private loadedImageDataMap: Map<string, ImageData>;
43
+
44
+ private loadedImageDataMap2: Map<string, HTMLImageElement>;
45
+
46
+ private textureInfoIds: string[][];
47
+
48
+ /** @ignore */
49
+ public textureMap: Map<string, TileTextureInfo>;
50
+
51
+ /** @ignore */
52
+ public context2ds: CanvasRenderingContext2D[];
53
+
54
+ // public initMap: Map<string, TileTextureInfo>;
55
+
56
+ // public isTest: boolean;
57
+
58
+ constructor() {
59
+ super();
60
+ // console.log('texture-contorller', 'constructor');
61
+ this.textures = [];
62
+ this.textureInfoIds = [];
63
+ this.addingMap = new Map<string, TileTextureInfo>();
64
+ this.deletingMap = new Map<string, TileTextureInfo>();
65
+ // this.initMap = new Map<string, TileTextureInfo>();
66
+ this.loadingMap = new Map<string, TileTextureInfo>();
67
+ this.loadedMap = new Map<string, TileTextureInfo>();
68
+ this.loadedImageDataMap = new Map<string, ImageData>();
69
+ this.textureMap = new Map<string, TileTextureInfo>();
70
+
71
+ this.loadedImageDataMap2 = new Map<string, HTMLImageElement>();
72
+ this.context2ds = [] as CanvasRenderingContext2D[];
73
+ }
74
+
75
+ /**
76
+ * 获取2d context
77
+ */
78
+ private get ctx(): CanvasRenderingContext2D {
79
+ if (!this._ctx) {
80
+ const ctx = this.getNewContext2d(getTextPixel());
81
+ if (ctx) { this._ctx = ctx; }
82
+ }
83
+ return this._ctx;
84
+ }
85
+
86
+ /**
87
+ * 获取固定大小的context2d
88
+ * @param size
89
+ * @returns
90
+ */
91
+ private getNewContext2d(size: number): CanvasRenderingContext2D | null {
92
+ // console.log('texture-contorller', 'getNewContext2d');
93
+
94
+ const canvas = document.createElement('canvas');
95
+ canvas.width = size;
96
+ canvas.height = size;
97
+ // if (SHOW_CANVAS) {
98
+ // const cantainer = document.getElementById('container');
99
+ // if (cantainer) {
100
+ // cantainer.appendChild(canvas);
101
+ // }
102
+ // }
103
+ const ctx = canvas.getContext('2d');
104
+ return ctx;
105
+ }
106
+
107
+ /**
108
+ * 获取context2d
109
+ * @param index
110
+ * @returns
111
+ */
112
+ private getContext2d(index: number): CanvasRenderingContext2D {
113
+ // console.log('texture-contorller', 'getContext2d');
114
+
115
+ let ctx = this.context2ds[index];
116
+ if (!ctx) {
117
+ const newCtx = this.getNewContext2d(getTextPixel() * TEXT_SEGMENT);
118
+ if (newCtx) {
119
+ ctx = this.context2ds[index] = newCtx;
120
+ }
121
+ }
122
+ return ctx;
123
+ }
124
+
125
+ /**
126
+ * 绑定视图
127
+ * @param view 视图
128
+ */
129
+ public bindView(view: View): void {
130
+ this.view = view;
131
+ }
132
+
133
+ /**
134
+ * 添加纹理信息
135
+ * @param info 纹理信息
136
+ */
137
+ public addTexture(info: TileTextureInfo): void {
138
+ const id = info.id;
139
+ // console.log('addTexture', id);
140
+ if (this.textureMap.has(id)) {
141
+ if (this.deletingMap.has(id)) {
142
+ this.deletingMap.delete(id);
143
+ }
144
+ } else if (this.loadingMap.has(id)) {
145
+ this.loadingMap.set(id, info);
146
+ } else if (this.loadedMap.has(id)) {
147
+ this.loadedMap.set(id, info);
148
+ } else {
149
+ this.addingMap.set(id, info);
150
+ }
151
+ }
152
+
153
+ /**
154
+ * 根据pid获取已加载纹理的一个立方体纹理
155
+ * @ignore
156
+ * @param pid
157
+ * @returns
158
+ */
159
+ public getCubeTextureByPid(pid: number): NS_THREE.CubeTexture | null {
160
+ const ref = [] as (ImageData | HTMLImageElement)[];
161
+ const { loadedImageDataMap, loadedImageDataMap2 } = this;
162
+ CubeFaceConfig.forEach((config) => {
163
+ const id = TileUtil.getTileInfoId(pid + (config.face + 1) / 10, 0, 0);
164
+ if (USE_CANVAS) {
165
+ const img = loadedImageDataMap2.get(id);
166
+ if (img) {
167
+ ref.push(img);
168
+ }
169
+ } else {
170
+ const imgData = loadedImageDataMap.get(id);
171
+ if (imgData) {
172
+ ref.push(imgData);
173
+ }
174
+ }
175
+ });
176
+ const { THREE } = Externals.getInstance();
177
+ if (ref.length === 6) {
178
+ const cubeText = new THREE.CubeTexture(ref);
179
+ cubeText.needsUpdate = true;
180
+ return cubeText;
181
+ }
182
+ return null;
183
+ }
184
+
185
+ /**
186
+ * 初始化纹理信息
187
+ * @ignore
188
+ * @param infos
189
+ * @returns 0为初始化失败,1为初始化成功
190
+ */
191
+ public async initTextures(infos: TileTextureInfo[]): Promise<number> {
192
+ // console.log('texture-contorller', 'initTexture');
193
+
194
+ const initMap = new Map<string, TileTextureInfo>();
195
+ for (let i = 0; i < infos.length; i++) {
196
+ const info = infos[i];
197
+ const id = info.id;
198
+ if (!this.addingMap.has(id)) {
199
+ if (this.deletingMap.has(id)) {
200
+ initMap.set(id, info);
201
+ this.deletingMap.delete(id);
202
+ } else if (!this.textureMap.has(id)) {
203
+ // this.addingMap.set(id, info);
204
+ initMap.set(id, info);
205
+ }
206
+ } else {
207
+ initMap.set(id, info);
208
+ this.addingMap.delete(id);
209
+ }
210
+ }
211
+ let res = 1;
212
+ if (initMap.size) {
213
+ res = await this.initTexturesAsync(initMap);
214
+ }
215
+ if (res) {
216
+ // console.log('texture-contorller', 'initTexture', 1);
217
+ while (initMap.size) {
218
+ const updates = [] as TileTextureInfo[];
219
+ const deletes = [] as TileTextureInfo[];
220
+ // console.log('texture-contorller', 'initTexture', 2);
221
+
222
+ const isUpdate = this.updateTextures(updates, deletes, initMap);
223
+ // console.log('texture-contorller', 'initTexture', updates, deletes, isUpdate, 3);
224
+
225
+ if (isUpdate) {
226
+ this.emit(TextureEventEnum.TEXTURE_UPDATE, updates, deletes);
227
+ }
228
+ // console.log('texture-contorller', 'initTexture', 4);
229
+ }
230
+ }
231
+ return res;
232
+ }
233
+
234
+ /**
235
+ * 删除纹理map
236
+ * @param map 要删除的信息图
237
+ * @param deleteFrize 是否删除冻结信息
238
+ */
239
+ public deteteTextureMap(map: Map<string, TileTextureInfo>, deleteFrize?: boolean): void {
240
+ // console.log('texture-contorller', 'deleteTexture');
241
+ map.forEach((info) => {
242
+ this.deleteTexture(info, deleteFrize);
243
+ });
244
+ }
245
+
246
+ /**
247
+ * 删除纹理
248
+ * @param info 纹理信息
249
+ * @param deleteFrize 是否删除冻结信息
250
+ */
251
+ public deleteTexture(info: TileTextureInfo, deleteFrize?: boolean): void {
252
+ // console.log('texture-contorller', 'deleteTexture');
253
+
254
+ const id = info.id;
255
+ if (!this.deletingMap.has(id)) {
256
+ if (this.addingMap.has(id)) {
257
+ this.addingMap.delete(id);
258
+ } else if (this.loadingMap.has(id)) {
259
+ this.loadingMap.delete(id);
260
+ } else if (this.loadedMap.has(id)) {
261
+ this.loadedMap.delete(id);
262
+ this.loadedImageDataMap.delete(id);
263
+ } else if (this.textureMap.has(id)) {
264
+ info.time = 0;
265
+ if (deleteFrize || !info.frize) { this.deletingMap.set(id, info); }
266
+ }
267
+ }
268
+ }
269
+
270
+ /**
271
+ * 获取纹理信息列表
272
+ * @returns
273
+ */
274
+ public getTextureInfos(): TileTextureInfo[] {
275
+ // console.log('texture-contorller', 'getTextureInfos');
276
+
277
+ const ts = [] as TileTextureInfo[];
278
+ for (let i = 0; i < this.textures.length; i++) {
279
+ const infoIds = this.textureInfoIds[i];
280
+ for (let j = 0; j < infoIds.length; j++) {
281
+ if (infoIds[j]) {
282
+ const info = this.textureMap.get(infoIds[j]);
283
+ if (info) {
284
+ ts.push(info);
285
+ }
286
+ }
287
+ }
288
+ }
289
+ return ts;
290
+ }
291
+
292
+ /**
293
+ * 异步加载纹理
294
+ */
295
+ public async loadTexturesAsync(): Promise<void> {
296
+ // console.log('texture-contorller', 'loadTexturesAsync');
297
+
298
+ if (!this.loading) {
299
+ const {
300
+ addingMap, loadingMap, loadedMap, loadedImageDataMap, loadedImageDataMap2,
301
+ } = this;
302
+ const addings = Array.from(addingMap);
303
+ addings.sort((adding1, adding2) => adding1[1].centerDis - adding2[1].centerDis);
304
+ while (addings[0]) {
305
+ const adding = addings.shift();
306
+ if (!adding) continue;
307
+ const infoKey = adding[0];
308
+ if (!infoKey) continue;
309
+ if (adding) {
310
+ const info = addingMap.get(infoKey);
311
+ if (info) {
312
+ addingMap.delete(infoKey);
313
+ loadingMap.set(infoKey, info);
314
+ const imgInfo = TileUtil.getImageInfo(info);
315
+ if (USE_CANVAS) {
316
+ // eslint-disable-next-line no-await-in-loop
317
+ const image = await this.loadImgAsync2(imgInfo.url);
318
+ if (loadingMap.has(infoKey)) {
319
+ loadingMap.delete(infoKey);
320
+ loadedMap.set(infoKey, info);
321
+ loadedImageDataMap2.set(infoKey, image);
322
+ }
323
+ } else {
324
+ // eslint-disable-next-line no-await-in-loop
325
+ const imgData = await this.loadImgAsync(imgInfo.url);
326
+ if (imgData) {
327
+ if (loadingMap.has(infoKey)) {
328
+ loadingMap.delete(infoKey);
329
+ loadedMap.set(infoKey, info);
330
+ loadedImageDataMap.set(infoKey, imgData);
331
+ }
332
+ }
333
+ }
334
+ }
335
+ }
336
+ }
337
+ this.loading = false;
338
+ }
339
+ }
340
+
341
+ /**
342
+ * 异步初始化纹理
343
+ * @param infoMap 纹理信息图
344
+ * @returns 0为初始化失败,1为初始化成功
345
+ */
346
+ public async initTexturesAsync(infoMap: Map<string, TileTextureInfo>): Promise<number> {
347
+ return new Promise((resolve: Function) => {
348
+ const { loadedImageDataMap, loadedImageDataMap2 } = this;
349
+ const keys = Array.from(infoMap.keys());
350
+ const count = keys.length;
351
+ if (count < 1) {
352
+ resolve();
353
+ }
354
+ let index = 0;
355
+ const success = (): void => {
356
+ index++;
357
+ if (index >= count) {
358
+ resolve(1);
359
+ }
360
+ };
361
+ const error = (): void => {
362
+ // eslint-disable-next-line prefer-promise-reject-errors
363
+ resolve(0);
364
+ };
365
+ for (let i = 0; i < count; i++) {
366
+ const infoKey = keys[i];
367
+ const info = infoMap.get(infoKey);
368
+ if (info) {
369
+ const imgInfo = TileUtil.getImageInfo(info);
370
+ const url = imgInfo.url;
371
+ if (USE_CANVAS) {
372
+ this.loadImgAsync2(url).then((img: HTMLImageElement) => {
373
+ loadedImageDataMap2.set(infoKey, img);
374
+ success();
375
+ }).catch(error);
376
+ } else {
377
+ this.loadImgAsync(url).then((imgData) => {
378
+ loadedImageDataMap.set(infoKey, imgData);
379
+ success();
380
+ }).catch(error);
381
+ }
382
+ }
383
+ }
384
+ });
385
+ }
386
+
387
+ /**
388
+ * 根据pid删除纹理
389
+ * @param pid
390
+ * @param deleteFrize
391
+ */
392
+ public deleteTexturesByPid(pid: number, deleteFrize?: boolean): void {
393
+ const idStart = `${pid}.`;
394
+ const {
395
+ textureInfoIds, textureMap, addingMap, deletingMap, loadedImageDataMap, loadedMap, loadingMap,
396
+ } = this;
397
+
398
+ // console.log('delete pid', pid);
399
+ // console.log('delete before', Array.from(textureMap.keys()));
400
+ textureMap.forEach((info, id) => {
401
+ if (id.startsWith(idStart)) {
402
+ if (deleteFrize || !info.frize) {
403
+ const { x, y } = TileUtil.getXY(info.textureIndex, 100);
404
+ delete textureInfoIds[y][x];
405
+ textureMap.delete(id);
406
+ if (loadedImageDataMap.has(id)) {
407
+ this.loadedImageDataMap.delete(id);
408
+ }
409
+ }
410
+ }
411
+ });
412
+ // console.log('delete after', Array.from(textureMap.keys()));
413
+ addingMap.forEach((info, id) => {
414
+ if (id.startsWith(idStart)) {
415
+ if (deleteFrize || !info.frize) {
416
+ addingMap.delete(id);
417
+ }
418
+ }
419
+ });
420
+ // console.log('addingmap', Array.from(addingMap.keys()));
421
+ deletingMap.forEach((info, id) => {
422
+ if (id.startsWith(idStart)) {
423
+ if (deleteFrize || !info.frize) {
424
+ deletingMap.delete(id);
425
+ }
426
+ }
427
+ });
428
+ // console.log('deletingMap', Array.from(deletingMap.keys()));
429
+ loadedMap.forEach((info, id) => {
430
+ if (id.startsWith(idStart)) {
431
+ if (deleteFrize || !info.frize) {
432
+ loadedMap.delete(id);
433
+ loadedImageDataMap.delete(id);
434
+ }
435
+ }
436
+ });
437
+ // console.log('loadedMap', Array.from(loadedMap.keys()));
438
+ loadingMap.forEach((info, id) => {
439
+ if (id.startsWith(idStart)) {
440
+ if (deleteFrize || !info.frize) {
441
+ loadingMap.delete(id);
442
+ }
443
+ }
444
+ });
445
+ // console.log('loadingMap', Array.from(loadingMap.keys()));
446
+ }
447
+
448
+ /**
449
+ * 更新纹理信息
450
+ * @param updates 更新列表,外部传入
451
+ * @param deletes 删除列表,外部传入
452
+ * @param initMap 初始化加载图
453
+ * @returns
454
+ */
455
+ private updateTextures(
456
+ updates: TileTextureInfo[],
457
+ deletes: TileTextureInfo[],
458
+ initMap?: Map<string, TileTextureInfo>,
459
+ ): boolean {
460
+ // console.log('texture-contorller', 'updateTextures');
461
+
462
+ // 判定是否有更新的texture,更新到一张纹理并通知当前纹理对象内容。
463
+ const {
464
+ loadedMap, deletingMap, textureInfoIds, textures, loadedImageDataMap, loadedImageDataMap2,
465
+ } = this;
466
+ const loadMap = initMap || loadedMap;
467
+ const { maxIndex, create } = this.testEmptyMaxCount(textureInfoIds, deletingMap, loadMap);
468
+ if (maxIndex === -1) {
469
+ return false;
470
+ }
471
+ // console.log('updateTextures', Array.from(loadedMap.keys()));
472
+ if (create) {
473
+ if (USE_CANVAS) {
474
+ textures[maxIndex] = this.createCanvasTexture(maxIndex);
475
+ } else {
476
+ textures[maxIndex] = this.createMergeTexture();
477
+ }
478
+ }
479
+ deletingMap.forEach((info, id) => {
480
+ const { x, y } = TileUtil.getXY(info.textureIndex, 100);
481
+ if (y === maxIndex) {
482
+ this.textureMap.delete(id);
483
+ delete textureInfoIds[y][x];
484
+ deletes.push(info);
485
+ if (USE_CANVAS) {
486
+ loadedImageDataMap2.delete(id);
487
+ }
488
+ }
489
+ });
490
+ deletes.forEach((info) => {
491
+ deletingMap.delete(info.id);
492
+ });
493
+ let tList = textureInfoIds[maxIndex];
494
+ if (!tList) {
495
+ tList = textureInfoIds[maxIndex] = [] as string[];
496
+ }
497
+ const count = TEXT_SEGMENT * TEXT_SEGMENT;
498
+ const loadedList = Array.from(loadMap);
499
+ loadedList.sort((a, b) => a[1].centerDis - b[1].centerDis);
500
+ let textureChangeCount = 0;
501
+ for (let i = 0; i < count; i++) {
502
+ if (!loadedList[0]) {
503
+ break;
504
+ }
505
+ const t = tList[i];
506
+ if (!t) {
507
+ if (textureChangeCount >= TileUtil.updateTextureMax && !initMap) {
508
+ break;
509
+ }
510
+ const [tId, tInfo] = loadedList.shift() as [string, TileTextureInfo];
511
+ loadMap.delete(tId);
512
+ tInfo.textureIndex = maxIndex * 100 + i;
513
+ tList[i] = tId;
514
+ this.textureMap.set(tId, tInfo);
515
+ updates.push(tInfo);
516
+ if (USE_CANVAS) {
517
+ const image = loadedImageDataMap2.get(tId) as HTMLImageElement;
518
+ const ctx = this.getContext2d(maxIndex);
519
+ this.updateCanvasTexture(textures[maxIndex], ctx, image, i);
520
+ } else {
521
+ const imageData = loadedImageDataMap.get(tId) as ImageData;
522
+ this.updateMergeTexture(textures[maxIndex] as NS_THREE.DataTexture, imageData, i);
523
+ if (!tInfo.frize) { loadedImageDataMap.delete(tId); }
524
+ }
525
+
526
+ // if (maxIndex === 0) {
527
+ // this.drawingImage(textures[maxIndex]);
528
+ // }
529
+ textureChangeCount++;
530
+ }
531
+ }
532
+ return updates.length > 0 || deletes.length > 0;
533
+ }
534
+
535
+ // public drawingImage(texture: NS_THREE.DataTexture): void {
536
+ // const context2d = (window as any).context2d;
537
+ // if (context2d) {
538
+ // const image = new ImageData(2048, 2048);
539
+ // image.data.set(texture.image.data);
540
+ // context2d.putImageData(image, 0, 0);
541
+ // // context2d.createPattern(texture, 'no-repeat');
542
+ // }
543
+ // }
544
+
545
+ /**
546
+ * 测试空节点最大数量
547
+ * @param infos
548
+ * @param deletings
549
+ * @param loadedMap
550
+ * @returns
551
+ */
552
+ private testEmptyMaxCount(
553
+ infos: string[][],
554
+ deletings: Map<string, TileTextureInfo>,
555
+ loadedMap: Map<string, TileTextureInfo>,
556
+ ): {
557
+ maxIndex: number; maxCount: number; create: boolean;
558
+ } {
559
+ // console.log('texture-contorller', 'testEmptyMaxCount');
560
+
561
+ if (!deletings.size && !loadedMap.size) {
562
+ return {
563
+ maxIndex: -1, maxCount: 0, create: false,
564
+ };
565
+ }
566
+ const index = [] as number[];
567
+ const infosCount = infos.length;
568
+ for (let i = 0; i < infosCount; i++) {
569
+ index[i] = 0;
570
+ }
571
+ // const willDelete = [] as TileTextureInfo[][];
572
+ const deleteIndex = Array.from(index);
573
+ if (deletings) {
574
+ deletings.forEach((info) => {
575
+ if (info.time > DELETE_TIME) { // 到达删除时间的info加入删除计数
576
+ const { y } = TileUtil.getXY(info.textureIndex, 100);
577
+ deleteIndex[y]++;
578
+ }
579
+ });
580
+ }
581
+
582
+ const count = TEXT_SEGMENT * TEXT_SEGMENT;
583
+ for (let i = 0; i < infosCount; i++) {
584
+ const info = infos[i];
585
+ for (let j = 0; j < count; j++) {
586
+ if (info[j]) {
587
+ index[i]++;
588
+ }
589
+ }
590
+ }
591
+ const t = index.map((value, i) => count - value + (deleteIndex[i] || 0));
592
+ const loadedSize = loadedMap.size;
593
+ let maxCount = 0;
594
+ let maxIndex = 0;
595
+ for (let i = 0; i < t.length; i++) {
596
+ const tc = t[i];
597
+ const dc = deleteIndex[i];
598
+ if (loadedSize) {
599
+ if (maxCount >= TileUtil.updateTextureMax || maxCount >= loadedSize) {
600
+ break;
601
+ }
602
+ if (tc > maxCount) {
603
+ maxCount = tc;
604
+ maxIndex = i;
605
+ }
606
+ } else if (dc > maxCount) {
607
+ maxCount = dc;
608
+ maxIndex = i;
609
+ }
610
+ }
611
+ let create = false;
612
+ if (maxCount === 0) {
613
+ maxIndex = infos.length;
614
+ if (maxIndex >= TEXT_MAX) {
615
+ // 如果超过纹理上限, 则按时间删除时间大小排序
616
+ let willDeleteInfo: TileTextureInfo | undefined;
617
+ deletings.forEach((info) => {
618
+ if (!willDeleteInfo || willDeleteInfo.time > info.time) {
619
+ willDeleteInfo = info;
620
+ }
621
+ });
622
+ if (willDeleteInfo) {
623
+ maxIndex = TileUtil.getXY(willDeleteInfo.textureIndex, 100).y;
624
+ maxCount = 1;
625
+ } else {
626
+ // 没有适合删除的
627
+ maxIndex = -1;
628
+ maxCount = 0;
629
+ }
630
+ } else if (loadedSize === 0) {
631
+ maxIndex = -1;
632
+ maxCount = 0;
633
+ create = false;
634
+ } else {
635
+ maxCount = count;
636
+ create = true;
637
+ }
638
+ }
639
+ return { maxIndex, maxCount, create };
640
+ }
641
+
642
+ /**
643
+ * 创建合并纹理
644
+ * @returns
645
+ */
646
+ private createMergeTexture(): NS_THREE.DataTexture {
647
+ // console.log('texture-contorller', 'createMergeTexture');
648
+ const { THREE } = Externals.getInstance();
649
+ const TEXT_PIXEL = getTextPixel();
650
+ const buffer = new Uint8Array(TEXT_PIXEL * TEXT_PIXEL * TEXT_SEGMENT * TEXT_SEGMENT * 4);
651
+ const texture = new THREE.DataTexture(buffer, TEXT_PIXEL * TEXT_SEGMENT, TEXT_PIXEL * TEXT_SEGMENT);
652
+ if (USE_TEXTURE_BLACK) {
653
+ const count = buffer.length;
654
+ for (let i = 0; i < count; i += 4) {
655
+ buffer[i + 3] = 1;
656
+ }
657
+ }
658
+ return texture;
659
+ }
660
+
661
+ /**
662
+ * 创建canvas纹理
663
+ * @param index 下标
664
+ * @returns
665
+ */
666
+ private createCanvasTexture(index: number): NS_THREE.Texture {
667
+ // console.log('texture-contorller', 'createCanvasTexture');
668
+ const { THREE } = Externals.getInstance();
669
+ const ctx = this.getContext2d(index);
670
+ if (USE_TEXTURE_BLACK) {
671
+ ctx.canvas.style.backgroundColor = '#000';
672
+ }
673
+ const texture = new THREE.Texture(ctx.canvas);
674
+ return texture;
675
+ }
676
+
677
+ /**
678
+ * 更新canvas纹理
679
+ * @param mergeTexture
680
+ * @param ctx
681
+ * @param image
682
+ * @param index
683
+ */
684
+ private updateCanvasTexture(
685
+ mergeTexture: NS_THREE.Texture, ctx: CanvasRenderingContext2D, image: HTMLImageElement, index: number,
686
+ ): void {
687
+ // console.log('texture-contorller', 'updateCanvasTexture');
688
+
689
+ const { x, y } = TileUtil.getXY(index, TEXT_SEGMENT);
690
+ const TEXT_PIXEL = getTextPixel();
691
+ ctx.drawImage(image, x * TEXT_PIXEL, (TEXT_SEGMENT - 1 - y) * TEXT_PIXEL);
692
+ mergeTexture.needsUpdate = true;
693
+ }
694
+
695
+ /**
696
+ * 更新合并纹理
697
+ * @param mergeTexture 合并纹理
698
+ * @param imaData 图片数据
699
+ * @param index 下标
700
+ */
701
+ private updateMergeTexture(mergeTexture: NS_THREE.DataTexture, imaData: ImageData, index: number): void {
702
+ // console.log('texture-contorller', 'updateMergeTexture');
703
+
704
+ const buffer = mergeTexture.image.data;
705
+ const tBuffer = imaData.data;
706
+ const { x, y } = TileUtil.getXY(index, TEXT_SEGMENT);
707
+ const TEXT_PIXEL = getTextPixel();
708
+ const length = TEXT_SEGMENT * TEXT_PIXEL * 4;
709
+ const tLength = TEXT_PIXEL * 4;
710
+ const base = y * length * TEXT_PIXEL + x * tLength;
711
+ for (let i = 0; i < TEXT_PIXEL; i++) {
712
+ for (let j = 0; j < TEXT_PIXEL; j++) {
713
+ const bi = base + i * length + j * 4;
714
+ const tbi = i * tLength + j * 4;
715
+ buffer[bi] = tBuffer[tbi];
716
+ buffer[bi + 1] = tBuffer[tbi + 1];
717
+ buffer[bi + 2] = tBuffer[tbi + 2];
718
+ buffer[bi + 3] = tBuffer[tbi + 3];
719
+ }
720
+ }
721
+ mergeTexture.needsUpdate = true;
722
+ }
723
+
724
+ /**
725
+ * 将texture2 index2位置的纹理合并到textur1 index1的位置上
726
+ * @param mergeTexture1 纹理1
727
+ * @param index1 下标1
728
+ * @param mergeTexture2 纹理2
729
+ * @param index2 下标2
730
+ */
731
+ private updateMergeTexture2(
732
+ mergeTexture1: NS_THREE.DataTexture,
733
+ index1: number,
734
+ mergeTexture2: NS_THREE.DataTexture,
735
+ index2: number,
736
+ ): void {
737
+ // console.log('texture-contorller', 'updateMergeTexture2');
738
+
739
+ const buffer1 = mergeTexture1.image.data;
740
+ const buffer2 = mergeTexture2.image.data;
741
+ const { x: x1, y: y1 } = TileUtil.getXY(index1, TEXT_SEGMENT);
742
+ const { x: x2, y: y2 } = TileUtil.getXY(index2, TEXT_SEGMENT);
743
+ const TEXT_PIXEL = getTextPixel();
744
+ const length = TEXT_SEGMENT * TEXT_PIXEL * 4;
745
+ const tLength = TEXT_PIXEL * 4;
746
+ const base1 = y1 * length * TEXT_PIXEL + x1 * tLength;
747
+ const base2 = y2 * length * TEXT_PIXEL + x2 * tLength;
748
+ for (let i = 0; i < TEXT_PIXEL; i++) {
749
+ for (let j = 0; j < TEXT_PIXEL; j++) {
750
+ const b1 = base1 + i * length + j * 4;
751
+ const b2 = base2 + i * length + j * 4;
752
+ buffer1[b1] = buffer2[b2];
753
+ buffer1[b1 + 1] = buffer2[b2 + 1];
754
+ buffer1[b1 + 2] = buffer2[b2 + 2];
755
+ buffer1[b1 + 3] = buffer2[b2 + 3];
756
+ }
757
+ }
758
+ mergeTexture1.needsUpdate = true;
759
+ }
760
+
761
+ /**
762
+ * 异步加载图片
763
+ * @param url 图片url
764
+ * @returns 图片纹理信息
765
+ */
766
+ private loadImgAsync(url: string): Promise<ImageData> {
767
+ // console.log('texture-contorller', 'loadImgAsync2');
768
+ const img = new Image();
769
+ img.setAttribute('crossOrigin', 'anonymous');
770
+ const { ctx } = this;
771
+ return new Promise(((resolve, reject) => {
772
+ img.onload = (): void => {
773
+ ctx.drawImage(img, 0, 0);
774
+ const TEXT_PIXEL = getTextPixel();
775
+ // console.time(`${url}get`);
776
+ const imgData = ctx.getImageData(0, 0, TEXT_PIXEL, TEXT_PIXEL);
777
+ // console.timeEnd(`${url}get`);
778
+
779
+ resolve(imgData);
780
+ };
781
+ img.onerror = (): void => {
782
+ reject();
783
+ };
784
+ img.src = url;
785
+ }));
786
+ }
787
+
788
+ /**
789
+ * 异步加载图片2
790
+ * @param url 图片url
791
+ * @returns 图片元素
792
+ */
793
+ private loadImgAsync2(url: string): Promise<HTMLImageElement> {
794
+ // console.log('texture-contorller', 'loadImgAsync2');
795
+ const img = new Image();
796
+ img.setAttribute('crossOrigin', 'anonymous');
797
+ return new Promise((resolve, reject) => {
798
+ img.onload = (): void => {
799
+ resolve(img);
800
+ };
801
+ img.onerror = (): void => {
802
+ reject();
803
+ };
804
+ img.src = url;
805
+ });
806
+ }
807
+
808
+ /**
809
+ * 更新删除的纹理
810
+ */
811
+ private updateDeletingTextures(): void {
812
+ // console.log('texture-contorller', 'updateDeletingTextures');
813
+
814
+ const { deletingMap } = this;
815
+ deletingMap.forEach((info) => {
816
+ info.time++;
817
+ });
818
+ }
819
+
820
+ /**
821
+ * 格式化纹理
822
+ * @param updates
823
+ * @returns
824
+ */
825
+ private formatTextures(updates: TileTextureInfo[]): boolean {
826
+ // console.log('texture-contorller', 'formatTextures');
827
+ const {
828
+ textureInfoIds, textureMap, textures, loadedImageDataMap2,
829
+ } = this;
830
+ const count = TEXT_SEGMENT * TEXT_SEGMENT;
831
+ const infoCount = textureInfoIds.length;
832
+ let i = 0;
833
+ let j = infoCount - 1;
834
+ let ii = 0;
835
+ let jj = count;
836
+ let tId: string | undefined;
837
+ let changeTextureIndex = -1;
838
+ let willBreak = false;
839
+ while (i < j) {
840
+ if (tId) {
841
+ if (willBreak) {
842
+ break;
843
+ }
844
+ const iId = textureInfoIds[i][ii];
845
+ if (!iId) {
846
+ textureInfoIds[i][ii] = tId;
847
+ delete textureInfoIds[j][jj];
848
+ const info = textureMap.get(tId);
849
+ if (info) {
850
+ updates.push(info);
851
+ info.textureIndex = i * 100 + ii;
852
+ if (USE_CANVAS) {
853
+ const img = loadedImageDataMap2.get(info.id);
854
+ if (img) {
855
+ this.updateCanvasTexture(textures[i], this.getContext2d(i), img, ii);
856
+ }
857
+ } else {
858
+ this.updateMergeTexture2(
859
+ textures[i] as NS_THREE.DataTexture, ii, textures[j] as NS_THREE.DataTexture, jj,
860
+ );
861
+ }
862
+ if (changeTextureIndex === -1) {
863
+ changeTextureIndex = i;
864
+ } else if (changeTextureIndex !== i) {
865
+ // 一次更新一个纹理
866
+ willBreak = true;
867
+ }
868
+ }
869
+ tId = undefined;
870
+ }
871
+ ii++;
872
+ if (ii >= count) {
873
+ i++;
874
+ ii = 0;
875
+ }
876
+ } else {
877
+ jj--;
878
+ if (jj < 0) {
879
+ j--;
880
+ jj = count;
881
+ }
882
+ tId = textureInfoIds[j][jj];
883
+ }
884
+ }
885
+ if (j < infoCount - 1) {
886
+ // 删除多余纹理
887
+ textureInfoIds.splice(j + 1, infoCount - 1 - j);
888
+ const deleteTextures = textures.splice(j + 1, infoCount - 1 - j);
889
+ if (USE_CANVAS) {
890
+ // const ctxs = this.context2ds.splice(j + 1, infoCount - 1 - j);
891
+ // ctxs.forEach((ctx) => {
892
+ // const canvas = ctx.canvas;
893
+ // // if (SHOW_CANVAS) {
894
+ // // if (canvas.parentElement) {
895
+ // // canvas.parentElement.removeChild(canvas);
896
+ // // }
897
+ // // }
898
+ // });
899
+ deleteTextures.forEach((texture) => {
900
+ texture.dispose();
901
+ });
902
+ }
903
+ // TODO(rpeng) 手动dispose
904
+ // const deleteTextures = textures.splice(j + 1, infoCount - 1 - j);
905
+ // deleteTextures.forEach((texture) => {
906
+ // texture.dispose();
907
+ // });
908
+ }
909
+ return updates.length !== 0;
910
+ }
911
+
912
+ /**
913
+ * 更新
914
+ * @ignore
915
+ * @returns
916
+ */
917
+ public update(): boolean {
918
+ // console.log('texture-contorller', 'update');
919
+ this.loadTexturesAsync();
920
+ this.updateDeletingTextures();
921
+ const updates = [] as TileTextureInfo[];
922
+ const deletes = [] as TileTextureInfo[];
923
+ let isUpdate = this.updateTextures(updates, deletes);
924
+ if (!isUpdate) {
925
+ // 如果没有纹理更新,进行纹理重组计算
926
+ isUpdate = this.formatTextures(updates);
927
+ }
928
+ // if (updates.length || deletes.length) {
929
+ // // //console.log('texture', 'updates.length', updates.length, 'deletes.length', deletes.length);
930
+ // }
931
+ if (isUpdate) {
932
+ // console.log('updates', updates.map((info) => info.id));
933
+ // console.log('deletes', deletes.map((info) => info.id));
934
+ this.emit(TextureEventEnum.TEXTURE_UPDATE, updates, deletes);
935
+ }
936
+ return isUpdate;
937
+ }
938
+
939
+ /**
940
+ * 单例获取
941
+ */
942
+ public static get instance(): TextureController {
943
+ if (!this.__instance) {
944
+ this.__instance = new TextureController();
945
+ }
946
+ return this.__instance;
947
+ }
948
+ }
949
+ export { TextureController, TextureEventEnum };