@colijnit/configurator 261.1.1 → 261.20.1

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 (401) hide show
  1. package/{fesm2015/colijnit-configurator.js → fesm2022/colijnit-configurator.mjs} +19087 -18481
  2. package/fesm2022/colijnit-configurator.mjs.map +1 -0
  3. package/index.d.ts +3299 -0
  4. package/lib/components/answer-card/style/_layout.scss +3 -3
  5. package/lib/components/answers-slideout/style/_layout.scss +1 -0
  6. package/lib/style/configurator-globals.scss +1 -21
  7. package/package.json +24 -19
  8. package/bundles/colijnit-configurator.umd.js +0 -20167
  9. package/bundles/colijnit-configurator.umd.js.map +0 -1
  10. package/colijnit-configurator.d.ts +0 -5
  11. package/esm2015/colijnit-configurator.js +0 -5
  12. package/esm2015/lib/builder.js +0 -795
  13. package/esm2015/lib/components/answer-card/answer-card.component.js +0 -313
  14. package/esm2015/lib/components/answer-card/answer-card.module.js +0 -50
  15. package/esm2015/lib/components/answer-info-dialog/answer-info-dialog.component.js +0 -182
  16. package/esm2015/lib/components/answer-info-dialog/answer-info-dialog.module.js +0 -34
  17. package/esm2015/lib/components/answers-slideout/answers-slideout.component.js +0 -490
  18. package/esm2015/lib/components/answers-slideout/answers-slideout.module.js +0 -61
  19. package/esm2015/lib/components/color-filter/color-filter.component.js +0 -59
  20. package/esm2015/lib/components/color-filter/color-filter.module.js +0 -26
  21. package/esm2015/lib/components/configurator/configurator.component.js +0 -133
  22. package/esm2015/lib/components/configurator/configurator.module.js +0 -42
  23. package/esm2015/lib/components/configurator-dialog/configurator-camera-settings.component.js +0 -222
  24. package/esm2015/lib/components/configurator-dialog/configurator-dialog.module.js +0 -48
  25. package/esm2015/lib/components/configurator-dialog/configurator-error-dialog.component.js +0 -82
  26. package/esm2015/lib/components/configurator-dialog/configurator-export-dialog.component.js +0 -163
  27. package/esm2015/lib/components/configurator-loader/configurator-loader.component.js +0 -49
  28. package/esm2015/lib/components/configurator-loader/configurator-loader.module.js +0 -33
  29. package/esm2015/lib/components/configurator-scene/configurator-scene.component.js +0 -60
  30. package/esm2015/lib/components/configurator-scene/configurator-scene.module.js +0 -17
  31. package/esm2015/lib/components/configurator-scene-loader/configurator-scene-loader.component.js +0 -46
  32. package/esm2015/lib/components/configurator-scene-loader/configurator-scene-loader.module.js +0 -26
  33. package/esm2015/lib/components/element-buttons/element-buttons.component.js +0 -168
  34. package/esm2015/lib/components/element-buttons/element-buttons.module.js +0 -30
  35. package/esm2015/lib/components/element-toolbar/element-toolbar.component.js +0 -186
  36. package/esm2015/lib/components/element-toolbar/element-toolbar.module.js +0 -34
  37. package/esm2015/lib/components/image-zoom/image-zoom.component.js +0 -61
  38. package/esm2015/lib/components/image-zoom/image-zoom.module.js +0 -30
  39. package/esm2015/lib/components/lite-selector/lite-selector.component.js +0 -206
  40. package/esm2015/lib/components/lite-selector/lite-selector.module.js +0 -34
  41. package/esm2015/lib/components/product-configurator/product-configurator.component.js +0 -184
  42. package/esm2015/lib/components/product-configurator/product-configurator.module.js +0 -72
  43. package/esm2015/lib/components/product-configurator-selector/product-configurator-selector.component.js +0 -237
  44. package/esm2015/lib/components/product-configurator-selector/product-configurator-selector.module.js +0 -38
  45. package/esm2015/lib/components/product-configurator-selector-option/product-configurator-selector-option.component.js +0 -284
  46. package/esm2015/lib/components/product-configurator-selector-option/product-configurator-selector-option.module.js +0 -42
  47. package/esm2015/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.component.js +0 -72
  48. package/esm2015/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.module.js +0 -34
  49. package/esm2015/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.component.js +0 -82
  50. package/esm2015/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.module.js +0 -30
  51. package/esm2015/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.component.js +0 -80
  52. package/esm2015/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.module.js +0 -34
  53. package/esm2015/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.component.js +0 -93
  54. package/esm2015/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.module.js +0 -34
  55. package/esm2015/lib/components/progress-bar/progress-bar.component.js +0 -55
  56. package/esm2015/lib/components/progress-bar/progress-bar.module.js +0 -29
  57. package/esm2015/lib/components/scene-options/scene-options.component.js +0 -164
  58. package/esm2015/lib/components/scene-options/scene-options.module.js +0 -38
  59. package/esm2015/lib/components/selections-summary/selections-summary.component.js +0 -163
  60. package/esm2015/lib/components/selections-summary/selections-summary.module.js +0 -45
  61. package/esm2015/lib/components/selections-summary-line/selections-summary-line.component.js +0 -171
  62. package/esm2015/lib/components/selections-summary-line/selections-summary-line.module.js +0 -34
  63. package/esm2015/lib/components/slideout/slideout.component.js +0 -83
  64. package/esm2015/lib/components/slideout/slideout.module.js +0 -17
  65. package/esm2015/lib/components/summary-line/summary-line.component.js +0 -273
  66. package/esm2015/lib/components/summary-line/summary-line.module.js +0 -44
  67. package/esm2015/lib/components/tag-filter/tag-filter.component.js +0 -39
  68. package/esm2015/lib/components/tag-filter/tag-filter.module.js +0 -21
  69. package/esm2015/lib/components/threedselector/threedselector.component.js +0 -155
  70. package/esm2015/lib/components/threedselector/threedselector.module.js +0 -34
  71. package/esm2015/lib/core/helper/variation-helper.js +0 -553
  72. package/esm2015/lib/core/shader/floor-fade.shader.js +0 -33
  73. package/esm2015/lib/core/textures/depth-data-texture.js +0 -19
  74. package/esm2015/lib/directives/directives.module.js +0 -26
  75. package/esm2015/lib/directives/visibility-observer-master.directive.js +0 -53
  76. package/esm2015/lib/directives/visibility-observer.directive.js +0 -54
  77. package/esm2015/lib/enum/ar-feature.enum.js +0 -14
  78. package/esm2015/lib/enum/configuration-key.enum.js +0 -41
  79. package/esm2015/lib/enum/configuration-template.enum.js +0 -6
  80. package/esm2015/lib/enum/device-size-type.js +0 -7
  81. package/esm2015/lib/enum/device-tier.enum.js +0 -7
  82. package/esm2015/lib/enum/icon.enum.js +0 -113
  83. package/esm2015/lib/enum/item-type.enum.js +0 -23
  84. package/esm2015/lib/enum/light.enum.js +0 -9
  85. package/esm2015/lib/enum/navigator-type.enum.js +0 -6
  86. package/esm2015/lib/enum/output-encoding.enum.js +0 -9
  87. package/esm2015/lib/enum/result-type.enum.js +0 -21
  88. package/esm2015/lib/enum/scene-event.enum.js +0 -12
  89. package/esm2015/lib/enum/shadow-map-type.enum.js +0 -8
  90. package/esm2015/lib/enum/texture-type.js +0 -9
  91. package/esm2015/lib/enum/tone-mapping-local.enum.js +0 -12
  92. package/esm2015/lib/enum/view-mode.enum.js +0 -7
  93. package/esm2015/lib/enum/xr-mode.enum.js +0 -6
  94. package/esm2015/lib/environments/environment.js +0 -8
  95. package/esm2015/lib/interfaces/aa-options.interface.js +0 -2
  96. package/esm2015/lib/interfaces/adjustable-element.interface.js +0 -2
  97. package/esm2015/lib/interfaces/ao-options.interface.js +0 -2
  98. package/esm2015/lib/interfaces/changes.interface.js +0 -2
  99. package/esm2015/lib/interfaces/configuration-data.interface.js +0 -2
  100. package/esm2015/lib/interfaces/light-preset.interface.js +0 -2
  101. package/esm2015/lib/interfaces/post-processing-setting.interface.js +0 -2
  102. package/esm2015/lib/interfaces/scene-option-button.interface.js +0 -6
  103. package/esm2015/lib/interfaces/screen-size-info.js +0 -2
  104. package/esm2015/lib/interfaces/setting.interface.js +0 -2
  105. package/esm2015/lib/interfaces/texture.interface.js +0 -2
  106. package/esm2015/lib/interfaces/vignette-options.interface.js +0 -2
  107. package/esm2015/lib/model/ar-position-indicator.js +0 -18
  108. package/esm2015/lib/model/camera-settings.js +0 -14
  109. package/esm2015/lib/model/configuration-result-object.js +0 -6
  110. package/esm2015/lib/model/configurator-error-message.js +0 -9
  111. package/esm2015/lib/model/configurator-settings.js +0 -25
  112. package/esm2015/lib/model/custom-button.js +0 -16
  113. package/esm2015/lib/model/factory.js +0 -28
  114. package/esm2015/lib/model/icon.js +0 -112
  115. package/esm2015/lib/model/intersected-objects.js +0 -7
  116. package/esm2015/lib/model/light-preset.js +0 -73
  117. package/esm2015/lib/model/light-properties.js +0 -45
  118. package/esm2015/lib/model/material.js +0 -11
  119. package/esm2015/lib/model/metadata.js +0 -2
  120. package/esm2015/lib/model/render-parameters.js +0 -16
  121. package/esm2015/lib/model/setting-options.js +0 -71
  122. package/esm2015/lib/model/settings.js +0 -16
  123. package/esm2015/lib/model/shadow-properties.js +0 -10
  124. package/esm2015/lib/model/skin.js +0 -3
  125. package/esm2015/lib/model/texture.js +0 -76
  126. package/esm2015/lib/model/variation-settings.js +0 -54
  127. package/esm2015/lib/model/variation.js +0 -3
  128. package/esm2015/lib/model/xr-reticle.js +0 -79
  129. package/esm2015/lib/modules/render/enum/scene-type.enum.js +0 -6
  130. package/esm2015/lib/modules/render/model/ar-parameters.js +0 -12
  131. package/esm2015/lib/modules/render/model/scene-setting.js +0 -6
  132. package/esm2015/lib/modules/render/model/scene-settings.js +0 -3
  133. package/esm2015/lib/pipes/append.pipe.js +0 -21
  134. package/esm2015/lib/pipes/google-translate.pipe.js +0 -21
  135. package/esm2015/lib/pipes/localize.pipe.js +0 -28
  136. package/esm2015/lib/pipes/pipes.module.js +0 -41
  137. package/esm2015/lib/pipes/prepend.pipe.js +0 -21
  138. package/esm2015/lib/pipes/strip-html.pipe.js +0 -17
  139. package/esm2015/lib/services/app-event.service.js +0 -36
  140. package/esm2015/lib/services/app-initializer.service.js +0 -27
  141. package/esm2015/lib/services/ar.service.js +0 -844
  142. package/esm2015/lib/services/build-furniture-base.service.js +0 -1181
  143. package/esm2015/lib/services/build-furniture-without-scene.service.js +0 -86
  144. package/esm2015/lib/services/build-furniture.service.js +0 -169
  145. package/esm2015/lib/services/bundle-initialzer.service.js +0 -113
  146. package/esm2015/lib/services/camera.service.js +0 -123
  147. package/esm2015/lib/services/configuration.service.js +0 -79
  148. package/esm2015/lib/services/configurator-connector.service.js +0 -830
  149. package/esm2015/lib/services/configurator.service.js +0 -285
  150. package/esm2015/lib/services/configuring.service.js +0 -119
  151. package/esm2015/lib/services/controls.js +0 -799
  152. package/esm2015/lib/services/debug.service.js +0 -43
  153. package/esm2015/lib/services/dictionary.service.js +0 -65
  154. package/esm2015/lib/services/dynamic-camera.service.js +0 -96
  155. package/esm2015/lib/services/floor-plane.service.js +0 -252
  156. package/esm2015/lib/services/font.service.js +0 -27
  157. package/esm2015/lib/services/google-translate.service.js +0 -79
  158. package/esm2015/lib/services/icon-cache.service.js +0 -44
  159. package/esm2015/lib/services/intersection.service.js +0 -47
  160. package/esm2015/lib/services/item.service.js +0 -75
  161. package/esm2015/lib/services/json-utils.service.js +0 -48
  162. package/esm2015/lib/services/light-creation.service.js +0 -35
  163. package/esm2015/lib/services/light-presets.service.js +0 -157
  164. package/esm2015/lib/services/lights.service.js +0 -146
  165. package/esm2015/lib/services/load-furniture-base.service.js +0 -164
  166. package/esm2015/lib/services/load-furniture-without-scene.service.js +0 -45
  167. package/esm2015/lib/services/load-furniture.service.js +0 -72
  168. package/esm2015/lib/services/loader.service.js +0 -32
  169. package/esm2015/lib/services/locator.service.js +0 -11
  170. package/esm2015/lib/services/message-board.service.js +0 -50
  171. package/esm2015/lib/services/post-processing.service.js +0 -378
  172. package/esm2015/lib/services/product-configurator.service.js +0 -16
  173. package/esm2015/lib/services/progress.service.js +0 -20
  174. package/esm2015/lib/services/scene-event.service.js +0 -246
  175. package/esm2015/lib/services/scene-options.service.js +0 -24
  176. package/esm2015/lib/services/scene.service.js +0 -313
  177. package/esm2015/lib/services/screen-size-analysis.service.js +0 -97
  178. package/esm2015/lib/services/settings.service.js +0 -142
  179. package/esm2015/lib/services/switch-build-furniture.service.js +0 -37
  180. package/esm2015/lib/services/switch-load-furniture.service.js +0 -35
  181. package/esm2015/lib/services/threedselector.service.js +0 -72
  182. package/esm2015/lib/services/utils.service.js +0 -207
  183. package/esm2015/lib/services/variation-cache.service.js +0 -143
  184. package/esm2015/lib/services/variation.service.js +0 -490
  185. package/esm2015/lib/services/view-mode.service.js +0 -37
  186. package/esm2015/lib/services/vr.service.js +0 -191
  187. package/esm2015/lib/services/xr.service.js +0 -294
  188. package/esm2015/lib/utils/asset.utils.js +0 -120
  189. package/esm2015/lib/utils/base-utils.js +0 -9
  190. package/esm2015/lib/utils/color.utils.js +0 -30
  191. package/esm2015/lib/utils/debug.utils.js +0 -9
  192. package/esm2015/lib/utils/device.utils.js +0 -25
  193. package/esm2015/lib/utils/file.utils.js +0 -167
  194. package/esm2015/lib/utils/image.utils.js +0 -61
  195. package/esm2015/lib/utils/json-parser.utils.js +0 -180
  196. package/esm2015/lib/utils/material.utils.js +0 -433
  197. package/esm2015/lib/utils/object.utils.js +0 -360
  198. package/esm2015/lib/utils/relative-position.utils.js +0 -75
  199. package/esm2015/lib/utils/rotation-helper.utils.js +0 -15
  200. package/esm2015/lib/utils/scene-3d.utils.js +0 -213
  201. package/esm2015/lib/utils/scene-utils.js +0 -191
  202. package/esm2015/lib/utils/text-utils.js +0 -68
  203. package/esm2015/lib/utils/threed.utils.js +0 -281
  204. package/esm2015/lib/utils/variation-utils.js +0 -459
  205. package/esm2015/public-api.js +0 -65
  206. package/fesm2015/colijnit-configurator.js.map +0 -1
  207. package/lib/builder.d.ts +0 -83
  208. package/lib/components/answer-card/answer-card.component.d.ts +0 -58
  209. package/lib/components/answer-card/answer-card.module.d.ts +0 -11
  210. package/lib/components/answer-info-dialog/answer-info-dialog.component.d.ts +0 -38
  211. package/lib/components/answer-info-dialog/answer-info-dialog.module.d.ts +0 -10
  212. package/lib/components/answers-slideout/answers-slideout.component.d.ts +0 -86
  213. package/lib/components/answers-slideout/answers-slideout.module.d.ts +0 -16
  214. package/lib/components/color-filter/color-filter.component.d.ts +0 -20
  215. package/lib/components/color-filter/color-filter.module.d.ts +0 -8
  216. package/lib/components/configurator/configurator.component.d.ts +0 -37
  217. package/lib/components/configurator/configurator.module.d.ts +0 -12
  218. package/lib/components/configurator-dialog/configurator-camera-settings.component.d.ts +0 -30
  219. package/lib/components/configurator-dialog/configurator-dialog.module.d.ts +0 -13
  220. package/lib/components/configurator-dialog/configurator-error-dialog.component.d.ts +0 -16
  221. package/lib/components/configurator-dialog/configurator-export-dialog.component.d.ts +0 -26
  222. package/lib/components/configurator-loader/configurator-loader.component.d.ts +0 -7
  223. package/lib/components/configurator-loader/configurator-loader.module.d.ts +0 -9
  224. package/lib/components/configurator-scene/configurator-scene.component.d.ts +0 -24
  225. package/lib/components/configurator-scene/configurator-scene.module.d.ts +0 -7
  226. package/lib/components/configurator-scene-loader/configurator-scene-loader.component.d.ts +0 -7
  227. package/lib/components/configurator-scene-loader/configurator-scene-loader.module.d.ts +0 -8
  228. package/lib/components/element-buttons/element-buttons.component.d.ts +0 -32
  229. package/lib/components/element-buttons/element-buttons.module.d.ts +0 -9
  230. package/lib/components/element-toolbar/element-toolbar.component.d.ts +0 -27
  231. package/lib/components/element-toolbar/element-toolbar.module.d.ts +0 -10
  232. package/lib/components/image-zoom/image-zoom.component.d.ts +0 -15
  233. package/lib/components/image-zoom/image-zoom.module.d.ts +0 -9
  234. package/lib/components/lite-selector/lite-selector.component.d.ts +0 -40
  235. package/lib/components/lite-selector/lite-selector.module.d.ts +0 -10
  236. package/lib/components/product-configurator/product-configurator.component.d.ts +0 -50
  237. package/lib/components/product-configurator/product-configurator.module.d.ts +0 -15
  238. package/lib/components/product-configurator-selector/product-configurator-selector.component.d.ts +0 -35
  239. package/lib/components/product-configurator-selector/product-configurator-selector.module.d.ts +0 -11
  240. package/lib/components/product-configurator-selector-option/product-configurator-selector-option.component.d.ts +0 -31
  241. package/lib/components/product-configurator-selector-option/product-configurator-selector-option.module.d.ts +0 -13
  242. package/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.component.d.ts +0 -20
  243. package/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.module.d.ts +0 -10
  244. package/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.component.d.ts +0 -20
  245. package/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.module.d.ts +0 -10
  246. package/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.component.d.ts +0 -21
  247. package/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.module.d.ts +0 -10
  248. package/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.component.d.ts +0 -21
  249. package/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.module.d.ts +0 -10
  250. package/lib/components/progress-bar/progress-bar.component.d.ts +0 -10
  251. package/lib/components/progress-bar/progress-bar.module.d.ts +0 -8
  252. package/lib/components/scene-options/scene-options.component.d.ts +0 -24
  253. package/lib/components/scene-options/scene-options.module.d.ts +0 -11
  254. package/lib/components/selections-summary/selections-summary.component.d.ts +0 -38
  255. package/lib/components/selections-summary/selections-summary.module.d.ts +0 -12
  256. package/lib/components/selections-summary-line/selections-summary-line.component.d.ts +0 -27
  257. package/lib/components/selections-summary-line/selections-summary-line.module.d.ts +0 -10
  258. package/lib/components/slideout/slideout.component.d.ts +0 -22
  259. package/lib/components/slideout/slideout.module.d.ts +0 -7
  260. package/lib/components/summary-line/summary-line.component.d.ts +0 -50
  261. package/lib/components/summary-line/summary-line.module.d.ts +0 -11
  262. package/lib/components/tag-filter/tag-filter.component.d.ts +0 -9
  263. package/lib/components/tag-filter/tag-filter.module.d.ts +0 -7
  264. package/lib/components/threedselector/threedselector.component.d.ts +0 -38
  265. package/lib/components/threedselector/threedselector.module.d.ts +0 -10
  266. package/lib/core/helper/variation-helper.d.ts +0 -25
  267. package/lib/core/shader/floor-fade.shader.d.ts +0 -5
  268. package/lib/core/textures/depth-data-texture.d.ts +0 -5
  269. package/lib/directives/directives.module.d.ts +0 -8
  270. package/lib/directives/visibility-observer-master.directive.d.ts +0 -12
  271. package/lib/directives/visibility-observer.directive.d.ts +0 -16
  272. package/lib/enum/ar-feature.enum.d.ts +0 -12
  273. package/lib/enum/configuration-key.enum.d.ts +0 -39
  274. package/lib/enum/configuration-template.enum.d.ts +0 -4
  275. package/lib/enum/device-size-type.d.ts +0 -5
  276. package/lib/enum/device-tier.enum.d.ts +0 -5
  277. package/lib/enum/icon.enum.d.ts +0 -111
  278. package/lib/enum/item-type.enum.d.ts +0 -21
  279. package/lib/enum/light.enum.d.ts +0 -7
  280. package/lib/enum/navigator-type.enum.d.ts +0 -4
  281. package/lib/enum/output-encoding.enum.d.ts +0 -7
  282. package/lib/enum/result-type.enum.d.ts +0 -19
  283. package/lib/enum/scene-event.enum.d.ts +0 -10
  284. package/lib/enum/shadow-map-type.enum.d.ts +0 -6
  285. package/lib/enum/texture-type.d.ts +0 -7
  286. package/lib/enum/tone-mapping-local.enum.d.ts +0 -10
  287. package/lib/enum/view-mode.enum.d.ts +0 -5
  288. package/lib/enum/xr-mode.enum.d.ts +0 -4
  289. package/lib/environments/environment.d.ts +0 -4
  290. package/lib/interfaces/aa-options.interface.d.ts +0 -4
  291. package/lib/interfaces/adjustable-element.interface.d.ts +0 -5
  292. package/lib/interfaces/ao-options.interface.d.ts +0 -18
  293. package/lib/interfaces/changes.interface.d.ts +0 -9
  294. package/lib/interfaces/configuration-data.interface.d.ts +0 -40
  295. package/lib/interfaces/light-preset.interface.d.ts +0 -22
  296. package/lib/interfaces/post-processing-setting.interface.d.ts +0 -11
  297. package/lib/interfaces/scene-option-button.interface.d.ts +0 -19
  298. package/lib/interfaces/screen-size-info.d.ts +0 -10
  299. package/lib/interfaces/setting.interface.d.ts +0 -8
  300. package/lib/interfaces/texture.interface.d.ts +0 -44
  301. package/lib/interfaces/vignette-options.interface.d.ts +0 -4
  302. package/lib/model/ar-position-indicator.d.ts +0 -4
  303. package/lib/model/camera-settings.d.ts +0 -12
  304. package/lib/model/configuration-result-object.d.ts +0 -30
  305. package/lib/model/configurator-error-message.d.ts +0 -8
  306. package/lib/model/configurator-settings.d.ts +0 -62
  307. package/lib/model/custom-button.d.ts +0 -10
  308. package/lib/model/factory.d.ts +0 -5
  309. package/lib/model/icon.d.ts +0 -4
  310. package/lib/model/intersected-objects.d.ts +0 -6
  311. package/lib/model/light-preset.d.ts +0 -33
  312. package/lib/model/light-properties.d.ts +0 -25
  313. package/lib/model/material.d.ts +0 -41
  314. package/lib/model/metadata.d.ts +0 -78
  315. package/lib/model/render-parameters.d.ts +0 -12
  316. package/lib/model/setting-options.d.ts +0 -67
  317. package/lib/model/settings.d.ts +0 -10
  318. package/lib/model/shadow-properties.d.ts +0 -7
  319. package/lib/model/skin.d.ts +0 -15
  320. package/lib/model/texture.d.ts +0 -52
  321. package/lib/model/variation-settings.d.ts +0 -55
  322. package/lib/model/variation.d.ts +0 -11
  323. package/lib/model/xr-reticle.d.ts +0 -17
  324. package/lib/modules/render/enum/scene-type.enum.d.ts +0 -4
  325. package/lib/modules/render/model/ar-parameters.d.ts +0 -9
  326. package/lib/modules/render/model/scene-setting.d.ts +0 -13
  327. package/lib/modules/render/model/scene-settings.d.ts +0 -4
  328. package/lib/pipes/append.pipe.d.ts +0 -7
  329. package/lib/pipes/google-translate.pipe.d.ts +0 -11
  330. package/lib/pipes/localize.pipe.d.ts +0 -10
  331. package/lib/pipes/pipes.module.d.ts +0 -11
  332. package/lib/pipes/prepend.pipe.d.ts +0 -7
  333. package/lib/pipes/strip-html.pipe.d.ts +0 -7
  334. package/lib/services/app-event.service.d.ts +0 -32
  335. package/lib/services/app-initializer.service.d.ts +0 -14
  336. package/lib/services/ar.service.d.ts +0 -120
  337. package/lib/services/build-furniture-base.service.d.ts +0 -117
  338. package/lib/services/build-furniture-without-scene.service.d.ts +0 -14
  339. package/lib/services/build-furniture.service.d.ts +0 -14
  340. package/lib/services/bundle-initialzer.service.d.ts +0 -45
  341. package/lib/services/camera.service.d.ts +0 -44
  342. package/lib/services/configuration.service.d.ts +0 -18
  343. package/lib/services/configurator-connector.service.d.ts +0 -140
  344. package/lib/services/configurator.service.d.ts +0 -62
  345. package/lib/services/configuring.service.d.ts +0 -46
  346. package/lib/services/controls.d.ts +0 -11
  347. package/lib/services/debug.service.d.ts +0 -16
  348. package/lib/services/dictionary.service.d.ts +0 -15
  349. package/lib/services/dynamic-camera.service.d.ts +0 -21
  350. package/lib/services/floor-plane.service.d.ts +0 -47
  351. package/lib/services/font.service.d.ts +0 -10
  352. package/lib/services/google-translate.service.d.ts +0 -26
  353. package/lib/services/icon-cache.service.d.ts +0 -21
  354. package/lib/services/intersection.service.d.ts +0 -11
  355. package/lib/services/item.service.d.ts +0 -18
  356. package/lib/services/json-utils.service.d.ts +0 -7
  357. package/lib/services/light-creation.service.d.ts +0 -9
  358. package/lib/services/light-presets.service.d.ts +0 -34
  359. package/lib/services/lights.service.d.ts +0 -34
  360. package/lib/services/load-furniture-base.service.d.ts +0 -37
  361. package/lib/services/load-furniture-without-scene.service.d.ts +0 -9
  362. package/lib/services/load-furniture.service.d.ts +0 -9
  363. package/lib/services/loader.service.d.ts +0 -11
  364. package/lib/services/locator.service.d.ts +0 -7
  365. package/lib/services/message-board.service.d.ts +0 -18
  366. package/lib/services/post-processing.service.d.ts +0 -74
  367. package/lib/services/product-configurator.service.d.ts +0 -11
  368. package/lib/services/progress.service.d.ts +0 -9
  369. package/lib/services/scene-event.service.d.ts +0 -72
  370. package/lib/services/scene-options.service.d.ts +0 -11
  371. package/lib/services/scene.service.d.ts +0 -71
  372. package/lib/services/screen-size-analysis.service.d.ts +0 -32
  373. package/lib/services/settings.service.d.ts +0 -24
  374. package/lib/services/switch-build-furniture.service.d.ts +0 -21
  375. package/lib/services/switch-load-furniture.service.d.ts +0 -21
  376. package/lib/services/threedselector.service.d.ts +0 -17
  377. package/lib/services/utils.service.d.ts +0 -24
  378. package/lib/services/variation-cache.service.d.ts +0 -23
  379. package/lib/services/variation.service.d.ts +0 -26
  380. package/lib/services/view-mode.service.d.ts +0 -17
  381. package/lib/services/vr.service.d.ts +0 -42
  382. package/lib/services/xr.service.d.ts +0 -56
  383. package/lib/utils/asset.utils.d.ts +0 -19
  384. package/lib/utils/base-utils.d.ts +0 -4
  385. package/lib/utils/color.utils.d.ts +0 -8
  386. package/lib/utils/debug.utils.d.ts +0 -3
  387. package/lib/utils/device.utils.d.ts +0 -7
  388. package/lib/utils/file.utils.d.ts +0 -30
  389. package/lib/utils/image.utils.d.ts +0 -9
  390. package/lib/utils/json-parser.utils.d.ts +0 -9
  391. package/lib/utils/material.utils.d.ts +0 -34
  392. package/lib/utils/object.utils.d.ts +0 -32
  393. package/lib/utils/relative-position.utils.d.ts +0 -12
  394. package/lib/utils/rotation-helper.utils.d.ts +0 -6
  395. package/lib/utils/scene-3d.utils.d.ts +0 -8
  396. package/lib/utils/scene-utils.d.ts +0 -7
  397. package/lib/utils/text-utils.d.ts +0 -4
  398. package/lib/utils/threed.utils.d.ts +0 -20
  399. package/lib/utils/variation-utils.d.ts +0 -18
  400. package/public-api.d.ts +0 -60
  401. /package/lib/style/{template_variables.scss → _variables.scss} +0 -0
