@vived/core 1.4.2 → 1.4.4

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 (528) hide show
  1. package/README.md +142 -20
  2. package/dist/cjs/AppObject/AppObject.js +53 -0
  3. package/dist/cjs/AppObject/AppObject.js.map +1 -1
  4. package/dist/cjs/AppObject/AppObjectComponent.js +78 -0
  5. package/dist/cjs/AppObject/AppObjectComponent.js.map +1 -1
  6. package/dist/cjs/AppObject/AppObjectController.js +22 -0
  7. package/dist/cjs/AppObject/AppObjectController.js.map +1 -1
  8. package/dist/cjs/AppObject/AppObjectEntity.js +52 -0
  9. package/dist/cjs/AppObject/AppObjectEntity.js.map +1 -1
  10. package/dist/cjs/AppObject/AppObjectEntityRepo.js +75 -1
  11. package/dist/cjs/AppObject/AppObjectEntityRepo.js.map +1 -1
  12. package/dist/cjs/AppObject/AppObjectPM.js +46 -0
  13. package/dist/cjs/AppObject/AppObjectPM.js.map +1 -1
  14. package/dist/cjs/AppObject/AppObjectRepo.js +20 -0
  15. package/dist/cjs/AppObject/AppObjectRepo.js.map +1 -1
  16. package/dist/cjs/AppObject/AppObjectUC.js +23 -0
  17. package/dist/cjs/AppObject/AppObjectUC.js.map +1 -1
  18. package/dist/cjs/AppObject/AppObjectView.js +22 -0
  19. package/dist/cjs/AppObject/AppObjectView.js.map +1 -1
  20. package/dist/cjs/AppObject/getSingletonComponent.js +19 -0
  21. package/dist/cjs/AppObject/getSingletonComponent.js.map +1 -1
  22. package/dist/cjs/Entities/MemoizedAngle.js +21 -0
  23. package/dist/cjs/Entities/MemoizedAngle.js.map +1 -1
  24. package/dist/cjs/Entities/MemoizedBoolean.js +21 -0
  25. package/dist/cjs/Entities/MemoizedBoolean.js.map +1 -1
  26. package/dist/cjs/Entities/MemoizedColor.js +21 -0
  27. package/dist/cjs/Entities/MemoizedColor.js.map +1 -1
  28. package/dist/cjs/Entities/MemoizedNumber.js +21 -0
  29. package/dist/cjs/Entities/MemoizedNumber.js.map +1 -1
  30. package/dist/cjs/Entities/MemoizedQuaternion.js +21 -0
  31. package/dist/cjs/Entities/MemoizedQuaternion.js.map +1 -1
  32. package/dist/cjs/Entities/MemoizedString.js +21 -0
  33. package/dist/cjs/Entities/MemoizedString.js.map +1 -1
  34. package/dist/cjs/Entities/MemoizedVector2.js +21 -0
  35. package/dist/cjs/Entities/MemoizedVector2.js.map +1 -1
  36. package/dist/cjs/Entities/MemoizedVector3.js +21 -0
  37. package/dist/cjs/Entities/MemoizedVector3.js.map +1 -1
  38. package/dist/cjs/Entities/ObservableEntity.js +17 -0
  39. package/dist/cjs/Entities/ObservableEntity.js.map +1 -1
  40. package/dist/cjs/Entities/ObserverList.js +21 -0
  41. package/dist/cjs/Entities/ObserverList.js.map +1 -1
  42. package/dist/cjs/Entities/RangedNumber.js +29 -0
  43. package/dist/cjs/Entities/RangedNumber.js.map +1 -1
  44. package/dist/cjs/ExampleFeature/Adapters/examplePmAdapter.js +64 -0
  45. package/dist/cjs/ExampleFeature/Adapters/examplePmAdapter.js.map +1 -0
  46. package/dist/cjs/ExampleFeature/Adapters/exampleSingletonPmAdapter.js +60 -0
  47. package/dist/cjs/ExampleFeature/Adapters/exampleSingletonPmAdapter.js.map +1 -0
  48. package/dist/cjs/ExampleFeature/Adapters/index.js +19 -0
  49. package/dist/cjs/ExampleFeature/Adapters/index.js.map +1 -0
  50. package/dist/cjs/ExampleFeature/Controllers/index.js +19 -0
  51. package/dist/cjs/ExampleFeature/Controllers/index.js.map +1 -0
  52. package/dist/cjs/ExampleFeature/Controllers/setExampleText.js +48 -0
  53. package/dist/cjs/ExampleFeature/Controllers/setExampleText.js.map +1 -0
  54. package/dist/cjs/ExampleFeature/Controllers/toggleExampleBoolean.js +47 -0
  55. package/dist/cjs/ExampleFeature/Controllers/toggleExampleBoolean.js.map +1 -0
  56. package/dist/cjs/ExampleFeature/Entities/ExampleEntity.js +90 -0
  57. package/dist/cjs/ExampleFeature/Entities/ExampleEntity.js.map +1 -0
  58. package/dist/cjs/ExampleFeature/Entities/ExampleRepo.js +113 -0
  59. package/dist/cjs/ExampleFeature/Entities/ExampleRepo.js.map +1 -0
  60. package/dist/cjs/ExampleFeature/Entities/ExampleSingletonEntity.js +69 -0
  61. package/dist/cjs/ExampleFeature/Entities/ExampleSingletonEntity.js.map +1 -0
  62. package/dist/cjs/ExampleFeature/Entities/index.js +20 -0
  63. package/dist/cjs/ExampleFeature/Entities/index.js.map +1 -0
  64. package/dist/cjs/ExampleFeature/Factory/index.js +18 -0
  65. package/dist/cjs/ExampleFeature/Factory/index.js.map +1 -0
  66. package/dist/cjs/ExampleFeature/Factory/setupExampleFeature.js +29 -0
  67. package/dist/cjs/ExampleFeature/Factory/setupExampleFeature.js.map +1 -0
  68. package/dist/cjs/ExampleFeature/Mocks/MockEditExampleStringUC.js +47 -0
  69. package/dist/cjs/ExampleFeature/Mocks/MockEditExampleStringUC.js.map +1 -0
  70. package/dist/cjs/ExampleFeature/Mocks/MockExamplePM.js +48 -0
  71. package/dist/cjs/ExampleFeature/Mocks/MockExamplePM.js.map +1 -0
  72. package/dist/cjs/ExampleFeature/Mocks/MockExampleSingletonPM.js +59 -0
  73. package/dist/cjs/ExampleFeature/Mocks/MockExampleSingletonPM.js.map +1 -0
  74. package/dist/cjs/ExampleFeature/Mocks/MockToggleExampleBooleanUC.js +57 -0
  75. package/dist/cjs/ExampleFeature/Mocks/MockToggleExampleBooleanUC.js.map +1 -0
  76. package/dist/cjs/ExampleFeature/Mocks/index.js +21 -0
  77. package/dist/cjs/ExampleFeature/Mocks/index.js.map +1 -0
  78. package/dist/cjs/ExampleFeature/PMs/ExamplePM.js +97 -0
  79. package/dist/cjs/ExampleFeature/PMs/ExamplePM.js.map +1 -0
  80. package/dist/cjs/ExampleFeature/PMs/ExampleSingletonPM.js +102 -0
  81. package/dist/cjs/ExampleFeature/PMs/ExampleSingletonPM.js.map +1 -0
  82. package/dist/cjs/ExampleFeature/PMs/index.js +19 -0
  83. package/dist/cjs/ExampleFeature/PMs/index.js.map +1 -0
  84. package/dist/cjs/ExampleFeature/UCs/EditExampleStringUC.js +87 -0
  85. package/dist/cjs/ExampleFeature/UCs/EditExampleStringUC.js.map +1 -0
  86. package/dist/cjs/ExampleFeature/UCs/ToggleExampleBooleanUC.js +79 -0
  87. package/dist/cjs/ExampleFeature/UCs/ToggleExampleBooleanUC.js.map +1 -0
  88. package/dist/cjs/ExampleFeature/UCs/index.js +19 -0
  89. package/dist/cjs/ExampleFeature/UCs/index.js.map +1 -0
  90. package/dist/cjs/ExampleFeature/index.js +24 -0
  91. package/dist/cjs/ExampleFeature/index.js.map +1 -0
  92. package/dist/cjs/Types/PmAdapter.js.map +1 -1
  93. package/dist/cjs/Types/SingletonPmAdapter.js.map +1 -1
  94. package/dist/cjs/ValueObjects/Angle.js +1 -1
  95. package/dist/cjs/ValueObjects/Angle.js.map +1 -1
  96. package/dist/cjs/ValueObjects/LineSegment2D.js +6 -6
  97. package/dist/cjs/ValueObjects/LineSegment2D.js.map +1 -1
  98. package/dist/cjs/ValueObjects/Matrix.js +6 -6
  99. package/dist/cjs/ValueObjects/Matrix.js.map +1 -1
  100. package/dist/cjs/ValueObjects/Quaternion.js +17 -17
  101. package/dist/cjs/ValueObjects/Quaternion.js.map +1 -1
  102. package/dist/cjs/ValueObjects/Vector2.js +15 -8
  103. package/dist/cjs/ValueObjects/Vector2.js.map +1 -1
  104. package/dist/cjs/index.js +1 -0
  105. package/dist/cjs/index.js.map +1 -1
  106. package/dist/esm/AppObject/AppObject.js +53 -0
  107. package/dist/esm/AppObject/AppObject.js.map +1 -1
  108. package/dist/esm/AppObject/AppObjectComponent.js +78 -0
  109. package/dist/esm/AppObject/AppObjectComponent.js.map +1 -1
  110. package/dist/esm/AppObject/AppObjectController.js +22 -0
  111. package/dist/esm/AppObject/AppObjectController.js.map +1 -1
  112. package/dist/esm/AppObject/AppObjectEntity.js +52 -0
  113. package/dist/esm/AppObject/AppObjectEntity.js.map +1 -1
  114. package/dist/esm/AppObject/AppObjectEntityRepo.js +75 -1
  115. package/dist/esm/AppObject/AppObjectEntityRepo.js.map +1 -1
  116. package/dist/esm/AppObject/AppObjectPM.js +46 -0
  117. package/dist/esm/AppObject/AppObjectPM.js.map +1 -1
  118. package/dist/esm/AppObject/AppObjectRepo.js +20 -0
  119. package/dist/esm/AppObject/AppObjectRepo.js.map +1 -1
  120. package/dist/esm/AppObject/AppObjectUC.js +24 -1
  121. package/dist/esm/AppObject/AppObjectUC.js.map +1 -1
  122. package/dist/esm/AppObject/AppObjectView.js +23 -1
  123. package/dist/esm/AppObject/AppObjectView.js.map +1 -1
  124. package/dist/esm/AppObject/getSingletonComponent.js +19 -0
  125. package/dist/esm/AppObject/getSingletonComponent.js.map +1 -1
  126. package/dist/esm/Entities/MemoizedAngle.js +21 -0
  127. package/dist/esm/Entities/MemoizedAngle.js.map +1 -1
  128. package/dist/esm/Entities/MemoizedBoolean.js +21 -0
  129. package/dist/esm/Entities/MemoizedBoolean.js.map +1 -1
  130. package/dist/esm/Entities/MemoizedColor.js +21 -0
  131. package/dist/esm/Entities/MemoizedColor.js.map +1 -1
  132. package/dist/esm/Entities/MemoizedNumber.js +21 -0
  133. package/dist/esm/Entities/MemoizedNumber.js.map +1 -1
  134. package/dist/esm/Entities/MemoizedQuaternion.js +21 -0
  135. package/dist/esm/Entities/MemoizedQuaternion.js.map +1 -1
  136. package/dist/esm/Entities/MemoizedString.js +21 -0
  137. package/dist/esm/Entities/MemoizedString.js.map +1 -1
  138. package/dist/esm/Entities/MemoizedVector2.js +21 -0
  139. package/dist/esm/Entities/MemoizedVector2.js.map +1 -1
  140. package/dist/esm/Entities/MemoizedVector3.js +21 -0
  141. package/dist/esm/Entities/MemoizedVector3.js.map +1 -1
  142. package/dist/esm/Entities/ObservableEntity.js +17 -0
  143. package/dist/esm/Entities/ObservableEntity.js.map +1 -1
  144. package/dist/esm/Entities/ObserverList.js +21 -0
  145. package/dist/esm/Entities/ObserverList.js.map +1 -1
  146. package/dist/esm/Entities/RangedNumber.js +29 -0
  147. package/dist/esm/Entities/RangedNumber.js.map +1 -1
  148. package/dist/esm/ExampleFeature/Adapters/examplePmAdapter.js +61 -0
  149. package/dist/esm/ExampleFeature/Adapters/examplePmAdapter.js.map +1 -0
  150. package/dist/esm/ExampleFeature/Adapters/exampleSingletonPmAdapter.js +57 -0
  151. package/dist/esm/ExampleFeature/Adapters/exampleSingletonPmAdapter.js.map +1 -0
  152. package/dist/esm/ExampleFeature/Adapters/index.js +3 -0
  153. package/dist/esm/ExampleFeature/Adapters/index.js.map +1 -0
  154. package/dist/esm/ExampleFeature/Controllers/index.js +3 -0
  155. package/dist/esm/ExampleFeature/Controllers/index.js.map +1 -0
  156. package/dist/esm/ExampleFeature/Controllers/setExampleText.js +45 -0
  157. package/dist/esm/ExampleFeature/Controllers/setExampleText.js.map +1 -0
  158. package/dist/esm/ExampleFeature/Controllers/toggleExampleBoolean.js +44 -0
  159. package/dist/esm/ExampleFeature/Controllers/toggleExampleBoolean.js.map +1 -0
  160. package/dist/esm/ExampleFeature/Entities/ExampleEntity.js +85 -0
  161. package/dist/esm/ExampleFeature/Entities/ExampleEntity.js.map +1 -0
  162. package/dist/esm/ExampleFeature/Entities/ExampleRepo.js +108 -0
  163. package/dist/esm/ExampleFeature/Entities/ExampleRepo.js.map +1 -0
  164. package/dist/esm/ExampleFeature/Entities/ExampleSingletonEntity.js +64 -0
  165. package/dist/esm/ExampleFeature/Entities/ExampleSingletonEntity.js.map +1 -0
  166. package/dist/esm/ExampleFeature/Entities/index.js +4 -0
  167. package/dist/esm/ExampleFeature/Entities/index.js.map +1 -0
  168. package/dist/esm/ExampleFeature/Factory/index.js +2 -0
  169. package/dist/esm/ExampleFeature/Factory/index.js.map +1 -0
  170. package/dist/esm/ExampleFeature/Factory/setupExampleFeature.js +26 -0
  171. package/dist/esm/ExampleFeature/Factory/setupExampleFeature.js.map +1 -0
  172. package/dist/esm/ExampleFeature/Mocks/MockEditExampleStringUC.js +43 -0
  173. package/dist/esm/ExampleFeature/Mocks/MockEditExampleStringUC.js.map +1 -0
  174. package/dist/esm/ExampleFeature/Mocks/MockExamplePM.js +44 -0
  175. package/dist/esm/ExampleFeature/Mocks/MockExamplePM.js.map +1 -0
  176. package/dist/esm/ExampleFeature/Mocks/MockExampleSingletonPM.js +54 -0
  177. package/dist/esm/ExampleFeature/Mocks/MockExampleSingletonPM.js.map +1 -0
  178. package/dist/esm/ExampleFeature/Mocks/MockToggleExampleBooleanUC.js +52 -0
  179. package/dist/esm/ExampleFeature/Mocks/MockToggleExampleBooleanUC.js.map +1 -0
  180. package/dist/esm/ExampleFeature/Mocks/index.js +5 -0
  181. package/dist/esm/ExampleFeature/Mocks/index.js.map +1 -0
  182. package/dist/esm/ExampleFeature/PMs/ExamplePM.js +92 -0
  183. package/dist/esm/ExampleFeature/PMs/ExamplePM.js.map +1 -0
  184. package/dist/esm/ExampleFeature/PMs/ExampleSingletonPM.js +97 -0
  185. package/dist/esm/ExampleFeature/PMs/ExampleSingletonPM.js.map +1 -0
  186. package/dist/esm/ExampleFeature/PMs/index.js +3 -0
  187. package/dist/esm/ExampleFeature/PMs/index.js.map +1 -0
  188. package/dist/esm/ExampleFeature/UCs/EditExampleStringUC.js +82 -0
  189. package/dist/esm/ExampleFeature/UCs/EditExampleStringUC.js.map +1 -0
  190. package/dist/esm/ExampleFeature/UCs/ToggleExampleBooleanUC.js +74 -0
  191. package/dist/esm/ExampleFeature/UCs/ToggleExampleBooleanUC.js.map +1 -0
  192. package/dist/esm/ExampleFeature/UCs/index.js +3 -0
  193. package/dist/esm/ExampleFeature/UCs/index.js.map +1 -0
  194. package/dist/esm/ExampleFeature/index.js +8 -0
  195. package/dist/esm/ExampleFeature/index.js.map +1 -0
  196. package/dist/esm/Types/PmAdapter.js.map +1 -1
  197. package/dist/esm/Types/SingletonPmAdapter.js.map +1 -1
  198. package/dist/esm/ValueObjects/Angle.js +1 -1
  199. package/dist/esm/ValueObjects/Angle.js.map +1 -1
  200. package/dist/esm/ValueObjects/LineSegment2D.js +6 -6
  201. package/dist/esm/ValueObjects/LineSegment2D.js.map +1 -1
  202. package/dist/esm/ValueObjects/Matrix.js +6 -6
  203. package/dist/esm/ValueObjects/Matrix.js.map +1 -1
  204. package/dist/esm/ValueObjects/Quaternion.js +17 -17
  205. package/dist/esm/ValueObjects/Quaternion.js.map +1 -1
  206. package/dist/esm/ValueObjects/Vector2.js +15 -8
  207. package/dist/esm/ValueObjects/Vector2.js.map +1 -1
  208. package/dist/esm/index.js +1 -0
  209. package/dist/esm/index.js.map +1 -1
  210. package/dist/types/AppObject/AppObject.d.ts +42 -0
  211. package/dist/types/AppObject/AppObject.d.ts.map +1 -1
  212. package/dist/types/AppObject/AppObjectComponent.d.ts +80 -0
  213. package/dist/types/AppObject/AppObjectComponent.d.ts.map +1 -1
  214. package/dist/types/AppObject/AppObjectController.d.ts +22 -0
  215. package/dist/types/AppObject/AppObjectController.d.ts.map +1 -1
  216. package/dist/types/AppObject/AppObjectEntity.d.ts +55 -0
  217. package/dist/types/AppObject/AppObjectEntity.d.ts.map +1 -1
  218. package/dist/types/AppObject/AppObjectEntityRepo.d.ts +75 -0
  219. package/dist/types/AppObject/AppObjectEntityRepo.d.ts.map +1 -1
  220. package/dist/types/AppObject/AppObjectPM.d.ts +53 -0
  221. package/dist/types/AppObject/AppObjectPM.d.ts.map +1 -1
  222. package/dist/types/AppObject/AppObjectRepo.d.ts +124 -0
  223. package/dist/types/AppObject/AppObjectRepo.d.ts.map +1 -1
  224. package/dist/types/AppObject/AppObjectUC.d.ts +23 -0
  225. package/dist/types/AppObject/AppObjectUC.d.ts.map +1 -1
  226. package/dist/types/AppObject/AppObjectView.d.ts +22 -0
  227. package/dist/types/AppObject/AppObjectView.d.ts.map +1 -1
  228. package/dist/types/AppObject/getSingletonComponent.d.ts +19 -0
  229. package/dist/types/AppObject/getSingletonComponent.d.ts.map +1 -1
  230. package/dist/types/Entities/MemoizedAngle.d.ts +21 -0
  231. package/dist/types/Entities/MemoizedAngle.d.ts.map +1 -1
  232. package/dist/types/Entities/MemoizedBoolean.d.ts +21 -0
  233. package/dist/types/Entities/MemoizedBoolean.d.ts.map +1 -1
  234. package/dist/types/Entities/MemoizedColor.d.ts +21 -0
  235. package/dist/types/Entities/MemoizedColor.d.ts.map +1 -1
  236. package/dist/types/Entities/MemoizedNumber.d.ts +21 -0
  237. package/dist/types/Entities/MemoizedNumber.d.ts.map +1 -1
  238. package/dist/types/Entities/MemoizedQuaternion.d.ts +21 -0
  239. package/dist/types/Entities/MemoizedQuaternion.d.ts.map +1 -1
  240. package/dist/types/Entities/MemoizedString.d.ts +21 -0
  241. package/dist/types/Entities/MemoizedString.d.ts.map +1 -1
  242. package/dist/types/Entities/MemoizedVector2.d.ts +21 -0
  243. package/dist/types/Entities/MemoizedVector2.d.ts.map +1 -1
  244. package/dist/types/Entities/MemoizedVector3.d.ts +21 -0
  245. package/dist/types/Entities/MemoizedVector3.d.ts.map +1 -1
  246. package/dist/types/Entities/ObservableEntity.d.ts +20 -0
  247. package/dist/types/Entities/ObservableEntity.d.ts.map +1 -1
  248. package/dist/types/Entities/ObserverList.d.ts +21 -0
  249. package/dist/types/Entities/ObserverList.d.ts.map +1 -1
  250. package/dist/types/Entities/RangedNumber.d.ts +37 -0
  251. package/dist/types/Entities/RangedNumber.d.ts.map +1 -1
  252. package/dist/types/ExampleFeature/Adapters/examplePmAdapter.d.ts +29 -0
  253. package/dist/types/ExampleFeature/Adapters/examplePmAdapter.d.ts.map +1 -0
  254. package/dist/types/ExampleFeature/Adapters/exampleSingletonPmAdapter.d.ts +31 -0
  255. package/dist/types/ExampleFeature/Adapters/exampleSingletonPmAdapter.d.ts.map +1 -0
  256. package/dist/types/ExampleFeature/Adapters/index.d.ts +3 -0
  257. package/dist/types/ExampleFeature/Adapters/index.d.ts.map +1 -0
  258. package/dist/types/ExampleFeature/Controllers/index.d.ts +3 -0
  259. package/dist/types/ExampleFeature/Controllers/index.d.ts.map +1 -0
  260. package/dist/types/ExampleFeature/Controllers/setExampleText.d.ts +35 -0
  261. package/dist/types/ExampleFeature/Controllers/setExampleText.d.ts.map +1 -0
  262. package/dist/types/ExampleFeature/Controllers/toggleExampleBoolean.d.ts +34 -0
  263. package/dist/types/ExampleFeature/Controllers/toggleExampleBoolean.d.ts.map +1 -0
  264. package/dist/types/ExampleFeature/Entities/ExampleEntity.d.ts +55 -0
  265. package/dist/types/ExampleFeature/Entities/ExampleEntity.d.ts.map +1 -0
  266. package/dist/types/ExampleFeature/Entities/ExampleRepo.d.ts +62 -0
  267. package/dist/types/ExampleFeature/Entities/ExampleRepo.d.ts.map +1 -0
  268. package/dist/types/ExampleFeature/Entities/ExampleSingletonEntity.d.ts +43 -0
  269. package/dist/types/ExampleFeature/Entities/ExampleSingletonEntity.d.ts.map +1 -0
  270. package/dist/types/ExampleFeature/Entities/index.d.ts +4 -0
  271. package/dist/types/ExampleFeature/Entities/index.d.ts.map +1 -0
  272. package/dist/types/ExampleFeature/Factory/index.d.ts +2 -0
  273. package/dist/types/ExampleFeature/Factory/index.d.ts.map +1 -0
  274. package/dist/types/ExampleFeature/Factory/setupExampleFeature.d.ts +17 -0
  275. package/dist/types/ExampleFeature/Factory/setupExampleFeature.d.ts.map +1 -0
  276. package/dist/types/ExampleFeature/Mocks/MockEditExampleStringUC.d.ts +42 -0
  277. package/dist/types/ExampleFeature/Mocks/MockEditExampleStringUC.d.ts.map +1 -0
  278. package/dist/types/ExampleFeature/Mocks/MockExamplePM.d.ts +41 -0
  279. package/dist/types/ExampleFeature/Mocks/MockExamplePM.d.ts.map +1 -0
  280. package/dist/types/ExampleFeature/Mocks/MockExampleSingletonPM.d.ts +49 -0
  281. package/dist/types/ExampleFeature/Mocks/MockExampleSingletonPM.d.ts.map +1 -0
  282. package/dist/types/ExampleFeature/Mocks/MockToggleExampleBooleanUC.d.ts +47 -0
  283. package/dist/types/ExampleFeature/Mocks/MockToggleExampleBooleanUC.d.ts.map +1 -0
  284. package/dist/types/ExampleFeature/Mocks/index.d.ts +5 -0
  285. package/dist/types/ExampleFeature/Mocks/index.d.ts.map +1 -0
  286. package/dist/types/ExampleFeature/PMs/ExamplePM.d.ts +42 -0
  287. package/dist/types/ExampleFeature/PMs/ExamplePM.d.ts.map +1 -0
  288. package/dist/types/ExampleFeature/PMs/ExampleSingletonPM.d.ts +52 -0
  289. package/dist/types/ExampleFeature/PMs/ExampleSingletonPM.d.ts.map +1 -0
  290. package/dist/types/ExampleFeature/PMs/index.d.ts +3 -0
  291. package/dist/types/ExampleFeature/PMs/index.d.ts.map +1 -0
  292. package/dist/types/ExampleFeature/UCs/EditExampleStringUC.d.ts +52 -0
  293. package/dist/types/ExampleFeature/UCs/EditExampleStringUC.d.ts.map +1 -0
  294. package/dist/types/ExampleFeature/UCs/ToggleExampleBooleanUC.d.ts +44 -0
  295. package/dist/types/ExampleFeature/UCs/ToggleExampleBooleanUC.d.ts.map +1 -0
  296. package/dist/types/ExampleFeature/UCs/index.d.ts +3 -0
  297. package/dist/types/ExampleFeature/UCs/index.d.ts.map +1 -0
  298. package/dist/types/ExampleFeature/index.d.ts +8 -0
  299. package/dist/types/ExampleFeature/index.d.ts.map +1 -0
  300. package/dist/types/Types/PmAdapter.d.ts +60 -0
  301. package/dist/types/Types/PmAdapter.d.ts.map +1 -1
  302. package/dist/types/Types/SingletonPmAdapter.d.ts +55 -0
  303. package/dist/types/Types/SingletonPmAdapter.d.ts.map +1 -1
  304. package/dist/types/ValueObjects/Angle.d.ts +1 -1
  305. package/dist/types/ValueObjects/Matrix.d.ts +5 -5
  306. package/dist/types/ValueObjects/Matrix.d.ts.map +1 -1
  307. package/dist/types/ValueObjects/Quaternion.d.ts +17 -17
  308. package/dist/types/ValueObjects/Vector2.d.ts +8 -3
  309. package/dist/types/ValueObjects/Vector2.d.ts.map +1 -1
  310. package/dist/types/index.d.ts +1 -0
  311. package/dist/types/index.d.ts.map +1 -1
  312. package/package.json +6 -4
  313. package/dist/cjs/AppObject/AppObject.test.js +0 -113
  314. package/dist/cjs/AppObject/AppObject.test.js.map +0 -1
  315. package/dist/cjs/AppObject/AppObjectComponent.test.js +0 -132
  316. package/dist/cjs/AppObject/AppObjectComponent.test.js.map +0 -1
  317. package/dist/cjs/AppObject/AppObjectEntity.test.js +0 -108
  318. package/dist/cjs/AppObject/AppObjectEntity.test.js.map +0 -1
  319. package/dist/cjs/AppObject/AppObjectEntityRepo.test.js +0 -149
  320. package/dist/cjs/AppObject/AppObjectEntityRepo.test.js.map +0 -1
  321. package/dist/cjs/AppObject/AppObjectPM.test.js +0 -103
  322. package/dist/cjs/AppObject/AppObjectPM.test.js.map +0 -1
  323. package/dist/cjs/AppObject/AppObjectRepo.test.js +0 -213
  324. package/dist/cjs/AppObject/AppObjectRepo.test.js.map +0 -1
  325. package/dist/cjs/AppObject/getSingletonComponent.test.js +0 -13
  326. package/dist/cjs/AppObject/getSingletonComponent.test.js.map +0 -1
  327. package/dist/cjs/Entities/MemoizedAngle.test.js +0 -30
  328. package/dist/cjs/Entities/MemoizedAngle.test.js.map +0 -1
  329. package/dist/cjs/Entities/MemoizedBoolean.test.js +0 -34
  330. package/dist/cjs/Entities/MemoizedBoolean.test.js.map +0 -1
  331. package/dist/cjs/Entities/MemoizedColor.test.js +0 -32
  332. package/dist/cjs/Entities/MemoizedColor.test.js.map +0 -1
  333. package/dist/cjs/Entities/MemoizedNumber.test.js +0 -29
  334. package/dist/cjs/Entities/MemoizedNumber.test.js.map +0 -1
  335. package/dist/cjs/Entities/MemoizedQuaternion.test.js +0 -32
  336. package/dist/cjs/Entities/MemoizedQuaternion.test.js.map +0 -1
  337. package/dist/cjs/Entities/MemoizedString.test.js +0 -29
  338. package/dist/cjs/Entities/MemoizedString.test.js.map +0 -1
  339. package/dist/cjs/Entities/MemoizedVector2.test.js +0 -32
  340. package/dist/cjs/Entities/MemoizedVector2.test.js.map +0 -1
  341. package/dist/cjs/Entities/MemoizedVector3.test.js +0 -32
  342. package/dist/cjs/Entities/MemoizedVector3.test.js.map +0 -1
  343. package/dist/cjs/Entities/ObservableEntity.test.js +0 -25
  344. package/dist/cjs/Entities/ObservableEntity.test.js.map +0 -1
  345. package/dist/cjs/Entities/ObserverList.test.js +0 -44
  346. package/dist/cjs/Entities/ObserverList.test.js.map +0 -1
  347. package/dist/cjs/Entities/RangedNumber.test.js +0 -96
  348. package/dist/cjs/Entities/RangedNumber.test.js.map +0 -1
  349. package/dist/cjs/Utilities/LengthConverters.test.js +0 -24
  350. package/dist/cjs/Utilities/LengthConverters.test.js.map +0 -1
  351. package/dist/cjs/Utilities/LerpNumber.test.js +0 -90
  352. package/dist/cjs/Utilities/LerpNumber.test.js.map +0 -1
  353. package/dist/cjs/Utilities/addAlphaToHex.test.js +0 -34
  354. package/dist/cjs/Utilities/addAlphaToHex.test.js.map +0 -1
  355. package/dist/cjs/Utilities/alphaToHex.test.js +0 -75
  356. package/dist/cjs/Utilities/alphaToHex.test.js.map +0 -1
  357. package/dist/cjs/Utilities/degreesToRadians.test.js +0 -9
  358. package/dist/cjs/Utilities/degreesToRadians.test.js.map +0 -1
  359. package/dist/cjs/Utilities/easeFunctions.test.js +0 -209
  360. package/dist/cjs/Utilities/easeFunctions.test.js.map +0 -1
  361. package/dist/cjs/Utilities/interpolateNumber.test.js +0 -26
  362. package/dist/cjs/Utilities/interpolateNumber.test.js.map +0 -1
  363. package/dist/cjs/ValueObjects/Angle.test.js +0 -28
  364. package/dist/cjs/ValueObjects/Angle.test.js.map +0 -1
  365. package/dist/cjs/ValueObjects/Color.test.js +0 -147
  366. package/dist/cjs/ValueObjects/Color.test.js.map +0 -1
  367. package/dist/cjs/ValueObjects/LineSegment2D.test.js +0 -102
  368. package/dist/cjs/ValueObjects/LineSegment2D.test.js.map +0 -1
  369. package/dist/cjs/ValueObjects/Matrix.test.js +0 -385
  370. package/dist/cjs/ValueObjects/Matrix.test.js.map +0 -1
  371. package/dist/cjs/ValueObjects/ParametricLine.test.js +0 -126
  372. package/dist/cjs/ValueObjects/ParametricLine.test.js.map +0 -1
  373. package/dist/cjs/ValueObjects/ParametricPlane.test.js +0 -101
  374. package/dist/cjs/ValueObjects/ParametricPlane.test.js.map +0 -1
  375. package/dist/cjs/ValueObjects/Quaternion.test.js +0 -240
  376. package/dist/cjs/ValueObjects/Quaternion.test.js.map +0 -1
  377. package/dist/cjs/ValueObjects/Rectangle.test.js +0 -32
  378. package/dist/cjs/ValueObjects/Rectangle.test.js.map +0 -1
  379. package/dist/cjs/ValueObjects/Vector2.test.js +0 -136
  380. package/dist/cjs/ValueObjects/Vector2.test.js.map +0 -1
  381. package/dist/cjs/ValueObjects/Vector3.test.js +0 -188
  382. package/dist/cjs/ValueObjects/Vector3.test.js.map +0 -1
  383. package/dist/cjs/ValueObjects/Version.test.js +0 -310
  384. package/dist/cjs/ValueObjects/Version.test.js.map +0 -1
  385. package/dist/esm/AppObject/AppObject.test.js +0 -110
  386. package/dist/esm/AppObject/AppObject.test.js.map +0 -1
  387. package/dist/esm/AppObject/AppObjectComponent.test.js +0 -130
  388. package/dist/esm/AppObject/AppObjectComponent.test.js.map +0 -1
  389. package/dist/esm/AppObject/AppObjectEntity.test.js +0 -106
  390. package/dist/esm/AppObject/AppObjectEntity.test.js.map +0 -1
  391. package/dist/esm/AppObject/AppObjectEntityRepo.test.js +0 -147
  392. package/dist/esm/AppObject/AppObjectEntityRepo.test.js.map +0 -1
  393. package/dist/esm/AppObject/AppObjectPM.test.js +0 -101
  394. package/dist/esm/AppObject/AppObjectPM.test.js.map +0 -1
  395. package/dist/esm/AppObject/AppObjectRepo.test.js +0 -211
  396. package/dist/esm/AppObject/AppObjectRepo.test.js.map +0 -1
  397. package/dist/esm/AppObject/getSingletonComponent.test.js +0 -11
  398. package/dist/esm/AppObject/getSingletonComponent.test.js.map +0 -1
  399. package/dist/esm/Entities/MemoizedAngle.test.js +0 -28
  400. package/dist/esm/Entities/MemoizedAngle.test.js.map +0 -1
  401. package/dist/esm/Entities/MemoizedBoolean.test.js +0 -32
  402. package/dist/esm/Entities/MemoizedBoolean.test.js.map +0 -1
  403. package/dist/esm/Entities/MemoizedColor.test.js +0 -30
  404. package/dist/esm/Entities/MemoizedColor.test.js.map +0 -1
  405. package/dist/esm/Entities/MemoizedNumber.test.js +0 -27
  406. package/dist/esm/Entities/MemoizedNumber.test.js.map +0 -1
  407. package/dist/esm/Entities/MemoizedQuaternion.test.js +0 -30
  408. package/dist/esm/Entities/MemoizedQuaternion.test.js.map +0 -1
  409. package/dist/esm/Entities/MemoizedString.test.js +0 -27
  410. package/dist/esm/Entities/MemoizedString.test.js.map +0 -1
  411. package/dist/esm/Entities/MemoizedVector2.test.js +0 -30
  412. package/dist/esm/Entities/MemoizedVector2.test.js.map +0 -1
  413. package/dist/esm/Entities/MemoizedVector3.test.js +0 -30
  414. package/dist/esm/Entities/MemoizedVector3.test.js.map +0 -1
  415. package/dist/esm/Entities/ObservableEntity.test.js +0 -23
  416. package/dist/esm/Entities/ObservableEntity.test.js.map +0 -1
  417. package/dist/esm/Entities/ObserverList.test.js +0 -42
  418. package/dist/esm/Entities/ObserverList.test.js.map +0 -1
  419. package/dist/esm/Entities/RangedNumber.test.js +0 -94
  420. package/dist/esm/Entities/RangedNumber.test.js.map +0 -1
  421. package/dist/esm/Utilities/LengthConverters.test.js +0 -22
  422. package/dist/esm/Utilities/LengthConverters.test.js.map +0 -1
  423. package/dist/esm/Utilities/LerpNumber.test.js +0 -88
  424. package/dist/esm/Utilities/LerpNumber.test.js.map +0 -1
  425. package/dist/esm/Utilities/addAlphaToHex.test.js +0 -32
  426. package/dist/esm/Utilities/addAlphaToHex.test.js.map +0 -1
  427. package/dist/esm/Utilities/alphaToHex.test.js +0 -73
  428. package/dist/esm/Utilities/alphaToHex.test.js.map +0 -1
  429. package/dist/esm/Utilities/degreesToRadians.test.js +0 -7
  430. package/dist/esm/Utilities/degreesToRadians.test.js.map +0 -1
  431. package/dist/esm/Utilities/easeFunctions.test.js +0 -207
  432. package/dist/esm/Utilities/easeFunctions.test.js.map +0 -1
  433. package/dist/esm/Utilities/interpolateNumber.test.js +0 -24
  434. package/dist/esm/Utilities/interpolateNumber.test.js.map +0 -1
  435. package/dist/esm/ValueObjects/Angle.test.js +0 -26
  436. package/dist/esm/ValueObjects/Angle.test.js.map +0 -1
  437. package/dist/esm/ValueObjects/Color.test.js +0 -145
  438. package/dist/esm/ValueObjects/Color.test.js.map +0 -1
  439. package/dist/esm/ValueObjects/LineSegment2D.test.js +0 -100
  440. package/dist/esm/ValueObjects/LineSegment2D.test.js.map +0 -1
  441. package/dist/esm/ValueObjects/Matrix.test.js +0 -383
  442. package/dist/esm/ValueObjects/Matrix.test.js.map +0 -1
  443. package/dist/esm/ValueObjects/ParametricLine.test.js +0 -124
  444. package/dist/esm/ValueObjects/ParametricLine.test.js.map +0 -1
  445. package/dist/esm/ValueObjects/ParametricPlane.test.js +0 -99
  446. package/dist/esm/ValueObjects/ParametricPlane.test.js.map +0 -1
  447. package/dist/esm/ValueObjects/Quaternion.test.js +0 -238
  448. package/dist/esm/ValueObjects/Quaternion.test.js.map +0 -1
  449. package/dist/esm/ValueObjects/Rectangle.test.js +0 -30
  450. package/dist/esm/ValueObjects/Rectangle.test.js.map +0 -1
  451. package/dist/esm/ValueObjects/Vector2.test.js +0 -134
  452. package/dist/esm/ValueObjects/Vector2.test.js.map +0 -1
  453. package/dist/esm/ValueObjects/Vector3.test.js +0 -186
  454. package/dist/esm/ValueObjects/Vector3.test.js.map +0 -1
  455. package/dist/esm/ValueObjects/Version.test.js +0 -308
  456. package/dist/esm/ValueObjects/Version.test.js.map +0 -1
  457. package/dist/types/AppObject/AppObject.test.d.ts +0 -7
  458. package/dist/types/AppObject/AppObject.test.d.ts.map +0 -1
  459. package/dist/types/AppObject/AppObjectComponent.test.d.ts +0 -2
  460. package/dist/types/AppObject/AppObjectComponent.test.d.ts.map +0 -1
  461. package/dist/types/AppObject/AppObjectEntity.test.d.ts +0 -2
  462. package/dist/types/AppObject/AppObjectEntity.test.d.ts.map +0 -1
  463. package/dist/types/AppObject/AppObjectEntityRepo.test.d.ts +0 -2
  464. package/dist/types/AppObject/AppObjectEntityRepo.test.d.ts.map +0 -1
  465. package/dist/types/AppObject/AppObjectPM.test.d.ts +0 -2
  466. package/dist/types/AppObject/AppObjectPM.test.d.ts.map +0 -1
  467. package/dist/types/AppObject/AppObjectRepo.test.d.ts +0 -2
  468. package/dist/types/AppObject/AppObjectRepo.test.d.ts.map +0 -1
  469. package/dist/types/AppObject/getSingletonComponent.test.d.ts +0 -2
  470. package/dist/types/AppObject/getSingletonComponent.test.d.ts.map +0 -1
  471. package/dist/types/Entities/MemoizedAngle.test.d.ts +0 -2
  472. package/dist/types/Entities/MemoizedAngle.test.d.ts.map +0 -1
  473. package/dist/types/Entities/MemoizedBoolean.test.d.ts +0 -2
  474. package/dist/types/Entities/MemoizedBoolean.test.d.ts.map +0 -1
  475. package/dist/types/Entities/MemoizedColor.test.d.ts +0 -2
  476. package/dist/types/Entities/MemoizedColor.test.d.ts.map +0 -1
  477. package/dist/types/Entities/MemoizedNumber.test.d.ts +0 -2
  478. package/dist/types/Entities/MemoizedNumber.test.d.ts.map +0 -1
  479. package/dist/types/Entities/MemoizedQuaternion.test.d.ts +0 -2
  480. package/dist/types/Entities/MemoizedQuaternion.test.d.ts.map +0 -1
  481. package/dist/types/Entities/MemoizedString.test.d.ts +0 -2
  482. package/dist/types/Entities/MemoizedString.test.d.ts.map +0 -1
  483. package/dist/types/Entities/MemoizedVector2.test.d.ts +0 -2
  484. package/dist/types/Entities/MemoizedVector2.test.d.ts.map +0 -1
  485. package/dist/types/Entities/MemoizedVector3.test.d.ts +0 -2
  486. package/dist/types/Entities/MemoizedVector3.test.d.ts.map +0 -1
  487. package/dist/types/Entities/ObservableEntity.test.d.ts +0 -2
  488. package/dist/types/Entities/ObservableEntity.test.d.ts.map +0 -1
  489. package/dist/types/Entities/ObserverList.test.d.ts +0 -2
  490. package/dist/types/Entities/ObserverList.test.d.ts.map +0 -1
  491. package/dist/types/Entities/RangedNumber.test.d.ts +0 -2
  492. package/dist/types/Entities/RangedNumber.test.d.ts.map +0 -1
  493. package/dist/types/Utilities/LengthConverters.test.d.ts +0 -2
  494. package/dist/types/Utilities/LengthConverters.test.d.ts.map +0 -1
  495. package/dist/types/Utilities/LerpNumber.test.d.ts +0 -2
  496. package/dist/types/Utilities/LerpNumber.test.d.ts.map +0 -1
  497. package/dist/types/Utilities/addAlphaToHex.test.d.ts +0 -2
  498. package/dist/types/Utilities/addAlphaToHex.test.d.ts.map +0 -1
  499. package/dist/types/Utilities/alphaToHex.test.d.ts +0 -2
  500. package/dist/types/Utilities/alphaToHex.test.d.ts.map +0 -1
  501. package/dist/types/Utilities/degreesToRadians.test.d.ts +0 -2
  502. package/dist/types/Utilities/degreesToRadians.test.d.ts.map +0 -1
  503. package/dist/types/Utilities/easeFunctions.test.d.ts +0 -2
  504. package/dist/types/Utilities/easeFunctions.test.d.ts.map +0 -1
  505. package/dist/types/Utilities/interpolateNumber.test.d.ts +0 -2
  506. package/dist/types/Utilities/interpolateNumber.test.d.ts.map +0 -1
  507. package/dist/types/ValueObjects/Angle.test.d.ts +0 -2
  508. package/dist/types/ValueObjects/Angle.test.d.ts.map +0 -1
  509. package/dist/types/ValueObjects/Color.test.d.ts +0 -2
  510. package/dist/types/ValueObjects/Color.test.d.ts.map +0 -1
  511. package/dist/types/ValueObjects/LineSegment2D.test.d.ts +0 -2
  512. package/dist/types/ValueObjects/LineSegment2D.test.d.ts.map +0 -1
  513. package/dist/types/ValueObjects/Matrix.test.d.ts +0 -2
  514. package/dist/types/ValueObjects/Matrix.test.d.ts.map +0 -1
  515. package/dist/types/ValueObjects/ParametricLine.test.d.ts +0 -2
  516. package/dist/types/ValueObjects/ParametricLine.test.d.ts.map +0 -1
  517. package/dist/types/ValueObjects/ParametricPlane.test.d.ts +0 -2
  518. package/dist/types/ValueObjects/ParametricPlane.test.d.ts.map +0 -1
  519. package/dist/types/ValueObjects/Quaternion.test.d.ts +0 -2
  520. package/dist/types/ValueObjects/Quaternion.test.d.ts.map +0 -1
  521. package/dist/types/ValueObjects/Rectangle.test.d.ts +0 -2
  522. package/dist/types/ValueObjects/Rectangle.test.d.ts.map +0 -1
  523. package/dist/types/ValueObjects/Vector2.test.d.ts +0 -2
  524. package/dist/types/ValueObjects/Vector2.test.d.ts.map +0 -1
  525. package/dist/types/ValueObjects/Vector3.test.d.ts +0 -2
  526. package/dist/types/ValueObjects/Vector3.test.d.ts.map +0 -1
  527. package/dist/types/ValueObjects/Version.test.d.ts +0 -2
  528. package/dist/types/ValueObjects/Version.test.d.ts.map +0 -1
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./Adapters"), exports);
18
+ __exportStar(require("./Controllers"), exports);
19
+ __exportStar(require("./Entities"), exports);
20
+ __exportStar(require("./Factory"), exports);
21
+ __exportStar(require("./Mocks"), exports);
22
+ __exportStar(require("./PMs"), exports);
23
+ __exportStar(require("./UCs"), exports);
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ExampleFeature/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,gDAA8B;AAC9B,6CAA2B;AAC3B,4CAA0B;AAC1B,0CAAwB;AACxB,wCAAsB;AACtB,wCAAsB","sourcesContent":["export * from \"./Adapters\";\r\nexport * from \"./Controllers\";\r\nexport * from \"./Entities\";\r\nexport * from \"./Factory\";\r\nexport * from \"./Mocks\";\r\nexport * from \"./PMs\";\r\nexport * from \"./UCs\";"]}
@@ -1 +1 @@
1
- {"version":3,"file":"PmAdapter.js","sourceRoot":"","sources":["../../../src/Types/PmAdapter.ts"],"names":[],"mappings":"","sourcesContent":["import { AppObjectRepo } from \"../AppObject\";\r\n\r\nexport interface PmAdapter<VM> {\r\n defaultVM: VM;\r\n subscribe(\r\n id: string,\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: VM) => void\r\n ): void;\r\n unsubscribe(\r\n id: string,\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: VM) => void\r\n ): void;\r\n}\r\n"]}
1
+ {"version":3,"file":"PmAdapter.js","sourceRoot":"","sources":["../../../src/Types/PmAdapter.ts"],"names":[],"mappings":"","sourcesContent":["import { AppObjectRepo } from \"../AppObject\";\r\n\r\n/**\r\n * PmAdapter interface defines a bridge between UI components and AppObjectPM (Presentation Manager) components.\r\n * It allows UI frameworks (like React, Vue, Angular, etc.) to subscribe to view model updates from specific AppObjects.\r\n * \r\n * This adapter is used for AppObject-specific subscriptions, where each UI component subscribes to\r\n * a particular AppObject's presentation manager, identified by its ID.\r\n * \r\n * Usage example with React:\r\n * ```typescript\r\n * // Define an adapter for a specific view model type\r\n * class MyComponentAdapter implements PmAdapter<MyViewModel> {\r\n * // Default view model when no data is available\r\n * defaultVM: MyViewModel = { value: 0, label: \"\" };\r\n * \r\n * // Subscribe to updates from a specific AppObject's presentation manager\r\n * subscribe(id: string, appObjects: AppObjectRepo, setVM: (vm: MyViewModel) => void): void {\r\n * const appObject = appObjects.get(id);\r\n * if (!appObject) return;\r\n * \r\n * const pm = appObject.getComponent<MyPM>(\"MyPresentationManager\");\r\n * if (pm) {\r\n * pm.addView(setVM);\r\n * // Initial update with current view model if available\r\n * if (pm.lastVM) setVM(pm.lastVM);\r\n * }\r\n * }\r\n * \r\n * // Unsubscribe when component unmounts\r\n * unsubscribe(id: string, appObjects: AppObjectRepo, setVM: (vm: MyViewModel) => void): void {\r\n * const appObject = appObjects.get(id);\r\n * if (!appObject) return;\r\n * \r\n * const pm = appObject.getComponent<MyPM>(\"MyPresentationManager\");\r\n * if (pm) {\r\n * pm.removeView(setVM);\r\n * }\r\n * }\r\n * }\r\n * ```\r\n * \r\n * @typeparam VM The view model type provided by this adapter\r\n */\r\nexport interface PmAdapter<VM> {\r\n /**\r\n * Default view model to use when no data is available\r\n * This prevents null/undefined handling in UI components\r\n */\r\n defaultVM: VM;\r\n \r\n /**\r\n * Subscribe to view model updates from an AppObject's presentation manager\r\n * \r\n * @param id The ID of the AppObject to subscribe to\r\n * @param appObjects The repository containing the AppObjects\r\n * @param setVM Callback function that updates the UI with new view models\r\n */\r\n subscribe(\r\n id: string,\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: VM) => void\r\n ): void;\r\n \r\n /**\r\n * Unsubscribe from view model updates when a component is being unmounted or no longer needs updates\r\n * \r\n * @param id The ID of the AppObject to unsubscribe from\r\n * @param appObjects The repository containing the AppObjects\r\n * @param setVM The same callback function that was provided to subscribe\r\n */\r\n unsubscribe(\r\n id: string,\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: VM) => void\r\n ): void;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SingletonPmAdapter.js","sourceRoot":"","sources":["../../../src/Types/SingletonPmAdapter.ts"],"names":[],"mappings":"","sourcesContent":["import { AppObjectRepo } from \"../AppObject\";\r\n\r\nexport interface SingletonPmAdapter<VM> {\r\n defaultVM: VM;\r\n subscribe(appObjects: AppObjectRepo, setVM: (vm: VM) => void): void;\r\n unsubscribe(appObjects: AppObjectRepo, setVM: (vm: VM) => void): void;\r\n}\r\n"]}
1
+ {"version":3,"file":"SingletonPmAdapter.js","sourceRoot":"","sources":["../../../src/Types/SingletonPmAdapter.ts"],"names":[],"mappings":"","sourcesContent":["import { AppObjectRepo } from \"../AppObject\";\r\n\r\n/**\r\n * SingletonPmAdapter interface defines a bridge between UI components and singleton presentation managers.\r\n * It's similar to PmAdapter but designed for components that subscribe to a singleton PM \r\n * (a PM that exists only once in the application).\r\n * \r\n * This adapter simplifies the subscription process when there's only one instance of a specific\r\n * presentation manager type in the entire application, eliminating the need to specify an AppObject ID.\r\n * \r\n * Usage example with React:\r\n * ```typescript\r\n * // Define an adapter for a singleton presentation manager\r\n * class GlobalSettingsPMAdapter implements SingletonPmAdapter<SettingsViewModel> {\r\n * // Default view model when no data is available\r\n * defaultVM: SettingsViewModel = { theme: \"light\", fontSize: \"medium\" };\r\n * \r\n * // Subscribe to updates from the singleton presentation manager\r\n * subscribe(appObjects: AppObjectRepo, setVM: (vm: SettingsViewModel) => void): void {\r\n * // Get the singleton PM\r\n * const settingsPM = appObjects.getSingleton<SettingsPM>(\"SettingsPM\");\r\n * if (settingsPM) {\r\n * // Register the update callback\r\n * settingsPM.addView(setVM);\r\n * // Initial update with current view model if available\r\n * if (settingsPM.lastVM) setVM(settingsPM.lastVM);\r\n * }\r\n * }\r\n * \r\n * // Unsubscribe when component unmounts\r\n * unsubscribe(appObjects: AppObjectRepo, setVM: (vm: SettingsViewModel) => void): void {\r\n * const settingsPM = appObjects.getSingleton<SettingsPM>(\"SettingsPM\");\r\n * if (settingsPM) {\r\n * settingsPM.removeView(setVM);\r\n * }\r\n * }\r\n * }\r\n * ```\r\n * \r\n * @typeparam VM The view model type provided by this adapter\r\n */\r\nexport interface SingletonPmAdapter<VM> {\r\n /**\r\n * Default view model to use when no data is available\r\n * This prevents null/undefined handling in UI components\r\n */\r\n defaultVM: VM;\r\n \r\n /**\r\n * Subscribe to view model updates from a singleton presentation manager\r\n * \r\n * @param appObjects The repository containing the AppObjects\r\n * @param setVM Callback function that updates the UI with new view models\r\n */\r\n subscribe(appObjects: AppObjectRepo, setVM: (vm: VM) => void): void;\r\n \r\n /**\r\n * Unsubscribe from view model updates when a component is being unmounted or no longer needs updates\r\n * \r\n * @param appObjects The repository containing the AppObjects\r\n * @param setVM The same callback function that was provided to subscribe\r\n */\r\n unsubscribe(appObjects: AppObjectRepo, setVM: (vm: VM) => void): void;\r\n}\r\n"]}
@@ -23,7 +23,7 @@ class Angle {
23
23
  * @param a Angle A
24
24
  * @param b Angle B
25
25
  * @param tolerance Tolerance for "Close" in degrees. Defaults to 0.001;
26
- * @returns True if the difference between A and B (in degress) is less than the tolerance
26
+ * @returns True if the difference between A and B (in degrees) is less than the tolerance
27
27
  */
28
28
  static Close(a, b, tolerance = 0.001) {
29
29
  let diff = a.degrees - b.degrees;
@@ -1 +1 @@
1
- {"version":3,"file":"Angle.js","sourceRoot":"","sources":["../../../src/ValueObjects/Angle.ts"],"names":[],"mappings":";;;AAAA,MAAa,KAAK;IAChB;;;;OAIG;IACI,MAAM,CAAC,WAAW,CAAC,OAAe;QACvC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,WAAW,CAAC,OAAe;QACvC,OAAO,IAAI,KAAK,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,KAAK,CAAC,CAAQ,EAAE,CAAQ,EAAE,YAAoB,KAAK;QAC/D,IAAI,IAAI,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;QACjC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACb,IAAI,GAAG,CAAC,IAAI,CAAC;QACf,CAAC;QACD,OAAO,IAAI,GAAG,SAAS,CAAC;IAC1B,CAAC;IAGD,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,IAAW,OAAO;QAChB,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;IACzC,CAAC;IAED,YAAoB,OAAe;QAT3B,aAAQ,GAAG,CAAC,CAAC;QAUnB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;CACF;AA9CD,sBA8CC","sourcesContent":["export class Angle {\r\n /**\r\n * Creates an angle from degrees\r\n * @param degrees Angle in degrees\r\n * @returns The angle\r\n */\r\n public static FromDegrees(degrees: number): Angle {\r\n return new Angle(degrees);\r\n }\r\n\r\n /**\r\n * Creates an angle from radians\r\n * @param radians Angle in radians\r\n * @returns The angle\r\n */\r\n public static FromRadians(radians: number): Angle {\r\n return new Angle((radians * 180) / Math.PI);\r\n }\r\n\r\n /**\r\n * Check to see if two angles are close\r\n * @param a Angle A\r\n * @param b Angle B\r\n * @param tolerance Tolerance for \"Close\" in degrees. Defaults to 0.001;\r\n * @returns True if the difference between A and B (in degress) is less than the tolerance\r\n */\r\n public static Close(a: Angle, b: Angle, tolerance: number = 0.001): boolean {\r\n let diff = a.degrees - b.degrees;\r\n if (diff < 0) {\r\n diff = -diff;\r\n }\r\n return diff < tolerance;\r\n }\r\n\r\n private _degrees = 0;\r\n public get degrees() {\r\n return this._degrees;\r\n }\r\n\r\n public get radians() {\r\n return (this._degrees * Math.PI) / 180;\r\n }\r\n\r\n private constructor(degrees: number) {\r\n this._degrees = degrees;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"Angle.js","sourceRoot":"","sources":["../../../src/ValueObjects/Angle.ts"],"names":[],"mappings":";;;AAAA,MAAa,KAAK;IAChB;;;;OAIG;IACI,MAAM,CAAC,WAAW,CAAC,OAAe;QACvC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,WAAW,CAAC,OAAe;QACvC,OAAO,IAAI,KAAK,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,KAAK,CAAC,CAAQ,EAAE,CAAQ,EAAE,YAAoB,KAAK;QAC/D,IAAI,IAAI,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;QACjC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACb,IAAI,GAAG,CAAC,IAAI,CAAC;QACf,CAAC;QACD,OAAO,IAAI,GAAG,SAAS,CAAC;IAC1B,CAAC;IAGD,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,IAAW,OAAO;QAChB,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;IACzC,CAAC;IAED,YAAoB,OAAe;QAT3B,aAAQ,GAAG,CAAC,CAAC;QAUnB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;CACF;AA9CD,sBA8CC","sourcesContent":["export class Angle {\r\n /**\r\n * Creates an angle from degrees\r\n * @param degrees Angle in degrees\r\n * @returns The angle\r\n */\r\n public static FromDegrees(degrees: number): Angle {\r\n return new Angle(degrees);\r\n }\r\n\r\n /**\r\n * Creates an angle from radians\r\n * @param radians Angle in radians\r\n * @returns The angle\r\n */\r\n public static FromRadians(radians: number): Angle {\r\n return new Angle((radians * 180) / Math.PI);\r\n }\r\n\r\n /**\r\n * Check to see if two angles are close\r\n * @param a Angle A\r\n * @param b Angle B\r\n * @param tolerance Tolerance for \"Close\" in degrees. Defaults to 0.001;\r\n * @returns True if the difference between A and B (in degrees) is less than the tolerance\r\n */\r\n public static Close(a: Angle, b: Angle, tolerance: number = 0.001): boolean {\r\n let diff = a.degrees - b.degrees;\r\n if (diff < 0) {\r\n diff = -diff;\r\n }\r\n return diff < tolerance;\r\n }\r\n\r\n private _degrees = 0;\r\n public get degrees() {\r\n return this._degrees;\r\n }\r\n\r\n public get radians() {\r\n return (this._degrees * Math.PI) / 180;\r\n }\r\n\r\n private constructor(degrees: number) {\r\n this._degrees = degrees;\r\n }\r\n}\r\n"]}
@@ -25,14 +25,14 @@ class LineSegment2D {
25
25
  }
26
26
  const tNumerator = (x1 - x3) * (y3 - y4) - (y1 - y3) * (x3 - x4);
27
27
  const t = tNumerator / denominator;
28
- const tTolearnce = tolerance / a.length;
29
- if (t < -tTolearnce || t > 1 + tTolearnce) {
28
+ const tTolerance = tolerance / a.length;
29
+ if (t < -tTolerance || t > 1 + tTolerance) {
30
30
  return undefined;
31
31
  }
32
32
  const uNumerator = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3);
33
33
  const u = uNumerator / denominator;
34
- const uTolearnce = tolerance / b.length;
35
- if (u < -uTolearnce || u > 1 + uTolearnce)
34
+ const uTolerance = tolerance / b.length;
35
+ if (u < -uTolerance || u > 1 + uTolerance)
36
36
  return undefined;
37
37
  const px = x1 + t * (x2 - x1);
38
38
  const py = y1 + t * (y2 - y1);
@@ -52,13 +52,13 @@ class LineSegment2D {
52
52
  return line.end;
53
53
  }
54
54
  else {
55
- const length = t * direction.magnitued;
55
+ const length = t * direction.magnitude;
56
56
  direction = Vector2_1.Vector2.NewVectorOfLength(direction, length);
57
57
  return Vector2_1.Vector2.Add(line.start, direction);
58
58
  }
59
59
  }
60
60
  get length() {
61
- return Vector2_1.Vector2.Subtract(this.start, this.end).magnitued;
61
+ return Vector2_1.Vector2.Subtract(this.start, this.end).magnitude;
62
62
  }
63
63
  get direction() {
64
64
  return Vector2_1.Vector2.Subtract(this.end, this.start).unit;
@@ -1 +1 @@
1
- {"version":3,"file":"LineSegment2D.js","sourceRoot":"","sources":["../../../src/ValueObjects/LineSegment2D.ts"],"names":[],"mappings":";;;AAAA,uCAAoC;AAEpC,MAAa,aAAa;IACjB,MAAM,CAAC,oBAAoB,CAChC,IAAmB,EACnB,OAAe;QAEf,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,MAAM,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAErC,MAAM,QAAQ,GAAG,iBAAO,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAExD,OAAO,iBAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAEM,MAAM,CAAC,SAAS,CACrB,CAAgB,EAChB,CAAgB,EAChB,SAAS,GAAG,CAAC;QAEb,mEAAmE;QACnE,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACrB,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACrB,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACnB,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACnB,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACrB,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACrB,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACnB,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAEnB,MAAM,WAAW,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QAClE,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,UAAU,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACjE,MAAM,CAAC,GAAG,UAAU,GAAG,WAAW,CAAC;QAEnC,MAAM,UAAU,GAAG,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,EAAE,CAAC;YAC1C,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,UAAU,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACjE,MAAM,CAAC,GAAG,UAAU,GAAG,WAAW,CAAC;QAEnC,MAAM,UAAU,GAAG,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU;YAAE,OAAO,SAAS,CAAC;QAE5D,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QAE9B,OAAO,IAAI,iBAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7B,CAAC;IAEM,MAAM,CAAC,kBAAkB,CAC9B,IAAmB,EACnB,KAAc;QAEd,mHAAmH;QACnH,IAAI,SAAS,GAAG,iBAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACvD,MAAM,YAAY,GAAG,iBAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,iBAAO,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QACxD,MAAM,YAAY,GAAG,iBAAO,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACvD,MAAM,CAAC,GAAG,UAAU,GAAG,YAAY,CAAC;QAEpC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACV,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;aAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,GAAG,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC;YACvC,SAAS,GAAG,iBAAO,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACzD,OAAO,iBAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAKD,IAAW,MAAM;QACf,OAAO,iBAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC;IAC1D,CAAC;IAED,IAAW,SAAS;QAClB,OAAO,iBAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;IACrD,CAAC;IAED,YAAY,KAAc,EAAE,GAAY;QACtC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;CACF;AA1FD,sCA0FC","sourcesContent":["import { Vector2 } from \"./Vector2\";\r\n\r\nexport class LineSegment2D {\r\n public static GetPositionAtPercent(\r\n line: LineSegment2D,\r\n percent: number\r\n ): Vector2 {\r\n const dir = line.direction;\r\n const length = percent * line.length;\r\n\r\n const localPos = Vector2.NewVectorOfLength(dir, length);\r\n\r\n return Vector2.Add(line.start, localPos);\r\n }\r\n\r\n public static Intersect(\r\n a: LineSegment2D,\r\n b: LineSegment2D,\r\n tolerance = 0\r\n ): Vector2 | undefined {\r\n // See https://en.wikipedia.org/wiki/Line%E2%80%93line_intersection\r\n const x1 = a.start.x;\r\n const y1 = a.start.y;\r\n const x2 = a.end.x;\r\n const y2 = a.end.y;\r\n const x3 = b.start.x;\r\n const y3 = b.start.y;\r\n const x4 = b.end.x;\r\n const y4 = b.end.y;\r\n\r\n const denominator = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\r\n if (denominator === 0) {\r\n return undefined;\r\n }\r\n\r\n const tNumerator = (x1 - x3) * (y3 - y4) - (y1 - y3) * (x3 - x4);\r\n const t = tNumerator / denominator;\r\n\r\n const tTolearnce = tolerance / a.length;\r\n if (t < -tTolearnce || t > 1 + tTolearnce) {\r\n return undefined;\r\n }\r\n\r\n const uNumerator = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3);\r\n const u = uNumerator / denominator;\r\n\r\n const uTolearnce = tolerance / b.length;\r\n if (u < -uTolearnce || u > 1 + uTolearnce) return undefined;\r\n\r\n const px = x1 + t * (x2 - x1);\r\n const py = y1 + t * (y2 - y1);\r\n\r\n return new Vector2(px, py);\r\n }\r\n\r\n public static ClosestPointOnLine(\r\n line: LineSegment2D,\r\n point: Vector2\r\n ): Vector2 {\r\n // see https://monkeyproofsolutions.nl/wordpress/how-to-calculate-the-shortest-distance-between-a-point-and-a-line/\r\n let direction = Vector2.Subtract(line.end, line.start);\r\n const pointToStart = Vector2.Subtract(point, line.start);\r\n const tNumerator = Vector2.Dot(direction, pointToStart);\r\n const tDenominator = Vector2.Dot(direction, direction);\r\n const t = tNumerator / tDenominator;\r\n\r\n if (t < 0) {\r\n return line.start;\r\n } else if (t > 1) {\r\n return line.end;\r\n } else {\r\n const length = t * direction.magnitued;\r\n direction = Vector2.NewVectorOfLength(direction, length);\r\n return Vector2.Add(line.start, direction);\r\n }\r\n }\r\n\r\n readonly start: Vector2;\r\n readonly end: Vector2;\r\n\r\n public get length(): number {\r\n return Vector2.Subtract(this.start, this.end).magnitued;\r\n }\r\n\r\n public get direction(): Vector2 {\r\n return Vector2.Subtract(this.end, this.start).unit;\r\n }\r\n\r\n constructor(start: Vector2, end: Vector2) {\r\n this.start = start;\r\n this.end = end;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"LineSegment2D.js","sourceRoot":"","sources":["../../../src/ValueObjects/LineSegment2D.ts"],"names":[],"mappings":"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","sourcesContent":["import { Vector2 } from \"./Vector2\";\r\n\r\nexport class LineSegment2D {\r\n public static GetPositionAtPercent(\r\n line: LineSegment2D,\r\n percent: number\r\n ): Vector2 {\r\n const dir = line.direction;\r\n const length = percent * line.length;\r\n\r\n const localPos = Vector2.NewVectorOfLength(dir, length);\r\n\r\n return Vector2.Add(line.start, localPos);\r\n }\r\n\r\n public static Intersect(\r\n a: LineSegment2D,\r\n b: LineSegment2D,\r\n tolerance = 0\r\n ): Vector2 | undefined {\r\n // See https://en.wikipedia.org/wiki/Line%E2%80%93line_intersection\r\n const x1 = a.start.x;\r\n const y1 = a.start.y;\r\n const x2 = a.end.x;\r\n const y2 = a.end.y;\r\n const x3 = b.start.x;\r\n const y3 = b.start.y;\r\n const x4 = b.end.x;\r\n const y4 = b.end.y;\r\n\r\n const denominator = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\r\n if (denominator === 0) {\r\n return undefined;\r\n }\r\n\r\n const tNumerator = (x1 - x3) * (y3 - y4) - (y1 - y3) * (x3 - x4);\r\n const t = tNumerator / denominator;\r\n\r\n const tTolerance = tolerance / a.length;\r\n if (t < -tTolerance || t > 1 + tTolerance) {\r\n return undefined;\r\n }\r\n\r\n const uNumerator = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3);\r\n const u = uNumerator / denominator;\r\n\r\n const uTolerance = tolerance / b.length;\r\n if (u < -uTolerance || u > 1 + uTolerance) return undefined;\r\n\r\n const px = x1 + t * (x2 - x1);\r\n const py = y1 + t * (y2 - y1);\r\n\r\n return new Vector2(px, py);\r\n }\r\n\r\n public static ClosestPointOnLine(\r\n line: LineSegment2D,\r\n point: Vector2\r\n ): Vector2 {\r\n // see https://monkeyproofsolutions.nl/wordpress/how-to-calculate-the-shortest-distance-between-a-point-and-a-line/\r\n let direction = Vector2.Subtract(line.end, line.start);\r\n const pointToStart = Vector2.Subtract(point, line.start);\r\n const tNumerator = Vector2.Dot(direction, pointToStart);\r\n const tDenominator = Vector2.Dot(direction, direction);\r\n const t = tNumerator / tDenominator;\r\n\r\n if (t < 0) {\r\n return line.start;\r\n } else if (t > 1) {\r\n return line.end;\r\n } else {\r\n const length = t * direction.magnitude;\r\n direction = Vector2.NewVectorOfLength(direction, length);\r\n return Vector2.Add(line.start, direction);\r\n }\r\n }\r\n\r\n readonly start: Vector2;\r\n readonly end: Vector2;\r\n\r\n public get length(): number {\r\n return Vector2.Subtract(this.start, this.end).magnitude;\r\n }\r\n\r\n public get direction(): Vector2 {\r\n return Vector2.Subtract(this.end, this.start).unit;\r\n }\r\n\r\n constructor(start: Vector2, end: Vector2) {\r\n this.start = start;\r\n this.end = end;\r\n }\r\n}\r\n"]}
@@ -5,21 +5,21 @@ const Quaternion_1 = require("./Quaternion");
5
5
  const Vector3_1 = require("./Vector3");
6
6
  class Matrix {
7
7
  /**
8
- * Consructs an identity matrix
8
+ * Constructs an identity matrix
9
9
  * @returns An identity matrix
10
10
  */
11
11
  static Identity() {
12
12
  return new Matrix([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
13
13
  }
14
14
  /**
15
- * Constructs an matrix of zeros
15
+ * Constructs a matrix of zeros
16
16
  * @returns A matrix of zeros
17
17
  */
18
18
  static Zero() {
19
19
  return new Matrix([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
20
20
  }
21
21
  /**
22
- * Compares two matricies
22
+ * Compares two matrices
23
23
  * @param a Matrix A
24
24
  * @param b Matrix B
25
25
  * @returns True if all the elements in matrix A are equal to all the elements of matrix B
@@ -38,7 +38,7 @@ class Matrix {
38
38
  * Checks to see if Matrix A is close to Matrix B by comparing elements
39
39
  * @param a Matrix A
40
40
  * @param b Matrix B
41
- * @param threshold "Close" thershold. Defaults to 0.001
41
+ * @param threshold "Close" threshold. Defaults to 0.001
42
42
  * @returns True if all the difference between the elements in each array is less than the threshold
43
43
  */
44
44
  static Close(a, b, threshold = 0.001) {
@@ -132,7 +132,7 @@ class Matrix {
132
132
  ]);
133
133
  }
134
134
  /**
135
- * Composes a matrix from a scale vector, rotation quaterion, and translation vector
135
+ * Composes a matrix from a scale vector, rotation quaternion, and translation vector
136
136
  * @param scale The scale of the transformation matrix
137
137
  * @param rotation The rotation of the transformation matrix
138
138
  * @param translation The translation of the transformation matrix
@@ -343,7 +343,7 @@ class Matrix {
343
343
  array[12],
344
344
  array[13],
345
345
  array[14],
346
- array[15]
346
+ array[15],
347
347
  ];
348
348
  return new Matrix(matrixArray);
349
349
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Matrix.js","sourceRoot":"","sources":["../../../src/ValueObjects/Matrix.ts"],"names":[],"mappings":"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QACjB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAElB,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACxC,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACxC,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACxC,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACxC,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACxC,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACxC,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACxC,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACxC,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACxC,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACxC,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACxC,MAAM,SAAS,GAAG,GA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","sourcesContent":["import { Angle } from \"./Angle\";\r\nimport { Quaternion } from \"./Quaternion\";\r\nimport { Vector3 } from \"./Vector3\";\r\n\r\nexport type MatrixArray = [\r\n number,\r\n number,\r\n number,\r\n number,\r\n number,\r\n number,\r\n number,\r\n number,\r\n number,\r\n number,\r\n number,\r\n number,\r\n number,\r\n number,\r\n number,\r\n number\r\n];\r\n\r\nexport class Matrix {\r\n /**\r\n * Consructs an identity matrix\r\n * @returns An identity matrix\r\n */\r\n public static Identity(): Matrix {\r\n return new Matrix([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);\r\n }\r\n\r\n /**\r\n * Constructs an matrix of zeros\r\n * @returns A matrix of zeros\r\n */\r\n public static Zero(): Matrix {\r\n return new Matrix([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);\r\n }\r\n\r\n /**\r\n * Compares two matricies\r\n * @param a Matrix A\r\n * @param b Matrix B\r\n * @returns True if all the elements in matrix A are equal to all the elements of matrix B\r\n */\r\n public static Equal(a: Matrix, b: Matrix): boolean {\r\n let areEqual = true;\r\n for (let i = 0; i < 16; i++) {\r\n if (a._m[i] !== b._m[i]) {\r\n areEqual = false;\r\n break;\r\n }\r\n }\r\n return areEqual;\r\n }\r\n\r\n /**\r\n * Checks to see if Matrix A is close to Matrix B by comparing elements\r\n * @param a Matrix A\r\n * @param b Matrix B\r\n * @param threshold \"Close\" thershold. Defaults to 0.001\r\n * @returns True if all the difference between the elements in each array is less than the threshold\r\n */\r\n public static Close(a: Matrix, b: Matrix, threshold = 0.001): boolean {\r\n let areClose = true;\r\n for (let i = 0; i < 16; i++) {\r\n let diff = a._m[i] - b._m[i];\r\n if (diff < 0) {\r\n diff = -diff;\r\n }\r\n if (diff > threshold) {\r\n areClose = false;\r\n break;\r\n }\r\n }\r\n return areClose;\r\n }\r\n\r\n /**\r\n * Multiplies Matrix A and B (AxB)\r\n * @param a Matrix A\r\n * @param b Matrix B\r\n * @returns The result of AxB\r\n */\r\n public static Multiply(a: Matrix, b: Matrix): Matrix {\r\n const aMatrix = a._m;\r\n const bMatrix = b._m;\r\n const tm0 = bMatrix[0];\r\n const tm1 = bMatrix[1];\r\n const tm2 = bMatrix[2];\r\n const tm3 = bMatrix[3];\r\n const tm4 = bMatrix[4];\r\n const tm5 = bMatrix[5];\r\n const tm6 = bMatrix[6];\r\n const tm7 = bMatrix[7];\r\n const tm8 = bMatrix[8];\r\n const tm9 = bMatrix[9];\r\n const tm10 = bMatrix[10];\r\n const tm11 = bMatrix[11];\r\n const tm12 = bMatrix[12];\r\n const tm13 = bMatrix[13];\r\n const tm14 = bMatrix[14];\r\n const tm15 = bMatrix[15];\r\n\r\n const om0 = aMatrix[0];\r\n const om1 = aMatrix[1];\r\n const om2 = aMatrix[2];\r\n const om3 = aMatrix[3];\r\n const om4 = aMatrix[4];\r\n const om5 = aMatrix[5];\r\n const om6 = aMatrix[6];\r\n const om7 = aMatrix[7];\r\n const om8 = aMatrix[8];\r\n const om9 = aMatrix[9];\r\n const om10 = aMatrix[10];\r\n const om11 = aMatrix[11];\r\n const om12 = aMatrix[12];\r\n const om13 = aMatrix[13];\r\n const om14 = aMatrix[14];\r\n const om15 = aMatrix[15];\r\n\r\n const result1 = tm0 * om0 + tm1 * om4 + tm2 * om8 + tm3 * om12;\r\n const result2 = tm0 * om1 + tm1 * om5 + tm2 * om9 + tm3 * om13;\r\n const result3 = tm0 * om2 + tm1 * om6 + tm2 * om10 + tm3 * om14;\r\n const result4 = tm0 * om3 + tm1 * om7 + tm2 * om11 + tm3 * om15;\r\n\r\n const result5 = tm4 * om0 + tm5 * om4 + tm6 * om8 + tm7 * om12;\r\n const result6 = tm4 * om1 + tm5 * om5 + tm6 * om9 + tm7 * om13;\r\n const result7 = tm4 * om2 + tm5 * om6 + tm6 * om10 + tm7 * om14;\r\n const result8 = tm4 * om3 + tm5 * om7 + tm6 * om11 + tm7 * om15;\r\n\r\n const result9 = tm8 * om0 + tm9 * om4 + tm10 * om8 + tm11 * om12;\r\n const result10 = tm8 * om1 + tm9 * om5 + tm10 * om9 + tm11 * om13;\r\n const result11 = tm8 * om2 + tm9 * om6 + tm10 * om10 + tm11 * om14;\r\n const result12 = tm8 * om3 + tm9 * om7 + tm10 * om11 + tm11 * om15;\r\n\r\n const result13 = tm12 * om0 + tm13 * om4 + tm14 * om8 + tm15 * om12;\r\n const result14 = tm12 * om1 + tm13 * om5 + tm14 * om9 + tm15 * om13;\r\n const result15 = tm12 * om2 + tm13 * om6 + tm14 * om10 + tm15 * om14;\r\n const result16 = tm12 * om3 + tm13 * om7 + tm14 * om11 + tm15 * om15;\r\n return new Matrix([\r\n result1,\r\n result2,\r\n result3,\r\n result4,\r\n\r\n result5,\r\n result6,\r\n result7,\r\n result8,\r\n\r\n result9,\r\n result10,\r\n result11,\r\n result12,\r\n\r\n result13,\r\n result14,\r\n result15,\r\n result16,\r\n ]);\r\n }\r\n\r\n /**\r\n * Composes a matrix from a scale vector, rotation quaterion, and translation vector\r\n * @param scale The scale of the transformation matrix\r\n * @param rotation The rotation of the transformation matrix\r\n * @param translation The translation of the transformation matrix\r\n * @returns The composed matrix\r\n */\r\n public static Compose(\r\n scale: Vector3,\r\n rotation: Quaternion,\r\n translation: Vector3\r\n ): Matrix {\r\n const final: MatrixArray = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n\r\n const rotX = rotation.x;\r\n const rotY = rotation.y;\r\n const rotZ = rotation.z;\r\n const rotW = rotation.w;\r\n\r\n const x2 = rotX + rotX;\r\n const y2 = rotY + rotY;\r\n const z2 = rotZ + rotZ;\r\n const xx = rotX * x2;\r\n const xy = rotX * y2;\r\n const xz = rotX * z2;\r\n const yy = rotY * y2;\r\n const yz = rotY * z2;\r\n const zz = rotZ * z2;\r\n const wx = rotW * x2;\r\n const wy = rotW * y2;\r\n const wz = rotW * z2;\r\n\r\n const scaleX = scale.x;\r\n const scaleY = scale.y;\r\n const scaleZ = scale.z;\r\n\r\n final[0] = (1 - (yy + zz)) * scaleX;\r\n final[1] = (xy + wz) * scaleX;\r\n final[2] = (xz - wy) * scaleX;\r\n final[3] = 0;\r\n\r\n final[4] = (xy - wz) * scaleY;\r\n final[5] = (1 - (xx + zz)) * scaleY;\r\n final[6] = (yz + wx) * scaleY;\r\n final[7] = 0;\r\n\r\n final[8] = (xz + wy) * scaleZ;\r\n final[9] = (yz - wx) * scaleZ;\r\n final[10] = (1 - (xx + yy)) * scaleZ;\r\n final[11] = 0;\r\n\r\n final[12] = translation.x;\r\n final[13] = translation.y;\r\n final[14] = translation.z;\r\n final[15] = 1;\r\n\r\n return new Matrix(final);\r\n }\r\n\r\n /**\r\n * Inverts a matrix into a new matrix.\r\n * @param matrix The matrix to invert\r\n * @returns The inverted matrix unless the matrix cannot be inverted, then the identity is returned\r\n */\r\n public static Invert(matrix: Matrix): Matrix {\r\n const m = matrix._m;\r\n const m00 = m[0];\r\n const m01 = m[1];\r\n const m02 = m[2];\r\n const m03 = m[3];\r\n const m10 = m[4];\r\n const m11 = m[5];\r\n const m12 = m[6];\r\n const m13 = m[7];\r\n const m20 = m[8];\r\n const m21 = m[9];\r\n const m22 = m[10];\r\n const m23 = m[11];\r\n const m30 = m[12];\r\n const m31 = m[13];\r\n const m32 = m[14];\r\n const m33 = m[15];\r\n\r\n const det_12_33 = m12 * m33 - m32 * m13;\r\n const det_11_33 = m11 * m33 - m31 * m13;\r\n const det_11_32 = m11 * m32 - m31 * m12;\r\n const det_10_33 = m10 * m33 - m30 * m13;\r\n const det_10_32 = m10 * m32 - m30 * m12;\r\n const det_10_31 = m10 * m31 - m30 * m11;\r\n const det_12_23 = m12 * m23 - m22 * m13;\r\n const det_11_23 = m11 * m23 - m21 * m13;\r\n const det_11_22 = m11 * m22 - m21 * m12;\r\n const det_10_23 = m10 * m23 - m20 * m13;\r\n const det_10_22 = m10 * m22 - m20 * m12;\r\n const det_10_21 = m10 * m21 - m20 * m11;\r\n\r\n const det_22_33 = m22 * m33 - m32 * m23;\r\n const det_21_33 = m21 * m33 - m31 * m23;\r\n const det_21_32 = m21 * m32 - m31 * m22;\r\n const det_20_33 = m20 * m33 - m30 * m23;\r\n const det_20_32 = m20 * m32 - m22 * m30;\r\n const det_20_31 = m20 * m31 - m30 * m21;\r\n\r\n const cofact_00 = +(m11 * det_22_33 - m12 * det_21_33 + m13 * det_21_32);\r\n const cofact_01 = -(m10 * det_22_33 - m12 * det_20_33 + m13 * det_20_32);\r\n const cofact_02 = +(m10 * det_21_33 - m11 * det_20_33 + m13 * det_20_31);\r\n const cofact_03 = -(m10 * det_21_32 - m11 * det_20_32 + m12 * det_20_31);\r\n\r\n const det =\r\n m00 * cofact_00 + m01 * cofact_01 + m02 * cofact_02 + m03 * cofact_03;\r\n if (det === 0) return Matrix.Identity();\r\n\r\n const detInv = 1 / det;\r\n\r\n const cofact_10 = -(m01 * det_22_33 - m02 * det_21_33 + m03 * det_21_32);\r\n const cofact_11 = +(m00 * det_22_33 - m02 * det_20_33 + m03 * det_20_32);\r\n const cofact_12 = -(m00 * det_21_33 - m01 * det_20_33 + m03 * det_20_31);\r\n const cofact_13 = +(m00 * det_21_32 - m01 * det_20_32 + m02 * det_20_31);\r\n\r\n const cofact_20 = +(m01 * det_12_33 - m02 * det_11_33 + m03 * det_11_32);\r\n const cofact_21 = -(m00 * det_12_33 - m02 * det_10_33 + m03 * det_10_32);\r\n const cofact_22 = +(m00 * det_11_33 - m01 * det_10_33 + m03 * det_10_31);\r\n const cofact_23 = -(m00 * det_11_32 - m01 * det_10_32 + m02 * det_10_31);\r\n\r\n const cofact_30 = -(m01 * det_12_23 - m02 * det_11_23 + m03 * det_11_22);\r\n const cofact_31 = +(m00 * det_12_23 - m02 * det_10_23 + m03 * det_10_22);\r\n const cofact_32 = -(m00 * det_11_23 - m01 * det_10_23 + m03 * det_10_21);\r\n const cofact_33 = +(m00 * det_11_22 - m01 * det_10_22 + m02 * det_10_21);\r\n\r\n return new Matrix([\r\n cofact_00 * detInv,\r\n cofact_10 * detInv,\r\n cofact_20 * detInv,\r\n cofact_30 * detInv,\r\n cofact_01 * detInv,\r\n cofact_11 * detInv,\r\n cofact_21 * detInv,\r\n cofact_31 * detInv,\r\n cofact_02 * detInv,\r\n cofact_12 * detInv,\r\n cofact_22 * detInv,\r\n cofact_32 * detInv,\r\n cofact_03 * detInv,\r\n cofact_13 * detInv,\r\n cofact_23 * detInv,\r\n cofact_33 * detInv,\r\n ]);\r\n }\r\n\r\n /**\r\n * Creates a rotation matrix for a given axes and angle\r\n * @param axis The axes of rotation\r\n * @param angle The angle of rotation\r\n * @returns A new rotation matrix\r\n */\r\n public static FromRotationAxisAngle(axis: Vector3, angle: Angle): Matrix {\r\n const sin = Math.sin(-angle.radians);\r\n const cosin = Math.cos(-angle.radians);\r\n const c1 = 1 - cosin;\r\n\r\n const unit = axis.unit;\r\n const m: MatrixArray = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n m[0] = unit.x * unit.x * c1 + cosin;\r\n m[1] = unit.x * unit.y * c1 - unit.z * sin;\r\n m[2] = unit.x * unit.z * c1 + unit.y * sin;\r\n m[3] = 0.0;\r\n\r\n m[4] = unit.y * unit.x * c1 + unit.z * sin;\r\n m[5] = unit.y * unit.y * c1 + cosin;\r\n m[6] = unit.y * unit.z * c1 - unit.x * sin;\r\n m[7] = 0.0;\r\n\r\n m[8] = unit.z * unit.x * c1 - unit.y * sin;\r\n m[9] = unit.z * unit.y * c1 + unit.x * sin;\r\n m[10] = unit.z * unit.z * c1 + cosin;\r\n m[11] = 0.0;\r\n\r\n m[12] = 0.0;\r\n m[13] = 0.0;\r\n m[14] = 0.0;\r\n m[15] = 1.0;\r\n\r\n return new Matrix(m);\r\n }\r\n\r\n /**\r\n * Make a new transformation matrix that has the same scale and rotation as the original but the translation is set\r\n * @param original The original matrix\r\n * @param translation The new translation value\r\n * @returns A new matrix that is the same as the original but the translation has been changed\r\n */\r\n public static SetMatrixTranslation(\r\n original: Matrix,\r\n translation: Vector3\r\n ): Matrix {\r\n const values: MatrixArray = original.m;\r\n values[12] = translation.x;\r\n values[13] = translation.y;\r\n values[14] = translation.z;\r\n\r\n return new Matrix(values);\r\n }\r\n\r\n /**\r\n * Make a new transformation matrix that has the same scale and translation as the original but the rotation is set\r\n * @param original The original matrix\r\n * @param rotation The new rotation value\r\n * @returns A new matrix that is the same as the original but the rotation has been changed\r\n */\r\n public static SetMatrixRotation(\r\n original: Matrix,\r\n rotation: Quaternion\r\n ): Matrix {\r\n const scale = original.scale;\r\n const translation = original.translation;\r\n\r\n return Matrix.Compose(scale, rotation, translation);\r\n }\r\n\r\n /**\r\n * Make a new transformation matrix that has the same rotation and translation as the original but the scale is set\r\n * @param original The original matrix\r\n * @param scale The new scale value\r\n * @returns A new matrix that is the same as the original but the scale has been changed\r\n */\r\n public static SetMatrixScale(\r\n original: Matrix,\r\n scale: Vector3\r\n ): Matrix {\r\n const rotation = original.rotation;\r\n const translation = original.translation;\r\n\r\n return Matrix.Compose(scale, rotation, translation);\r\n }\r\n\r\n public static FromFloat32Array(array: Float32Array): Matrix {\r\n if (array.length !== 16) {\r\n console.error(\"[matrixFrom32] Array does not have a length of 16\");\r\n return Matrix.Identity();\r\n }\r\n\r\n const matrixArray: MatrixArray = [\r\n array[0],\r\n array[1],\r\n array[2],\r\n array[3],\r\n array[4],\r\n array[5],\r\n array[6],\r\n array[7],\r\n array[8],\r\n array[9],\r\n array[10],\r\n array[11],\r\n array[12],\r\n array[13],\r\n array[14],\r\n array[15]\r\n ]\r\n\r\n return new Matrix(matrixArray);\r\n }\r\n\r\n public static FlipTransformMatrixHand(matrix: Matrix): Matrix {\r\n const m = matrix.m;\r\n m[2] *= -1;\r\n m[6] *= -1;\r\n m[8] *= -1;\r\n m[9] *= -1;\r\n m[14] *= -1;\r\n\r\n return new Matrix(m);\r\n }\r\n\r\n public static FlipProjectionMatrixHand(matrix: Matrix): Matrix {\r\n const m = matrix.m;\r\n m[8] *= -1;\r\n m[9] *= -1;\r\n m[10] *= -1;\r\n m[11] *= -1;\r\n\r\n return new Matrix(m);\r\n }\r\n\r\n /**\r\n * Returns the determinate of the matrix\r\n */\r\n public get determinate(): number {\r\n const m = this._m;\r\n const m00 = m[0];\r\n const m01 = m[1];\r\n const m02 = m[2];\r\n const m03 = m[3];\r\n const m10 = m[4];\r\n const m11 = m[5];\r\n const m12 = m[6];\r\n const m13 = m[7];\r\n const m20 = m[8];\r\n const m21 = m[9];\r\n const m22 = m[10];\r\n const m23 = m[11];\r\n const m30 = m[12];\r\n const m31 = m[13];\r\n const m32 = m[14];\r\n const m33 = m[15];\r\n\r\n const det_22_33 = m22 * m33 - m32 * m23;\r\n const det_21_33 = m21 * m33 - m31 * m23;\r\n const det_21_32 = m21 * m32 - m31 * m22;\r\n const det_20_33 = m20 * m33 - m30 * m23;\r\n const det_20_32 = m20 * m32 - m22 * m30;\r\n const det_20_31 = m20 * m31 - m30 * m21;\r\n const cofact_00 = +(m11 * det_22_33 - m12 * det_21_33 + m13 * det_21_32);\r\n const cofact_01 = -(m10 * det_22_33 - m12 * det_20_33 + m13 * det_20_32);\r\n const cofact_02 = +(m10 * det_21_33 - m11 * det_20_33 + m13 * det_20_31);\r\n const cofact_03 = -(m10 * det_21_32 - m11 * det_20_32 + m12 * det_20_31);\r\n return (\r\n m00 * cofact_00 + m01 * cofact_01 + m02 * cofact_02 + m03 * cofact_03\r\n );\r\n }\r\n\r\n /**\r\n * Returns the translation component of the transformation matrix as a Vector\r\n */\r\n get translation(): Vector3 {\r\n return new Vector3(this._m[12], this._m[13], this._m[14]);\r\n }\r\n\r\n /**\r\n * Returns the scale of the transformation matrix as a vector\r\n */\r\n get scale(): Vector3 {\r\n const x = Math.sqrt(\r\n this._m[0] * this._m[0] +\r\n this._m[1] * this._m[1] +\r\n this._m[2] * this._m[2]\r\n );\r\n let y = Math.sqrt(\r\n this._m[4] * this._m[4] +\r\n this._m[5] * this._m[5] +\r\n this._m[6] * this._m[6]\r\n );\r\n const z = Math.sqrt(\r\n this._m[8] * this._m[8] +\r\n this._m[9] * this._m[9] +\r\n this._m[10] * this._m[10]\r\n );\r\n\r\n if (this.determinate <= 0) {\r\n y = -y;\r\n }\r\n\r\n return new Vector3(x, y, z);\r\n }\r\n\r\n /**\r\n * Returns the rotation components of the transformation matrix as a Quaternion\r\n */\r\n get rotation(): Quaternion {\r\n return Quaternion.FromRotationMatrix(this.rotationMatrix);\r\n }\r\n\r\n /**\r\n * Returns just the rotation matrix of the transformation matrix\r\n */\r\n get rotationMatrix(): Matrix {\r\n const scale = this.scale;\r\n const sx = 1 / scale.x;\r\n const sy = 1 / scale.y;\r\n const sz = 1 / scale.z;\r\n\r\n const rMatrixValues: MatrixArray = [\r\n this._m[0] * sx,\r\n this._m[1] * sx,\r\n this._m[2] * sx,\r\n 0.0,\r\n this._m[4] * sy,\r\n this._m[5] * sy,\r\n this._m[6] * sy,\r\n 0.0,\r\n this._m[8] * sz,\r\n this._m[9] * sz,\r\n this._m[10] * sz,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 1.0,\r\n ];\r\n\r\n return new Matrix(rMatrixValues);\r\n }\r\n\r\n // Row, column\r\n private readonly _m: MatrixArray;\r\n get m(): MatrixArray {\r\n return [...this._m];\r\n }\r\n\r\n constructor(m: MatrixArray) {\r\n this._m = m;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"Matrix.js","sourceRoot":"","sources":["../../../src/ValueObjects/Matrix.ts"],"names":[],"mappings":"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QACjB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAElB,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACxC,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACxC,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACxC,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACxC,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACxC,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACxC,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACxC,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACxC,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACxC,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACxC,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACxC,MAAM,SAAS,GAAG,GA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","sourcesContent":["import { Angle } from \"./Angle\";\r\nimport { Quaternion } from \"./Quaternion\";\r\nimport { Vector3 } from \"./Vector3\";\r\n\r\nexport type MatrixArray = [\r\n number,\r\n number,\r\n number,\r\n number,\r\n number,\r\n number,\r\n number,\r\n number,\r\n number,\r\n number,\r\n number,\r\n number,\r\n number,\r\n number,\r\n number,\r\n number,\r\n];\r\n\r\nexport class Matrix {\r\n /**\r\n * Constructs an identity matrix\r\n * @returns An identity matrix\r\n */\r\n public static Identity(): Matrix {\r\n return new Matrix([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);\r\n }\r\n\r\n /**\r\n * Constructs a matrix of zeros\r\n * @returns A matrix of zeros\r\n */\r\n public static Zero(): Matrix {\r\n return new Matrix([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);\r\n }\r\n\r\n /**\r\n * Compares two matrices\r\n * @param a Matrix A\r\n * @param b Matrix B\r\n * @returns True if all the elements in matrix A are equal to all the elements of matrix B\r\n */\r\n public static Equal(a: Matrix, b: Matrix): boolean {\r\n let areEqual = true;\r\n for (let i = 0; i < 16; i++) {\r\n if (a._m[i] !== b._m[i]) {\r\n areEqual = false;\r\n break;\r\n }\r\n }\r\n return areEqual;\r\n }\r\n\r\n /**\r\n * Checks to see if Matrix A is close to Matrix B by comparing elements\r\n * @param a Matrix A\r\n * @param b Matrix B\r\n * @param threshold \"Close\" threshold. Defaults to 0.001\r\n * @returns True if all the difference between the elements in each array is less than the threshold\r\n */\r\n public static Close(a: Matrix, b: Matrix, threshold = 0.001): boolean {\r\n let areClose = true;\r\n for (let i = 0; i < 16; i++) {\r\n let diff = a._m[i] - b._m[i];\r\n if (diff < 0) {\r\n diff = -diff;\r\n }\r\n if (diff > threshold) {\r\n areClose = false;\r\n break;\r\n }\r\n }\r\n return areClose;\r\n }\r\n\r\n /**\r\n * Multiplies Matrix A and B (AxB)\r\n * @param a Matrix A\r\n * @param b Matrix B\r\n * @returns The result of AxB\r\n */\r\n public static Multiply(a: Matrix, b: Matrix): Matrix {\r\n const aMatrix = a._m;\r\n const bMatrix = b._m;\r\n const tm0 = bMatrix[0];\r\n const tm1 = bMatrix[1];\r\n const tm2 = bMatrix[2];\r\n const tm3 = bMatrix[3];\r\n const tm4 = bMatrix[4];\r\n const tm5 = bMatrix[5];\r\n const tm6 = bMatrix[6];\r\n const tm7 = bMatrix[7];\r\n const tm8 = bMatrix[8];\r\n const tm9 = bMatrix[9];\r\n const tm10 = bMatrix[10];\r\n const tm11 = bMatrix[11];\r\n const tm12 = bMatrix[12];\r\n const tm13 = bMatrix[13];\r\n const tm14 = bMatrix[14];\r\n const tm15 = bMatrix[15];\r\n\r\n const om0 = aMatrix[0];\r\n const om1 = aMatrix[1];\r\n const om2 = aMatrix[2];\r\n const om3 = aMatrix[3];\r\n const om4 = aMatrix[4];\r\n const om5 = aMatrix[5];\r\n const om6 = aMatrix[6];\r\n const om7 = aMatrix[7];\r\n const om8 = aMatrix[8];\r\n const om9 = aMatrix[9];\r\n const om10 = aMatrix[10];\r\n const om11 = aMatrix[11];\r\n const om12 = aMatrix[12];\r\n const om13 = aMatrix[13];\r\n const om14 = aMatrix[14];\r\n const om15 = aMatrix[15];\r\n\r\n const result1 = tm0 * om0 + tm1 * om4 + tm2 * om8 + tm3 * om12;\r\n const result2 = tm0 * om1 + tm1 * om5 + tm2 * om9 + tm3 * om13;\r\n const result3 = tm0 * om2 + tm1 * om6 + tm2 * om10 + tm3 * om14;\r\n const result4 = tm0 * om3 + tm1 * om7 + tm2 * om11 + tm3 * om15;\r\n\r\n const result5 = tm4 * om0 + tm5 * om4 + tm6 * om8 + tm7 * om12;\r\n const result6 = tm4 * om1 + tm5 * om5 + tm6 * om9 + tm7 * om13;\r\n const result7 = tm4 * om2 + tm5 * om6 + tm6 * om10 + tm7 * om14;\r\n const result8 = tm4 * om3 + tm5 * om7 + tm6 * om11 + tm7 * om15;\r\n\r\n const result9 = tm8 * om0 + tm9 * om4 + tm10 * om8 + tm11 * om12;\r\n const result10 = tm8 * om1 + tm9 * om5 + tm10 * om9 + tm11 * om13;\r\n const result11 = tm8 * om2 + tm9 * om6 + tm10 * om10 + tm11 * om14;\r\n const result12 = tm8 * om3 + tm9 * om7 + tm10 * om11 + tm11 * om15;\r\n\r\n const result13 = tm12 * om0 + tm13 * om4 + tm14 * om8 + tm15 * om12;\r\n const result14 = tm12 * om1 + tm13 * om5 + tm14 * om9 + tm15 * om13;\r\n const result15 = tm12 * om2 + tm13 * om6 + tm14 * om10 + tm15 * om14;\r\n const result16 = tm12 * om3 + tm13 * om7 + tm14 * om11 + tm15 * om15;\r\n return new Matrix([\r\n result1,\r\n result2,\r\n result3,\r\n result4,\r\n\r\n result5,\r\n result6,\r\n result7,\r\n result8,\r\n\r\n result9,\r\n result10,\r\n result11,\r\n result12,\r\n\r\n result13,\r\n result14,\r\n result15,\r\n result16,\r\n ]);\r\n }\r\n\r\n /**\r\n * Composes a matrix from a scale vector, rotation quaternion, and translation vector\r\n * @param scale The scale of the transformation matrix\r\n * @param rotation The rotation of the transformation matrix\r\n * @param translation The translation of the transformation matrix\r\n * @returns The composed matrix\r\n */\r\n public static Compose(\r\n scale: Vector3,\r\n rotation: Quaternion,\r\n translation: Vector3\r\n ): Matrix {\r\n const final: MatrixArray = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n\r\n const rotX = rotation.x;\r\n const rotY = rotation.y;\r\n const rotZ = rotation.z;\r\n const rotW = rotation.w;\r\n\r\n const x2 = rotX + rotX;\r\n const y2 = rotY + rotY;\r\n const z2 = rotZ + rotZ;\r\n const xx = rotX * x2;\r\n const xy = rotX * y2;\r\n const xz = rotX * z2;\r\n const yy = rotY * y2;\r\n const yz = rotY * z2;\r\n const zz = rotZ * z2;\r\n const wx = rotW * x2;\r\n const wy = rotW * y2;\r\n const wz = rotW * z2;\r\n\r\n const scaleX = scale.x;\r\n const scaleY = scale.y;\r\n const scaleZ = scale.z;\r\n\r\n final[0] = (1 - (yy + zz)) * scaleX;\r\n final[1] = (xy + wz) * scaleX;\r\n final[2] = (xz - wy) * scaleX;\r\n final[3] = 0;\r\n\r\n final[4] = (xy - wz) * scaleY;\r\n final[5] = (1 - (xx + zz)) * scaleY;\r\n final[6] = (yz + wx) * scaleY;\r\n final[7] = 0;\r\n\r\n final[8] = (xz + wy) * scaleZ;\r\n final[9] = (yz - wx) * scaleZ;\r\n final[10] = (1 - (xx + yy)) * scaleZ;\r\n final[11] = 0;\r\n\r\n final[12] = translation.x;\r\n final[13] = translation.y;\r\n final[14] = translation.z;\r\n final[15] = 1;\r\n\r\n return new Matrix(final);\r\n }\r\n\r\n /**\r\n * Inverts a matrix into a new matrix.\r\n * @param matrix The matrix to invert\r\n * @returns The inverted matrix unless the matrix cannot be inverted, then the identity is returned\r\n */\r\n public static Invert(matrix: Matrix): Matrix {\r\n const m = matrix._m;\r\n const m00 = m[0];\r\n const m01 = m[1];\r\n const m02 = m[2];\r\n const m03 = m[3];\r\n const m10 = m[4];\r\n const m11 = m[5];\r\n const m12 = m[6];\r\n const m13 = m[7];\r\n const m20 = m[8];\r\n const m21 = m[9];\r\n const m22 = m[10];\r\n const m23 = m[11];\r\n const m30 = m[12];\r\n const m31 = m[13];\r\n const m32 = m[14];\r\n const m33 = m[15];\r\n\r\n const det_12_33 = m12 * m33 - m32 * m13;\r\n const det_11_33 = m11 * m33 - m31 * m13;\r\n const det_11_32 = m11 * m32 - m31 * m12;\r\n const det_10_33 = m10 * m33 - m30 * m13;\r\n const det_10_32 = m10 * m32 - m30 * m12;\r\n const det_10_31 = m10 * m31 - m30 * m11;\r\n const det_12_23 = m12 * m23 - m22 * m13;\r\n const det_11_23 = m11 * m23 - m21 * m13;\r\n const det_11_22 = m11 * m22 - m21 * m12;\r\n const det_10_23 = m10 * m23 - m20 * m13;\r\n const det_10_22 = m10 * m22 - m20 * m12;\r\n const det_10_21 = m10 * m21 - m20 * m11;\r\n\r\n const det_22_33 = m22 * m33 - m32 * m23;\r\n const det_21_33 = m21 * m33 - m31 * m23;\r\n const det_21_32 = m21 * m32 - m31 * m22;\r\n const det_20_33 = m20 * m33 - m30 * m23;\r\n const det_20_32 = m20 * m32 - m22 * m30;\r\n const det_20_31 = m20 * m31 - m30 * m21;\r\n\r\n const cofact_00 = +(m11 * det_22_33 - m12 * det_21_33 + m13 * det_21_32);\r\n const cofact_01 = -(m10 * det_22_33 - m12 * det_20_33 + m13 * det_20_32);\r\n const cofact_02 = +(m10 * det_21_33 - m11 * det_20_33 + m13 * det_20_31);\r\n const cofact_03 = -(m10 * det_21_32 - m11 * det_20_32 + m12 * det_20_31);\r\n\r\n const det =\r\n m00 * cofact_00 + m01 * cofact_01 + m02 * cofact_02 + m03 * cofact_03;\r\n if (det === 0) return Matrix.Identity();\r\n\r\n const detInv = 1 / det;\r\n\r\n const cofact_10 = -(m01 * det_22_33 - m02 * det_21_33 + m03 * det_21_32);\r\n const cofact_11 = +(m00 * det_22_33 - m02 * det_20_33 + m03 * det_20_32);\r\n const cofact_12 = -(m00 * det_21_33 - m01 * det_20_33 + m03 * det_20_31);\r\n const cofact_13 = +(m00 * det_21_32 - m01 * det_20_32 + m02 * det_20_31);\r\n\r\n const cofact_20 = +(m01 * det_12_33 - m02 * det_11_33 + m03 * det_11_32);\r\n const cofact_21 = -(m00 * det_12_33 - m02 * det_10_33 + m03 * det_10_32);\r\n const cofact_22 = +(m00 * det_11_33 - m01 * det_10_33 + m03 * det_10_31);\r\n const cofact_23 = -(m00 * det_11_32 - m01 * det_10_32 + m02 * det_10_31);\r\n\r\n const cofact_30 = -(m01 * det_12_23 - m02 * det_11_23 + m03 * det_11_22);\r\n const cofact_31 = +(m00 * det_12_23 - m02 * det_10_23 + m03 * det_10_22);\r\n const cofact_32 = -(m00 * det_11_23 - m01 * det_10_23 + m03 * det_10_21);\r\n const cofact_33 = +(m00 * det_11_22 - m01 * det_10_22 + m02 * det_10_21);\r\n\r\n return new Matrix([\r\n cofact_00 * detInv,\r\n cofact_10 * detInv,\r\n cofact_20 * detInv,\r\n cofact_30 * detInv,\r\n cofact_01 * detInv,\r\n cofact_11 * detInv,\r\n cofact_21 * detInv,\r\n cofact_31 * detInv,\r\n cofact_02 * detInv,\r\n cofact_12 * detInv,\r\n cofact_22 * detInv,\r\n cofact_32 * detInv,\r\n cofact_03 * detInv,\r\n cofact_13 * detInv,\r\n cofact_23 * detInv,\r\n cofact_33 * detInv,\r\n ]);\r\n }\r\n\r\n /**\r\n * Creates a rotation matrix for a given axes and angle\r\n * @param axis The axes of rotation\r\n * @param angle The angle of rotation\r\n * @returns A new rotation matrix\r\n */\r\n public static FromRotationAxisAngle(axis: Vector3, angle: Angle): Matrix {\r\n const sin = Math.sin(-angle.radians);\r\n const cosin = Math.cos(-angle.radians);\r\n const c1 = 1 - cosin;\r\n\r\n const unit = axis.unit;\r\n const m: MatrixArray = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n m[0] = unit.x * unit.x * c1 + cosin;\r\n m[1] = unit.x * unit.y * c1 - unit.z * sin;\r\n m[2] = unit.x * unit.z * c1 + unit.y * sin;\r\n m[3] = 0.0;\r\n\r\n m[4] = unit.y * unit.x * c1 + unit.z * sin;\r\n m[5] = unit.y * unit.y * c1 + cosin;\r\n m[6] = unit.y * unit.z * c1 - unit.x * sin;\r\n m[7] = 0.0;\r\n\r\n m[8] = unit.z * unit.x * c1 - unit.y * sin;\r\n m[9] = unit.z * unit.y * c1 + unit.x * sin;\r\n m[10] = unit.z * unit.z * c1 + cosin;\r\n m[11] = 0.0;\r\n\r\n m[12] = 0.0;\r\n m[13] = 0.0;\r\n m[14] = 0.0;\r\n m[15] = 1.0;\r\n\r\n return new Matrix(m);\r\n }\r\n\r\n /**\r\n * Make a new transformation matrix that has the same scale and rotation as the original but the translation is set\r\n * @param original The original matrix\r\n * @param translation The new translation value\r\n * @returns A new matrix that is the same as the original but the translation has been changed\r\n */\r\n public static SetMatrixTranslation(\r\n original: Matrix,\r\n translation: Vector3\r\n ): Matrix {\r\n const values: MatrixArray = original.m;\r\n values[12] = translation.x;\r\n values[13] = translation.y;\r\n values[14] = translation.z;\r\n\r\n return new Matrix(values);\r\n }\r\n\r\n /**\r\n * Make a new transformation matrix that has the same scale and translation as the original but the rotation is set\r\n * @param original The original matrix\r\n * @param rotation The new rotation value\r\n * @returns A new matrix that is the same as the original but the rotation has been changed\r\n */\r\n public static SetMatrixRotation(\r\n original: Matrix,\r\n rotation: Quaternion\r\n ): Matrix {\r\n const scale = original.scale;\r\n const translation = original.translation;\r\n\r\n return Matrix.Compose(scale, rotation, translation);\r\n }\r\n\r\n /**\r\n * Make a new transformation matrix that has the same rotation and translation as the original but the scale is set\r\n * @param original The original matrix\r\n * @param scale The new scale value\r\n * @returns A new matrix that is the same as the original but the scale has been changed\r\n */\r\n public static SetMatrixScale(original: Matrix, scale: Vector3): Matrix {\r\n const rotation = original.rotation;\r\n const translation = original.translation;\r\n\r\n return Matrix.Compose(scale, rotation, translation);\r\n }\r\n\r\n public static FromFloat32Array(array: Float32Array): Matrix {\r\n if (array.length !== 16) {\r\n console.error(\"[matrixFrom32] Array does not have a length of 16\");\r\n return Matrix.Identity();\r\n }\r\n\r\n const matrixArray: MatrixArray = [\r\n array[0],\r\n array[1],\r\n array[2],\r\n array[3],\r\n array[4],\r\n array[5],\r\n array[6],\r\n array[7],\r\n array[8],\r\n array[9],\r\n array[10],\r\n array[11],\r\n array[12],\r\n array[13],\r\n array[14],\r\n array[15],\r\n ];\r\n\r\n return new Matrix(matrixArray);\r\n }\r\n\r\n public static FlipTransformMatrixHand(matrix: Matrix): Matrix {\r\n const m = matrix.m;\r\n m[2] *= -1;\r\n m[6] *= -1;\r\n m[8] *= -1;\r\n m[9] *= -1;\r\n m[14] *= -1;\r\n\r\n return new Matrix(m);\r\n }\r\n\r\n public static FlipProjectionMatrixHand(matrix: Matrix): Matrix {\r\n const m = matrix.m;\r\n m[8] *= -1;\r\n m[9] *= -1;\r\n m[10] *= -1;\r\n m[11] *= -1;\r\n\r\n return new Matrix(m);\r\n }\r\n\r\n /**\r\n * Returns the determinate of the matrix\r\n */\r\n public get determinate(): number {\r\n const m = this._m;\r\n const m00 = m[0];\r\n const m01 = m[1];\r\n const m02 = m[2];\r\n const m03 = m[3];\r\n const m10 = m[4];\r\n const m11 = m[5];\r\n const m12 = m[6];\r\n const m13 = m[7];\r\n const m20 = m[8];\r\n const m21 = m[9];\r\n const m22 = m[10];\r\n const m23 = m[11];\r\n const m30 = m[12];\r\n const m31 = m[13];\r\n const m32 = m[14];\r\n const m33 = m[15];\r\n\r\n const det_22_33 = m22 * m33 - m32 * m23;\r\n const det_21_33 = m21 * m33 - m31 * m23;\r\n const det_21_32 = m21 * m32 - m31 * m22;\r\n const det_20_33 = m20 * m33 - m30 * m23;\r\n const det_20_32 = m20 * m32 - m22 * m30;\r\n const det_20_31 = m20 * m31 - m30 * m21;\r\n const cofact_00 = +(m11 * det_22_33 - m12 * det_21_33 + m13 * det_21_32);\r\n const cofact_01 = -(m10 * det_22_33 - m12 * det_20_33 + m13 * det_20_32);\r\n const cofact_02 = +(m10 * det_21_33 - m11 * det_20_33 + m13 * det_20_31);\r\n const cofact_03 = -(m10 * det_21_32 - m11 * det_20_32 + m12 * det_20_31);\r\n return (\r\n m00 * cofact_00 + m01 * cofact_01 + m02 * cofact_02 + m03 * cofact_03\r\n );\r\n }\r\n\r\n /**\r\n * Returns the translation component of the transformation matrix as a Vector\r\n */\r\n get translation(): Vector3 {\r\n return new Vector3(this._m[12], this._m[13], this._m[14]);\r\n }\r\n\r\n /**\r\n * Returns the scale of the transformation matrix as a vector\r\n */\r\n get scale(): Vector3 {\r\n const x = Math.sqrt(\r\n this._m[0] * this._m[0] +\r\n this._m[1] * this._m[1] +\r\n this._m[2] * this._m[2]\r\n );\r\n let y = Math.sqrt(\r\n this._m[4] * this._m[4] +\r\n this._m[5] * this._m[5] +\r\n this._m[6] * this._m[6]\r\n );\r\n const z = Math.sqrt(\r\n this._m[8] * this._m[8] +\r\n this._m[9] * this._m[9] +\r\n this._m[10] * this._m[10]\r\n );\r\n\r\n if (this.determinate <= 0) {\r\n y = -y;\r\n }\r\n\r\n return new Vector3(x, y, z);\r\n }\r\n\r\n /**\r\n * Returns the rotation components of the transformation matrix as a Quaternion\r\n */\r\n get rotation(): Quaternion {\r\n return Quaternion.FromRotationMatrix(this.rotationMatrix);\r\n }\r\n\r\n /**\r\n * Returns just the rotation matrix of the transformation matrix\r\n */\r\n get rotationMatrix(): Matrix {\r\n const scale = this.scale;\r\n const sx = 1 / scale.x;\r\n const sy = 1 / scale.y;\r\n const sz = 1 / scale.z;\r\n\r\n const rMatrixValues: MatrixArray = [\r\n this._m[0] * sx,\r\n this._m[1] * sx,\r\n this._m[2] * sx,\r\n 0.0,\r\n this._m[4] * sy,\r\n this._m[5] * sy,\r\n this._m[6] * sy,\r\n 0.0,\r\n this._m[8] * sz,\r\n this._m[9] * sz,\r\n this._m[10] * sz,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 1.0,\r\n ];\r\n\r\n return new Matrix(rMatrixValues);\r\n }\r\n\r\n // Row, column\r\n private readonly _m: MatrixArray;\r\n get m(): MatrixArray {\r\n return [...this._m];\r\n }\r\n\r\n constructor(m: MatrixArray) {\r\n this._m = m;\r\n }\r\n}\r\n"]}
@@ -21,10 +21,10 @@ class Quaternion {
21
21
  }
22
22
  /**
23
23
  * Checks two quaternions to see if they are close
24
- * @param a Quaterion A
25
- * @param b Quaterion B
24
+ * @param a Quaternion A
25
+ * @param b Quaternion B
26
26
  * @param threshold "Close" threshold. Defaults to 0.001
27
- * @returns True if each of Quaterion's components are within the threshold of each other
27
+ * @returns True if each of Quaternion's components are within the threshold of each other
28
28
  */
29
29
  static Close(a, b, threshold = 0.001) {
30
30
  const aArray = a.toArray();
@@ -44,7 +44,7 @@ class Quaternion {
44
44
  }
45
45
  /**
46
46
  * Multiplies A*B
47
- * @param a Quaterion A
47
+ * @param a Quaternion A
48
48
  * @param b Quaternion B
49
49
  * @returns The result of A*B
50
50
  */
@@ -56,15 +56,15 @@ class Quaternion {
56
56
  return Quaternion.FromArray([x, y, z, w]);
57
57
  }
58
58
  /**
59
- * Creates a new Quaterion from an array of values
60
- * @param values The four values of the Quaterion: [x,y,z,w]
61
- * @returns A Quaterion
59
+ * Creates a new Quaternion from an array of values
60
+ * @param values The four values of the Quaternion: [x,y,z,w]
61
+ * @returns A Quaternion
62
62
  */
63
63
  static FromArray(values) {
64
64
  return new Quaternion(values[0], values[1], values[2], values[3]);
65
65
  }
66
66
  /**
67
- * Creates a Quaterion from a Data Transfer Object
67
+ * Creates a Quaternion from a Data Transfer Object
68
68
  * @param dto The Data Transfer Object
69
69
  * @returns The Quaternion
70
70
  */
@@ -79,10 +79,10 @@ class Quaternion {
79
79
  return new Quaternion(0, 0, 0, 1);
80
80
  }
81
81
  /**
82
- * Creates an quaterion about an axis for a given angle
82
+ * Creates a quaternion about an axis for a given angle
83
83
  * @param axis The rotation axis
84
84
  * @param angle The rotation angle
85
- * @returns The resulting Quaterion
85
+ * @returns The resulting Quaternion
86
86
  */
87
87
  static FromAngleAxis(axis, angle) {
88
88
  const sin = Math.sin(angle.radians / 2);
@@ -115,11 +115,11 @@ class Quaternion {
115
115
  return Quaternion.FromYawPitchRoll(yaw, pitch, roll);
116
116
  }
117
117
  /**
118
- * Froms up a Quaternion from the Yaw-Pitch-Roll (Tait-Bryan) convetion
118
+ * Forms a Quaternion from the Yaw-Pitch-Roll (Tait-Bryan) convention
119
119
  * @param yaw defines the rotation around the y axis
120
120
  * @param pitch defines the rotation around the x axis
121
121
  * @param roll defines the rotation around the z axis
122
- * @returns the resulting quaterion
122
+ * @returns the resulting quaternion
123
123
  */
124
124
  static FromYawPitchRoll(yaw, pitch, roll) {
125
125
  const halfRoll = roll.radians * 0.5;
@@ -142,7 +142,7 @@ class Quaternion {
142
142
  * @param x Rotation about the x axis
143
143
  * @param y Rotation about the y axis
144
144
  * @param z Rotation about the z axis
145
- * @returns The Quaterion
145
+ * @returns The Quaternion
146
146
  */
147
147
  static FromEuler(x, y, z) {
148
148
  return this.FromYawPitchRoll(y, x, z);
@@ -169,9 +169,9 @@ class Quaternion {
169
169
  /**
170
170
  * Spherically interpolates between two quaternions
171
171
  * @param initial The initial quaternion
172
- * @param final The final quaterion
173
- * @param percent The percent along the slerp. 0 will return the initial quaterion and 1 will return the final quaterion
174
- * @returns The interpolated quaterion
172
+ * @param final The final quaternion
173
+ * @param percent The percent along the slerp. 0 will return the initial quaternion and 1 will return the final quaternion
174
+ * @returns The interpolated quaternion
175
175
  */
176
176
  static Slerp(initial, final, percent) {
177
177
  let A;
@@ -204,7 +204,7 @@ class Quaternion {
204
204
  /**
205
205
  * Calculates a Quaternion from a rotation matrix
206
206
  * @param rotationMatrix A normalized, non-scaled rotation matrix
207
- * @returns The Quaterion
207
+ * @returns The Quaternion
208
208
  */
209
209
  static FromRotationMatrix(rotationMatrix) {
210
210
  const m = rotationMatrix.m;
@@ -1 +1 @@
1
- {"version":3,"file":"Quaternion.js","sourceRoot":"","sources":["../../../src/ValueObjects/Quaternion.ts"],"names":[],"mappings":"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","sourcesContent":["import { Angle } from \"./Angle\";\r\nimport { Matrix } from \"./Matrix\";\r\nimport { Vector3 } from \"./Vector3\";\r\n\r\nexport interface QuaternionDTO {\r\n x: number;\r\n y: number;\r\n z: number;\r\n w: number;\r\n}\r\n\r\nexport class Quaternion {\r\n /**\r\n * Checks to see if two Quaternions are equal\r\n * @param a Quaternion A\r\n * @param b Quaternion B\r\n * @returns True if they are equal, otherwise false\r\n */\r\n public static Equal(a: Quaternion, b: Quaternion): boolean {\r\n if (a.x === b.x && a.y === b.y && a.z === b.z && a.w === b.w) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Checks two quaternions to see if they are close\r\n * @param a Quaterion A\r\n * @param b Quaterion B\r\n * @param threshold \"Close\" threshold. Defaults to 0.001\r\n * @returns True if each of Quaterion's components are within the threshold of each other\r\n */\r\n public static Close(\r\n a: Quaternion,\r\n b: Quaternion,\r\n threshold = 0.001\r\n ): boolean {\r\n const aArray = a.toArray();\r\n const bArray = b.toArray();\r\n\r\n let areClose = true;\r\n for (let i = 0; i < 4; i++) {\r\n let diff = aArray[i] - bArray[i];\r\n if (diff < 0) {\r\n diff = -diff;\r\n }\r\n if (diff > threshold) {\r\n areClose = false;\r\n break;\r\n }\r\n }\r\n return areClose;\r\n }\r\n\r\n /**\r\n * Multiplies A*B\r\n * @param a Quaterion A\r\n * @param b Quaternion B\r\n * @returns The result of A*B\r\n */\r\n public static Multiply(a: Quaternion, b: Quaternion): Quaternion {\r\n const x = a.x * b.w + a.y * b.z - a.z * b.y + a.w * b.x;\r\n const y = -a.x * b.z + a.y * b.w + a.z * b.x + a.w * b.y;\r\n const z = a.x * b.y - a.y * b.x + a.z * b.w + a.w * b.z;\r\n const w = -a.x * b.x - a.y * b.y - a.z * b.z + a.w * b.w;\r\n return Quaternion.FromArray([x, y, z, w]);\r\n }\r\n\r\n /**\r\n * Creates a new Quaterion from an array of values\r\n * @param values The four values of the Quaterion: [x,y,z,w]\r\n * @returns A Quaterion\r\n */\r\n public static FromArray(\r\n values: [number, number, number, number]\r\n ): Quaternion {\r\n return new Quaternion(values[0], values[1], values[2], values[3]);\r\n }\r\n\r\n /**\r\n * Creates a Quaterion from a Data Transfer Object\r\n * @param dto The Data Transfer Object\r\n * @returns The Quaternion\r\n */\r\n public static FromDTO(dto: QuaternionDTO): Quaternion {\r\n return new Quaternion(dto.x, dto.y, dto.z, dto.w);\r\n }\r\n\r\n /**\r\n * Creates an Identity Quaternion\r\n * @returns An Identity Quaternion\r\n */\r\n public static Identity(): Quaternion {\r\n return new Quaternion(0, 0, 0, 1);\r\n }\r\n\r\n /**\r\n * Creates an quaterion about an axis for a given angle\r\n * @param axis The rotation axis\r\n * @param angle The rotation angle\r\n * @returns The resulting Quaterion\r\n */\r\n public static FromAngleAxis(axis: Vector3, angle: Angle): Quaternion {\r\n const sin = Math.sin(angle.radians / 2);\r\n const axisUnit = axis.unit;\r\n const w = Math.cos(angle.radians / 2);\r\n const x = axisUnit.x * sin;\r\n const y = axisUnit.y * sin;\r\n const z = axisUnit.z * sin;\r\n return new Quaternion(x, y, z, w);\r\n }\r\n\r\n public static FromDirectionVector(direction: Vector3): Quaternion {\r\n if (direction.magnitude === 0) {\r\n return Quaternion.Identity();\r\n }\r\n\r\n const dirUnit = direction.unit;\r\n\r\n if (dirUnit.x === 0 && dirUnit.z === 0) {\r\n if (dirUnit.y > 0) {\r\n return Quaternion.FromYawPitchRoll(\r\n Angle.FromDegrees(0),\r\n Angle.FromDegrees(-90),\r\n Angle.FromDegrees(0)\r\n );\r\n } else {\r\n return Quaternion.FromYawPitchRoll(\r\n Angle.FromDegrees(0),\r\n Angle.FromDegrees(90),\r\n Angle.FromDegrees(0)\r\n );\r\n }\r\n }\r\n\r\n const yawRadians = -Math.atan2(dirUnit.z, dirUnit.x) + Math.PI / 2;\r\n const len = Math.sqrt(dirUnit.x * dirUnit.x + dirUnit.z * dirUnit.z);\r\n const pitchRadians = -Math.atan2(dirUnit.y, len);\r\n\r\n const yaw = Angle.FromRadians(yawRadians);\r\n const pitch = Angle.FromRadians(pitchRadians);\r\n const roll = Angle.FromRadians(0);\r\n\r\n return Quaternion.FromYawPitchRoll(yaw, pitch, roll);\r\n }\r\n\r\n /**\r\n * Froms up a Quaternion from the Yaw-Pitch-Roll (Tait-Bryan) convetion\r\n * @param yaw defines the rotation around the y axis\r\n * @param pitch defines the rotation around the x axis\r\n * @param roll defines the rotation around the z axis\r\n * @returns the resulting quaterion\r\n */\r\n public static FromYawPitchRoll(\r\n yaw: Angle,\r\n pitch: Angle,\r\n roll: Angle\r\n ): Quaternion {\r\n const halfRoll = roll.radians * 0.5;\r\n const halfPitch = pitch.radians * 0.5;\r\n const halfYaw = yaw.radians * 0.5;\r\n\r\n const sinRoll = Math.sin(halfRoll);\r\n const cosRoll = Math.cos(halfRoll);\r\n const sinPitch = Math.sin(halfPitch);\r\n const cosPitch = Math.cos(halfPitch);\r\n const sinYaw = Math.sin(halfYaw);\r\n const cosYaw = Math.cos(halfYaw);\r\n\r\n const x = cosYaw * sinPitch * cosRoll + sinYaw * cosPitch * sinRoll;\r\n const y = sinYaw * cosPitch * cosRoll - cosYaw * sinPitch * sinRoll;\r\n const z = cosYaw * cosPitch * sinRoll - sinYaw * sinPitch * cosRoll;\r\n const w = cosYaw * cosPitch * cosRoll + sinYaw * sinPitch * sinRoll;\r\n\r\n return new Quaternion(x, y, z, w);\r\n }\r\n\r\n /**\r\n * Creates a Quaternion from three euler angles.\r\n * @param x Rotation about the x axis\r\n * @param y Rotation about the y axis\r\n * @param z Rotation about the z axis\r\n * @returns The Quaterion\r\n */\r\n public static FromEuler(x: Angle, y: Angle, z: Angle) {\r\n return this.FromYawPitchRoll(y, x, z);\r\n }\r\n\r\n /**\r\n * Returns a new Quaternion that is an invert of A\r\n * @param a The quaternion to invert\r\n * @returns The inverted Quaternion\r\n */\r\n public static Inverse(a: Quaternion): Quaternion {\r\n return new Quaternion(-a.x, -a.y, -a.z, a.w);\r\n }\r\n\r\n public static AngleBetween(a: Quaternion, b: Quaternion): Angle {\r\n const aInv = this.Inverse(a);\r\n const diffQ = this.Multiply(aInv, b);\r\n\r\n const angDeg = diffQ.angle.degrees;\r\n if(angDeg > 180) {\r\n return Angle.FromDegrees(360 - angDeg)\r\n } else {\r\n return diffQ.angle;\r\n }\r\n }\r\n\r\n /**\r\n * Spherically interpolates between two quaternions\r\n * @param initial The initial quaternion\r\n * @param final The final quaterion\r\n * @param percent The percent along the slerp. 0 will return the initial quaterion and 1 will return the final quaterion\r\n * @returns The interpolated quaterion\r\n */\r\n public static Slerp(\r\n initial: Quaternion,\r\n final: Quaternion,\r\n percent: number\r\n ): Quaternion {\r\n let A;\r\n let B;\r\n let C =\r\n initial.x * final.x +\r\n initial.y * final.y +\r\n initial.z * final.z +\r\n initial.w * final.w;\r\n let flip = false;\r\n\r\n if (C < 0) {\r\n flip = true;\r\n C = -C;\r\n }\r\n\r\n if (C > 0.999999) {\r\n B = 1 - percent;\r\n A = flip ? -percent : percent;\r\n } else {\r\n const D = Math.acos(C);\r\n const E = 1.0 / Math.sin(D);\r\n B = Math.sin((1.0 - percent) * D) * E;\r\n A = flip ? -Math.sin(percent * D) * E : Math.sin(percent * D) * E;\r\n }\r\n\r\n const x = B * initial.x + A * final.x;\r\n const y = B * initial.y + A * final.y;\r\n const z = B * initial.z + A * final.z;\r\n const w = B * initial.w + A * final.w;\r\n\r\n return new Quaternion(x, y, z, w);\r\n }\r\n\r\n /**\r\n * Calculates a Quaternion from a rotation matrix\r\n * @param rotationMatrix A normalized, non-scaled rotation matrix\r\n * @returns The Quaterion\r\n */\r\n public static FromRotationMatrix(rotationMatrix: Matrix): Quaternion {\r\n const m = rotationMatrix.m;\r\n const m11 = m[0];\r\n const m12 = m[4];\r\n const m13 = m[8];\r\n const m21 = m[1];\r\n const m22 = m[5];\r\n const m23 = m[9];\r\n const m31 = m[2];\r\n const m32 = m[6];\r\n const m33 = m[10];\r\n const trace = m11 + m22 + m33;\r\n let s;\r\n\r\n let x = 0;\r\n let y = 0;\r\n let z = 0;\r\n let w = 0;\r\n if (trace > 0) {\r\n s = 0.5 / Math.sqrt(trace + 1.0);\r\n\r\n w = 0.25 / s;\r\n x = (m32 - m23) * s;\r\n y = (m13 - m31) * s;\r\n z = (m21 - m12) * s;\r\n } else if (m11 > m22 && m11 > m33) {\r\n s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33);\r\n\r\n w = (m32 - m23) / s;\r\n x = 0.25 * s;\r\n y = (m12 + m21) / s;\r\n z = (m13 + m31) / s;\r\n } else if (m22 > m33) {\r\n s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33);\r\n\r\n w = (m13 - m31) / s;\r\n x = (m12 + m21) / s;\r\n y = 0.25 * s;\r\n z = (m23 + m32) / s;\r\n } else {\r\n s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22);\r\n\r\n w = (m21 - m12) / s;\r\n x = (m13 + m31) / s;\r\n y = (m23 + m32) / s;\r\n z = 0.25 * s;\r\n }\r\n\r\n return new Quaternion(x, y, z, w);\r\n }\r\n\r\n public static ToRotationMatrix(quat: Quaternion): Matrix {\r\n return Matrix.Compose(Vector3.One(), quat, Vector3.Zero());\r\n }\r\n\r\n /**\r\n * Copy the quaternion to an array\r\n * @returns an array populated with 4 elements from the quaternion coordinates\r\n */\r\n toArray(): [number, number, number, number] {\r\n return [this.x, this.y, this.z, this.w];\r\n }\r\n\r\n get angle(): Angle {\r\n const angle = 2 * Math.acos(this.w);\r\n return Angle.FromRadians(angle);\r\n }\r\n\r\n get axis(): Vector3 {\r\n const x = this.x / Math.sqrt(1 - this.w * this.w);\r\n const y = this.y / Math.sqrt(1 - this.w * this.w);\r\n const z = this.z / Math.sqrt(1 - this.w * this.w);\r\n return new Vector3(x, y, z);\r\n }\r\n\r\n /**\r\n * Get the quaternion as a Data Transfer Object\r\n */\r\n get dto(): QuaternionDTO {\r\n return { x: this.x, y: this.y, z: this.z, w: this.w };\r\n }\r\n\r\n readonly x: number;\r\n readonly y: number;\r\n readonly z: number;\r\n readonly w: number;\r\n\r\n constructor(x: number, y: number, z: number, w: number) {\r\n this.x = x;\r\n this.y = y;\r\n this.z = z;\r\n this.w = w;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"Quaternion.js","sourceRoot":"","sources":["../../../src/ValueObjects/Quaternion.ts"],"names":[],"mappings":"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","sourcesContent":["import { Angle } from \"./Angle\";\r\nimport { Matrix } from \"./Matrix\";\r\nimport { Vector3 } from \"./Vector3\";\r\n\r\nexport interface QuaternionDTO {\r\n x: number;\r\n y: number;\r\n z: number;\r\n w: number;\r\n}\r\n\r\nexport class Quaternion {\r\n /**\r\n * Checks to see if two Quaternions are equal\r\n * @param a Quaternion A\r\n * @param b Quaternion B\r\n * @returns True if they are equal, otherwise false\r\n */\r\n public static Equal(a: Quaternion, b: Quaternion): boolean {\r\n if (a.x === b.x && a.y === b.y && a.z === b.z && a.w === b.w) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Checks two quaternions to see if they are close\r\n * @param a Quaternion A\r\n * @param b Quaternion B\r\n * @param threshold \"Close\" threshold. Defaults to 0.001\r\n * @returns True if each of Quaternion's components are within the threshold of each other\r\n */\r\n public static Close(\r\n a: Quaternion,\r\n b: Quaternion,\r\n threshold = 0.001\r\n ): boolean {\r\n const aArray = a.toArray();\r\n const bArray = b.toArray();\r\n\r\n let areClose = true;\r\n for (let i = 0; i < 4; i++) {\r\n let diff = aArray[i] - bArray[i];\r\n if (diff < 0) {\r\n diff = -diff;\r\n }\r\n if (diff > threshold) {\r\n areClose = false;\r\n break;\r\n }\r\n }\r\n return areClose;\r\n }\r\n\r\n /**\r\n * Multiplies A*B\r\n * @param a Quaternion A\r\n * @param b Quaternion B\r\n * @returns The result of A*B\r\n */\r\n public static Multiply(a: Quaternion, b: Quaternion): Quaternion {\r\n const x = a.x * b.w + a.y * b.z - a.z * b.y + a.w * b.x;\r\n const y = -a.x * b.z + a.y * b.w + a.z * b.x + a.w * b.y;\r\n const z = a.x * b.y - a.y * b.x + a.z * b.w + a.w * b.z;\r\n const w = -a.x * b.x - a.y * b.y - a.z * b.z + a.w * b.w;\r\n return Quaternion.FromArray([x, y, z, w]);\r\n }\r\n\r\n /**\r\n * Creates a new Quaternion from an array of values\r\n * @param values The four values of the Quaternion: [x,y,z,w]\r\n * @returns A Quaternion\r\n */\r\n public static FromArray(\r\n values: [number, number, number, number]\r\n ): Quaternion {\r\n return new Quaternion(values[0], values[1], values[2], values[3]);\r\n }\r\n\r\n /**\r\n * Creates a Quaternion from a Data Transfer Object\r\n * @param dto The Data Transfer Object\r\n * @returns The Quaternion\r\n */\r\n public static FromDTO(dto: QuaternionDTO): Quaternion {\r\n return new Quaternion(dto.x, dto.y, dto.z, dto.w);\r\n }\r\n\r\n /**\r\n * Creates an Identity Quaternion\r\n * @returns An Identity Quaternion\r\n */\r\n public static Identity(): Quaternion {\r\n return new Quaternion(0, 0, 0, 1);\r\n }\r\n\r\n /**\r\n * Creates a quaternion about an axis for a given angle\r\n * @param axis The rotation axis\r\n * @param angle The rotation angle\r\n * @returns The resulting Quaternion\r\n */\r\n public static FromAngleAxis(axis: Vector3, angle: Angle): Quaternion {\r\n const sin = Math.sin(angle.radians / 2);\r\n const axisUnit = axis.unit;\r\n const w = Math.cos(angle.radians / 2);\r\n const x = axisUnit.x * sin;\r\n const y = axisUnit.y * sin;\r\n const z = axisUnit.z * sin;\r\n return new Quaternion(x, y, z, w);\r\n }\r\n\r\n public static FromDirectionVector(direction: Vector3): Quaternion {\r\n if (direction.magnitude === 0) {\r\n return Quaternion.Identity();\r\n }\r\n\r\n const dirUnit = direction.unit;\r\n\r\n if (dirUnit.x === 0 && dirUnit.z === 0) {\r\n if (dirUnit.y > 0) {\r\n return Quaternion.FromYawPitchRoll(\r\n Angle.FromDegrees(0),\r\n Angle.FromDegrees(-90),\r\n Angle.FromDegrees(0)\r\n );\r\n } else {\r\n return Quaternion.FromYawPitchRoll(\r\n Angle.FromDegrees(0),\r\n Angle.FromDegrees(90),\r\n Angle.FromDegrees(0)\r\n );\r\n }\r\n }\r\n\r\n const yawRadians = -Math.atan2(dirUnit.z, dirUnit.x) + Math.PI / 2;\r\n const len = Math.sqrt(dirUnit.x * dirUnit.x + dirUnit.z * dirUnit.z);\r\n const pitchRadians = -Math.atan2(dirUnit.y, len);\r\n\r\n const yaw = Angle.FromRadians(yawRadians);\r\n const pitch = Angle.FromRadians(pitchRadians);\r\n const roll = Angle.FromRadians(0);\r\n\r\n return Quaternion.FromYawPitchRoll(yaw, pitch, roll);\r\n }\r\n\r\n /**\r\n * Forms a Quaternion from the Yaw-Pitch-Roll (Tait-Bryan) convention\r\n * @param yaw defines the rotation around the y axis\r\n * @param pitch defines the rotation around the x axis\r\n * @param roll defines the rotation around the z axis\r\n * @returns the resulting quaternion\r\n */\r\n public static FromYawPitchRoll(\r\n yaw: Angle,\r\n pitch: Angle,\r\n roll: Angle\r\n ): Quaternion {\r\n const halfRoll = roll.radians * 0.5;\r\n const halfPitch = pitch.radians * 0.5;\r\n const halfYaw = yaw.radians * 0.5;\r\n\r\n const sinRoll = Math.sin(halfRoll);\r\n const cosRoll = Math.cos(halfRoll);\r\n const sinPitch = Math.sin(halfPitch);\r\n const cosPitch = Math.cos(halfPitch);\r\n const sinYaw = Math.sin(halfYaw);\r\n const cosYaw = Math.cos(halfYaw);\r\n\r\n const x = cosYaw * sinPitch * cosRoll + sinYaw * cosPitch * sinRoll;\r\n const y = sinYaw * cosPitch * cosRoll - cosYaw * sinPitch * sinRoll;\r\n const z = cosYaw * cosPitch * sinRoll - sinYaw * sinPitch * cosRoll;\r\n const w = cosYaw * cosPitch * cosRoll + sinYaw * sinPitch * sinRoll;\r\n\r\n return new Quaternion(x, y, z, w);\r\n }\r\n\r\n /**\r\n * Creates a Quaternion from three euler angles.\r\n * @param x Rotation about the x axis\r\n * @param y Rotation about the y axis\r\n * @param z Rotation about the z axis\r\n * @returns The Quaternion\r\n */\r\n public static FromEuler(x: Angle, y: Angle, z: Angle) {\r\n return this.FromYawPitchRoll(y, x, z);\r\n }\r\n\r\n /**\r\n * Returns a new Quaternion that is an invert of A\r\n * @param a The quaternion to invert\r\n * @returns The inverted Quaternion\r\n */\r\n public static Inverse(a: Quaternion): Quaternion {\r\n return new Quaternion(-a.x, -a.y, -a.z, a.w);\r\n }\r\n\r\n public static AngleBetween(a: Quaternion, b: Quaternion): Angle {\r\n const aInv = this.Inverse(a);\r\n const diffQ = this.Multiply(aInv, b);\r\n\r\n const angDeg = diffQ.angle.degrees;\r\n if (angDeg > 180) {\r\n return Angle.FromDegrees(360 - angDeg);\r\n } else {\r\n return diffQ.angle;\r\n }\r\n }\r\n\r\n /**\r\n * Spherically interpolates between two quaternions\r\n * @param initial The initial quaternion\r\n * @param final The final quaternion\r\n * @param percent The percent along the slerp. 0 will return the initial quaternion and 1 will return the final quaternion\r\n * @returns The interpolated quaternion\r\n */\r\n public static Slerp(\r\n initial: Quaternion,\r\n final: Quaternion,\r\n percent: number\r\n ): Quaternion {\r\n let A;\r\n let B;\r\n let C =\r\n initial.x * final.x +\r\n initial.y * final.y +\r\n initial.z * final.z +\r\n initial.w * final.w;\r\n let flip = false;\r\n\r\n if (C < 0) {\r\n flip = true;\r\n C = -C;\r\n }\r\n\r\n if (C > 0.999999) {\r\n B = 1 - percent;\r\n A = flip ? -percent : percent;\r\n } else {\r\n const D = Math.acos(C);\r\n const E = 1.0 / Math.sin(D);\r\n B = Math.sin((1.0 - percent) * D) * E;\r\n A = flip ? -Math.sin(percent * D) * E : Math.sin(percent * D) * E;\r\n }\r\n\r\n const x = B * initial.x + A * final.x;\r\n const y = B * initial.y + A * final.y;\r\n const z = B * initial.z + A * final.z;\r\n const w = B * initial.w + A * final.w;\r\n\r\n return new Quaternion(x, y, z, w);\r\n }\r\n\r\n /**\r\n * Calculates a Quaternion from a rotation matrix\r\n * @param rotationMatrix A normalized, non-scaled rotation matrix\r\n * @returns The Quaternion\r\n */\r\n public static FromRotationMatrix(rotationMatrix: Matrix): Quaternion {\r\n const m = rotationMatrix.m;\r\n const m11 = m[0];\r\n const m12 = m[4];\r\n const m13 = m[8];\r\n const m21 = m[1];\r\n const m22 = m[5];\r\n const m23 = m[9];\r\n const m31 = m[2];\r\n const m32 = m[6];\r\n const m33 = m[10];\r\n const trace = m11 + m22 + m33;\r\n let s;\r\n\r\n let x = 0;\r\n let y = 0;\r\n let z = 0;\r\n let w = 0;\r\n if (trace > 0) {\r\n s = 0.5 / Math.sqrt(trace + 1.0);\r\n\r\n w = 0.25 / s;\r\n x = (m32 - m23) * s;\r\n y = (m13 - m31) * s;\r\n z = (m21 - m12) * s;\r\n } else if (m11 > m22 && m11 > m33) {\r\n s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33);\r\n\r\n w = (m32 - m23) / s;\r\n x = 0.25 * s;\r\n y = (m12 + m21) / s;\r\n z = (m13 + m31) / s;\r\n } else if (m22 > m33) {\r\n s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33);\r\n\r\n w = (m13 - m31) / s;\r\n x = (m12 + m21) / s;\r\n y = 0.25 * s;\r\n z = (m23 + m32) / s;\r\n } else {\r\n s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22);\r\n\r\n w = (m21 - m12) / s;\r\n x = (m13 + m31) / s;\r\n y = (m23 + m32) / s;\r\n z = 0.25 * s;\r\n }\r\n\r\n return new Quaternion(x, y, z, w);\r\n }\r\n\r\n public static ToRotationMatrix(quat: Quaternion): Matrix {\r\n return Matrix.Compose(Vector3.One(), quat, Vector3.Zero());\r\n }\r\n\r\n /**\r\n * Copy the quaternion to an array\r\n * @returns an array populated with 4 elements from the quaternion coordinates\r\n */\r\n toArray(): [number, number, number, number] {\r\n return [this.x, this.y, this.z, this.w];\r\n }\r\n\r\n get angle(): Angle {\r\n const angle = 2 * Math.acos(this.w);\r\n return Angle.FromRadians(angle);\r\n }\r\n\r\n get axis(): Vector3 {\r\n const x = this.x / Math.sqrt(1 - this.w * this.w);\r\n const y = this.y / Math.sqrt(1 - this.w * this.w);\r\n const z = this.z / Math.sqrt(1 - this.w * this.w);\r\n return new Vector3(x, y, z);\r\n }\r\n\r\n /**\r\n * Get the quaternion as a Data Transfer Object\r\n */\r\n get dto(): QuaternionDTO {\r\n return { x: this.x, y: this.y, z: this.z, w: this.w };\r\n }\r\n\r\n readonly x: number;\r\n readonly y: number;\r\n readonly z: number;\r\n readonly w: number;\r\n\r\n constructor(x: number, y: number, z: number, w: number) {\r\n this.x = x;\r\n this.y = y;\r\n this.z = z;\r\n this.w = w;\r\n }\r\n}\r\n"]}