@rocketshow/designer 1.32.0 → 1.33.0

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 (339) hide show
  1. package/esm2022/lib/array-sort-pipe.mjs +30 -0
  2. package/esm2022/lib/designer.component.mjs +605 -0
  3. package/esm2022/lib/designer.module.mjs +183 -0
  4. package/esm2022/lib/designer.service.mjs +14 -0
  5. package/esm2022/lib/effect/effect-curve/effect-curve.component.mjs +569 -0
  6. package/esm2022/lib/effect/effect-pan-tilt/effect-pan-tilt.component.mjs +36 -0
  7. package/esm2022/lib/effect/effect.component.mjs +174 -0
  8. package/esm2022/lib/error-dialog/error-dialog.component.mjs +75 -0
  9. package/esm2022/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.mjs +222 -0
  10. package/esm2022/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.mjs +147 -0
  11. package/esm2022/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.mjs +213 -0
  12. package/esm2022/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.mjs +78 -0
  13. package/esm2022/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.mjs +119 -0
  14. package/esm2022/lib/fixture/fixture-capability/fixture-capability.component.mjs +169 -0
  15. package/esm2022/lib/fixture/fixture-channel/fixture-channel.component.mjs +160 -0
  16. package/esm2022/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.mjs +365 -0
  17. package/esm2022/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.mjs +151 -0
  18. package/esm2022/lib/fixture/fixture-settings/fixture-settings.component.mjs +46 -0
  19. package/esm2022/lib/fixture/fixture.component.mjs +138 -0
  20. package/esm2022/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.mjs +145 -0
  21. package/esm2022/lib/fixture-pool/fixture-pool.component.mjs +589 -0
  22. package/esm2022/lib/intro/intro.component.mjs +95 -0
  23. package/esm2022/lib/master-dimmer/master-dimmer.component.mjs +66 -0
  24. package/esm2022/lib/models/cached-fixture-capability.mjs +9 -0
  25. package/esm2022/lib/models/cached-fixture-channel.mjs +7 -0
  26. package/esm2022/lib/models/cached-fixture.mjs +6 -0
  27. package/esm2022/lib/models/color.mjs +8 -0
  28. package/esm2022/lib/models/composition.mjs +46 -0
  29. package/esm2022/lib/models/effect-curve-profile-channel.mjs +15 -0
  30. package/esm2022/lib/models/effect-curve.mjs +69 -0
  31. package/esm2022/lib/models/effect-pan-tilt.mjs +19 -0
  32. package/esm2022/lib/models/effect.mjs +12 -0
  33. package/esm2022/lib/models/fixture-capability-value.mjs +15 -0
  34. package/esm2022/lib/models/fixture-capability.mjs +84 -0
  35. package/esm2022/lib/models/fixture-channel-value.mjs +11 -0
  36. package/esm2022/lib/models/fixture-channel.mjs +24 -0
  37. package/esm2022/lib/models/fixture-mode.mjs +14 -0
  38. package/esm2022/lib/models/fixture-profile.mjs +70 -0
  39. package/esm2022/lib/models/fixture-wheel-slot.mjs +26 -0
  40. package/esm2022/lib/models/fixture-wheel.mjs +15 -0
  41. package/esm2022/lib/models/fixture.mjs +40 -0
  42. package/esm2022/lib/models/preset-region-scene.mjs +8 -0
  43. package/esm2022/lib/models/preset.mjs +56 -0
  44. package/esm2022/lib/models/project.mjs +68 -0
  45. package/esm2022/lib/models/scene-playback-region.mjs +11 -0
  46. package/esm2022/lib/models/scene.mjs +27 -0
  47. package/esm2022/lib/models/universe.mjs +11 -0
  48. package/esm2022/lib/preset/preset-settings/preset-settings.component.mjs +194 -0
  49. package/esm2022/lib/preset/preset.component.mjs +131 -0
  50. package/esm2022/lib/preview/models/color-changer-3d.mjs +167 -0
  51. package/esm2022/lib/preview/models/fixture-3d.mjs +150 -0
  52. package/esm2022/lib/preview/models/moving-head-3d.mjs +243 -0
  53. package/esm2022/lib/preview/preview.component.mjs +212 -0
  54. package/esm2022/lib/project/project-browser/project-browser.component.mjs +143 -0
  55. package/esm2022/lib/project/project-import/project-import.component.mjs +107 -0
  56. package/esm2022/lib/project/project-save/project-save.component.mjs +178 -0
  57. package/esm2022/lib/project/project-share/project-share.component.mjs +71 -0
  58. package/esm2022/lib/scene/scene-settings/scene-settings.component.mjs +146 -0
  59. package/esm2022/lib/scene/scene.component.mjs +110 -0
  60. package/esm2022/lib/services/animation.service.mjs +16 -0
  61. package/esm2022/lib/services/config.service.mjs +27 -0
  62. package/esm2022/lib/services/effect.service.mjs +14 -0
  63. package/esm2022/lib/services/error-dialog.service.mjs +39 -0
  64. package/esm2022/lib/services/fixture-pool.service.mjs +30 -0
  65. package/esm2022/lib/services/fixture.service.mjs +431 -0
  66. package/esm2022/lib/services/hotkey-target-exclude.service.mjs +24 -0
  67. package/esm2022/lib/services/intro.service.mjs +140 -0
  68. package/esm2022/lib/services/preset.service.mjs +400 -0
  69. package/esm2022/lib/services/preview-mesh.service.mjs +57 -0
  70. package/esm2022/lib/services/preview.service.mjs +496 -0
  71. package/esm2022/lib/services/project-load.service.mjs +149 -0
  72. package/esm2022/lib/services/project.service.mjs +97 -0
  73. package/esm2022/lib/services/scene.service.mjs +164 -0
  74. package/esm2022/lib/services/timeline.service.mjs +726 -0
  75. package/esm2022/lib/services/universe.service.mjs +23 -0
  76. package/esm2022/lib/services/user-ensure-login.service.mjs +38 -0
  77. package/esm2022/lib/services/user.service.mjs +89 -0
  78. package/esm2022/lib/services/uuid.service.mjs +23 -0
  79. package/esm2022/lib/services/warning-dialog.service.mjs +38 -0
  80. package/esm2022/lib/timeline/composition-settings/composition-settings.component.mjs +334 -0
  81. package/esm2022/lib/timeline/timeline-grid/timeline-grid.component.mjs +216 -0
  82. package/esm2022/lib/timeline/timeline.component.mjs +418 -0
  83. package/esm2022/lib/user/user-login/user-login.component.mjs +144 -0
  84. package/esm2022/lib/user/user-register/user-register.component.mjs +220 -0
  85. package/esm2022/lib/wait-dialog/wait-dialog.component.mjs +26 -0
  86. package/esm2022/lib/warning-dialog/warning-dialog.component.mjs +68 -0
  87. package/esm2022/public_api.mjs +7 -0
  88. package/esm2022/rocketshow-designer.mjs +5 -0
  89. package/fesm2022/rocketshow-designer.mjs +10626 -0
  90. package/fesm2022/rocketshow-designer.mjs.map +1 -0
  91. package/index.d.ts +5 -0
  92. package/lib/array-sort-pipe.d.ts +3 -0
  93. package/lib/designer.component.d.ts +15 -12
  94. package/lib/designer.module.d.ts +54 -0
  95. package/lib/designer.service.d.ts +3 -0
  96. package/lib/effect/effect-curve/effect-curve.component.d.ts +4 -1
  97. package/lib/effect/effect-pan-tilt/effect-pan-tilt.component.d.ts +3 -0
  98. package/lib/effect/effect.component.d.ts +3 -0
  99. package/lib/error-dialog/error-dialog.component.d.ts +3 -0
  100. package/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.d.ts +4 -1
  101. package/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.d.ts +3 -0
  102. package/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.d.ts +5 -2
  103. package/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.d.ts +3 -0
  104. package/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.d.ts +3 -0
  105. package/lib/fixture/fixture-capability/fixture-capability.component.d.ts +3 -0
  106. package/lib/fixture/fixture-channel/fixture-channel.component.d.ts +3 -0
  107. package/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.d.ts +3 -0
  108. package/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.d.ts +3 -0
  109. package/lib/fixture/fixture-settings/fixture-settings.component.d.ts +3 -0
  110. package/lib/fixture/fixture.component.d.ts +3 -0
  111. package/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.d.ts +3 -0
  112. package/lib/fixture-pool/fixture-pool.component.d.ts +3 -0
  113. package/lib/intro/intro.component.d.ts +3 -0
  114. package/lib/master-dimmer/master-dimmer.component.d.ts +3 -0
  115. package/lib/preset/preset-settings/preset-settings.component.d.ts +3 -0
  116. package/lib/preset/preset.component.d.ts +3 -0
  117. package/lib/preview/preview.component.d.ts +4 -4
  118. package/lib/project/project-browser/project-browser.component.d.ts +3 -0
  119. package/lib/project/project-import/project-import.component.d.ts +3 -0
  120. package/lib/project/project-save/project-save.component.d.ts +3 -0
  121. package/lib/project/project-share/project-share.component.d.ts +3 -0
  122. package/lib/scene/scene-settings/scene-settings.component.d.ts +3 -0
  123. package/lib/scene/scene.component.d.ts +3 -0
  124. package/lib/services/animation.service.d.ts +3 -0
  125. package/lib/services/config.service.d.ts +3 -0
  126. package/lib/services/effect.service.d.ts +3 -0
  127. package/lib/services/error-dialog.service.d.ts +3 -0
  128. package/lib/services/fixture-pool.service.d.ts +3 -0
  129. package/lib/services/fixture.service.d.ts +3 -0
  130. package/lib/services/hotkey-target-exclude.service.d.ts +3 -0
  131. package/lib/services/intro.service.d.ts +3 -0
  132. package/lib/services/preset.service.d.ts +3 -0
  133. package/lib/services/preview-mesh.service.d.ts +3 -0
  134. package/lib/services/preview.service.d.ts +4 -0
  135. package/lib/services/project-load.service.d.ts +3 -0
  136. package/lib/services/project.service.d.ts +3 -0
  137. package/lib/services/scene.service.d.ts +3 -0
  138. package/lib/services/timeline.service.d.ts +4 -1
  139. package/lib/services/universe.service.d.ts +3 -0
  140. package/lib/services/user-ensure-login.service.d.ts +3 -0
  141. package/lib/services/user.service.d.ts +3 -0
  142. package/lib/services/uuid.service.d.ts +3 -0
  143. package/lib/services/warning-dialog.service.d.ts +3 -0
  144. package/lib/timeline/composition-settings/composition-settings.component.d.ts +3 -0
  145. package/lib/timeline/timeline-grid/timeline-grid.component.d.ts +3 -0
  146. package/lib/timeline/timeline.component.d.ts +3 -0
  147. package/lib/user/user-login/user-login.component.d.ts +3 -0
  148. package/lib/user/user-register/user-register.component.d.ts +3 -0
  149. package/lib/wait-dialog/wait-dialog.component.d.ts +3 -0
  150. package/lib/warning-dialog/warning-dialog.component.d.ts +3 -0
  151. package/package.json +20 -22
  152. package/rocketshow-designer-1.33.0.tgz +0 -0
  153. package/bundles/rocketshow-designer.umd.js +0 -9966
  154. package/bundles/rocketshow-designer.umd.js.map +0 -1
  155. package/bundles/rocketshow-designer.umd.min.js +0 -17
  156. package/bundles/rocketshow-designer.umd.min.js.map +0 -1
  157. package/esm2015/lib/array-sort-pipe.js +0 -28
  158. package/esm2015/lib/designer.component.js +0 -411
  159. package/esm2015/lib/designer.module.js +0 -117
  160. package/esm2015/lib/designer.service.js +0 -16
  161. package/esm2015/lib/effect/effect-curve/effect-curve.component.js +0 -325
  162. package/esm2015/lib/effect/effect-pan-tilt/effect-pan-tilt.component.js +0 -30
  163. package/esm2015/lib/effect/effect.component.js +0 -73
  164. package/esm2015/lib/error-dialog/error-dialog.component.js +0 -42
  165. package/esm2015/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.js +0 -141
  166. package/esm2015/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.js +0 -128
  167. package/esm2015/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.js +0 -163
  168. package/esm2015/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.js +0 -60
  169. package/esm2015/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.js +0 -87
  170. package/esm2015/lib/fixture/fixture-capability/fixture-capability.component.js +0 -97
  171. package/esm2015/lib/fixture/fixture-channel/fixture-channel.component.js +0 -66
  172. package/esm2015/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.js +0 -200
  173. package/esm2015/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.js +0 -31
  174. package/esm2015/lib/fixture/fixture-settings/fixture-settings.component.js +0 -35
  175. package/esm2015/lib/fixture/fixture.component.js +0 -70
  176. package/esm2015/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.js +0 -128
  177. package/esm2015/lib/fixture-pool/fixture-pool.component.js +0 -331
  178. package/esm2015/lib/intro/intro.component.js +0 -25
  179. package/esm2015/lib/master-dimmer/master-dimmer.component.js +0 -41
  180. package/esm2015/lib/models/cached-fixture-capability.js +0 -9
  181. package/esm2015/lib/models/cached-fixture-channel.js +0 -7
  182. package/esm2015/lib/models/cached-fixture.js +0 -6
  183. package/esm2015/lib/models/color.js +0 -8
  184. package/esm2015/lib/models/composition.js +0 -46
  185. package/esm2015/lib/models/effect-curve-profile-channel.js +0 -15
  186. package/esm2015/lib/models/effect-curve.js +0 -69
  187. package/esm2015/lib/models/effect-pan-tilt.js +0 -19
  188. package/esm2015/lib/models/effect.js +0 -12
  189. package/esm2015/lib/models/fixture-capability-value.js +0 -15
  190. package/esm2015/lib/models/fixture-capability.js +0 -84
  191. package/esm2015/lib/models/fixture-channel-value.js +0 -11
  192. package/esm2015/lib/models/fixture-channel.js +0 -24
  193. package/esm2015/lib/models/fixture-mode.js +0 -14
  194. package/esm2015/lib/models/fixture-profile.js +0 -70
  195. package/esm2015/lib/models/fixture-wheel-slot.js +0 -26
  196. package/esm2015/lib/models/fixture-wheel.js +0 -15
  197. package/esm2015/lib/models/fixture.js +0 -40
  198. package/esm2015/lib/models/preset-region-scene.js +0 -8
  199. package/esm2015/lib/models/preset.js +0 -56
  200. package/esm2015/lib/models/project.js +0 -68
  201. package/esm2015/lib/models/scene-playback-region.js +0 -11
  202. package/esm2015/lib/models/scene.js +0 -27
  203. package/esm2015/lib/models/universe.js +0 -11
  204. package/esm2015/lib/preset/preset-settings/preset-settings.component.js +0 -66
  205. package/esm2015/lib/preset/preset.component.js +0 -85
  206. package/esm2015/lib/preview/models/color-changer-3d.js +0 -167
  207. package/esm2015/lib/preview/models/fixture-3d.js +0 -150
  208. package/esm2015/lib/preview/models/moving-head-3d.js +0 -233
  209. package/esm2015/lib/preview/preview.component.js +0 -242
  210. package/esm2015/lib/project/project-browser/project-browser.component.js +0 -73
  211. package/esm2015/lib/project/project-import/project-import.component.js +0 -89
  212. package/esm2015/lib/project/project-save/project-save.component.js +0 -105
  213. package/esm2015/lib/project/project-share/project-share.component.js +0 -43
  214. package/esm2015/lib/scene/scene-settings/scene-settings.component.js +0 -52
  215. package/esm2015/lib/scene/scene.component.js +0 -56
  216. package/esm2015/lib/services/animation.service.js +0 -17
  217. package/esm2015/lib/services/config.service.js +0 -28
  218. package/esm2015/lib/services/effect.service.js +0 -16
  219. package/esm2015/lib/services/error-dialog.service.js +0 -44
  220. package/esm2015/lib/services/fixture-pool.service.js +0 -34
  221. package/esm2015/lib/services/fixture.service.js +0 -443
  222. package/esm2015/lib/services/hotkey-target-exclude.service.js +0 -26
  223. package/esm2015/lib/services/intro.service.js +0 -144
  224. package/esm2015/lib/services/preset.service.js +0 -416
  225. package/esm2015/lib/services/preview-mesh.service.js +0 -58
  226. package/esm2015/lib/services/preview.service.js +0 -500
  227. package/esm2015/lib/services/project-load.service.js +0 -171
  228. package/esm2015/lib/services/project.service.js +0 -113
  229. package/esm2015/lib/services/scene.service.js +0 -174
  230. package/esm2015/lib/services/timeline.service.js +0 -738
  231. package/esm2015/lib/services/universe.service.js +0 -24
  232. package/esm2015/lib/services/user-ensure-login.service.js +0 -44
  233. package/esm2015/lib/services/user.service.js +0 -93
  234. package/esm2015/lib/services/uuid.service.js +0 -25
  235. package/esm2015/lib/services/warning-dialog.service.js +0 -43
  236. package/esm2015/lib/timeline/composition-settings/composition-settings.component.js +0 -197
  237. package/esm2015/lib/timeline/timeline-grid/timeline-grid.component.js +0 -55
  238. package/esm2015/lib/timeline/timeline.component.js +0 -239
  239. package/esm2015/lib/user/user-login/user-login.component.js +0 -64
  240. package/esm2015/lib/user/user-register/user-register.component.js +0 -89
  241. package/esm2015/lib/wait-dialog/wait-dialog.component.js +0 -16
  242. package/esm2015/lib/warning-dialog/warning-dialog.component.js +0 -42
  243. package/esm2015/public_api.js +0 -7
  244. package/esm2015/rocketshow-designer.js +0 -61
  245. package/esm5/lib/array-sort-pipe.js +0 -31
  246. package/esm5/lib/designer.component.js +0 -468
  247. package/esm5/lib/designer.module.js +0 -120
  248. package/esm5/lib/designer.service.js +0 -17
  249. package/esm5/lib/effect/effect-curve/effect-curve.component.js +0 -386
  250. package/esm5/lib/effect/effect-pan-tilt/effect-pan-tilt.component.js +0 -31
  251. package/esm5/lib/effect/effect.component.js +0 -75
  252. package/esm5/lib/error-dialog/error-dialog.component.js +0 -43
  253. package/esm5/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.js +0 -159
  254. package/esm5/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.js +0 -130
  255. package/esm5/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.js +0 -215
  256. package/esm5/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.js +0 -61
  257. package/esm5/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.js +0 -88
  258. package/esm5/lib/fixture/fixture-capability/fixture-capability.component.js +0 -130
  259. package/esm5/lib/fixture/fixture-channel/fixture-channel.component.js +0 -68
  260. package/esm5/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.js +0 -306
  261. package/esm5/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.js +0 -32
  262. package/esm5/lib/fixture/fixture-settings/fixture-settings.component.js +0 -36
  263. package/esm5/lib/fixture/fixture.component.js +0 -71
  264. package/esm5/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.js +0 -127
  265. package/esm5/lib/fixture-pool/fixture-pool.component.js +0 -430
  266. package/esm5/lib/intro/intro.component.js +0 -26
  267. package/esm5/lib/master-dimmer/master-dimmer.component.js +0 -42
  268. package/esm5/lib/models/cached-fixture-capability.js +0 -11
  269. package/esm5/lib/models/cached-fixture-channel.js +0 -9
  270. package/esm5/lib/models/cached-fixture.js +0 -8
  271. package/esm5/lib/models/color.js +0 -10
  272. package/esm5/lib/models/composition.js +0 -60
  273. package/esm5/lib/models/effect-curve-profile-channel.js +0 -29
  274. package/esm5/lib/models/effect-curve.js +0 -95
  275. package/esm5/lib/models/effect-pan-tilt.js +0 -24
  276. package/esm5/lib/models/effect.js +0 -14
  277. package/esm5/lib/models/fixture-capability-value.js +0 -17
  278. package/esm5/lib/models/fixture-capability.js +0 -86
  279. package/esm5/lib/models/fixture-channel-value.js +0 -13
  280. package/esm5/lib/models/fixture-channel.js +0 -38
  281. package/esm5/lib/models/fixture-mode.js +0 -16
  282. package/esm5/lib/models/fixture-profile.js +0 -114
  283. package/esm5/lib/models/fixture-wheel-slot.js +0 -28
  284. package/esm5/lib/models/fixture-wheel.js +0 -29
  285. package/esm5/lib/models/fixture.js +0 -42
  286. package/esm5/lib/models/preset-region-scene.js +0 -10
  287. package/esm5/lib/models/preset.js +0 -90
  288. package/esm5/lib/models/project.js +0 -122
  289. package/esm5/lib/models/scene-playback-region.js +0 -13
  290. package/esm5/lib/models/scene.js +0 -29
  291. package/esm5/lib/models/universe.js +0 -13
  292. package/esm5/lib/preset/preset-settings/preset-settings.component.js +0 -67
  293. package/esm5/lib/preset/preset.component.js +0 -86
  294. package/esm5/lib/preview/models/color-changer-3d.js +0 -194
  295. package/esm5/lib/preview/models/fixture-3d.js +0 -196
  296. package/esm5/lib/preview/models/moving-head-3d.js +0 -250
  297. package/esm5/lib/preview/preview.component.js +0 -280
  298. package/esm5/lib/project/project-browser/project-browser.component.js +0 -77
  299. package/esm5/lib/project/project-import/project-import.component.js +0 -88
  300. package/esm5/lib/project/project-save/project-save.component.js +0 -120
  301. package/esm5/lib/project/project-share/project-share.component.js +0 -44
  302. package/esm5/lib/scene/scene-settings/scene-settings.component.js +0 -53
  303. package/esm5/lib/scene/scene.component.js +0 -57
  304. package/esm5/lib/services/animation.service.js +0 -18
  305. package/esm5/lib/services/config.service.js +0 -29
  306. package/esm5/lib/services/effect.service.js +0 -17
  307. package/esm5/lib/services/error-dialog.service.js +0 -46
  308. package/esm5/lib/services/fixture-pool.service.js +0 -36
  309. package/esm5/lib/services/fixture.service.js +0 -643
  310. package/esm5/lib/services/hotkey-target-exclude.service.js +0 -27
  311. package/esm5/lib/services/intro.service.js +0 -145
  312. package/esm5/lib/services/preset.service.js +0 -637
  313. package/esm5/lib/services/preview-mesh.service.js +0 -61
  314. package/esm5/lib/services/preview.service.js +0 -754
  315. package/esm5/lib/services/project-load.service.js +0 -185
  316. package/esm5/lib/services/project.service.js +0 -127
  317. package/esm5/lib/services/scene.service.js +0 -251
  318. package/esm5/lib/services/timeline.service.js +0 -845
  319. package/esm5/lib/services/universe.service.js +0 -36
  320. package/esm5/lib/services/user-ensure-login.service.js +0 -45
  321. package/esm5/lib/services/user.service.js +0 -95
  322. package/esm5/lib/services/uuid.service.js +0 -26
  323. package/esm5/lib/services/warning-dialog.service.js +0 -45
  324. package/esm5/lib/timeline/composition-settings/composition-settings.component.js +0 -206
  325. package/esm5/lib/timeline/timeline-grid/timeline-grid.component.js +0 -56
  326. package/esm5/lib/timeline/timeline.component.js +0 -243
  327. package/esm5/lib/user/user-login/user-login.component.js +0 -66
  328. package/esm5/lib/user/user-register/user-register.component.js +0 -91
  329. package/esm5/lib/wait-dialog/wait-dialog.component.js +0 -18
  330. package/esm5/lib/warning-dialog/warning-dialog.component.js +0 -43
  331. package/esm5/public_api.js +0 -7
  332. package/esm5/rocketshow-designer.js +0 -61
  333. package/fesm2015/rocketshow-designer.js +0 -7945
  334. package/fesm2015/rocketshow-designer.js.map +0 -1
  335. package/fesm5/rocketshow-designer.js +0 -9690
  336. package/fesm5/rocketshow-designer.js.map +0 -1
  337. package/rocketshow-designer-1.32.0.tgz +0 -0
  338. package/rocketshow-designer.d.ts +0 -60
  339. package/rocketshow-designer.metadata.json +0 -1