@@ -1,75 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { Box3, Mesh, RGBAFormat, Vector3 } from 'three';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "./scene.service";
5
- export class ItemService {
6
- constructor(_sceneService) {
7
- this._sceneService = _sceneService;
8
- this._sceneItems = [];
9
- }
10
- get sceneItems() {
11
- return this._sceneItems;
12
- }
13
- ngOnDestroy() {
14
- this._sceneItems = [];
15
- }
16
- addItem(item, replace = true) {
17
- if (replace) {
18
- this._sceneItems = [];
19
- const oldModel = this._sceneService.scene.getObjectByName(item.name);
20
- this._sceneService.removeObject(oldModel);
21
- }
22
- // Le glas check
23
- this.glassMaterialCheck(item);
24
- this._sceneItems.push(item);
25
- this._sceneService.addObject(item);
26
- }
27
- removeAllItems() {
28
- const allItems = this._sceneItems.slice();
29
- allItems.forEach(i => {
30
- this.removeItem(i);
31
- });
32
- }
33
- removeItem(obj) {
34
- if (typeof obj === 'string') {
35
- obj = this._sceneService.scene.getObjectByName(obj);
36
- }
37
- if (obj) {
38
- this._sceneService.removeObject(obj, true);
39
- }
40
- }
41
- objectDimensions(object) {
42
- const objectBox = new Box3();
43
- objectBox.setFromObject(object);
44
- const size = new Vector3();
45
- objectBox.getSize(size);
46
- return size;
47
- }
48
- glassMaterialCheck(item) {
49
- if (item) {
50
- item.traverse((child) => {
51
- if (child instanceof Mesh && child.material) {
52
- child.castShadow = true;
53
- const materials = !Array.isArray(child.material) ? [child.material] : child.material;
54
- materials.forEach(material => {
55
- if (material.name && (material.name === 'Fixed_Glass' || material.name === 'Default_Glass')) {
56
- child.castShadow = false;
57
- material.transparent = true;
58
- // TODO addd opacity when indefined
59
- // material.opacity = 0.2;
60
- material.format = RGBAFormat;
61
- material.needsUpdate = true;
62
- }
63
- });
64
- }
65
- });
66
- }
67
- }
68
- }
69
- ItemService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ItemService, deps: [{ token: i1.SceneService }], target: i0.ɵɵFactoryTarget.Injectable });
70
- ItemService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ItemService, providedIn: 'root' });
71
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ItemService, decorators: [{
72
- type: Injectable,
73
- args: [{ providedIn: 'root' }]
74
- }], ctorParameters: function () { return [{ type: i1.SceneService }]; } });
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29uZmlndXJhdG9yL3NyYy9saWIvc2VydmljZXMvaXRlbS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQVksVUFBVSxFQUFFLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQzs7O0FBSWhFLE1BQU0sT0FBTyxXQUFXO0lBUXRCLFlBQ1UsYUFBMkI7UUFBM0Isa0JBQWEsR0FBYixhQUFhLENBQWM7UUFIN0IsZ0JBQVcsR0FBZSxFQUFFLENBQUM7SUFNckMsQ0FBQztJQVZELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQVVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVNLE9BQU8sQ0FBQyxJQUFjLEVBQUUsVUFBbUIsSUFBSTtRQUNwRCxJQUFJLE9BQU8sRUFBRTtZQUNYLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sUUFBUSxHQUFhLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDM0M7UUFDRCxnQkFBZ0I7UUFDaEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTlCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTSxjQUFjO1FBQ25CLE1BQU0sUUFBUSxHQUFlLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNNLFVBQVUsQ0FBQyxHQUFRO1FBQ3hCLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO1lBQzNCLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFhLENBQUM7U0FDakU7UUFDRCxJQUFJLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUM1QztJQUNILENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxNQUFnQjtRQUN0QyxNQUFNLFNBQVMsR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ25DLFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsTUFBTSxJQUFJLEdBQVksSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNwQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLGtCQUFrQixDQUFDLElBQWM7UUFDdEMsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3RCLElBQUksS0FBSyxZQUFZLElBQUksSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO29CQUMzQyxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztvQkFDeEIsTUFBTSxTQUFTLEdBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7b0JBQzFGLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7d0JBQzNCLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssYUFBYSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLEVBQUU7NEJBQzNGLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDOzRCQUN6QixRQUFRLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQzs0QkFDNUIsbUNBQW1DOzRCQUNuQywwQkFBMEI7NEJBQzFCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDOzRCQUM3QixRQUFRLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQzt5QkFDN0I7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzs7eUdBekVVLFdBQVc7NkdBQVgsV0FBVyxjQURDLE1BQU07NEZBQ2xCLFdBQVc7a0JBRHZCLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0JveDMsIE1lc2gsIE9iamVjdDNELCBSR0JBRm9ybWF0LCBWZWN0b3IzfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7U2NlbmVTZXJ2aWNlfSBmcm9tICcuL3NjZW5lLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXHJcbmV4cG9ydCBjbGFzcyBJdGVtU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gIHB1YmxpYyBnZXQgc2NlbmVJdGVtcygpOiBPYmplY3QzRFtdIHtcclxuICAgIHJldHVybiB0aGlzLl9zY2VuZUl0ZW1zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2NlbmVJdGVtczogT2JqZWN0M0RbXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX3NjZW5lU2VydmljZTogU2NlbmVTZXJ2aWNlXHJcbiAgKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2NlbmVJdGVtcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZEl0ZW0oaXRlbTogT2JqZWN0M0QsIHJlcGxhY2U6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBpZiAocmVwbGFjZSkge1xyXG4gICAgICB0aGlzLl9zY2VuZUl0ZW1zID0gW107XHJcbiAgICAgIGNvbnN0IG9sZE1vZGVsOiBPYmplY3QzRCA9IHRoaXMuX3NjZW5lU2VydmljZS5zY2VuZS5nZXRPYmplY3RCeU5hbWUoaXRlbS5uYW1lKTtcclxuICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnJlbW92ZU9iamVjdChvbGRNb2RlbCk7XHJcbiAgICB9XHJcbiAgICAvLyBMZSBnbGFzIGNoZWNrXHJcbiAgICB0aGlzLmdsYXNzTWF0ZXJpYWxDaGVjayhpdGVtKTtcclxuXHJcbiAgICB0aGlzLl9zY2VuZUl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UuYWRkT2JqZWN0KGl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZUFsbEl0ZW1zKCkge1xyXG4gICAgY29uc3QgYWxsSXRlbXM6IE9iamVjdDNEW10gPSB0aGlzLl9zY2VuZUl0ZW1zLnNsaWNlKCk7XHJcbiAgICBhbGxJdGVtcy5mb3JFYWNoKGkgPT4ge1xyXG4gICAgICB0aGlzLnJlbW92ZUl0ZW0oaSk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHVibGljIHJlbW92ZUl0ZW0ob2JqOiBhbnksICk6IHZvaWQge1xyXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIG9iaiA9IHRoaXMuX3NjZW5lU2VydmljZS5zY2VuZS5nZXRPYmplY3RCeU5hbWUob2JqKSBhcyBPYmplY3QzRDtcclxuICAgIH1cclxuICAgIGlmIChvYmopIHtcclxuICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnJlbW92ZU9iamVjdChvYmosIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9iamVjdERpbWVuc2lvbnMob2JqZWN0OiBPYmplY3QzRCk6IFZlY3RvcjMge1xyXG4gICAgY29uc3Qgb2JqZWN0Qm94OiBCb3gzID0gbmV3IEJveDMoKTtcclxuICAgIG9iamVjdEJveC5zZXRGcm9tT2JqZWN0KG9iamVjdCk7XHJcbiAgICBjb25zdCBzaXplOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKTtcclxuICAgIG9iamVjdEJveC5nZXRTaXplKHNpemUpO1xyXG4gICAgcmV0dXJuIHNpemU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2xhc3NNYXRlcmlhbENoZWNrKGl0ZW06IE9iamVjdDNEKSB7XHJcbiAgICBpZiAoaXRlbSkge1xyXG4gICAgICBpdGVtLnRyYXZlcnNlKChjaGlsZCkgPT4ge1xyXG4gICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIE1lc2ggJiYgY2hpbGQubWF0ZXJpYWwpIHtcclxuICAgICAgICAgIGNoaWxkLmNhc3RTaGFkb3cgPSB0cnVlO1xyXG4gICAgICAgICAgY29uc3QgbWF0ZXJpYWxzOiBhbnkgPSAhQXJyYXkuaXNBcnJheShjaGlsZC5tYXRlcmlhbCkgPyBbY2hpbGQubWF0ZXJpYWxdIDogY2hpbGQubWF0ZXJpYWw7XHJcbiAgICAgICAgICBtYXRlcmlhbHMuZm9yRWFjaChtYXRlcmlhbCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5uYW1lICYmIChtYXRlcmlhbC5uYW1lID09PSAnRml4ZWRfR2xhc3MnIHx8IG1hdGVyaWFsLm5hbWUgPT09ICdEZWZhdWx0X0dsYXNzJykpIHtcclxuICAgICAgICAgICAgICBjaGlsZC5jYXN0U2hhZG93ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIC8vIFRPRE8gYWRkZCBvcGFjaXR5IHdoZW4gaW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgLy8gbWF0ZXJpYWwub3BhY2l0eSA9IDAuMjtcclxuICAgICAgICAgICAgICBtYXRlcmlhbC5mb3JtYXQgPSBSR0JBRm9ybWF0O1xyXG4gICAgICAgICAgICAgIG1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiJdfQ==
@@ -1,48 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { Injectable } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- export class JsonUtilsService {
5
- readJsonFile(filePath, includeBaseUrl = true) {
6
- return __awaiter(this, void 0, void 0, function* () {
7
- return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
8
- try {
9
- filePath = includeBaseUrl ? this._includeBaseUrl(filePath) : filePath;
10
- const response = yield fetch(filePath);
11
- if (!response.ok) {
12
- reject();
13
- }
14
- else {
15
- let empty = false;
16
- yield response.clone().text().then((value) => {
17
- if (value === '') {
18
- empty = true;
19
- }
20
- });
21
- resolve(empty ? {} : response.json());
22
- }
23
- }
24
- catch (e) {
25
- reject();
26
- }
27
- }));
28
- });
29
- }
30
- _includeBaseUrl(url) {
31
- if (url[0] === '.') {
32
- url = url.replace('.', '');
33
- }
34
- if (url[0] === '/') {
35
- url = url.replace('/', '');
36
- }
37
- return './' + url;
38
- }
39
- }
40
- JsonUtilsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: JsonUtilsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
41
- JsonUtilsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: JsonUtilsService, providedIn: 'root' });
42
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: JsonUtilsService, decorators: [{
43
- type: Injectable,
44
- args: [{
45
- providedIn: 'root'
46
- }]
47
- }] });
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi11dGlscy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29uZmlndXJhdG9yL3NyYy9saWIvc2VydmljZXMvanNvbi11dGlscy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOztBQUt6QyxNQUFNLE9BQU8sZ0JBQWdCO0lBRWQsWUFBWSxDQUFDLFFBQWdCLEVBQUUsaUJBQTBCLElBQUk7O1lBQ3hFLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBTyxPQUFpQixFQUFFLE1BQWdCLEVBQUUsRUFBRTtnQkFDL0QsSUFBSTtvQkFDRixRQUFRLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7b0JBQ3RFLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRTt3QkFDaEIsTUFBTSxFQUFFLENBQUM7cUJBQ1Y7eUJBQU07d0JBQ0wsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO3dCQUNsQixNQUFNLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTs0QkFDM0MsSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFO2dDQUNoQixLQUFLLEdBQUcsSUFBSSxDQUFDOzZCQUNkO3dCQUNILENBQUMsQ0FBQyxDQUFDO3dCQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7cUJBQ3ZDO2lCQUNGO2dCQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNWLE1BQU0sRUFBRSxDQUFDO2lCQUNWO1lBQ0gsQ0FBQyxDQUFBLENBQUMsQ0FBQztRQUNMLENBQUM7S0FBQTtJQUVPLGVBQWUsQ0FBQyxHQUFXO1FBQ2pDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtZQUNsQixHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDNUI7UUFDRCxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7WUFDbEIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzVCO1FBQ0QsT0FBTyxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQ3BCLENBQUM7OzhHQWhDVSxnQkFBZ0I7a0hBQWhCLGdCQUFnQixjQUZmLE1BQU07NEZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBKc29uVXRpbHNTZXJ2aWNlIHtcclxuXHJcbiAgcHVibGljIGFzeW5jIHJlYWRKc29uRmlsZShmaWxlUGF0aDogc3RyaW5nLCBpbmNsdWRlQmFzZVVybDogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGZpbGVQYXRoID0gaW5jbHVkZUJhc2VVcmwgPyB0aGlzLl9pbmNsdWRlQmFzZVVybChmaWxlUGF0aCkgOiBmaWxlUGF0aDtcclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGZpbGVQYXRoKTtcclxuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGVtcHR5ID0gZmFsc2U7XHJcbiAgICAgICAgICBhd2FpdCByZXNwb25zZS5jbG9uZSgpLnRleHQoKS50aGVuKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgZW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJlc29sdmUoZW1wdHkgPyB7fSA6IHJlc3BvbnNlLmpzb24oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5jbHVkZUJhc2VVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHVybFswXSA9PT0gJy4nKSB7XHJcbiAgICAgIHVybCA9IHVybC5yZXBsYWNlKCcuJywgJycpO1xyXG4gICAgfVxyXG4gICAgaWYgKHVybFswXSA9PT0gJy8nKSB7XHJcbiAgICAgIHVybCA9IHVybC5yZXBsYWNlKCcvJywgJycpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcuLycgKyB1cmw7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
@@ -1,35 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { AmbientLight, DirectionalLight, HemisphereLight, Light, PointLight, SpotLight } from 'three';
3
- import * as i0 from "@angular/core";
4
- export class LightCreateService extends Light {
5
- constructor() {
6
- super();
7
- }
8
- createNewLight(lightType) {
9
- if (lightType === 'SpotLight') {
10
- this.light = new SpotLight();
11
- }
12
- else if (lightType === 'DirectionalLight') {
13
- this.light = new DirectionalLight();
14
- }
15
- else if (lightType === 'AmbientLight') {
16
- this.light = new AmbientLight();
17
- }
18
- else if (lightType === 'HemisphereLight') {
19
- this.light = new HemisphereLight();
20
- }
21
- else if (lightType === 'PointLight') {
22
- this.light = new PointLight();
23
- }
24
- return this.light;
25
- }
26
- }
27
- LightCreateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LightCreateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
28
- LightCreateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LightCreateService, providedIn: 'root' });
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LightCreateService, decorators: [{
30
- type: Injectable,
31
- args: [{
32
- providedIn: 'root'
33
- }]
34
- }], ctorParameters: function () { return []; } });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHQtY3JlYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbmZpZ3VyYXRvci9zcmMvbGliL3NlcnZpY2VzL2xpZ2h0LWNyZWF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQWUsVUFBVSxFQUFFLFNBQVMsRUFBQyxNQUFNLE9BQU8sQ0FBQzs7QUFLakgsTUFBTSxPQUFPLGtCQUFtQixTQUFRLEtBQUs7SUFHM0M7UUFDRSxLQUFLLEVBQUUsQ0FBQztJQUNWLENBQUM7SUFFTSxjQUFjLENBQUMsU0FBaUI7UUFDckMsSUFBSSxTQUFTLEtBQUssV0FBVyxFQUFFO1lBQzdCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztTQUM5QjthQUFNLElBQUksU0FBUyxLQUFLLGtCQUFrQixFQUFFO1lBQzNDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1NBQ3JDO2FBQU0sSUFBSSxTQUFTLEtBQUssY0FBYyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztTQUNqQzthQUFNLElBQUksU0FBUyxLQUFLLGlCQUFpQixFQUFFO1lBQzFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztTQUNwQzthQUFNLElBQUksU0FBUyxLQUFLLFlBQVksRUFBRTtZQUNyQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7U0FDL0I7UUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQzs7Z0hBckJVLGtCQUFrQjtvSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07NEZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QW1iaWVudExpZ2h0LCBEaXJlY3Rpb25hbExpZ2h0LCBIZW1pc3BoZXJlTGlnaHQsIExpZ2h0LCBMaWdodFNoYWRvdywgUG9pbnRMaWdodCwgU3BvdExpZ2h0fSBmcm9tICd0aHJlZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaWdodENyZWF0ZVNlcnZpY2UgZXh0ZW5kcyBMaWdodCB7XHJcbiAgcHVibGljIGxpZ2h0OiBMaWdodDtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZU5ld0xpZ2h0KGxpZ2h0VHlwZTogc3RyaW5nKTogTGlnaHQ8TGlnaHRTaGFkb3c+IHtcclxuICAgIGlmIChsaWdodFR5cGUgPT09ICdTcG90TGlnaHQnKSB7XHJcbiAgICAgIHRoaXMubGlnaHQgPSBuZXcgU3BvdExpZ2h0KCk7XHJcbiAgICB9IGVsc2UgaWYgKGxpZ2h0VHlwZSA9PT0gJ0RpcmVjdGlvbmFsTGlnaHQnKSB7XHJcbiAgICAgIHRoaXMubGlnaHQgPSBuZXcgRGlyZWN0aW9uYWxMaWdodCgpO1xyXG4gICAgfSBlbHNlIGlmIChsaWdodFR5cGUgPT09ICdBbWJpZW50TGlnaHQnKSB7XHJcbiAgICAgIHRoaXMubGlnaHQgPSBuZXcgQW1iaWVudExpZ2h0KCk7XHJcbiAgICB9IGVsc2UgaWYgKGxpZ2h0VHlwZSA9PT0gJ0hlbWlzcGhlcmVMaWdodCcpIHtcclxuICAgICAgdGhpcy5saWdodCA9IG5ldyBIZW1pc3BoZXJlTGlnaHQoKTtcclxuICAgIH0gZWxzZSBpZiAobGlnaHRUeXBlID09PSAnUG9pbnRMaWdodCcpIHtcclxuICAgICAgdGhpcy5saWdodCA9IG5ldyBQb2ludExpZ2h0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMubGlnaHQ7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
@@ -1,157 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { Injectable } from '@angular/core';
3
- import { AmbientLight, Color, DirectionalLight, HemisphereLight, PointLight, SpotLight } from 'three';
4
- import { BehaviorSubject, Subject } from 'rxjs';
5
- import { take } from 'rxjs/operators';
6
- import { shadowMapTypesMap } from '../model/light-preset';
7
- import { LightEnum } from '../enum/light.enum';
8
- import { ObjectUtils } from '../utils/object.utils';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "./lights.service";
11
- import * as i2 from "./bundle-initialzer.service";
12
- import * as i3 from "./scene.service";
13
- import * as i4 from "./screen-size-analysis.service";
14
- import * as i5 from "./settings.service";
15
- export class LightPresetsService {
16
- constructor(_lightsService, _appService, _sceneService, _screenSizeAnalysis, _settingsService) {
17
- this._lightsService = _lightsService;
18
- this._appService = _appService;
19
- this._sceneService = _sceneService;
20
- this._screenSizeAnalysis = _screenSizeAnalysis;
21
- this._settingsService = _settingsService;
22
- this.presetLoaded = new BehaviorSubject(false);
23
- this._lightPresetsLoaded = new Subject();
24
- this._subs = [];
25
- // @ts-ignore
26
- this._lightsMap = new Map([
27
- [LightEnum.SpotLight, SpotLight],
28
- [LightEnum.DirectionalLight, DirectionalLight],
29
- [LightEnum.AmbientLight, AmbientLight],
30
- [LightEnum.HemisphereLight, HemisphereLight],
31
- [LightEnum.PointLight, PointLight]
32
- ]);
33
- }
34
- set activeLightPreset(value) {
35
- this._activeLightPreset = value;
36
- }
37
- get activeLightPreset() {
38
- return this._activeLightPreset;
39
- }
40
- init() {
41
- this._subs.push(this._appService.lightPresetsLoaded.subscribe((lightPresets) => {
42
- if (lightPresets) {
43
- this.loadedLightPresets = lightPresets;
44
- // TODO fix empty light plan, for now; not lightplan, no lights
45
- if (this.loadedLightPresets.length === 0) {
46
- // this.createNewLightPreset();
47
- }
48
- this._lightPresetsLoaded.next();
49
- }
50
- }));
51
- }
52
- ngOnDestroy() {
53
- this._subs.forEach(s => s.unsubscribe());
54
- }
55
- loadLightPreset(lightPreset) {
56
- return __awaiter(this, void 0, void 0, function* () {
57
- this._lightsService.removeAllLights();
58
- if (lightPreset.hdri) {
59
- ObjectUtils.LoadHDRI(this._settingsService.settings.assetPath + lightPreset.hdri, this._sceneService.scene).then(() => {
60
- this._sceneService.scene.environmentIntensity = lightPreset.hdriIntensity || 1;
61
- this._sceneService.scene.backgroundIntensity = lightPreset.hdriIntensity || 1;
62
- });
63
- }
64
- this._sceneService.renderer.toneMappingExposure = lightPreset.toneMappingExposure;
65
- this._sceneService.renderer.shadowMap.type = shadowMapTypesMap.get(lightPreset.shadowMapType);
66
- this._sceneService.renderer.outputColorSpace = lightPreset.colorSpace;
67
- for (const lightProperties of lightPreset.lights) {
68
- this._createLightFromProperties(lightProperties);
69
- }
70
- this._lightsService.initiateLightPreset();
71
- this._sceneService.rendererPropsChange();
72
- this.activeLightPreset = lightPreset;
73
- this.presetLoaded.next(true);
74
- });
75
- }
76
- prepareLoadLightPreset(standalone = true) {
77
- return __awaiter(this, void 0, void 0, function* () {
78
- if (!this.loadedLightPresets || this.loadedLightPresets.length < 1) {
79
- return new Promise((resolve) => {
80
- this._lightPresetsLoaded.pipe(take(1)).subscribe(() => __awaiter(this, void 0, void 0, function* () {
81
- resolve(this.prepareLoadLightPreset(standalone));
82
- }));
83
- });
84
- }
85
- return this._prepareLoadLightPreset(standalone);
86
- });
87
- }
88
- _prepareLoadLightPreset(standalone = false) {
89
- return __awaiter(this, void 0, void 0, function* () {
90
- if (!this.loadedLightPresets) {
91
- return;
92
- }
93
- const navigatorType = this._screenSizeAnalysis.navigatorType();
94
- let lightPreset = this.loadedLightPresets.find((preset) => preset.navigatorType === navigatorType && preset.default && preset.standalone);
95
- if (!lightPreset) {
96
- lightPreset = this.loadedLightPresets.find((preset) => preset.standalone);
97
- }
98
- if (!lightPreset.standalone) {
99
- lightPreset = this.loadedLightPresets.find((preset) => preset.default);
100
- }
101
- if (lightPreset) {
102
- yield this.loadLightPreset(lightPreset);
103
- }
104
- this._lightsService.updateAllOffsets();
105
- });
106
- }
107
- _createLightFromProperties(lightProperties) {
108
- const lightType = lightProperties.type;
109
- const lightConstructor = this._lightsMap.get(lightType);
110
- const light = new lightConstructor();
111
- light.userData.wallOffset = lightProperties.wallOffset;
112
- light.userData.rotationOffset = lightProperties.rotationOffset;
113
- light.userData.topDownDirectional = lightProperties.topDownDirectional;
114
- for (const property in lightProperties) {
115
- if (!(property in light)) {
116
- continue;
117
- }
118
- if (property === 'position') {
119
- if (light.userData.wallOffset === 0) {
120
- light.position.x = lightProperties.position.x;
121
- light.position.z = lightProperties.position.z;
122
- }
123
- light.position.y = lightProperties.position.y;
124
- }
125
- else if (property === 'color') {
126
- light.color = new Color(lightProperties.color);
127
- }
128
- else if (property === 'groundColor') {
129
- light.groundColor = new Color(lightProperties.groundColor);
130
- }
131
- else {
132
- this._setObjectProperties(light, property, lightProperties[property]);
133
- }
134
- }
135
- this._lightsService.addLight(light);
136
- }
137
- _setObjectProperties(object, property, value) {
138
- if (property === 'shadow') {
139
- for (const prop in value) {
140
- if (!object[property].hasOwnProperty(prop)) {
141
- continue;
142
- }
143
- object[property][prop] = value[prop];
144
- }
145
- }
146
- else {
147
- object[property] = value;
148
- }
149
- }
150
- }
151
- LightPresetsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LightPresetsService, deps: [{ token: i1.LightsService }, { token: i2.BundleInitializerService }, { token: i3.SceneService }, { token: i4.ScreenSizeAnalysisService }, { token: i5.SettingsService }], target: i0.ɵɵFactoryTarget.Injectable });
152
- LightPresetsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LightPresetsService, providedIn: 'root' });
153
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LightPresetsService, decorators: [{
154
- type: Injectable,
155
- args: [{ providedIn: 'root' }]
156
- }], ctorParameters: function () { return [{ type: i1.LightsService }, { type: i2.BundleInitializerService }, { type: i3.SceneService }, { type: i4.ScreenSizeAnalysisService }, { type: i5.SettingsService }]; } });
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHQtcHJlc2V0cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29uZmlndXJhdG9yL3NyYy9saWIvc2VydmljZXMvbGlnaHQtcHJlc2V0cy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBbUIsVUFBVSxFQUFFLFNBQVMsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUNySCxPQUFPLEVBQUMsZUFBZSxFQUFFLE9BQU8sRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUc1RCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEMsT0FBTyxFQUFjLGlCQUFpQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBSzdDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7OztBQUlsRCxNQUFNLE9BQU8sbUJBQW1CO0lBeUI5QixZQUNVLGNBQTZCLEVBQzdCLFdBQXFDLEVBQ3JDLGFBQTJCLEVBQzNCLG1CQUE4QyxFQUM5QyxnQkFBaUM7UUFKakMsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0IsZ0JBQVcsR0FBWCxXQUFXLENBQTBCO1FBQ3JDLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQzNCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBMkI7UUFDOUMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQW5CcEMsaUJBQVksR0FBNkIsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFHNUUsd0JBQW1CLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFDekQsVUFBSyxHQUFtQixFQUFFLENBQUM7UUFD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dGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QW1iaWVudExpZ2h0LCBDb2xvciwgRGlyZWN0aW9uYWxMaWdodCwgSGVtaXNwaGVyZUxpZ2h0LCBMaWdodCwgT2JqZWN0M0QsIFBvaW50TGlnaHQsIFNwb3RMaWdodH0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtMaWdodHNTZXJ2aWNlfSBmcm9tICcuL2xpZ2h0cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtTY2VuZVNlcnZpY2V9IGZyb20gJy4vc2NlbmUuc2VydmljZSc7XHJcbmltcG9ydCB7dGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge0xpZ2h0UHJlc2V0LCBzaGFkb3dNYXBUeXBlc01hcH0gZnJvbSAnLi4vbW9kZWwvbGlnaHQtcHJlc2V0JztcclxuaW1wb3J0IHtMaWdodEVudW19IGZyb20gJy4uL2VudW0vbGlnaHQuZW51bSc7XHJcbmltcG9ydCB7TmF2aWdhdG9yVHlwZX0gZnJvbSAnLi4vZW51bS9uYXZpZ2F0b3ItdHlwZS5lbnVtJztcclxuaW1wb3J0IHtMaWdodFByb3BlcnRpZXN9IGZyb20gJy4uL21vZGVsL2xpZ2h0LXByb3BlcnRpZXMnO1xyXG5pbXBvcnQge0J1bmRsZUluaXRpYWxpemVyU2VydmljZX0gZnJvbSAnLi9idW5kbGUtaW5pdGlhbHplci5zZXJ2aWNlJztcclxuaW1wb3J0IHtTY3JlZW5TaXplQW5hbHlzaXNTZXJ2aWNlfSBmcm9tICcuL3NjcmVlbi1zaXplLWFuYWx5c2lzLnNlcnZpY2UnO1xyXG5pbXBvcnQge09iamVjdFV0aWxzfSBmcm9tICcuLi91dGlscy9vYmplY3QudXRpbHMnO1xyXG5pbXBvcnQge1NldHRpbmdzU2VydmljZX0gZnJvbSAnLi9zZXR0aW5ncy5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxyXG5leHBvcnQgY2xhc3MgTGlnaHRQcmVzZXRzU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gIHB1YmxpYyBzZXQgYWN0aXZlTGlnaHRQcmVzZXQodmFsdWU6IExpZ2h0UHJlc2V0KSB7XHJcbiAgICB0aGlzLl9hY3RpdmVMaWdodFByZXNldCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhY3RpdmVMaWdodFByZXNldCgpOiBMaWdodFByZXNldCB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlTGlnaHRQcmVzZXQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9hZGVkTGlnaHRQcmVzZXRzOiBMaWdodFByZXNldFtdO1xyXG4gIHB1YmxpYyBwcmVzZXRMb2FkZWQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBwcml2YXRlIF9hY3RpdmVMaWdodFByZXNldDogTGlnaHRQcmVzZXQ7XHJcbiAgcHJpdmF0ZSBfbGlnaHRQcmVzZXRzTG9hZGVkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIF9zdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIC8vIEB0cy1pZ25vcmVcclxuICBwcml2YXRlIF9saWdodHNNYXA6IE1hcDxMaWdodEVudW0sIHR5cGVvZiBPYmplY3QzRD4gPSBuZXcgTWFwPExpZ2h0RW51bSwgdHlwZW9mIE9iamVjdDNEPihbXHJcbiAgICBbTGlnaHRFbnVtLlNwb3RMaWdodCwgU3BvdExpZ2h0XSxcclxuICAgIFtMaWdodEVudW0uRGlyZWN0aW9uYWxMaWdodCwgRGlyZWN0aW9uYWxMaWdodF0sXHJcbiAgICBbTGlnaHRFbnVtLkFtYmllbnRMaWdodCwgQW1iaWVudExpZ2h0XSxcclxuICAgIFtMaWdodEVudW0uSGVtaXNwaGVyZUxpZ2h0LCBIZW1pc3BoZXJlTGlnaHRdLFxyXG4gICAgW0xpZ2h0RW51bS5Qb2ludExpZ2h0LCBQb2ludExpZ2h0XVxyXG4gIF0pO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2xpZ2h0c1NlcnZpY2U6IExpZ2h0c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9hcHBTZXJ2aWNlOiBCdW5kbGVJbml0aWFsaXplclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zY2VuZVNlcnZpY2U6IFNjZW5lU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NjcmVlblNpemVBbmFseXNpczogU2NyZWVuU2l6ZUFuYWx5c2lzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBpbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLl9hcHBTZXJ2aWNlLmxpZ2h0UHJlc2V0c0xvYWRlZC5zdWJzY3JpYmUoKGxpZ2h0UHJlc2V0czogTGlnaHRQcmVzZXRbXSkgPT4ge1xyXG4gICAgICAgIGlmIChsaWdodFByZXNldHMpIHtcclxuICAgICAgICAgIHRoaXMubG9hZGVkTGlnaHRQcmVzZXRzID0gbGlnaHRQcmVzZXRzO1xyXG4gICAgICAgICAgLy8gVE9ETyBmaXggZW1wdHkgbGlnaHQgcGxhbiwgZm9yIG5vdzsgbm90IGxpZ2h0cGxhbiwgbm8gbGlnaHRzXHJcbiAgICAgICAgICBpZiAodGhpcy5sb2FkZWRMaWdodFByZXNldHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuY3JlYXRlTmV3TGlnaHRQcmVzZXQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX2xpZ2h0UHJlc2V0c0xvYWRlZC5uZXh0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vicy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2FkTGlnaHRQcmVzZXQobGlnaHRQcmVzZXQ6IExpZ2h0UHJlc2V0KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9saWdodHNTZXJ2aWNlLnJlbW92ZUFsbExpZ2h0cygpO1xyXG5cclxuICAgIGlmIChsaWdodFByZXNldC5oZHJpKSB7XHJcbiAgICAgIE9iamVjdFV0aWxzLkxvYWRIRFJJKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5hc3NldFBhdGggKyBsaWdodFByZXNldC5oZHJpLCB0aGlzLl9zY2VuZVNlcnZpY2Uuc2NlbmUpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5zY2VuZS5lbnZpcm9ubWVudEludGVuc2l0eSA9IGxpZ2h0UHJlc2V0LmhkcmlJbnRlbnNpdHkgfHwgMTtcclxuICAgICAgICB0aGlzLl9zY2VuZVNlcnZpY2Uuc2NlbmUuYmFja2dyb3VuZEludGVuc2l0eSA9IGxpZ2h0UHJlc2V0LmhkcmlJbnRlbnNpdHkgfHwgMTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnJlbmRlcmVyLnRvbmVNYXBwaW5nRXhwb3N1cmUgPSBsaWdodFByZXNldC50b25lTWFwcGluZ0V4cG9zdXJlO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnJlbmRlcmVyLnNoYWRvd01hcC50eXBlID0gc2hhZG93TWFwVHlwZXNNYXAuZ2V0KGxpZ2h0UHJlc2V0LnNoYWRvd01hcFR5cGUpO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnJlbmRlcmVyLm91dHB1dENvbG9yU3BhY2UgPSBsaWdodFByZXNldC5jb2xvclNwYWNlO1xyXG4gICAgZm9yIChjb25zdCBsaWdodFByb3BlcnRpZXMgb2YgbGlnaHRQcmVzZXQubGlnaHRzKSB7XHJcbiAgICAgIHRoaXMuX2NyZWF0ZUxpZ2h0RnJvbVByb3BlcnRpZXMobGlnaHRQcm9wZXJ0aWVzKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2xpZ2h0c1NlcnZpY2UuaW5pdGlhdGVMaWdodFByZXNldCgpO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnJlbmRlcmVyUHJvcHNDaGFuZ2UoKTtcclxuICAgIHRoaXMuYWN0aXZlTGlnaHRQcmVzZXQgPSBsaWdodFByZXNldDtcclxuICAgIHRoaXMucHJlc2V0TG9hZGVkLm5leHQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcHJlcGFyZUxvYWRMaWdodFByZXNldChzdGFuZGFsb25lOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmxvYWRlZExpZ2h0UHJlc2V0cyB8fCB0aGlzLmxvYWRlZExpZ2h0UHJlc2V0cy5sZW5ndGggPCAxKSB7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24pID0+IHtcclxuICAgICAgICB0aGlzLl9saWdodFByZXNldHNMb2FkZWQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLnByZXBhcmVMb2FkTGlnaHRQcmVzZXQoc3RhbmRhbG9uZSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl9wcmVwYXJlTG9hZExpZ2h0UHJlc2V0KHN0YW5kYWxvbmUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfcHJlcGFyZUxvYWRMaWdodFByZXNldChzdGFuZGFsb25lOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5sb2FkZWRMaWdodFByZXNldHMpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbmF2aWdhdG9yVHlwZTogTmF2aWdhdG9yVHlwZSA9IHRoaXMuX3NjcmVlblNpemVBbmFseXNpcy5uYXZpZ2F0b3JUeXBlKCk7XHJcblxyXG4gICAgbGV0IGxpZ2h0UHJlc2V0OiBMaWdodFByZXNldCA9XHJcbiAgICAgIHRoaXMubG9hZGVkTGlnaHRQcmVzZXRzLmZpbmQoKHByZXNldCkgPT4gcHJlc2V0Lm5hdmlnYXRvclR5cGUgPT09IG5hdmlnYXRvclR5cGUgJiYgcHJlc2V0LmRlZmF1bHQgJiYgcHJlc2V0LnN0YW5kYWxvbmUpO1xyXG4gICAgaWYgKCFsaWdodFByZXNldCkge1xyXG4gICAgICBsaWdodFByZXNldCA9IHRoaXMubG9hZGVkTGlnaHRQcmVzZXRzLmZpbmQoKHByZXNldCkgPT4gcHJlc2V0LnN0YW5kYWxvbmUpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFsaWdodFByZXNldC5zdGFuZGFsb25lKSB7XHJcbiAgICAgIGxpZ2h0UHJlc2V0ID0gdGhpcy5sb2FkZWRMaWdodFByZXNldHMuZmluZCgocHJlc2V0KSA9PiBwcmVzZXQuZGVmYXVsdCk7XHJcbiAgICB9XHJcbiAgICBpZiAobGlnaHRQcmVzZXQpIHtcclxuICAgICAgYXdhaXQgdGhpcy5sb2FkTGlnaHRQcmVzZXQobGlnaHRQcmVzZXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2xpZ2h0c1NlcnZpY2UudXBkYXRlQWxsT2Zmc2V0cygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3JlYXRlTGlnaHRGcm9tUHJvcGVydGllcyhsaWdodFByb3BlcnRpZXM6IExpZ2h0UHJvcGVydGllcykge1xyXG4gICAgY29uc3QgbGlnaHRUeXBlOiBMaWdodEVudW0gPSBsaWdodFByb3BlcnRpZXMudHlwZTtcclxuICAgIGNvbnN0IGxpZ2h0Q29uc3RydWN0b3IgPSB0aGlzLl9saWdodHNNYXAuZ2V0KGxpZ2h0VHlwZSk7XHJcbiAgICBjb25zdCBsaWdodDogTGlnaHQgPSBuZXcgbGlnaHRDb25zdHJ1Y3RvcigpIGFzIExpZ2h0O1xyXG4gICAgbGlnaHQudXNlckRhdGEud2FsbE9mZnNldCA9IGxpZ2h0UHJvcGVydGllcy53YWxsT2Zmc2V0O1xyXG4gICAgbGlnaHQudXNlckRhdGEucm90YXRpb25PZmZzZXQgPSBsaWdodFByb3BlcnRpZXMucm90YXRpb25PZmZzZXQ7XHJcbiAgICBsaWdodC51c2VyRGF0YS50b3BEb3duRGlyZWN0aW9uYWwgPSBsaWdodFByb3BlcnRpZXMudG9wRG93bkRpcmVjdGlvbmFsO1xyXG5cclxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gbGlnaHRQcm9wZXJ0aWVzKSB7XHJcbiAgICAgIGlmICghKHByb3BlcnR5IGluIGxpZ2h0KSkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChwcm9wZXJ0eSA9PT0gJ3Bvc2l0aW9uJykge1xyXG4gICAgICAgIGlmIChsaWdodC51c2VyRGF0YS53YWxsT2Zmc2V0ID09PSAwKSB7XHJcbiAgICAgICAgICBsaWdodC5wb3NpdGlvbi54ID0gbGlnaHRQcm9wZXJ0aWVzLnBvc2l0aW9uLng7XHJcbiAgICAgICAgICBsaWdodC5wb3NpdGlvbi56ID0gbGlnaHRQcm9wZXJ0aWVzLnBvc2l0aW9uLno7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpZ2h0LnBvc2l0aW9uLnkgPSBsaWdodFByb3BlcnRpZXMucG9zaXRpb24ueTtcclxuICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eSA9PT0gJ2NvbG9yJykge1xyXG4gICAgICAgIGxpZ2h0LmNvbG9yID0gbmV3IENvbG9yKGxpZ2h0UHJvcGVydGllcy5jb2xvcik7XHJcbiAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkgPT09ICdncm91bmRDb2xvcicpIHtcclxuICAgICAgICAobGlnaHQgYXMgYW55KS5ncm91bmRDb2xvciA9IG5ldyBDb2xvcihsaWdodFByb3BlcnRpZXMuZ3JvdW5kQ29sb3IpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX3NldE9iamVjdFByb3BlcnRpZXMobGlnaHQsIHByb3BlcnR5LCBsaWdodFByb3BlcnRpZXNbcHJvcGVydHldKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2xpZ2h0c1NlcnZpY2UuYWRkTGlnaHQobGlnaHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0T2JqZWN0UHJvcGVydGllcyhvYmplY3Q6IExpZ2h0IHwgTGlnaHRQcm9wZXJ0aWVzLCBwcm9wZXJ0eTogYW55LCB2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAocHJvcGVydHkgPT09ICdzaGFkb3cnKSB7XHJcbiAgICAgIGZvciAoY29uc3QgcHJvcCBpbiB2YWx1ZSkge1xyXG4gICAgICAgIGlmICghb2JqZWN0W3Byb3BlcnR5XS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9iamVjdFtwcm9wZXJ0eV1bcHJvcF0gPSB2YWx1ZVtwcm9wXTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,146 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { AmbientLight, DirectionalLight, HemisphereLight, SpotLight } from 'three';
3
- import { Subject } from 'rxjs';
4
- import { LightCreateService } from './light-creation.service';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "./scene.service";
7
- import * as i2 from "./bundle-initialzer.service";
8
- import * as i3 from "./configuration.service";
9
- import * as i4 from "./floor-plane.service";
10
- export class LightsService {
11
- constructor(_sceneService, _bundleInitializerService, _configurationService, _floorPlanService) {
12
- this._sceneService = _sceneService;
13
- this._bundleInitializerService = _bundleInitializerService;
14
- this._configurationService = _configurationService;
15
- this._floorPlanService = _floorPlanService;
16
- this.lights = [];
17
- this.onLightAdded = new Subject();
18
- this._subs = [];
19
- this._subs.push(this._bundleInitializerService.lightPresetsLoaded.subscribe((lightPreset) => {
20
- }), this._bundleInitializerService.floorTexturesLoaded.subscribe(() => {
21
- this.updateAllOffsets();
22
- }));
23
- }
24
- ngOnDestroy() {
25
- this._subs.forEach(s => s.unsubscribe());
26
- }
27
- init() {
28
- }
29
- createLight(modelClass) {
30
- const getLights = new LightCreateService();
31
- const light = getLights.createNewLight(modelClass);
32
- // const light: T = new modelClass();
33
- light.name = `new_${modelClass.name}`;
34
- this._addLight(light);
35
- this.onLightAdded.next({ light: light, index: this.lights.length - 1 });
36
- }
37
- addLight(light) {
38
- this._addLight(light);
39
- }
40
- removeAllLights() {
41
- const currentLights = this.lights.slice();
42
- // this.lights.length = 0;
43
- currentLights.forEach(cl => {
44
- this._removeLight(cl);
45
- });
46
- }
47
- initiateLightPreset() {
48
- // this.lights.forEach(l => this._sceneService.addObject(l));
49
- this.lights.forEach(l => this.updateOffsets(l));
50
- }
51
- updateAllOffsets() {
52
- this.lights.forEach(l => this.updateOffsets(l));
53
- }
54
- updateOffsets(light) {
55
- if (light instanceof AmbientLight || light instanceof HemisphereLight) {
56
- return;
57
- }
58
- const ro = light.userData.rotationOffset;
59
- const wo = light.userData.wallOffset;
60
- const fc = this._floorPlanService.getCenterFloorPlane();
61
- const size = this._floorPlanService.getPlaneSize();
62
- const planHalfWidth = isFinite(size.x) ? size.x / 2.0 : 0;
63
- const planHalfDepth = isFinite(size.z) ? size.z / 2.0 : 0;
64
- if (wo === 0) { // just use position of light
65
- this._updateShadowCamera(light);
66
- return;
67
- }
68
- // Reset position & rotation
69
- light.position.x = fc.x;
70
- light.position.z = fc.z;
71
- light.rotation.set(0, 0, 0);
72
- // Offset to the appropriate corner & translate in the opposite direction in equal steps based on the room dimensions.
73
- if (ro > 315) {
74
- light.translateZ(Math.abs(planHalfDepth + wo));
75
- light.translateX(Math.abs(planHalfWidth + wo));
76
- light.translateX(-Math.abs((((planHalfWidth * 2) + (wo * 2)) / 90) * (ro - 315)));
77
- }
78
- else if (ro > 225) {
79
- light.translateX(Math.abs(planHalfWidth + wo));
80
- light.translateZ(-Math.abs(planHalfDepth + wo));
81
- light.translateZ(Math.abs((((planHalfDepth * 2) + (wo * 2)) / 90) * (ro - 225)));
82
- }
83
- else if (ro > 135) {
84
- light.translateZ(-Math.abs(planHalfDepth + wo));
85
- light.translateX(-Math.abs(planHalfWidth + wo));
86
- light.translateX(Math.abs((((planHalfWidth * 2) + (wo * 2)) / 90) * (ro - 135)));
87
- }
88
- else if (ro > 45) {
89
- light.translateX(-Math.abs(planHalfWidth + wo));
90
- light.translateZ(Math.abs(planHalfDepth + wo));
91
- light.translateZ(-Math.abs((((planHalfDepth * 2) + (wo * 2)) / 90) * (ro - 45)));
92
- }
93
- else if (ro >= 0) {
94
- light.translateZ(Math.abs(planHalfDepth + wo));
95
- light.translateX(-Math.abs((((planHalfWidth * 2) + (wo * 2)) / 90) * ro));
96
- }
97
- this._updateShadowCamera(light);
98
- }
99
- _addLight(light, updateLightArray = true) {
100
- this._sceneService.addObject(light);
101
- if (light instanceof SpotLight || light instanceof DirectionalLight) {
102
- this._sceneService.addObject(light.target);
103
- this._updateShadowCamera(light);
104
- }
105
- if (updateLightArray) {
106
- this.lights.push(light);
107
- }
108
- }
109
- _removeLight(light, updateLightArray = true) {
110
- const idx = this.lights.indexOf(light);
111
- if (light instanceof SpotLight || light instanceof DirectionalLight) {
112
- this._sceneService.removeObject(light.target);
113
- }
114
- this._sceneService.removeObject(light);
115
- if (updateLightArray) {
116
- this.lights.splice(idx, 1);
117
- }
118
- }
119
- _updateShadowCamera(light) {
120
- const size = this._floorPlanService.getPlaneSize();
121
- if (size.x === -Infinity || size.y === -Infinity || size.z === -Infinity ||
122
- size.x === Infinity || size.y === Infinity || size.z === Infinity) {
123
- return;
124
- }
125
- const dWidth = (size.x + 3) / 2.0;
126
- const dHeight = (size.z + 3) / 2.0;
127
- const center = this._floorPlanService.getCenterFloorPlane();
128
- if (light instanceof SpotLight || light instanceof DirectionalLight) {
129
- if (light instanceof DirectionalLight && light.userData.topDownDirectional) {
130
- light.position.set(center.x, 3, center.z);
131
- light.shadow.camera.left = -dWidth;
132
- light.shadow.camera.right = dWidth;
133
- light.shadow.camera.top = dHeight;
134
- light.shadow.camera.bottom = -dHeight;
135
- }
136
- light.target.position.copy(center);
137
- }
138
- }
139
- }
140
- LightsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LightsService, deps: [{ token: i1.SceneService }, { token: i2.BundleInitializerService }, { token: i3.ConfigurationService }, { token: i4.FloorPlaneService }], target: i0.ɵɵFactoryTarget.Injectable });
141
- LightsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LightsService, providedIn: 'root' });
142
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LightsService, decorators: [{
143
- type: Injectable,
144
- args: [{ providedIn: 'root' }]
145
- }], ctorParameters: function () { return [{ type: i1.SceneService }, { type: i2.BundleInitializerService }, { type: i3.ConfigurationService }, { type: i4.FloorPlaneService }]; } });
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25maWd1cmF0b3Ivc3JjL2xpYi9zZXJ2aWNlcy9saWdodHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFTLFNBQVMsRUFBVSxNQUFNLE9BQU8sQ0FBQztBQUNqRyxPQUFPLEVBQUMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBRzNDLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7QUFPNUQsTUFBTSxPQUFPLGFBQWE7SUFPeEIsWUFDVSxhQUEyQixFQUMzQix5QkFBbUQsRUFDbkQscUJBQTJDLEVBQzNDLGlCQUFvQztRQUhwQyxrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQiw4QkFBeUIsR0FBekIseUJBQXlCLENBQTBCO1FBQ25ELDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBc0I7UUFDM0Msc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQVR2QyxXQUFNLEdBQVksRUFBRSxDQUFDO1FBQ3JCLGlCQUFZLEdBQTZDLElBQUksT0FBTyxFQUFtQyxDQUFDO1FBRXZHLFVBQUssR0FBbUIsRUFBRSxDQUFDO1FBU2pDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUNiLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUEwQixFQUFFLEVBQUU7UUFFM0YsQ0FBQyxDQUFDLEVBQ0YsSUFBSSxDQUFDLHlCQUF5QixDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDaEUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUNI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O1NBQ3BDO0lBQ0gsQ0FBQzs7MkdBMUpVLGFBQWE7K0dBQWIsYUFBYSxjQUZELE1BQU07NEZBRWxCLGFBQWE7a0JBRnpCLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0FtYmllbnRMaWdodCwgRGlyZWN0aW9uYWxMaWdodCwgSGVtaXNwaGVyZUxpZ2h0LCBMaWdodCwgU3BvdExpZ2h0LCBWZWN0b3IzfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7U3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtTY2VuZVNlcnZpY2V9IGZyb20gJy4vc2NlbmUuc2VydmljZSc7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvblNlcnZpY2V9IGZyb20gJy4vY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtMaWdodENyZWF0ZVNlcnZpY2V9IGZyb20gJy4vbGlnaHQtY3JlYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7QnVuZGxlSW5pdGlhbGl6ZXJTZXJ2aWNlfSBmcm9tICcuL2J1bmRsZS1pbml0aWFsemVyLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Zsb29yUGxhbmVTZXJ2aWNlfSBmcm9tICcuL2Zsb29yLXBsYW5lLnNlcnZpY2UnO1xyXG5pbXBvcnQge0xpZ2h0UHJlc2V0fSBmcm9tICcuLi9tb2RlbC9saWdodC1wcmVzZXQnO1xyXG5cclxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXHJcblxyXG5leHBvcnQgY2xhc3MgTGlnaHRzU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gIHB1YmxpYyBsaWdodHM6IExpZ2h0W10gPSBbXTtcclxuICBwdWJsaWMgb25MaWdodEFkZGVkOiBTdWJqZWN0PHsgbGlnaHQ6IExpZ2h0LCBpbmRleDogbnVtYmVyIH0+ID0gbmV3IFN1YmplY3Q8eyBsaWdodDogTGlnaHQsIGluZGV4OiBudW1iZXIgfT4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9zY2VuZVNlcnZpY2U6IFNjZW5lU2VydmljZSxcclxuICAgIHByaXZhdGUgX2J1bmRsZUluaXRpYWxpemVyU2VydmljZTogQnVuZGxlSW5pdGlhbGl6ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlndXJhdGlvblNlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZmxvb3JQbGFuU2VydmljZTogRmxvb3JQbGFuZVNlcnZpY2VcclxuICApIHtcclxuXHJcbiAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgIHRoaXMuX2J1bmRsZUluaXRpYWxpemVyU2VydmljZS5saWdodFByZXNldHNMb2FkZWQuc3Vic2NyaWJlKChsaWdodFByZXNldDogTGlnaHRQcmVzZXRbXSkgPT4ge1xyXG5cclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX2J1bmRsZUluaXRpYWxpemVyU2VydmljZS5mbG9vclRleHR1cmVzTG9hZGVkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVBbGxPZmZzZXRzKCk7XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlTGlnaHQ8VCBleHRlbmRzIExpZ2h0Pihtb2RlbENsYXNzOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGdldExpZ2h0czogTGlnaHRDcmVhdGVTZXJ2aWNlID0gbmV3IExpZ2h0Q3JlYXRlU2VydmljZSgpO1xyXG4gICAgY29uc3QgbGlnaHQ6IExpZ2h0ID0gZ2V0TGlnaHRzLmNyZWF0ZU5ld0xpZ2h0KG1vZGVsQ2xhc3MpO1xyXG4gICAgLy8gY29uc3QgbGlnaHQ6IFQgPSBuZXcgbW9kZWxDbGFzcygpO1xyXG4gICAgbGlnaHQubmFtZSA9IGBuZXdfJHttb2RlbENsYXNzLm5hbWV9YDtcclxuICAgIHRoaXMuX2FkZExpZ2h0KGxpZ2h0KTtcclxuICAgIHRoaXMub25MaWdodEFkZGVkLm5leHQoe2xpZ2h0OiBsaWdodCwgaW5kZXg6IHRoaXMubGlnaHRzLmxlbmd0aCAtIDF9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZGRMaWdodChsaWdodDogTGlnaHQpOiB2b2lkIHtcclxuICAgIHRoaXMuX2FkZExpZ2h0KGxpZ2h0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVBbGxMaWdodHMoKSB7XHJcbiAgICBjb25zdCBjdXJyZW50TGlnaHRzOiBMaWdodFtdID0gdGhpcy5saWdodHMuc2xpY2UoKTtcclxuICAgIC8vIHRoaXMubGlnaHRzLmxlbmd0aCA9IDA7XHJcbiAgICBjdXJyZW50TGlnaHRzLmZvckVhY2goY2wgPT4ge1xyXG4gICAgICB0aGlzLl9yZW1vdmVMaWdodChjbCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbml0aWF0ZUxpZ2h0UHJlc2V0KCkge1xyXG4gICAgLy8gdGhpcy5saWdodHMuZm9yRWFjaChsID0+IHRoaXMuX3NjZW5lU2VydmljZS5hZGRPYmplY3QobCkpO1xyXG4gICAgdGhpcy5saWdodHMuZm9yRWFjaChsID0+IHRoaXMudXBkYXRlT2Zmc2V0cyhsKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlQWxsT2Zmc2V0cygpOiB2b2lkIHtcclxuICAgIHRoaXMubGlnaHRzLmZvckVhY2gobCA9PiB0aGlzLnVwZGF0ZU9mZnNldHMobCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZU9mZnNldHMobGlnaHQ6IExpZ2h0KSB7XHJcbiAgICBpZiAobGlnaHQgaW5zdGFuY2VvZiBBbWJpZW50TGlnaHQgfHwgbGlnaHQgaW5zdGFuY2VvZiBIZW1pc3BoZXJlTGlnaHQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJvID0gbGlnaHQudXNlckRhdGEucm90YXRpb25PZmZzZXQ7XHJcbiAgICBjb25zdCB3byA9IGxpZ2h0LnVzZXJEYXRhLndhbGxPZmZzZXQ7XHJcbiAgICBjb25zdCBmYzogVmVjdG9yMyA9IHRoaXMuX2Zsb29yUGxhblNlcnZpY2UuZ2V0Q2VudGVyRmxvb3JQbGFuZSgpO1xyXG5cclxuICAgIGNvbnN0IHNpemU6IFZlY3RvcjMgPSB0aGlzLl9mbG9vclBsYW5TZXJ2aWNlLmdldFBsYW5lU2l6ZSgpO1xyXG4gICAgY29uc3QgcGxhbkhhbGZXaWR0aCA9IGlzRmluaXRlKHNpemUueCkgPyBzaXplLnggLyAyLjAgOiAwO1xyXG4gICAgY29uc3QgcGxhbkhhbGZEZXB0aCA9IGlzRmluaXRlKHNpemUueikgPyBzaXplLnogLyAyLjAgOiAwO1xyXG5cclxuICAgIGlmICh3byA9PT0gMCkgeyAvLyBqdXN0IHVzZSBwb3NpdGlvbiBvZiBsaWdodFxyXG4gICAgICB0aGlzLl91cGRhdGVTaGFkb3dDYW1lcmEobGlnaHQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVzZXQgcG9zaXRpb24gJiByb3RhdGlvblxyXG4gICAgbGlnaHQucG9zaXRpb24ueCA9IGZjLng7XHJcbiAgICBsaWdodC5wb3NpdGlvbi56ID0gZmMuejtcclxuICAgIGxpZ2h0LnJvdGF0aW9uLnNldCgwLCAwLCAwKTtcclxuXHJcbiAgICAvLyBPZmZzZXQgdG8gdGhlIGFwcHJvcHJpYXRlIGNvcm5lciAmIHRyYW5zbGF0ZSBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIGluIGVxdWFsIHN0ZXBzIGJhc2VkIG9uIHRoZSByb29tIGRpbWVuc2lvbnMuXHJcbiAgICBpZiAocm8gPiAzMTUpIHtcclxuICAgICAgbGlnaHQudHJhbnNsYXRlWihNYXRoLmFicyhwbGFuSGFsZkRlcHRoICsgd28pKTtcclxuICAgICAgbGlnaHQudHJhbnNsYXRlWChNYXRoLmFicyhwbGFuSGFsZldpZHRoICsgd28pKTtcclxuICAgICAgbGlnaHQudHJhbnNsYXRlWCgtTWF0aC5hYnMoKCgocGxhbkhhbGZXaWR0aCAqIDIpICsgKHdvICogMikpIC8gOTApICogKHJvIC0gMzE1KSkpO1xyXG4gICAgfSBlbHNlIGlmIChybyA+IDIyNSkge1xyXG4gICAgICBsaWdodC50cmFuc2xhdGVYKE1hdGguYWJzKHBsYW5IYWxmV2lkdGggKyB3bykpO1xyXG4gICAgICBsaWdodC50cmFuc2xhdGVaKC1NYXRoLmFicyhwbGFuSGFsZkRlcHRoICsgd28pKTtcclxuICAgICAgbGlnaHQudHJhbnNsYXRlWihNYXRoLmFicygoKChwbGFuSGFsZkRlcHRoICogMikgKyAod28gKiAyKSkgLyA5MCkgKiAocm8gLSAyMjUpKSk7XHJcbiAgICB9IGVsc2UgaWYgKHJvID4gMTM1KSB7XHJcbiAgICAgIGxpZ2h0LnRyYW5zbGF0ZVooLU1hdGguYWJzKHBsYW5IYWxmRGVwdGggKyB3bykpO1xyXG4gICAgICBsaWdodC50cmFuc2xhdGVYKC1NYXRoLmFicyhwbGFuSGFsZldpZHRoICsgd28pKTtcclxuICAgICAgbGlnaHQudHJhbnNsYXRlWChNYXRoLmFicygoKChwbGFuSGFsZldpZHRoICogMikgKyAod28gKiAyKSkgLyA5MCkgKiAocm8gLSAxMzUpKSk7XHJcbiAgICB9IGVsc2UgaWYgKHJvID4gNDUpIHtcclxuICAgICAgbGlnaHQudHJhbnNsYXRlWCgtTWF0aC5hYnMocGxhbkhhbGZXaWR0aCArIHdvKSk7XHJcbiAgICAgIGxpZ2h0LnRyYW5zbGF0ZVooTWF0aC5hYnMocGxhbkhhbGZEZXB0aCArIHdvKSk7XHJcbiAgICAgIGxpZ2h0LnRyYW5zbGF0ZVooLU1hdGguYWJzKCgoKHBsYW5IYWxmRGVwdGggKiAyKSArICh3byAqIDIpKSAvIDkwKSAqIChybyAtIDQ1KSkpO1xyXG4gICAgfSBlbHNlIGlmIChybyA+PSAwKSB7XHJcbiAgICAgIGxpZ2h0LnRyYW5zbGF0ZVooTWF0aC5hYnMocGxhbkhhbGZEZXB0aCArIHdvKSk7XHJcbiAgICAgIGxpZ2h0LnRyYW5zbGF0ZVgoLU1hdGguYWJzKCgoKHBsYW5IYWxmV2lkdGggKiAyKSArICh3byAqIDIpKSAvIDkwKSAqIHJvKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl91cGRhdGVTaGFkb3dDYW1lcmEobGlnaHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWRkTGlnaHQobGlnaHQ6IExpZ2h0LCB1cGRhdGVMaWdodEFycmF5OiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLmFkZE9iamVjdChsaWdodCk7XHJcbiAgICBpZiAobGlnaHQgaW5zdGFuY2VvZiBTcG90TGlnaHQgfHwgbGlnaHQgaW5zdGFuY2VvZiBEaXJlY3Rpb25hbExpZ2h0KSB7XHJcbiAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5hZGRPYmplY3QobGlnaHQudGFyZ2V0KTtcclxuICAgICAgdGhpcy5fdXBkYXRlU2hhZG93Q2FtZXJhKGxpZ2h0KTtcclxuICAgIH1cclxuICAgIGlmICh1cGRhdGVMaWdodEFycmF5KSB7XHJcbiAgICAgIHRoaXMubGlnaHRzLnB1c2gobGlnaHQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlTGlnaHQobGlnaHQ6IExpZ2h0LCB1cGRhdGVMaWdodEFycmF5OiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgY29uc3QgaWR4OiBudW1iZXIgPSB0aGlzLmxpZ2h0cy5pbmRleE9mKGxpZ2h0KTtcclxuICAgIGlmIChsaWdodCBpbnN0YW5jZW9mIFNwb3RMaWdodCB8fCBsaWdodCBpbnN0YW5jZW9mIERpcmVjdGlvbmFsTGlnaHQpIHtcclxuICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnJlbW92ZU9iamVjdChsaWdodC50YXJnZXQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnJlbW92ZU9iamVjdChsaWdodCk7XHJcblxyXG4gICAgaWYgKHVwZGF0ZUxpZ2h0QXJyYXkpIHtcclxuICAgICAgdGhpcy5saWdodHMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVTaGFkb3dDYW1lcmEobGlnaHQ6IExpZ2h0KSB7XHJcbiAgICBjb25zdCBzaXplOiBWZWN0b3IzID0gdGhpcy5fZmxvb3JQbGFuU2VydmljZS5nZXRQbGFuZVNpemUoKTtcclxuXHJcbiAgICBpZiAoc2l6ZS54ID09PSAtSW5maW5pdHkgfHwgc2l6ZS55ID09PSAtSW5maW5pdHkgfHwgc2l6ZS56ID09PSAtSW5maW5pdHkgfHxcclxuICAgICAgc2l6ZS54ID09PSBJbmZpbml0eSB8fCBzaXplLnkgPT09IEluZmluaXR5IHx8IHNpemUueiA9PT0gSW5maW5pdHkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRXaWR0aDogbnVtYmVyID0gKHNpemUueCArIDMpIC8gMi4wO1xyXG4gICAgY29uc3QgZEhlaWdodDogbnVtYmVyID0gKHNpemUueiArIDMpIC8gMi4wO1xyXG4gICAgY29uc3QgY2VudGVyOiBWZWN0b3IzID0gdGhpcy5fZmxvb3JQbGFuU2VydmljZS5nZXRDZW50ZXJGbG9vclBsYW5lKCk7XHJcblxyXG4gICAgaWYgKGxpZ2h0IGluc3RhbmNlb2YgU3BvdExpZ2h0IHx8IGxpZ2h0IGluc3RhbmNlb2YgRGlyZWN0aW9uYWxMaWdodCkge1xyXG4gICAgICBpZiAobGlnaHQgaW5zdGFuY2VvZiBEaXJlY3Rpb25hbExpZ2h0ICYmIGxpZ2h0LnVzZXJEYXRhLnRvcERvd25EaXJlY3Rpb25hbCkge1xyXG4gICAgICAgIGxpZ2h0LnBvc2l0aW9uLnNldChjZW50ZXIueCwgMywgY2VudGVyLnopO1xyXG4gICAgICAgIGxpZ2h0LnNoYWRvdy5jYW1lcmEubGVmdCA9IC1kV2lkdGg7XHJcbiAgICAgICAgbGlnaHQuc2hhZG93LmNhbWVyYS5yaWdodCA9IGRXaWR0aDtcclxuICAgICAgICBsaWdodC5zaGFkb3cuY2FtZXJhLnRvcCA9IGRIZWlnaHQ7XHJcbiAgICAgICAgbGlnaHQuc2hhZG93LmNhbWVyYS5ib3R0b20gPSAtZEhlaWdodDtcclxuICAgICAgfVxyXG4gICAgICBsaWdodC50YXJnZXQucG9zaXRpb24uY29weShjZW50ZXIpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=