@@ -0,0 +1,131 @@
1
+ import { Component } from '@angular/core';
2
+ import { BsModalService } from 'ngx-bootstrap/modal';
3
+ import { IntroService } from '../services/intro.service';
4
+ import { PresetService } from '../services/preset.service';
5
+ import { ProjectService } from '../services/project.service';
6
+ import { SceneService } from '../services/scene.service';
7
+ import { PresetSettingsComponent } from './preset-settings/preset-settings.component';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "../services/preset.service";
10
+ import * as i2 from "../services/scene.service";
11
+ import * as i3 from "../services/project.service";
12
+ import * as i4 from "../services/intro.service";
13
+ import * as i5 from "ngx-bootstrap/modal";
14
+ import * as i6 from "@angular/common";
15
+ import * as i7 from "@angular/forms";
16
+ import * as i8 from "ngx-sortablejs-plus";
17
+ import * as i9 from "@ngx-translate/core";
18
+ function PresetComponent_div_12_Template(rf, ctx) { if (rf & 1) {
19
+ const _r1 = i0.ɵɵgetCurrentView();
20
+ i0.ɵɵelementStart(0, "div", 9);
21
+ i0.ɵɵlistener("click", function PresetComponent_div_12_Template_div_click_0_listener() { const i_r2 = i0.ɵɵrestoreView(_r1).index; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.selectPreset(i_r2)); });
22
+ i0.ɵɵelementStart(1, "div", 10)(2, "div", 11);
23
+ i0.ɵɵelement(3, "i", 12);
24
+ i0.ɵɵelementEnd();
25
+ i0.ɵɵelementStart(4, "div", 13)(5, "input", 14);
26
+ i0.ɵɵlistener("ngModelChange", function PresetComponent_div_12_Template_input_ngModelChange_5_listener($event) { const i_r2 = i0.ɵɵrestoreView(_r1).index; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.activatePreset($event, i_r2)); })("click", function PresetComponent_div_12_Template_input_click_5_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView($event.stopPropagation()); });
27
+ i0.ɵɵelementEnd()();
28
+ i0.ɵɵelementStart(6, "div");
29
+ i0.ɵɵtext(7);
30
+ i0.ɵɵelementEnd();
31
+ i0.ɵɵelementStart(8, "div", 15)(9, "button", 16);
32
+ i0.ɵɵlistener("click", function PresetComponent_div_12_Template_button_click_9_listener() { const item_r4 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); ctx_r2.openSettings(item_r4); return i0.ɵɵresetView(false); });
33
+ i0.ɵɵtext(10, "...");
34
+ i0.ɵɵelementEnd()()()();
35
+ } if (rf & 2) {
36
+ const item_r4 = ctx.$implicit;
37
+ const ctx_r2 = i0.ɵɵnextContext();
38
+ i0.ɵɵclassProp("active-light", !ctx_r2.projectService.project.previewPreset && item_r4 == ctx_r2.presetService.selectedPreset)("active", ctx_r2.projectService.project.previewPreset && item_r4 == ctx_r2.presetService.selectedPreset)("inactive-list-item", !ctx_r2.sceneService.presetIsSelected(item_r4));
39
+ i0.ɵɵadvance(5);
40
+ i0.ɵɵproperty("disabled", !ctx_r2.enableCheckbox())("ngModel", ctx_r2.sceneService.presetIsSelected(item_r4));
41
+ i0.ɵɵadvance(2);
42
+ i0.ɵɵtextInterpolate1(" ", item_r4.name, " ");
43
+ } }
44
+ export class PresetComponent {
45
+ constructor(presetService, sceneService, projectService, introService, modalService) {
46
+ this.presetService = presetService;
47
+ this.sceneService = sceneService;
48
+ this.projectService = projectService;
49
+ this.introService = introService;
50
+ this.modalService = modalService;
51
+ }
52
+ ngOnInit() { }
53
+ selectPreset(index) {
54
+ this.projectService.project.previewPreset = true;
55
+ this.presetService.selectPreset(index);
56
+ }
57
+ enableCheckbox() {
58
+ return this.sceneService.selectedScenes && this.sceneService.selectedScenes.length === 1;
59
+ }
60
+ activatePreset(active, index) {
61
+ if (this.sceneService.selectedScenes && this.sceneService.selectedScenes.length === 1) {
62
+ const uuid = this.projectService.project.presets[index].uuid;
63
+ if (active) {
64
+ // Activate a new uuid
65
+ this.sceneService.selectedScenes[0].presetUuids.push(uuid);
66
+ }
67
+ else {
68
+ // Remove the uuid
69
+ for (let i = 0; i < this.sceneService.selectedScenes[0].presetUuids.length; i++) {
70
+ if (this.sceneService.selectedScenes[0].presetUuids[i] === uuid) {
71
+ this.sceneService.selectedScenes[0].presetUuids.splice(i, 1);
72
+ return;
73
+ }
74
+ }
75
+ }
76
+ }
77
+ }
78
+ addPreset() {
79
+ this.presetService.addPreset();
80
+ if (this.sceneService.selectedScenes && this.sceneService.selectedScenes.length === 1) {
81
+ this.sceneService.selectedScenes[0].presetUuids.push(this.presetService.selectedPreset.uuid);
82
+ }
83
+ }
84
+ removePreset() {
85
+ if (!this.presetService.selectedPreset) {
86
+ return;
87
+ }
88
+ this.projectService.project.presets.splice(this.projectService.project.presets.indexOf(this.presetService.selectedPreset), 1);
89
+ this.presetService.selectPreset(0);
90
+ }
91
+ openSettings(preset) {
92
+ const bsModalRef = this.modalService.show(PresetSettingsComponent, {
93
+ keyboard: true,
94
+ ignoreBackdropClick: false,
95
+ class: '',
96
+ initialState: { preset },
97
+ });
98
+ }
99
+ static { this.ɵfac = function PresetComponent_Factory(t) { return new (t || PresetComponent)(i0.ɵɵdirectiveInject(i1.PresetService), i0.ɵɵdirectiveInject(i2.SceneService), i0.ɵɵdirectiveInject(i3.ProjectService), i0.ɵɵdirectiveInject(i4.IntroService), i0.ɵɵdirectiveInject(i5.BsModalService)); }; }
100
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PresetComponent, selectors: [["lib-app-preset"]], decls: 13, vars: 7, consts: [[1, "card", "border-secondary", "h-100", "panel", "card-intro-preset", "card-intro-active"], [1, "card-header", "d-flex"], [1, "ml-auto"], ["href", "#", 1, "btn", "btn-secondary", "m-0,", "p-0", 3, "click"], ["aria-hidden", "true", 1, "fa", "fa-minus-circle", "fa-fw"], ["aria-hidden", "true", 1, "fa", "fa-plus-circle", "fa-fw"], [1, "card-body", "h-100", "p-0"], [1, "list-group", 3, "sortablejs"], ["class", "list-group-item", 3, "active-light", "active", "inactive-list-item", "click", 4, "ngFor", "ngForOf"], [1, "list-group-item", 3, "click"], [1, "row", "d-flex", 2, "cursor", "pointer"], [1, "col-auto", "list-sort-handle", "my-auto", 2, "cursor", "move", "cursor", "-webkit-grabbing"], ["aria-hidden", "true", 1, "fa", "fa-bars"], [1, "form-check"], ["type", "checkbox", "id", "active", 1, "form-check-input", 3, "ngModelChange", "click", "disabled", "ngModel"], [1, "my-auto", "ml-auto", "mr-2", "d-flex"], ["type", "button", 1, "btn", "btn-secondary", "btn-sm", "py-0", "px-1", 3, "click"]], template: function PresetComponent_Template(rf, ctx) { if (rf & 1) {
101
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div");
102
+ i0.ɵɵtext(3);
103
+ i0.ɵɵpipe(4, "translate");
104
+ i0.ɵɵelementEnd();
105
+ i0.ɵɵelementStart(5, "div", 2)(6, "a", 3);
106
+ i0.ɵɵlistener("click", function PresetComponent_Template_a_click_6_listener() { ctx.removePreset(); return false; });
107
+ i0.ɵɵelement(7, "i", 4);
108
+ i0.ɵɵelementEnd();
109
+ i0.ɵɵelementStart(8, "a", 3);
110
+ i0.ɵɵlistener("click", function PresetComponent_Template_a_click_8_listener() { ctx.addPreset(); return false; });
111
+ i0.ɵɵelement(9, "i", 5);
112
+ i0.ɵɵelementEnd()()();
113
+ i0.ɵɵelementStart(10, "div", 6)(11, "div", 7);
114
+ i0.ɵɵtemplate(12, PresetComponent_div_12_Template, 11, 9, "div", 8);
115
+ i0.ɵɵelementEnd()()();
116
+ } if (rf & 2) {
117
+ i0.ɵɵclassProp("card-intro-active", ctx.introService.showStep("presets"));
118
+ i0.ɵɵadvance(3);
119
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 5, "designer.preset.title"), " ");
120
+ i0.ɵɵadvance(8);
121
+ i0.ɵɵproperty("sortablejs", ctx.projectService.project.presets);
122
+ i0.ɵɵadvance();
123
+ i0.ɵɵproperty("ngForOf", ctx.projectService.project.presets);
124
+ } }, dependencies: [i6.NgForOf, i7.CheckboxControlValueAccessor, i7.NgControlStatus, i7.NgModel, i8.SortablejsDirective, i9.TranslatePipe] }); }
125
+ }
126
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PresetComponent, [{
127
+ type: Component,
128
+ args: [{ selector: 'lib-app-preset', template: "<div\n class=\"card border-secondary h-100 panel card-intro-preset card-intro-active\"\n [class.card-intro-active]=\"introService.showStep('presets')\"\n>\n <div class=\"card-header d-flex\">\n <div>\n {{ 'designer.preset.title' | translate }}\n </div>\n <div class=\"ml-auto\">\n <a href=\"#\" class=\"btn btn-secondary m-0, p-0\" (click)=\"removePreset(); (false)\"\n ><i class=\"fa fa-minus-circle fa-fw\" aria-hidden=\"true\"></i\n ></a>\n <a href=\"#\" class=\"btn btn-secondary m-0, p-0\" (click)=\"addPreset(); (false)\"\n ><i class=\"fa fa-plus-circle fa-fw\" aria-hidden=\"true\"></i\n ></a>\n </div>\n </div>\n\n <div class=\"card-body h-100 p-0\">\n <!-- List of presets -->\n <div class=\"list-group\" [sortablejs]=\"projectService.project.presets\">\n <div\n class=\"list-group-item\"\n *ngFor=\"let item of projectService.project.presets; let i = index\"\n (click)=\"selectPreset(i)\"\n [class.active-light]=\"!projectService.project.previewPreset && item == presetService.selectedPreset\"\n [class.active]=\"projectService.project.previewPreset && item == presetService.selectedPreset\"\n [class.inactive-list-item]=\"!sceneService.presetIsSelected(item)\"\n >\n <div class=\"row d-flex\" style=\"cursor: pointer\">\n <div class=\"col-auto list-sort-handle my-auto\" style=\"cursor: move; cursor: -webkit-grabbing\">\n <i class=\"fa fa-bars\" aria-hidden=\"true\"></i>\n </div>\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n [disabled]=\"!enableCheckbox()\"\n class=\"form-check-input\"\n id=\"active\"\n [ngModel]=\"sceneService.presetIsSelected(item)\"\n (ngModelChange)=\"activatePreset($event, i)\"\n (click)=\"$event.stopPropagation()\"\n />\n </div>\n <div>\n {{ item.name }}\n </div>\n <div class=\"my-auto ml-auto mr-2 d-flex\">\n <button type=\"button\" class=\"btn btn-secondary btn-sm py-0 px-1\" (click)=\"openSettings(item); (false)\">...</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
129
+ }], () => [{ type: i1.PresetService }, { type: i2.SceneService }, { type: i3.ProjectService }, { type: i4.IntroService }, { type: i5.BsModalService }], null); })();
130
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PresetComponent, { className: "PresetComponent" }); })();
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbmVyL3NyYy9saWIvcHJlc2V0L3ByZXNldC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL3ByZXNldC9wcmVzZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7Ozs7Ozs7Ozs7O0lDY2hGLDhCQU9DO0lBSkMsNExBQVMseUJBQWUsS0FBQztJQU12QixBQURGLCtCQUFnRCxjQUNnRDtJQUM1Rix3QkFBNkM7SUFDL0MsaUJBQU07SUFFSixBQURGLCtCQUF3QixnQkFTcEI7SUFEQSxBQURBLG9OQUFpQixtQ0FBeUIsS0FBQyxpSUFDbEMsd0JBQXdCLEtBQUM7SUFFdEMsQUFURSxpQkFRRSxFQUNFO0lBQ04sMkJBQUs7SUFDSCxZQUNGO0lBQUEsaUJBQU07SUFFSixBQURGLCtCQUF5QyxpQkFDZ0U7SUFBdEMsZ0xBQVMsNEJBQWtCLHdCQUFHLEtBQUssS0FBRTtJQUFDLG9CQUFHO0lBR2hILEFBREUsQUFERSxBQUQ0RyxpQkFBUyxFQUMvRyxFQUNGLEVBQ0Y7Ozs7SUF4QkosQUFEQSxBQURBLDhIQUFvRyx5R0FD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QUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUgsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFjO1FBQ3pCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFO1lBQ2pFLFFBQVEsRUFBRSxJQUFJO1lBQ2QsbUJBQW1CLEVBQUUsS0FBSztZQUMxQixLQUFLLEVBQUUsRUFBRTtZQUNULFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRTtTQUN6QixDQUFDLENBQUM7SUFDTCxDQUFDO2dGQS9EVSxlQUFlO29FQUFmLGVBQWU7WUNUeEIsQUFERixBQUpGLDhCQUdDLGFBQ2lDLFVBQ3pCO1lBQ0gsWUFDRjs7WUFBQSxpQkFBTTtZQUVKLEFBREYsOEJBQXFCLFdBRWhCO1lBRDRDLGdGQUFTLGtCQUFjLFNBQUcsS0FBSyxJQUFFO1lBQzdFLHVCQUNGO1lBQUEsaUJBQUk7WUFDTCw0QkFDRztZQUQ0QyxnRkFBUyxlQUFXLFNBQUcsS0FBSyxJQUFFO1lBQzFFLHVCQUNGO1lBRUwsQUFERSxBQURHLGlCQUFJLEVBQ0QsRUFDRjtZQUlKLEFBRkYsK0JBQWlDLGNBRXVDO1lBQ3BFLG1FQU9DO1lBMEJQLEFBREUsQUFERSxpQkFBTSxFQUNGLEVBQ0Y7O1lBcERKLHlFQUE0RDtZQUl4RCxlQUNGO1lBREUsOEVBQ0Y7WUFhd0IsZUFBNkM7WUFBN0MsK0RBQTZDO1lBR2hELGNBQW1DO1lBQW5DLDREQUFtQzs7O2lGRFQvQyxlQUFlO2NBTDNCLFNBQVM7MkJBQ0UsZ0JBQWdCOztrRkFJZixlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBQcmVzZXQgfSBmcm9tICcuLi9tb2RlbHMvcHJlc2V0JztcbmltcG9ydCB7IEludHJvU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ludHJvLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJlc2V0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3ByZXNldC5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2plY3RTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcHJvamVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IFNjZW5lU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3NjZW5lLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJlc2V0U2V0dGluZ3NDb21wb25lbnQgfSBmcm9tICcuL3ByZXNldC1zZXR0aW5ncy9wcmVzZXQtc2V0dGluZ3MuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWFwcC1wcmVzZXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJlc2V0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHJlc2V0LmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUHJlc2V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHByZXNldFNlcnZpY2U6IFByZXNldFNlcnZpY2UsXG4gICAgcHVibGljIHNjZW5lU2VydmljZTogU2NlbmVTZXJ2aWNlLFxuICAgIHB1YmxpYyBwcm9qZWN0U2VydmljZTogUHJvamVjdFNlcnZpY2UsXG4gICAgcHVibGljIGludHJvU2VydmljZTogSW50cm9TZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7fVxuXG4gIHNlbGVjdFByZXNldChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXZpZXdQcmVzZXQgPSB0cnVlO1xuICAgIHRoaXMucHJlc2V0U2VydmljZS5zZWxlY3RQcmVzZXQoaW5kZXgpO1xuICB9XG5cbiAgZW5hYmxlQ2hlY2tib3goKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2NlbmVTZXJ2aWNlLnNlbGVjdGVkU2NlbmVzICYmIHRoaXMuc2NlbmVTZXJ2aWNlLnNlbGVjdGVkU2NlbmVzLmxlbmd0aCA9PT0gMTtcbiAgfVxuXG4gIGFjdGl2YXRlUHJlc2V0KGFjdGl2ZTogYm9vbGVhbiwgaW5kZXg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLnNjZW5lU2VydmljZS5zZWxlY3RlZFNjZW5lcyAmJiB0aGlzLnNjZW5lU2VydmljZS5zZWxlY3RlZFNjZW5lcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IHV1aWQgPSB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0c1tpbmRleF0udXVpZDtcblxuICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICAvLyBBY3RpdmF0ZSBhIG5ldyB1dWlkXG4gICAgICAgIHRoaXMuc2NlbmVTZXJ2aWNlLnNlbGVjdGVkU2NlbmVzWzBdLnByZXNldFV1aWRzLnB1c2godXVpZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIHV1aWRcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNjZW5lU2VydmljZS5zZWxlY3RlZFNjZW5lc1swXS5wcmVzZXRVdWlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICh0aGlzLnNjZW5lU2VydmljZS5zZWxlY3RlZFNjZW5lc1swXS5wcmVzZXRVdWlkc1tpXSA9PT0gdXVpZCkge1xuICAgICAgICAgICAgdGhpcy5zY2VuZVNlcnZpY2Uuc2VsZWN0ZWRTY2VuZXNbMF0ucHJlc2V0VXVpZHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFkZFByZXNldCgpIHtcbiAgICB0aGlzLnByZXNldFNlcnZpY2UuYWRkUHJlc2V0KCk7XG5cbiAgICBpZiAodGhpcy5zY2VuZVNlcnZpY2Uuc2VsZWN0ZWRTY2VuZXMgJiYgdGhpcy5zY2VuZVNlcnZpY2Uuc2VsZWN0ZWRTY2VuZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLnNjZW5lU2VydmljZS5zZWxlY3RlZFNjZW5lc1swXS5wcmVzZXRVdWlkcy5wdXNoKHRoaXMucHJlc2V0U2VydmljZS5zZWxlY3RlZFByZXNldC51dWlkKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVQcmVzZXQoKSB7XG4gICAgaWYgKCF0aGlzLnByZXNldFNlcnZpY2Uuc2VsZWN0ZWRQcmVzZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0cy5zcGxpY2UodGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldHMuaW5kZXhPZih0aGlzLnByZXNldFNlcnZpY2Uuc2VsZWN0ZWRQcmVzZXQpLCAxKTtcbiAgICB0aGlzLnByZXNldFNlcnZpY2Uuc2VsZWN0UHJlc2V0KDApO1xuICB9XG5cbiAgb3BlblNldHRpbmdzKHByZXNldDogUHJlc2V0KSB7XG4gICAgY29uc3QgYnNNb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLnNob3coUHJlc2V0U2V0dGluZ3NDb21wb25lbnQsIHtcbiAgICAgIGtleWJvYXJkOiB0cnVlLFxuICAgICAgaWdub3JlQmFja2Ryb3BDbGljazogZmFsc2UsXG4gICAgICBjbGFzczogJycsXG4gICAgICBpbml0aWFsU3RhdGU6IHsgcHJlc2V0IH0sXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJjYXJkIGJvcmRlci1zZWNvbmRhcnkgaC0xMDAgcGFuZWwgY2FyZC1pbnRyby1wcmVzZXQgY2FyZC1pbnRyby1hY3RpdmVcIlxuICBbY2xhc3MuY2FyZC1pbnRyby1hY3RpdmVdPVwiaW50cm9TZXJ2aWNlLnNob3dTdGVwKCdwcmVzZXRzJylcIlxuPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgZC1mbGV4XCI+XG4gICAgPGRpdj5cbiAgICAgIHt7ICdkZXNpZ25lci5wcmVzZXQudGl0bGUnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm1sLWF1dG9cIj5cbiAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBtLTAsIHAtMFwiIChjbGljayk9XCJyZW1vdmVQcmVzZXQoKTsgKGZhbHNlKVwiXG4gICAgICAgID48aSBjbGFzcz1cImZhIGZhLW1pbnVzLWNpcmNsZSBmYS1md1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaVxuICAgICAgPjwvYT5cbiAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBtLTAsIHAtMFwiIChjbGljayk9XCJhZGRQcmVzZXQoKTsgKGZhbHNlKVwiXG4gICAgICAgID48aSBjbGFzcz1cImZhIGZhLXBsdXMtY2lyY2xlIGZhLWZ3XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pXG4gICAgICA+PC9hPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGgtMTAwIHAtMFwiPlxuICAgIDwhLS0gTGlzdCBvZiBwcmVzZXRzIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwXCIgW3NvcnRhYmxlanNdPVwicHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmVzZXRzXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmVzZXRzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdFByZXNldChpKVwiXG4gICAgICAgIFtjbGFzcy5hY3RpdmUtbGlnaHRdPVwiIXByb2plY3RTZXJ2aWNlLnByb2plY3QucHJldmlld1ByZXNldCAmJiBpdGVtID09IHByZXNldFNlcnZpY2Uuc2VsZWN0ZWRQcmVzZXRcIlxuICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInByb2plY3RTZXJ2aWNlLnByb2plY3QucHJldmlld1ByZXNldCAmJiBpdGVtID09IHByZXNldFNlcnZpY2Uuc2VsZWN0ZWRQcmVzZXRcIlxuICAgICAgICBbY2xhc3MuaW5hY3RpdmUtbGlzdC1pdGVtXT1cIiFzY2VuZVNlcnZpY2UucHJlc2V0SXNTZWxlY3RlZChpdGVtKVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4XCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gbGlzdC1zb3J0LWhhbmRsZSBteS1hdXRvXCIgc3R5bGU9XCJjdXJzb3I6IG1vdmU7IGN1cnNvcjogLXdlYmtpdC1ncmFiYmluZ1wiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1iYXJzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFlbmFibGVDaGVja2JveCgpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICAgICAgaWQ9XCJhY3RpdmVcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzY2VuZVNlcnZpY2UucHJlc2V0SXNTZWxlY3RlZChpdGVtKVwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImFjdGl2YXRlUHJlc2V0KCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIHt7IGl0ZW0ubmFtZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS1hdXRvIG1sLWF1dG8gbXItMiBkLWZsZXhcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLXNtIHB5LTAgcHgtMVwiIChjbGljayk9XCJvcGVuU2V0dGluZ3MoaXRlbSk7IChmYWxzZSlcIj4uLi48L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,167 @@
1
+ import { forkJoin } from 'rxjs';
2
+ import { map } from 'rxjs/operators';
3
+ import * as THREE from 'three';
4
+ import { Fixture3d } from './fixture-3d';
5
+ export class ColorChanger3d extends Fixture3d {
6
+ atmosphereMat() {
7
+ const vertexShader = [
8
+ 'varying vec3 vVertexWorldPosition;',
9
+ 'varying vec3 vVertexNormal;',
10
+ 'void main(){',
11
+ ' vVertexNormal = normalize(normalMatrix * normal);',
12
+ ' vVertexWorldPosition = (modelMatrix * vec4(position, 1.0)).xyz;',
13
+ ' // set gl_Position',
14
+ ' gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);',
15
+ '}',
16
+ ].join('\n');
17
+ const fragmentShader = [
18
+ 'uniform vec3 glowColor;',
19
+ 'uniform float coeficient;',
20
+ 'uniform float power;',
21
+ 'uniform float opacity;',
22
+ 'varying vec3 vVertexNormal;',
23
+ 'varying vec3 vVertexWorldPosition;',
24
+ 'void main(){',
25
+ ' vec3 worldCameraToVertex= vVertexWorldPosition - cameraPosition;',
26
+ ' vec3 viewCameraToVertex = (viewMatrix * vec4(worldCameraToVertex, 0.0)).xyz;',
27
+ ' viewCameraToVertex = normalize(viewCameraToVertex);',
28
+ ' float intensity = pow(coeficient + dot(vVertexNormal, viewCameraToVertex), power);',
29
+ ' gl_FragColor = vec4(glowColor, intensity * opacity);',
30
+ '}',
31
+ ].join('\n');
32
+ // create custom material from the shader code above
33
+ // that is within specially labeled script tags
34
+ const material = new THREE.ShaderMaterial({
35
+ uniforms: {
36
+ coeficient: {
37
+ type: 'f',
38
+ value: 0.3,
39
+ },
40
+ power: {
41
+ type: 'f',
42
+ value: 1.3,
43
+ },
44
+ opacity: {
45
+ type: 'f',
46
+ value: 1.0,
47
+ },
48
+ glowColor: {
49
+ type: 'c',
50
+ value: new THREE.Color('white'),
51
+ },
52
+ },
53
+ vertexShader,
54
+ fragmentShader,
55
+ // blending: THREE.AdditiveBlending,
56
+ transparent: true,
57
+ depthWrite: false,
58
+ });
59
+ return material;
60
+ }
61
+ createSpotLightBeam() {
62
+ if (this.spotLightBeam) {
63
+ this.spotlightGroup.remove(this.spotLightBeam);
64
+ }
65
+ // TODO update the correct angle from the profile
66
+ const beamAngleDegrees = 14;
67
+ const geometry = new THREE.CylinderGeometry(0.8, beamAngleDegrees * 1.2, 100, 64, 20, false);
68
+ geometry.applyMatrix4(new THREE.Matrix4().makeTranslation(0, -geometry.parameters.height / 2, 0));
69
+ geometry.applyMatrix4(new THREE.Matrix4().makeRotationX(-Math.PI / 2));
70
+ this.atmosphereMaterial = this.atmosphereMat();
71
+ this.spotLightBeam = new THREE.Mesh(geometry, this.atmosphereMaterial);
72
+ this.spotLightBeam.position.set(0, -0.02, 0);
73
+ this.spotlightGroup.add(this.spotLightBeam);
74
+ this.spotLightBeam.rotation.x = Math.PI / 2;
75
+ }
76
+ createObjects() {
77
+ this.material = new THREE.MeshLambertMaterial({
78
+ color: 0x0d0d0d,
79
+ emissive: 0x0d0d0d,
80
+ });
81
+ this.mesh.material = this.material;
82
+ // Add the spotlight
83
+ this.spotLight = new THREE.SpotLight(0xffffff, 1);
84
+ this.spotLight.angle = 0.244;
85
+ this.spotLight.penumbra = 0.5;
86
+ this.spotLight.decay = 2;
87
+ this.spotLight.distance = 60000;
88
+ this.spotLight.castShadow = false;
89
+ this.spotLight.intensity = 10;
90
+ this.spotLightHelper = new THREE.SpotLightHelper(this.spotLight);
91
+ // scene.add(this.spotLightHelper);
92
+ const spotLightTarget = new THREE.Object3D();
93
+ this.spotLight.target = spotLightTarget;
94
+ this.spotlightGroup.add(this.spotLight);
95
+ this.spotlightGroup.add(spotLightTarget);
96
+ this.spotLight.position.set(0, -1.4, 0);
97
+ spotLightTarget.position.set(0, -10, 0);
98
+ // Add the point light for the surrounding light
99
+ this.pointLight = new THREE.PointLight(0xffffff, 2, 1000);
100
+ this.spotlightGroup.add(this.pointLight);
101
+ this.pointLight.position.set(0, -1.4, 0);
102
+ // Add the light beam
103
+ this.createSpotLightBeam();
104
+ this.objectGroup.add(this.spotlightGroup);
105
+ this.objectGroup.add(this.mesh);
106
+ // A moving head has about 32 cm in width
107
+ this.objectGroup.scale.multiplyScalar(9);
108
+ this.scene.add(this.objectGroup);
109
+ this.isLoaded = true;
110
+ }
111
+ constructor(fixtureService, previewMeshService, fixture, scene) {
112
+ super(fixtureService, fixture, scene);
113
+ this.pointLightMaxIntensity = 2;
114
+ this.spotLightMaxIntensity = 5;
115
+ this.objectGroup = new THREE.Object3D();
116
+ this.spotlightGroup = new THREE.Object3D();
117
+ forkJoin([previewMeshService.getMesh('color-changer')])
118
+ .pipe(map(([colorChanger]) => {
119
+ this.mesh = colorChanger;
120
+ this.createObjects();
121
+ }))
122
+ .subscribe();
123
+ }
124
+ getObject() {
125
+ return this.objectGroup;
126
+ }
127
+ updatePreview(channelValues, masterDimmerValue) {
128
+ super.updatePreview(channelValues, masterDimmerValue);
129
+ if (!this.isLoaded) {
130
+ return;
131
+ }
132
+ this.updatePosition(this.objectGroup);
133
+ // Update the material
134
+ if (this.lastSelected !== this.isSelected) {
135
+ if (this.isSelected) {
136
+ for (const child of this.mesh.children) {
137
+ child.material = this.selectedMaterial;
138
+ }
139
+ }
140
+ else {
141
+ for (const child of this.mesh.children) {
142
+ child.material = this.material;
143
+ }
144
+ }
145
+ this.lastSelected = this.isSelected;
146
+ }
147
+ // Update the light helpers
148
+ this.spotLightHelper.update();
149
+ // Apply the colors
150
+ const color = new THREE.Color('rgb(' + this.colorRed + ', ' + this.colorGreen + ', ' + this.colorBlue + ')');
151
+ this.pointLight.color = color;
152
+ this.spotLight.color = color;
153
+ this.spotLightBeam.material.uniforms.glowColor.value = color;
154
+ // Apply the dimmer value
155
+ // Take the color into account for the beam (don't show a black beam)
156
+ const intensityColor = Math.max(this.colorRed, this.colorGreen, this.colorBlue);
157
+ this.spotLightBeam.material.uniforms.opacity.value = Math.min(intensityColor, this.dimmer) * 0.5;
158
+ this.spotLight.intensity = this.spotLightMaxIntensity * this.dimmer;
159
+ this.pointLight.intensity = this.pointLightMaxIntensity * this.dimmer;
160
+ }
161
+ destroy() {
162
+ this.scene.remove(this.objectGroup);
163
+ this.material.dispose();
164
+ this.atmosphereMaterial.dispose();
165
+ }
166
+ }
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItY2hhbmdlci0zZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbmVyL3NyYy9saWIvcHJldmlldy9tb2RlbHMvY29sb3ItY2hhbmdlci0zZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQU0vQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXpDLE1BQU0sT0FBTyxjQUFlLFNBQVEsU0FBUztJQW1CbkMsYUFBYTtRQUNuQixNQUFNLFlBQVksR0FBRztZQUNuQixvQ0FBb0M7WUFDcEMsNkJBQTZCO1lBRTdCLGNBQWM7WUFDZCxvREFBb0Q7WUFFcEQsa0VBQWtFO1lBRWxFLHFCQUFxQjtZQUNyQiwwRUFBMEU7WUFDMUUsR0FBRztTQUNKLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2IsTUFBTSxjQUFjLEdBQUc7WUFDckIseUJBQXlCO1lBQ3pCLDJCQUEyQjtZQUMzQixzQkFBc0I7WUFDdEIsd0JBQXdCO1lBRXhCLDZCQUE2QjtZQUM3QixvQ0FBb0M7WUFFcEMsY0FBYztZQUNkLG1FQUFtRTtZQUNuRSwrRUFBK0U7WUFDL0Usc0RBQXNEO1lBQ3RELHNGQUFzRjtZQUN0Rix3REFBd0Q7WUFDeEQsR0FBRztTQUNKLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWIsb0RBQW9EO1FBQ3BELCtDQUErQztRQUMvQyxNQUFNLFFBQVEsR0FBRyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFDeEMsUUFBUSxFQUFFO2dCQUNSLFVBQVUsRUFBRTtvQkFDVixJQUFJLEVBQUUsR0FBRztvQkFDVCxLQUFLLEVBQUUsR0FBRztpQkFD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QUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUUxRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNwRSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN4RSxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTWVzaCB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IENhY2hlZEZpeHR1cmUgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2FjaGVkLWZpeHR1cmUnO1xuaW1wb3J0IHsgRml4dHVyZUNoYW5uZWxWYWx1ZSB9IGZyb20gJy4uLy4uL21vZGVscy9maXh0dXJlLWNoYW5uZWwtdmFsdWUnO1xuaW1wb3J0IHsgRml4dHVyZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maXh0dXJlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJldmlld01lc2hTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJldmlldy1tZXNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgRml4dHVyZTNkIH0gZnJvbSAnLi9maXh0dXJlLTNkJztcblxuZXhwb3J0IGNsYXNzIENvbG9yQ2hhbmdlcjNkIGV4dGVuZHMgRml4dHVyZTNkIHtcbiAgcHJpdmF0ZSByZWFkb25seSBwb2ludExpZ2h0TWF4SW50ZW5zaXR5OiBudW1iZXIgPSAyO1xuICBwcml2YXRlIHJlYWRvbmx5IHNwb3RMaWdodE1heEludGVuc2l0eTogbnVtYmVyID0gNTtcblxuICBwcml2YXRlIG1lc2g6IFRIUkVFLk1lc2g7XG5cbiAgcHJpdmF0ZSBvYmplY3RHcm91cDogVEhSRUUuT2JqZWN0M0QgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcbiAgcHJpdmF0ZSBzcG90bGlnaHRHcm91cDogVEhSRUUuT2JqZWN0M0QgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcbiAgcHJpdmF0ZSBzcG90TGlnaHQ6IFRIUkVFLlNwb3RMaWdodDtcbiAgcHJpdmF0ZSBzcG90TGlnaHRIZWxwZXI6IFRIUkVFLlNwb3RMaWdodEhlbHBlcjtcbiAgcHJpdmF0ZSBzcG90TGlnaHRCZWFtOiBUSFJFRS5NZXNoO1xuXG4gIHByaXZhdGUgcG9pbnRMaWdodDogVEhSRUUuUG9pbnRMaWdodDtcblxuICBwcml2YXRlIGxhc3RTZWxlY3RlZDogYm9vbGVhbjtcblxuICBwcml2YXRlIG1hdGVyaWFsOiBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbDtcbiAgcHJpdmF0ZSBhdG1vc3BoZXJlTWF0ZXJpYWw6IFRIUkVFLlNoYWRlck1hdGVyaWFsO1xuXG4gIHByaXZhdGUgYXRtb3NwaGVyZU1hdCgpIHtcbiAgICBjb25zdCB2ZXJ0ZXhTaGFkZXIgPSBbXG4gICAgICAndmFyeWluZyB2ZWMzXHR2VmVydGV4V29ybGRQb3NpdGlvbjsnLFxuICAgICAgJ3ZhcnlpbmcgdmVjM1x0dlZlcnRleE5vcm1hbDsnLFxuXG4gICAgICAndm9pZCBtYWluKCl7JyxcbiAgICAgICdcdHZWZXJ0ZXhOb3JtYWwgPSBub3JtYWxpemUobm9ybWFsTWF0cml4ICogbm9ybWFsKTsnLFxuXG4gICAgICAnXHR2VmVydGV4V29ybGRQb3NpdGlvbiA9IChtb2RlbE1hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejsnLFxuXG4gICAgICAnXHQvLyBzZXQgZ2xfUG9zaXRpb24nLFxuICAgICAgJ1x0Z2xfUG9zaXRpb25cdD0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuMCk7JyxcbiAgICAgICd9JyxcbiAgICBdLmpvaW4oJ1xcbicpO1xuICAgIGNvbnN0IGZyYWdtZW50U2hhZGVyID0gW1xuICAgICAgJ3VuaWZvcm0gdmVjM1x0Z2xvd0NvbG9yOycsXG4gICAgICAndW5pZm9ybSBmbG9hdFx0Y29lZmljaWVudDsnLFxuICAgICAgJ3VuaWZvcm0gZmxvYXRcdHBvd2VyOycsXG4gICAgICAndW5pZm9ybSBmbG9hdFx0b3BhY2l0eTsnLFxuXG4gICAgICAndmFyeWluZyB2ZWMzXHR2VmVydGV4Tm9ybWFsOycsXG4gICAgICAndmFyeWluZyB2ZWMzXHR2VmVydGV4V29ybGRQb3NpdGlvbjsnLFxuXG4gICAgICAndm9pZCBtYWluKCl7JyxcbiAgICAgICdcdHZlYzMgd29ybGRDYW1lcmFUb1ZlcnRleD0gdlZlcnRleFdvcmxkUG9zaXRpb24gLSBjYW1lcmFQb3NpdGlvbjsnLFxuICAgICAgJ1x0dmVjMyB2aWV3Q2FtZXJhVG9WZXJ0ZXhcdD0gKHZpZXdNYXRyaXggKiB2ZWM0KHdvcmxkQ2FtZXJhVG9WZXJ0ZXgsIDAuMCkpLnh5ejsnLFxuICAgICAgJ1x0dmlld0NhbWVyYVRvVmVydGV4XHQ9IG5vcm1hbGl6ZSh2aWV3Q2FtZXJhVG9WZXJ0ZXgpOycsXG4gICAgICAnXHRmbG9hdCBpbnRlbnNpdHlcdFx0PSBwb3coY29lZmljaWVudCArIGRvdCh2VmVydGV4Tm9ybWFsLCB2aWV3Q2FtZXJhVG9WZXJ0ZXgpLCBwb3dlcik7JyxcbiAgICAgICdcdGdsX0ZyYWdDb2xvclx0XHQ9IHZlYzQoZ2xvd0NvbG9yLCBpbnRlbnNpdHkgKiBvcGFjaXR5KTsnLFxuICAgICAgJ30nLFxuICAgIF0uam9pbignXFxuJyk7XG5cbiAgICAvLyBjcmVhdGUgY3VzdG9tIG1hdGVyaWFsIGZyb20gdGhlIHNoYWRlciBjb2RlIGFib3ZlXG4gICAgLy8gdGhhdCBpcyB3aXRoaW4gc3BlY2lhbGx5IGxhYmVsZWQgc2NyaXB0IHRhZ3NcbiAgICBjb25zdCBtYXRlcmlhbCA9IG5ldyBUSFJFRS5TaGFkZXJNYXRlcmlhbCh7XG4gICAgICB1bmlmb3Jtczoge1xuICAgICAgICBjb2VmaWNpZW50OiB7XG4gICAgICAgICAgdHlwZTogJ2YnLFxuICAgICAgICAgIHZhbHVlOiAwLjMsXG4gICAgICAgIH0sXG4gICAgICAgIHBvd2VyOiB7XG4gICAgICAgICAgdHlwZTogJ2YnLFxuICAgICAgICAgIHZhbHVlOiAxLjMsXG4gICAgICAgIH0sXG4gICAgICAgIG9wYWNpdHk6IHtcbiAgICAgICAgICB0eXBlOiAnZicsXG4gICAgICAgICAgdmFsdWU6IDEuMCxcbiAgICAgICAgfSxcbiAgICAgICAgZ2xvd0NvbG9yOiB7XG4gICAgICAgICAgdHlwZTogJ2MnLFxuICAgICAgICAgIHZhbHVlOiBuZXcgVEhSRUUuQ29sb3IoJ3doaXRlJyksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdmVydGV4U2hhZGVyLFxuICAgICAgZnJhZ21lbnRTaGFkZXIsXG4gICAgICAvLyBibGVuZGluZzogVEhSRUUuQWRkaXRpdmVCbGVuZGluZyxcbiAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgICAgZGVwdGhXcml0ZTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWF0ZXJpYWw7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNwb3RMaWdodEJlYW0oKSB7XG4gICAgaWYgKHRoaXMuc3BvdExpZ2h0QmVhbSkge1xuICAgICAgdGhpcy5zcG90bGlnaHRHcm91cC5yZW1vdmUodGhpcy5zcG90TGlnaHRCZWFtKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPIHVwZGF0ZSB0aGUgY29ycmVjdCBhbmdsZSBmcm9tIHRoZSBwcm9maWxlXG4gICAgY29uc3QgYmVhbUFuZ2xlRGVncmVlcyA9IDE0O1xuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IFRIUkVFLkN5bGluZGVyR2VvbWV0cnkoMC44LCBiZWFtQW5nbGVEZWdyZWVzICogMS4yLCAxMDAsIDY0LCAyMCwgZmFsc2UpO1xuICAgIGdlb21ldHJ5LmFwcGx5TWF0cml4NChuZXcgVEhSRUUuTWF0cml4NCgpLm1ha2VUcmFuc2xhdGlvbigwLCAtZ2VvbWV0cnkucGFyYW1ldGVycy5oZWlnaHQgLyAyLCAwKSk7XG4gICAgZ2VvbWV0cnkuYXBwbHlNYXRyaXg0KG5ldyBUSFJFRS5NYXRyaXg0KCkubWFrZVJvdGF0aW9uWCgtTWF0aC5QSSAvIDIpKTtcblxuICAgIHRoaXMuYXRtb3NwaGVyZU1hdGVyaWFsID0gdGhpcy5hdG1vc3BoZXJlTWF0KCk7XG4gICAgdGhpcy5zcG90TGlnaHRCZWFtID0gbmV3IFRIUkVFLk1lc2goZ2VvbWV0cnksIHRoaXMuYXRtb3NwaGVyZU1hdGVyaWFsKTtcbiAgICB0aGlzLnNwb3RMaWdodEJlYW0ucG9zaXRpb24uc2V0KDAsIC0wLjAyLCAwKTtcblxuICAgIHRoaXMuc3BvdGxpZ2h0R3JvdXAuYWRkKHRoaXMuc3BvdExpZ2h0QmVhbSk7XG4gICAgdGhpcy5zcG90TGlnaHRCZWFtLnJvdGF0aW9uLnggPSBNYXRoLlBJIC8gMjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT2JqZWN0cygpIHtcbiAgICAodGhpcy5tYXRlcmlhbCBhcyBhbnkpID0gbmV3IFRIUkVFLk1lc2hMYW1iZXJ0TWF0ZXJpYWwoe1xuICAgICAgY29sb3I6IDB4MGQwZDBkLFxuICAgICAgZW1pc3NpdmU6IDB4MGQwZDBkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5tZXNoLm1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbDtcblxuICAgIC8vIEFkZCB0aGUgc3BvdGxpZ2h0XG4gICAgdGhpcy5zcG90TGlnaHQgPSBuZXcgVEhSRUUuU3BvdExpZ2h0KDB4ZmZmZmZmLCAxKTtcbiAgICB0aGlzLnNwb3RMaWdodC5hbmdsZSA9IDAuMjQ0O1xuICAgIHRoaXMuc3BvdExpZ2h0LnBlbnVtYnJhID0gMC41O1xuICAgIHRoaXMuc3BvdExpZ2h0LmRlY2F5ID0gMjtcbiAgICB0aGlzLnNwb3RMaWdodC5kaXN0YW5jZSA9IDYwMDAwO1xuICAgIHRoaXMuc3BvdExpZ2h0LmNhc3RTaGFkb3cgPSBmYWxzZTtcbiAgICB0aGlzLnNwb3RMaWdodC5pbnRlbnNpdHkgPSAxMDtcblxuICAgIHRoaXMuc3BvdExpZ2h0SGVscGVyID0gbmV3IFRIUkVFLlNwb3RMaWdodEhlbHBlcih0aGlzLnNwb3RMaWdodCk7XG4gICAgLy8gc2NlbmUuYWRkKHRoaXMuc3BvdExpZ2h0SGVscGVyKTtcblxuICAgIGNvbnN0IHNwb3RMaWdodFRhcmdldCA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xuICAgIHRoaXMuc3BvdExpZ2h0LnRhcmdldCA9IHNwb3RMaWdodFRhcmdldDtcblxuICAgIHRoaXMuc3BvdGxpZ2h0R3JvdXAuYWRkKHRoaXMuc3BvdExpZ2h0KTtcbiAgICB0aGlzLnNwb3RsaWdodEdyb3VwLmFkZChzcG90TGlnaHRUYXJnZXQpO1xuICAgIHRoaXMuc3BvdExpZ2h0LnBvc2l0aW9uLnNldCgwLCAtMS40LCAwKTtcbiAgICBzcG90TGlnaHRUYXJnZXQucG9zaXRpb24uc2V0KDAsIC0xMCwgMCk7XG5cbiAgICAvLyBBZGQgdGhlIHBvaW50IGxpZ2h0IGZvciB0aGUgc3Vycm91bmRpbmcgbGlnaHRcbiAgICB0aGlzLnBvaW50TGlnaHQgPSBuZXcgVEhSRUUuUG9pbnRMaWdodCgweGZmZmZmZiwgMiwgMTAwMCk7XG4gICAgdGhpcy5zcG90bGlnaHRHcm91cC5hZGQodGhpcy5wb2ludExpZ2h0KTtcbiAgICB0aGlzLnBvaW50TGlnaHQucG9zaXRpb24uc2V0KDAsIC0xLjQsIDApO1xuXG4gICAgLy8gQWRkIHRoZSBsaWdodCBiZWFtXG4gICAgdGhpcy5jcmVhdGVTcG90TGlnaHRCZWFtKCk7XG5cbiAgICB0aGlzLm9iamVjdEdyb3VwLmFkZCh0aGlzLnNwb3RsaWdodEdyb3VwKTtcbiAgICB0aGlzLm9iamVjdEdyb3VwLmFkZCh0aGlzLm1lc2gpO1xuXG4gICAgLy8gQSBtb3ZpbmcgaGVhZCBoYXMgYWJvdXQgMzIgY20gaW4gd2lkdGhcbiAgICB0aGlzLm9iamVjdEdyb3VwLnNjYWxlLm11bHRpcGx5U2NhbGFyKDkpO1xuXG4gICAgdGhpcy5zY2VuZS5hZGQodGhpcy5vYmplY3RHcm91cCk7XG5cbiAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGZpeHR1cmVTZXJ2aWNlOiBGaXh0dXJlU2VydmljZSwgcHJldmlld01lc2hTZXJ2aWNlOiBQcmV2aWV3TWVzaFNlcnZpY2UsIGZpeHR1cmU6IENhY2hlZEZpeHR1cmUsIHNjZW5lOiBhbnkpIHtcbiAgICBzdXBlcihmaXh0dXJlU2VydmljZSwgZml4dHVyZSwgc2NlbmUpO1xuXG4gICAgZm9ya0pvaW4oW3ByZXZpZXdNZXNoU2VydmljZS5nZXRNZXNoKCdjb2xvci1jaGFuZ2VyJyldKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoW2NvbG9yQ2hhbmdlcl0pID0+IHtcbiAgICAgICAgICB0aGlzLm1lc2ggPSBjb2xvckNoYW5nZXI7XG5cbiAgICAgICAgICB0aGlzLmNyZWF0ZU9iamVjdHMoKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRPYmplY3QoKTogVEhSRUUuT2JqZWN0M0Qge1xuICAgIHJldHVybiB0aGlzLm9iamVjdEdyb3VwO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVByZXZpZXcoY2hhbm5lbFZhbHVlczogRml4dHVyZUNoYW5uZWxWYWx1ZVtdLCBtYXN0ZXJEaW1tZXJWYWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgc3VwZXIudXBkYXRlUHJldmlldyhjaGFubmVsVmFsdWVzLCBtYXN0ZXJEaW1tZXJWYWx1ZSk7XG5cbiAgICBpZiAoIXRoaXMuaXNMb2FkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKHRoaXMub2JqZWN0R3JvdXApO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBtYXRlcmlhbFxuICAgIGlmICh0aGlzLmxhc3RTZWxlY3RlZCAhPT0gdGhpcy5pc1NlbGVjdGVkKSB7XG4gICAgICBpZiAodGhpcy5pc1NlbGVjdGVkKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5tZXNoLmNoaWxkcmVuKSB7XG4gICAgICAgICAgKGNoaWxkIGFzIE1lc2gpLm1hdGVyaWFsID0gdGhpcy5zZWxlY3RlZE1hdGVyaWFsO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMubWVzaC5jaGlsZHJlbikge1xuICAgICAgICAgIChjaGlsZCBhcyBNZXNoKS5tYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5sYXN0U2VsZWN0ZWQgPSB0aGlzLmlzU2VsZWN0ZWQ7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSBsaWdodCBoZWxwZXJzXG4gICAgdGhpcy5zcG90TGlnaHRIZWxwZXIudXBkYXRlKCk7XG5cbiAgICAvLyBBcHBseSB0aGUgY29sb3JzXG4gICAgY29uc3QgY29sb3IgPSBuZXcgVEhSRUUuQ29sb3IoJ3JnYignICsgdGhpcy5jb2xvclJlZCArICcsICcgKyB0aGlzLmNvbG9yR3JlZW4gKyAnLCAnICsgdGhpcy5jb2xvckJsdWUgKyAnKScpO1xuXG4gICAgdGhpcy5wb2ludExpZ2h0LmNvbG9yID0gY29sb3I7XG5cbiAgICB0aGlzLnNwb3RMaWdodC5jb2xvciA9IGNvbG9yO1xuICAgICh0aGlzLnNwb3RMaWdodEJlYW0ubWF0ZXJpYWwgYXMgYW55KS51bmlmb3Jtcy5nbG93Q29sb3IudmFsdWUgPSBjb2xvcjtcblxuICAgIC8vIEFwcGx5IHRoZSBkaW1tZXIgdmFsdWVcbiAgICAvLyBUYWtlIHRoZSBjb2xvciBpbnRvIGFjY291bnQgZm9yIHRoZSBiZWFtIChkb24ndCBzaG93IGEgYmxhY2sgYmVhbSlcbiAgICBjb25zdCBpbnRlbnNpdHlDb2xvciA9IE1hdGgubWF4KHRoaXMuY29sb3JSZWQsIHRoaXMuY29sb3JHcmVlbiwgdGhpcy5jb2xvckJsdWUpO1xuICAgICh0aGlzLnNwb3RMaWdodEJlYW0ubWF0ZXJpYWwgYXMgYW55KS51bmlmb3Jtcy5vcGFjaXR5LnZhbHVlID0gTWF0aC5taW4oaW50ZW5zaXR5Q29sb3IsIHRoaXMuZGltbWVyKSAqIDAuNTtcblxuICAgIHRoaXMuc3BvdExpZ2h0LmludGVuc2l0eSA9IHRoaXMuc3BvdExpZ2h0TWF4SW50ZW5zaXR5ICogdGhpcy5kaW1tZXI7XG4gICAgdGhpcy5wb2ludExpZ2h0LmludGVuc2l0eSA9IHRoaXMucG9pbnRMaWdodE1heEludGVuc2l0eSAqIHRoaXMuZGltbWVyO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLnNjZW5lLnJlbW92ZSh0aGlzLm9iamVjdEdyb3VwKTtcbiAgICB0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKTtcbiAgICB0aGlzLmF0bW9zcGhlcmVNYXRlcmlhbC5kaXNwb3NlKCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,150 @@
1
+ import * as THREE from 'three';
2
+ import { Positioning } from '../../models/fixture';
3
+ import { FixtureCapabilityColor, FixtureCapabilityType } from '../../models/fixture-capability';
4
+ export class Fixture3d {
5
+ constructor(fixtureService, fixture, scene) {
6
+ this.fixtureService = fixtureService;
7
+ this.fixtureHasDimmer = false;
8
+ this.fixtureHasColorWheel = false;
9
+ this.fixtureHasColor = false;
10
+ this.dimmer = 0;
11
+ this.isSelected = false;
12
+ this.isLoaded = false;
13
+ this.fixture = fixture;
14
+ this.scene = scene;
15
+ // TODO Don't create it for each fixture but pass it from the preview service
16
+ this.selectedMaterial = new THREE.MeshLambertMaterial({
17
+ color: 0xff00ff,
18
+ emissive: 0xff00ff,
19
+ });
20
+ // evaluate, various capabilities of this fixture
21
+ for (const cachedChannel of this.fixture.channels) {
22
+ if (cachedChannel.channel) {
23
+ for (const capability of cachedChannel.capabilities) {
24
+ switch (capability.capability.type) {
25
+ case FixtureCapabilityType.Intensity:
26
+ this.fixtureHasDimmer = true;
27
+ break;
28
+ case FixtureCapabilityType.ColorIntensity:
29
+ this.fixtureHasColor = true;
30
+ break;
31
+ }
32
+ }
33
+ if (cachedChannel.colorWheel) {
34
+ this.fixtureHasColorWheel = true;
35
+ }
36
+ }
37
+ }
38
+ }
39
+ getCapabilityInValue(channel, value) {
40
+ for (const capability of channel.capabilities) {
41
+ if (capability.capability.dmxRange.length === 0 ||
42
+ (value >= capability.capability.dmxRange[0] && value <= capability.capability.dmxRange[1])) {
43
+ return capability;
44
+ }
45
+ }
46
+ return undefined;
47
+ }
48
+ // Apply the properties of the base fixture to the preview
49
+ updatePreview(channelValues, masterDimmerValue) {
50
+ // Apply default settings
51
+ if (this.fixtureHasDimmer) {
52
+ this.dimmer = 0;
53
+ }
54
+ else {
55
+ this.dimmer = 1;
56
+ }
57
+ this.colorRed = 255;
58
+ this.colorGreen = 255;
59
+ this.colorBlue = 255;
60
+ if (!this.fixtureHasColorWheel && this.fixtureHasColor) {
61
+ this.colorRed = 0;
62
+ this.colorGreen = 0;
63
+ this.colorBlue = 0;
64
+ }
65
+ for (const channelValue of channelValues) {
66
+ const channel = this.fixtureService.getChannelByName(this.fixture, channelValue.channelName);
67
+ const capability = this.getCapabilityInValue(channel, channelValue.value);
68
+ if (capability) {
69
+ switch (capability.capability.type) {
70
+ case FixtureCapabilityType.Intensity: {
71
+ let valuePercentage;
72
+ if (capability.capability.dmxRange.length > 0) {
73
+ valuePercentage =
74
+ (channelValue.value - capability.capability.dmxRange[0]) /
75
+ (capability.capability.dmxRange[1] - capability.capability.dmxRange[0]);
76
+ }
77
+ else {
78
+ valuePercentage = channelValue.value / channel.maxValue;
79
+ }
80
+ this.dimmer = valuePercentage * masterDimmerValue;
81
+ break;
82
+ }
83
+ case FixtureCapabilityType.ColorIntensity: {
84
+ const valuePercentage = (255 * channelValue.value) / channel.maxValue;
85
+ switch (capability.capability.color) {
86
+ case FixtureCapabilityColor.Red:
87
+ // Round needed for threejs
88
+ this.colorRed = Math.round(valuePercentage);
89
+ break;
90
+ case FixtureCapabilityColor.Green:
91
+ // Round needed for threejs
92
+ this.colorGreen = Math.round(valuePercentage);
93
+ break;
94
+ case FixtureCapabilityColor.Blue:
95
+ // Round needed for threejs
96
+ this.colorBlue = Math.round(valuePercentage);
97
+ break;
98
+ }
99
+ break;
100
+ }
101
+ case FixtureCapabilityType.WheelSlot: {
102
+ const mixedColor = this.fixtureService.getMixedWheelSlotColor(capability.wheel, capability.capability.slotNumber);
103
+ if (mixedColor) {
104
+ this.colorRed = Math.round(mixedColor.red);
105
+ this.colorGreen = Math.round(mixedColor.green);
106
+ this.colorBlue = Math.round(mixedColor.blue);
107
+ }
108
+ break;
109
+ }
110
+ }
111
+ }
112
+ }
113
+ }
114
+ updatePosition(object) {
115
+ // Update the position
116
+ switch (this.fixture.fixture.positioning) {
117
+ case Positioning.topFront: {
118
+ object.rotation.x = THREE.MathUtils.degToRad(0);
119
+ object.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY - 13, this.fixture.fixture.positionZ);
120
+ break;
121
+ }
122
+ case Positioning.bottomFront: {
123
+ object.rotation.x = THREE.MathUtils.degToRad(180);
124
+ object.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY + 13, this.fixture.fixture.positionZ);
125
+ break;
126
+ }
127
+ case Positioning.topBack: {
128
+ object.rotation.x = THREE.MathUtils.degToRad(0);
129
+ object.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY - 13, this.fixture.fixture.positionZ);
130
+ break;
131
+ }
132
+ case Positioning.bottomBack: {
133
+ object.rotation.x = THREE.MathUtils.degToRad(180);
134
+ object.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY + 13, this.fixture.fixture.positionZ);
135
+ break;
136
+ }
137
+ case Positioning.manual: {
138
+ object.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY, this.fixture.fixture.positionZ);
139
+ object.rotation.x = THREE.MathUtils.degToRad(this.fixture.fixture.rotationX);
140
+ object.rotation.y = THREE.MathUtils.degToRad(this.fixture.fixture.rotationY);
141
+ object.rotation.z = THREE.MathUtils.degToRad(this.fixture.fixture.rotationZ);
142
+ break;
143
+ }
144
+ }
145
+ }
146
+ destroy() {
147
+ this.selectedMaterial.dispose();
148
+ }
149
+ }
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS0zZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbmVyL3NyYy9saWIvcHJldmlldy9tb2RlbHMvZml4dHVyZS0zZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUkvQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFJaEcsTUFBTSxPQUFnQixTQUFTO0lBbUI3QixZQUFtQixjQUE4QixFQUFFLE9BQXNCLEVBQUUsS0FBVTtRQUFsRSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFqQmpELHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6Qix5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFDN0Isb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFReEIsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUVYLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUtmLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLDZFQUE2RTtRQUM3RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUM7WUFDcEQsS0FBSyxFQUFFLFFBQVE7WUFDZixRQUFRLEVBQUUsUUFBUTtTQUNuQixDQUFDLENBQUM7UUFFSCxpREFBaUQ7UUFDakQsS0FBSyxNQUFNLGFBQWEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xELElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUMxQixLQUFLLE1BQU0sVUFBVSxJQUFJLGFBQWEsQ0FBQyxZQUFZLEVBQUUs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SSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3BILE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM3RSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDN0UsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzdFLE1BQU07WUFDUixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IENhY2hlZEZpeHR1cmUgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2FjaGVkLWZpeHR1cmUnO1xuaW1wb3J0IHsgQ2FjaGVkRml4dHVyZUNhcGFiaWxpdHkgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2FjaGVkLWZpeHR1cmUtY2FwYWJpbGl0eSc7XG5pbXBvcnQgeyBDYWNoZWRGaXh0dXJlQ2hhbm5lbCB9IGZyb20gJy4uLy4uL21vZGVscy9jYWNoZWQtZml4dHVyZS1jaGFubmVsJztcbmltcG9ydCB7IFBvc2l0aW9uaW5nIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ZpeHR1cmUnO1xuaW1wb3J0IHsgRml4dHVyZUNhcGFiaWxpdHlDb2xvciwgRml4dHVyZUNhcGFiaWxpdHlUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ZpeHR1cmUtY2FwYWJpbGl0eSc7XG5pbXBvcnQgeyBGaXh0dXJlQ2hhbm5lbFZhbHVlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ZpeHR1cmUtY2hhbm5lbC12YWx1ZSc7XG5pbXBvcnQgeyBGaXh0dXJlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpeHR1cmUuc2VydmljZSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGaXh0dXJlM2Qge1xuICBmaXh0dXJlOiBDYWNoZWRGaXh0dXJlO1xuICBmaXh0dXJlSGFzRGltbWVyID0gZmFsc2U7XG4gIGZpeHR1cmVIYXNDb2xvcldoZWVsID0gZmFsc2U7XG4gIGZpeHR1cmVIYXNDb2xvciA9IGZhbHNlO1xuXG4gIHNjZW5lOiBhbnk7XG5cbiAgY29sb3JSZWQ6IG51bWJlcjtcbiAgY29sb3JHcmVlbjogbnVtYmVyO1xuICBjb2xvckJsdWU6IG51bWJlcjtcblxuICBkaW1tZXIgPSAwO1xuXG4gIGlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgaXNMb2FkZWQgPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgc2VsZWN0ZWRNYXRlcmlhbDogVEhSRUUuTWVzaExhbWJlcnRNYXRlcmlhbDtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZml4dHVyZVNlcnZpY2U6IEZpeHR1cmVTZXJ2aWNlLCBmaXh0dXJlOiBDYWNoZWRGaXh0dXJlLCBzY2VuZTogYW55KSB7XG4gICAgdGhpcy5maXh0dXJlID0gZml4dHVyZTtcbiAgICB0aGlzLnNjZW5lID0gc2NlbmU7XG5cbiAgICAvLyBUT0RPIERvbid0IGNyZWF0ZSBpdCBmb3IgZWFjaCBmaXh0dXJlIGJ1dCBwYXNzIGl0IGZyb20gdGhlIHByZXZpZXcgc2VydmljZVxuICAgIHRoaXMuc2VsZWN0ZWRNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoTGFtYmVydE1hdGVyaWFsKHtcbiAgICAgIGNvbG9yOiAweGZmMDBmZixcbiAgICAgIGVtaXNzaXZlOiAweGZmMDBmZixcbiAgICB9KTtcblxuICAgIC8vIGV2YWx1YXRlLCB2YXJpb3VzIGNhcGFiaWxpdGllcyBvZiB0aGlzIGZpeHR1cmVcbiAgICBmb3IgKGNvbnN0IGNhY2hlZENoYW5uZWwgb2YgdGhpcy5maXh0dXJlLmNoYW5uZWxzKSB7XG4gICAgICBpZiAoY2FjaGVkQ2hhbm5lbC5jaGFubmVsKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2FwYWJpbGl0eSBvZiBjYWNoZWRDaGFubmVsLmNhcGFiaWxpdGllcykge1xuICAgICAgICAgIHN3aXRjaCAoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlUeXBlLkludGVuc2l0eTpcbiAgICAgICAgICAgICAgdGhpcy5maXh0dXJlSGFzRGltbWVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5Db2xvckludGVuc2l0eTpcbiAgICAgICAgICAgICAgdGhpcy5maXh0dXJlSGFzQ29sb3IgPSB0cnVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FjaGVkQ2hhbm5lbC5jb2xvcldoZWVsKSB7XG4gICAgICAgICAgdGhpcy5maXh0dXJlSGFzQ29sb3JXaGVlbCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q2FwYWJpbGl0eUluVmFsdWUoY2hhbm5lbDogQ2FjaGVkRml4dHVyZUNoYW5uZWwsIHZhbHVlOiBudW1iZXIpOiBDYWNoZWRGaXh0dXJlQ2FwYWJpbGl0eSB7XG4gICAgZm9yIChjb25zdCBjYXBhYmlsaXR5IG9mIGNoYW5uZWwuY2FwYWJpbGl0aWVzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5kbXhSYW5nZS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgKHZhbHVlID49IGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5kbXhSYW5nZVswXSAmJiB2YWx1ZSA8PSBjYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2VbMV0pXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGNhcGFiaWxpdHk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIEFwcGx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBiYXNlIGZpeHR1cmUgdG8gdGhlIHByZXZpZXdcbiAgdXBkYXRlUHJldmlldyhjaGFubmVsVmFsdWVzOiBGaXh0dXJlQ2hhbm5lbFZhbHVlW10sIG1hc3RlckRpbW1lclZhbHVlOiBudW1iZXIpIHtcbiAgICAvLyBBcHBseSBkZWZhdWx0IHNldHRpbmdzXG4gICAgaWYgKHRoaXMuZml4dHVyZUhhc0RpbW1lcikge1xuICAgICAgdGhpcy5kaW1tZXIgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpbW1lciA9IDE7XG4gICAgfVxuXG4gICAgdGhpcy5jb2xvclJlZCA9IDI1NTtcbiAgICB0aGlzLmNvbG9yR3JlZW4gPSAyNTU7XG4gICAgdGhpcy5jb2xvckJsdWUgPSAyNTU7XG5cbiAgICBpZiAoIXRoaXMuZml4dHVyZUhhc0NvbG9yV2hlZWwgJiYgdGhpcy5maXh0dXJlSGFzQ29sb3IpIHtcbiAgICAgIHRoaXMuY29sb3JSZWQgPSAwO1xuICAgICAgdGhpcy5jb2xvckdyZWVuID0gMDtcbiAgICAgIHRoaXMuY29sb3JCbHVlID0gMDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNoYW5uZWxWYWx1ZSBvZiBjaGFubmVsVmFsdWVzKSB7XG4gICAgICBjb25zdCBjaGFubmVsID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRDaGFubmVsQnlOYW1lKHRoaXMuZml4dHVyZSwgY2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lKTtcbiAgICAgIGNvbnN0IGNhcGFiaWxpdHkgPSB0aGlzLmdldENhcGFiaWxpdHlJblZhbHVlKGNoYW5uZWwsIGNoYW5uZWxWYWx1ZS52YWx1ZSk7XG5cbiAgICAgIGlmIChjYXBhYmlsaXR5KSB7XG4gICAgICAgIHN3aXRjaCAoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LnR5cGUpIHtcbiAgICAgICAgICBjYXNlIEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5JbnRlbnNpdHk6IHtcbiAgICAgICAgICAgIGxldCB2YWx1ZVBlcmNlbnRhZ2U6IG51bWJlcjtcbiAgICAgICAgICAgIGlmIChjYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB2YWx1ZVBlcmNlbnRhZ2UgPVxuICAgICAgICAgICAgICAgIChjaGFubmVsVmFsdWUudmFsdWUgLSBjYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2VbMF0pIC9cbiAgICAgICAgICAgICAgICAoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LmRteFJhbmdlWzFdIC0gY2FwYWJpbGl0eS5jYXBhYmlsaXR5LmRteFJhbmdlWzBdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhbHVlUGVyY2VudGFnZSA9IGNoYW5uZWxWYWx1ZS52YWx1ZSAvIGNoYW5uZWwubWF4VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRpbW1lciA9IHZhbHVlUGVyY2VudGFnZSAqIG1hc3RlckRpbW1lclZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlUeXBlLkNvbG9ySW50ZW5zaXR5OiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZVBlcmNlbnRhZ2UgPSAoMjU1ICogY2hhbm5lbFZhbHVlLnZhbHVlKSAvIGNoYW5uZWwubWF4VmFsdWU7XG4gICAgICAgICAgICBzd2l0Y2ggKGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5jb2xvcikge1xuICAgICAgICAgICAgICBjYXNlIEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IuUmVkOlxuICAgICAgICAgICAgICAgIC8vIFJvdW5kIG5lZWRlZCBmb3IgdGhyZWVqc1xuICAgICAgICAgICAgICAgIHRoaXMuY29sb3JSZWQgPSBNYXRoLnJvdW5kKHZhbHVlUGVyY2VudGFnZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlDb2xvci5HcmVlbjpcbiAgICAgICAgICAgICAgICAvLyBSb3VuZCBuZWVkZWQgZm9yIHRocmVlanNcbiAgICAgICAgICAgICAgICB0aGlzLmNvbG9yR3JlZW4gPSBNYXRoLnJvdW5kKHZhbHVlUGVyY2VudGFnZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlDb2xvci5CbHVlOlxuICAgICAgICAgICAgICAgIC8vIFJvdW5kIG5lZWRlZCBmb3IgdGhyZWVqc1xuICAgICAgICAgICAgICAgIHRoaXMuY29sb3JCbHVlID0gTWF0aC5yb3VuZCh2YWx1ZVBlcmNlbnRhZ2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlUeXBlLldoZWVsU2xvdDoge1xuICAgICAgICAgICAgY29uc3QgbWl4ZWRDb2xvciA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0TWl4ZWRXaGVlbFNsb3RDb2xvcihjYXBhYmlsaXR5LndoZWVsLCBjYXBhYmlsaXR5LmNhcGFiaWxpdHkuc2xvdE51bWJlcik7XG4gICAgICAgICAgICBpZiAobWl4ZWRDb2xvcikge1xuICAgICAgICAgICAgICB0aGlzLmNvbG9yUmVkID0gTWF0aC5yb3VuZChtaXhlZENvbG9yLnJlZCk7XG4gICAgICAgICAgICAgIHRoaXMuY29sb3JHcmVlbiA9IE1hdGgucm91bmQobWl4ZWRDb2xvci5ncmVlbik7XG4gICAgICAgICAgICAgIHRoaXMuY29sb3JCbHVlID0gTWF0aC5yb3VuZChtaXhlZENvbG9yLmJsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlUG9zaXRpb24ob2JqZWN0OiBUSFJFRS5PYmplY3QzRCkge1xuICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb25cbiAgICBzd2l0Y2ggKHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uaW5nKSB7XG4gICAgICBjYXNlIFBvc2l0aW9uaW5nLnRvcEZyb250OiB7XG4gICAgICAgIG9iamVjdC5yb3RhdGlvbi54ID0gVEhSRUUuTWF0aFV0aWxzLmRlZ1RvUmFkKDApO1xuICAgICAgICBvYmplY3QucG9zaXRpb24uc2V0KHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWCwgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25ZIC0gMTMsIHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBQb3NpdGlvbmluZy5ib3R0b21Gcm9udDoge1xuICAgICAgICBvYmplY3Qucm90YXRpb24ueCA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZCgxODApO1xuICAgICAgICBvYmplY3QucG9zaXRpb24uc2V0KHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWCwgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25ZICsgMTMsIHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBQb3NpdGlvbmluZy50b3BCYWNrOiB7XG4gICAgICAgIG9iamVjdC5yb3RhdGlvbi54ID0gVEhSRUUuTWF0aFV0aWxzLmRlZ1RvUmFkKDApO1xuICAgICAgICBvYmplY3QucG9zaXRpb24uc2V0KHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWCwgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25ZIC0gMTMsIHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBQb3NpdGlvbmluZy5ib3R0b21CYWNrOiB7XG4gICAgICAgIG9iamVjdC5yb3RhdGlvbi54ID0gVEhSRUUuTWF0aFV0aWxzLmRlZ1RvUmFkKDE4MCk7XG4gICAgICAgIG9iamVjdC5wb3NpdGlvbi5zZXQodGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25YLCB0aGlzLmZpeHR1cmUuZml4dHVyZS5wb3NpdGlvblkgKyAxMywgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25aKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFBvc2l0aW9uaW5nLm1hbnVhbDoge1xuICAgICAgICBvYmplY3QucG9zaXRpb24uc2V0KHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWCwgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25ZLCB0aGlzLmZpeHR1cmUuZml4dHVyZS5wb3NpdGlvblopO1xuICAgICAgICBvYmplY3Qucm90YXRpb24ueCA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZCh0aGlzLmZpeHR1cmUuZml4dHVyZS5yb3RhdGlvblgpO1xuICAgICAgICBvYmplY3Qucm90YXRpb24ueSA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZCh0aGlzLmZpeHR1cmUuZml4dHVyZS5yb3RhdGlvblkpO1xuICAgICAgICBvYmplY3Qucm90YXRpb24ueiA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZCh0aGlzLmZpeHR1cmUuZml4dHVyZS5yb3RhdGlvblopO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuc2VsZWN0ZWRNYXRlcmlhbC5kaXNwb3NlKCk7XG4gIH1cbn1cbiJdfQ==