@vived/core 1.4.1 → 1.4.3
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.
- package/README.md +118 -20
- package/dist/cjs/AppObject/AppObject.js +112 -0
- package/dist/cjs/AppObject/AppObject.js.map +1 -0
- package/dist/cjs/AppObject/AppObjectComponent.js +160 -0
- package/dist/cjs/AppObject/AppObjectComponent.js.map +1 -0
- package/dist/cjs/AppObject/AppObjectController.js +34 -0
- package/dist/cjs/AppObject/AppObjectController.js.map +1 -0
- package/dist/cjs/AppObject/AppObjectEntity.js +90 -0
- package/dist/cjs/AppObject/AppObjectEntity.js.map +1 -0
- package/dist/cjs/AppObject/AppObjectEntityRepo.js +130 -0
- package/dist/cjs/AppObject/AppObjectEntityRepo.js.map +1 -0
- package/dist/cjs/AppObject/AppObjectPM.js +86 -0
- package/dist/cjs/AppObject/AppObjectPM.js.map +1 -0
- package/dist/cjs/AppObject/AppObjectRepo.js +153 -0
- package/dist/cjs/AppObject/AppObjectRepo.js.map +1 -0
- package/dist/cjs/AppObject/AppObjectUC.js +35 -0
- package/dist/cjs/AppObject/AppObjectUC.js.map +1 -0
- package/dist/cjs/AppObject/AppObjectView.js +34 -0
- package/dist/cjs/AppObject/AppObjectView.js.map +1 -0
- package/dist/cjs/AppObject/getSingletonComponent.js +26 -0
- package/dist/cjs/AppObject/getSingletonComponent.js.map +1 -0
- package/dist/cjs/AppObject/index.js +27 -0
- package/dist/cjs/AppObject/index.js.map +1 -0
- package/dist/cjs/AppObject/printAppObjectDetails.js +18 -0
- package/dist/cjs/AppObject/printAppObjectDetails.js.map +1 -0
- package/dist/cjs/Entities/MemoizedAngle.js +44 -0
- package/dist/cjs/Entities/MemoizedAngle.js.map +1 -0
- package/dist/cjs/Entities/MemoizedBoolean.js +44 -0
- package/dist/cjs/Entities/MemoizedBoolean.js.map +1 -0
- package/dist/cjs/Entities/MemoizedColor.js +45 -0
- package/dist/cjs/Entities/MemoizedColor.js.map +1 -0
- package/dist/cjs/Entities/MemoizedNumber.js +44 -0
- package/dist/cjs/Entities/MemoizedNumber.js.map +1 -0
- package/dist/cjs/Entities/MemoizedQuaternion.js +45 -0
- package/dist/cjs/Entities/MemoizedQuaternion.js.map +1 -0
- package/dist/cjs/Entities/MemoizedString.js +44 -0
- package/dist/cjs/Entities/MemoizedString.js.map +1 -0
- package/dist/cjs/Entities/MemoizedVector2.js +45 -0
- package/dist/cjs/Entities/MemoizedVector2.js.map +1 -0
- package/dist/cjs/Entities/MemoizedVector3.js +45 -0
- package/dist/cjs/Entities/MemoizedVector3.js.map +1 -0
- package/dist/cjs/Entities/ObservableEntity.js +37 -0
- package/dist/cjs/Entities/ObservableEntity.js.map +1 -0
- package/dist/cjs/Entities/ObserverList.js +48 -0
- package/dist/cjs/Entities/ObserverList.js.map +1 -0
- package/dist/cjs/Entities/RangedNumber.js +65 -0
- package/dist/cjs/Entities/RangedNumber.js.map +1 -0
- package/dist/cjs/Entities/index.js +28 -0
- package/dist/cjs/Entities/index.js.map +1 -0
- package/dist/cjs/Types/AppBoundary.js +3 -0
- package/dist/cjs/Types/AppBoundary.js.map +1 -0
- package/dist/cjs/Types/EaseFn.js +3 -0
- package/dist/cjs/Types/EaseFn.js.map +1 -0
- package/dist/cjs/Types/PmAdapter.js +3 -0
- package/dist/cjs/Types/PmAdapter.js.map +1 -0
- package/dist/cjs/Types/SingletonPmAdapter.js +3 -0
- package/dist/cjs/Types/SingletonPmAdapter.js.map +1 -0
- package/dist/cjs/Types/index.js +21 -0
- package/dist/cjs/Types/index.js.map +1 -0
- package/dist/cjs/Utilities/LengthConverters.js +21 -0
- package/dist/cjs/Utilities/LengthConverters.js.map +1 -0
- package/dist/cjs/Utilities/LerpNumber.js +85 -0
- package/dist/cjs/Utilities/LerpNumber.js.map +1 -0
- package/dist/cjs/Utilities/addAlphaToHex.js +16 -0
- package/dist/cjs/Utilities/addAlphaToHex.js.map +1 -0
- package/dist/cjs/Utilities/alphaToHex.js +21 -0
- package/dist/cjs/Utilities/alphaToHex.js.map +1 -0
- package/dist/cjs/Utilities/degreesToRadians.js +7 -0
- package/dist/cjs/Utilities/degreesToRadians.js.map +1 -0
- package/dist/cjs/Utilities/downloadFile.js +14 -0
- package/dist/cjs/Utilities/downloadFile.js.map +1 -0
- package/dist/cjs/Utilities/easeFunctions.js +208 -0
- package/dist/cjs/Utilities/easeFunctions.js.map +1 -0
- package/dist/cjs/Utilities/generateUniqueID.js +8 -0
- package/dist/cjs/Utilities/generateUniqueID.js.map +1 -0
- package/dist/cjs/Utilities/index.js +25 -0
- package/dist/cjs/Utilities/index.js.map +1 -0
- package/dist/cjs/Utilities/interpolateNumber.js +18 -0
- package/dist/cjs/Utilities/interpolateNumber.js.map +1 -0
- package/dist/cjs/ValueObjects/Angle.js +47 -0
- package/dist/cjs/ValueObjects/Angle.js.map +1 -0
- package/dist/cjs/ValueObjects/Color.js +859 -0
- package/dist/cjs/ValueObjects/Color.js.map +1 -0
- package/dist/cjs/ValueObjects/LineSegment2D.js +72 -0
- package/dist/cjs/ValueObjects/LineSegment2D.js.map +1 -0
- package/dist/cjs/ValueObjects/Matrix.js +466 -0
- package/dist/cjs/ValueObjects/Matrix.js.map +1 -0
- package/dist/cjs/ValueObjects/ParametricLine.js +77 -0
- package/dist/cjs/ValueObjects/ParametricLine.js.map +1 -0
- package/dist/cjs/ValueObjects/ParametricPlane.js +65 -0
- package/dist/cjs/ValueObjects/ParametricPlane.js.map +1 -0
- package/dist/cjs/ValueObjects/Quaternion.js +290 -0
- package/dist/cjs/ValueObjects/Quaternion.js.map +1 -0
- package/dist/cjs/ValueObjects/Rectangle.js +24 -0
- package/dist/cjs/ValueObjects/Rectangle.js.map +1 -0
- package/dist/cjs/ValueObjects/Vector2.js +191 -0
- package/dist/cjs/ValueObjects/Vector2.js.map +1 -0
- package/dist/cjs/ValueObjects/Vector3.js +231 -0
- package/dist/cjs/ValueObjects/Vector3.js.map +1 -0
- package/dist/cjs/ValueObjects/Version.js +171 -0
- package/dist/cjs/ValueObjects/Version.js.map +1 -0
- package/dist/cjs/ValueObjects/index.js +28 -0
- package/dist/cjs/ValueObjects/index.js.map +1 -0
- package/dist/cjs/index.js +22 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/esm/AppObject/AppObject.js +53 -0
- package/dist/esm/AppObject/AppObject.js.map +1 -1
- package/dist/esm/AppObject/AppObjectComponent.js +78 -0
- package/dist/esm/AppObject/AppObjectComponent.js.map +1 -1
- package/dist/esm/AppObject/AppObjectController.js +22 -0
- package/dist/esm/AppObject/AppObjectController.js.map +1 -1
- package/dist/esm/AppObject/AppObjectEntity.js +52 -0
- package/dist/esm/AppObject/AppObjectEntity.js.map +1 -1
- package/dist/esm/AppObject/AppObjectEntityRepo.js +75 -1
- package/dist/esm/AppObject/AppObjectEntityRepo.js.map +1 -1
- package/dist/esm/AppObject/AppObjectPM.js +46 -0
- package/dist/esm/AppObject/AppObjectPM.js.map +1 -1
- package/dist/esm/AppObject/AppObjectRepo.js +20 -0
- package/dist/esm/AppObject/AppObjectRepo.js.map +1 -1
- package/dist/esm/AppObject/AppObjectUC.js +24 -1
- package/dist/esm/AppObject/AppObjectUC.js.map +1 -1
- package/dist/esm/AppObject/AppObjectView.js +23 -1
- package/dist/esm/AppObject/AppObjectView.js.map +1 -1
- package/dist/esm/AppObject/getSingletonComponent.js +19 -0
- package/dist/esm/AppObject/getSingletonComponent.js.map +1 -1
- package/dist/esm/Entities/MemoizedAngle.js +21 -0
- package/dist/esm/Entities/MemoizedAngle.js.map +1 -1
- package/dist/esm/Entities/MemoizedBoolean.js +21 -0
- package/dist/esm/Entities/MemoizedBoolean.js.map +1 -1
- package/dist/esm/Entities/MemoizedColor.js +21 -0
- package/dist/esm/Entities/MemoizedColor.js.map +1 -1
- package/dist/esm/Entities/MemoizedNumber.js +21 -0
- package/dist/esm/Entities/MemoizedNumber.js.map +1 -1
- package/dist/esm/Entities/MemoizedQuaternion.js +21 -0
- package/dist/esm/Entities/MemoizedQuaternion.js.map +1 -1
- package/dist/esm/Entities/MemoizedString.js +21 -0
- package/dist/esm/Entities/MemoizedString.js.map +1 -1
- package/dist/esm/Entities/MemoizedVector2.js +21 -0
- package/dist/esm/Entities/MemoizedVector2.js.map +1 -1
- package/dist/esm/Entities/MemoizedVector3.js +21 -0
- package/dist/esm/Entities/MemoizedVector3.js.map +1 -1
- package/dist/esm/Entities/ObservableEntity.js +17 -0
- package/dist/esm/Entities/ObservableEntity.js.map +1 -1
- package/dist/esm/Entities/ObserverList.js +21 -0
- package/dist/esm/Entities/ObserverList.js.map +1 -1
- package/dist/esm/Entities/RangedNumber.js +29 -0
- package/dist/esm/Entities/RangedNumber.js.map +1 -1
- package/dist/esm/Types/PmAdapter.js.map +1 -1
- package/dist/esm/Types/SingletonPmAdapter.js.map +1 -1
- package/dist/esm/ValueObjects/Angle.js +1 -1
- package/dist/esm/ValueObjects/Angle.js.map +1 -1
- package/dist/esm/ValueObjects/LineSegment2D.js +6 -6
- package/dist/esm/ValueObjects/LineSegment2D.js.map +1 -1
- package/dist/esm/ValueObjects/Matrix.js +6 -6
- package/dist/esm/ValueObjects/Matrix.js.map +1 -1
- package/dist/esm/ValueObjects/Quaternion.js +17 -17
- package/dist/esm/ValueObjects/Quaternion.js.map +1 -1
- package/dist/esm/ValueObjects/Vector2.js +15 -8
- package/dist/esm/ValueObjects/Vector2.js.map +1 -1
- package/dist/types/AppObject/AppObject.d.ts +42 -0
- package/dist/types/AppObject/AppObject.d.ts.map +1 -1
- package/dist/types/AppObject/AppObjectComponent.d.ts +80 -0
- package/dist/types/AppObject/AppObjectComponent.d.ts.map +1 -1
- package/dist/types/AppObject/AppObjectController.d.ts +22 -0
- package/dist/types/AppObject/AppObjectController.d.ts.map +1 -1
- package/dist/types/AppObject/AppObjectEntity.d.ts +55 -0
- package/dist/types/AppObject/AppObjectEntity.d.ts.map +1 -1
- package/dist/types/AppObject/AppObjectEntityRepo.d.ts +75 -0
- package/dist/types/AppObject/AppObjectEntityRepo.d.ts.map +1 -1
- package/dist/types/AppObject/AppObjectPM.d.ts +53 -0
- package/dist/types/AppObject/AppObjectPM.d.ts.map +1 -1
- package/dist/types/AppObject/AppObjectRepo.d.ts +124 -0
- package/dist/types/AppObject/AppObjectRepo.d.ts.map +1 -1
- package/dist/types/AppObject/AppObjectUC.d.ts +23 -0
- package/dist/types/AppObject/AppObjectUC.d.ts.map +1 -1
- package/dist/types/AppObject/AppObjectView.d.ts +22 -0
- package/dist/types/AppObject/AppObjectView.d.ts.map +1 -1
- package/dist/types/AppObject/getSingletonComponent.d.ts +19 -0
- package/dist/types/AppObject/getSingletonComponent.d.ts.map +1 -1
- package/dist/types/Entities/MemoizedAngle.d.ts +21 -0
- package/dist/types/Entities/MemoizedAngle.d.ts.map +1 -1
- package/dist/types/Entities/MemoizedBoolean.d.ts +21 -0
- package/dist/types/Entities/MemoizedBoolean.d.ts.map +1 -1
- package/dist/types/Entities/MemoizedColor.d.ts +21 -0
- package/dist/types/Entities/MemoizedColor.d.ts.map +1 -1
- package/dist/types/Entities/MemoizedNumber.d.ts +21 -0
- package/dist/types/Entities/MemoizedNumber.d.ts.map +1 -1
- package/dist/types/Entities/MemoizedQuaternion.d.ts +21 -0
- package/dist/types/Entities/MemoizedQuaternion.d.ts.map +1 -1
- package/dist/types/Entities/MemoizedString.d.ts +21 -0
- package/dist/types/Entities/MemoizedString.d.ts.map +1 -1
- package/dist/types/Entities/MemoizedVector2.d.ts +21 -0
- package/dist/types/Entities/MemoizedVector2.d.ts.map +1 -1
- package/dist/types/Entities/MemoizedVector3.d.ts +21 -0
- package/dist/types/Entities/MemoizedVector3.d.ts.map +1 -1
- package/dist/types/Entities/ObservableEntity.d.ts +20 -0
- package/dist/types/Entities/ObservableEntity.d.ts.map +1 -1
- package/dist/types/Entities/ObserverList.d.ts +21 -0
- package/dist/types/Entities/ObserverList.d.ts.map +1 -1
- package/dist/types/Entities/RangedNumber.d.ts +37 -0
- package/dist/types/Entities/RangedNumber.d.ts.map +1 -1
- package/dist/types/Types/PmAdapter.d.ts +60 -0
- package/dist/types/Types/PmAdapter.d.ts.map +1 -1
- package/dist/types/Types/SingletonPmAdapter.d.ts +55 -0
- package/dist/types/Types/SingletonPmAdapter.d.ts.map +1 -1
- package/dist/types/ValueObjects/Angle.d.ts +1 -1
- package/dist/types/ValueObjects/Matrix.d.ts +5 -5
- package/dist/types/ValueObjects/Matrix.d.ts.map +1 -1
- package/dist/types/ValueObjects/Quaternion.d.ts +17 -17
- package/dist/types/ValueObjects/Vector2.d.ts +8 -3
- package/dist/types/ValueObjects/Vector2.d.ts.map +1 -1
- package/package.json +58 -55
- package/dist/esm/AppObject/AppObject.test.js +0 -110
- package/dist/esm/AppObject/AppObject.test.js.map +0 -1
- package/dist/esm/AppObject/AppObjectComponent.test.js +0 -130
- package/dist/esm/AppObject/AppObjectComponent.test.js.map +0 -1
- package/dist/esm/AppObject/AppObjectEntity.test.js +0 -106
- package/dist/esm/AppObject/AppObjectEntity.test.js.map +0 -1
- package/dist/esm/AppObject/AppObjectEntityRepo.test.js +0 -147
- package/dist/esm/AppObject/AppObjectEntityRepo.test.js.map +0 -1
- package/dist/esm/AppObject/AppObjectPM.test.js +0 -101
- package/dist/esm/AppObject/AppObjectPM.test.js.map +0 -1
- package/dist/esm/AppObject/AppObjectRepo.test.js +0 -211
- package/dist/esm/AppObject/AppObjectRepo.test.js.map +0 -1
- package/dist/esm/AppObject/getSingletonComponent.test.js +0 -11
- package/dist/esm/AppObject/getSingletonComponent.test.js.map +0 -1
- package/dist/esm/Entities/MemoizedAngle.test.js +0 -28
- package/dist/esm/Entities/MemoizedAngle.test.js.map +0 -1
- package/dist/esm/Entities/MemoizedBoolean.test.js +0 -32
- package/dist/esm/Entities/MemoizedBoolean.test.js.map +0 -1
- package/dist/esm/Entities/MemoizedColor.test.js +0 -30
- package/dist/esm/Entities/MemoizedColor.test.js.map +0 -1
- package/dist/esm/Entities/MemoizedNumber.test.js +0 -27
- package/dist/esm/Entities/MemoizedNumber.test.js.map +0 -1
- package/dist/esm/Entities/MemoizedQuaternion.test.js +0 -30
- package/dist/esm/Entities/MemoizedQuaternion.test.js.map +0 -1
- package/dist/esm/Entities/MemoizedString.test.js +0 -27
- package/dist/esm/Entities/MemoizedString.test.js.map +0 -1
- package/dist/esm/Entities/MemoizedVector2.test.js +0 -30
- package/dist/esm/Entities/MemoizedVector2.test.js.map +0 -1
- package/dist/esm/Entities/MemoizedVector3.test.js +0 -30
- package/dist/esm/Entities/MemoizedVector3.test.js.map +0 -1
- package/dist/esm/Entities/ObservableEntity.test.js +0 -23
- package/dist/esm/Entities/ObservableEntity.test.js.map +0 -1
- package/dist/esm/Entities/ObserverList.test.js +0 -42
- package/dist/esm/Entities/ObserverList.test.js.map +0 -1
- package/dist/esm/Entities/RangedNumber.test.js +0 -94
- package/dist/esm/Entities/RangedNumber.test.js.map +0 -1
- package/dist/esm/Utilities/LengthConverters.test.js +0 -22
- package/dist/esm/Utilities/LengthConverters.test.js.map +0 -1
- package/dist/esm/Utilities/LerpNumber.test.js +0 -88
- package/dist/esm/Utilities/LerpNumber.test.js.map +0 -1
- package/dist/esm/Utilities/addAlphaToHex.test.js +0 -32
- package/dist/esm/Utilities/addAlphaToHex.test.js.map +0 -1
- package/dist/esm/Utilities/alphaToHex.test.js +0 -73
- package/dist/esm/Utilities/alphaToHex.test.js.map +0 -1
- package/dist/esm/Utilities/degreesToRadians.test.js +0 -7
- package/dist/esm/Utilities/degreesToRadians.test.js.map +0 -1
- package/dist/esm/Utilities/easeFunctions.test.js +0 -207
- package/dist/esm/Utilities/easeFunctions.test.js.map +0 -1
- package/dist/esm/Utilities/interpolateNumber.test.js +0 -24
- package/dist/esm/Utilities/interpolateNumber.test.js.map +0 -1
- package/dist/esm/ValueObjects/Angle.test.js +0 -26
- package/dist/esm/ValueObjects/Angle.test.js.map +0 -1
- package/dist/esm/ValueObjects/Color.test.js +0 -145
- package/dist/esm/ValueObjects/Color.test.js.map +0 -1
- package/dist/esm/ValueObjects/LineSegment2D.test.js +0 -100
- package/dist/esm/ValueObjects/LineSegment2D.test.js.map +0 -1
- package/dist/esm/ValueObjects/Matrix.test.js +0 -383
- package/dist/esm/ValueObjects/Matrix.test.js.map +0 -1
- package/dist/esm/ValueObjects/ParametricLine.test.js +0 -124
- package/dist/esm/ValueObjects/ParametricLine.test.js.map +0 -1
- package/dist/esm/ValueObjects/ParametricPlane.test.js +0 -99
- package/dist/esm/ValueObjects/ParametricPlane.test.js.map +0 -1
- package/dist/esm/ValueObjects/Quaternion.test.js +0 -238
- package/dist/esm/ValueObjects/Quaternion.test.js.map +0 -1
- package/dist/esm/ValueObjects/Rectangle.test.js +0 -30
- package/dist/esm/ValueObjects/Rectangle.test.js.map +0 -1
- package/dist/esm/ValueObjects/Vector2.test.js +0 -134
- package/dist/esm/ValueObjects/Vector2.test.js.map +0 -1
- package/dist/esm/ValueObjects/Vector3.test.js +0 -186
- package/dist/esm/ValueObjects/Vector3.test.js.map +0 -1
- package/dist/esm/ValueObjects/Version.test.js +0 -308
- package/dist/esm/ValueObjects/Version.test.js.map +0 -1
- package/dist/types/AppObject/AppObject.test.d.ts +0 -7
- package/dist/types/AppObject/AppObject.test.d.ts.map +0 -1
- package/dist/types/AppObject/AppObjectComponent.test.d.ts +0 -2
- package/dist/types/AppObject/AppObjectComponent.test.d.ts.map +0 -1
- package/dist/types/AppObject/AppObjectEntity.test.d.ts +0 -2
- package/dist/types/AppObject/AppObjectEntity.test.d.ts.map +0 -1
- package/dist/types/AppObject/AppObjectEntityRepo.test.d.ts +0 -2
- package/dist/types/AppObject/AppObjectEntityRepo.test.d.ts.map +0 -1
- package/dist/types/AppObject/AppObjectPM.test.d.ts +0 -2
- package/dist/types/AppObject/AppObjectPM.test.d.ts.map +0 -1
- package/dist/types/AppObject/AppObjectRepo.test.d.ts +0 -2
- package/dist/types/AppObject/AppObjectRepo.test.d.ts.map +0 -1
- package/dist/types/AppObject/getSingletonComponent.test.d.ts +0 -2
- package/dist/types/AppObject/getSingletonComponent.test.d.ts.map +0 -1
- package/dist/types/Entities/MemoizedAngle.test.d.ts +0 -2
- package/dist/types/Entities/MemoizedAngle.test.d.ts.map +0 -1
- package/dist/types/Entities/MemoizedBoolean.test.d.ts +0 -2
- package/dist/types/Entities/MemoizedBoolean.test.d.ts.map +0 -1
- package/dist/types/Entities/MemoizedColor.test.d.ts +0 -2
- package/dist/types/Entities/MemoizedColor.test.d.ts.map +0 -1
- package/dist/types/Entities/MemoizedNumber.test.d.ts +0 -2
- package/dist/types/Entities/MemoizedNumber.test.d.ts.map +0 -1
- package/dist/types/Entities/MemoizedQuaternion.test.d.ts +0 -2
- package/dist/types/Entities/MemoizedQuaternion.test.d.ts.map +0 -1
- package/dist/types/Entities/MemoizedString.test.d.ts +0 -2
- package/dist/types/Entities/MemoizedString.test.d.ts.map +0 -1
- package/dist/types/Entities/MemoizedVector2.test.d.ts +0 -2
- package/dist/types/Entities/MemoizedVector2.test.d.ts.map +0 -1
- package/dist/types/Entities/MemoizedVector3.test.d.ts +0 -2
- package/dist/types/Entities/MemoizedVector3.test.d.ts.map +0 -1
- package/dist/types/Entities/ObservableEntity.test.d.ts +0 -2
- package/dist/types/Entities/ObservableEntity.test.d.ts.map +0 -1
- package/dist/types/Entities/ObserverList.test.d.ts +0 -2
- package/dist/types/Entities/ObserverList.test.d.ts.map +0 -1
- package/dist/types/Entities/RangedNumber.test.d.ts +0 -2
- package/dist/types/Entities/RangedNumber.test.d.ts.map +0 -1
- package/dist/types/Utilities/LengthConverters.test.d.ts +0 -2
- package/dist/types/Utilities/LengthConverters.test.d.ts.map +0 -1
- package/dist/types/Utilities/LerpNumber.test.d.ts +0 -2
- package/dist/types/Utilities/LerpNumber.test.d.ts.map +0 -1
- package/dist/types/Utilities/addAlphaToHex.test.d.ts +0 -2
- package/dist/types/Utilities/addAlphaToHex.test.d.ts.map +0 -1
- package/dist/types/Utilities/alphaToHex.test.d.ts +0 -2
- package/dist/types/Utilities/alphaToHex.test.d.ts.map +0 -1
- package/dist/types/Utilities/degreesToRadians.test.d.ts +0 -2
- package/dist/types/Utilities/degreesToRadians.test.d.ts.map +0 -1
- package/dist/types/Utilities/easeFunctions.test.d.ts +0 -2
- package/dist/types/Utilities/easeFunctions.test.d.ts.map +0 -1
- package/dist/types/Utilities/interpolateNumber.test.d.ts +0 -2
- package/dist/types/Utilities/interpolateNumber.test.d.ts.map +0 -1
- package/dist/types/ValueObjects/Angle.test.d.ts +0 -2
- package/dist/types/ValueObjects/Angle.test.d.ts.map +0 -1
- package/dist/types/ValueObjects/Color.test.d.ts +0 -2
- package/dist/types/ValueObjects/Color.test.d.ts.map +0 -1
- package/dist/types/ValueObjects/LineSegment2D.test.d.ts +0 -2
- package/dist/types/ValueObjects/LineSegment2D.test.d.ts.map +0 -1
- package/dist/types/ValueObjects/Matrix.test.d.ts +0 -2
- package/dist/types/ValueObjects/Matrix.test.d.ts.map +0 -1
- package/dist/types/ValueObjects/ParametricLine.test.d.ts +0 -2
- package/dist/types/ValueObjects/ParametricLine.test.d.ts.map +0 -1
- package/dist/types/ValueObjects/ParametricPlane.test.d.ts +0 -2
- package/dist/types/ValueObjects/ParametricPlane.test.d.ts.map +0 -1
- package/dist/types/ValueObjects/Quaternion.test.d.ts +0 -2
- package/dist/types/ValueObjects/Quaternion.test.d.ts.map +0 -1
- package/dist/types/ValueObjects/Rectangle.test.d.ts +0 -2
- package/dist/types/ValueObjects/Rectangle.test.d.ts.map +0 -1
- package/dist/types/ValueObjects/Vector2.test.d.ts +0 -2
- package/dist/types/ValueObjects/Vector2.test.d.ts.map +0 -1
- package/dist/types/ValueObjects/Vector3.test.d.ts +0 -2
- package/dist/types/ValueObjects/Vector3.test.d.ts.map +0 -1
- package/dist/types/ValueObjects/Version.test.d.ts +0 -2
- package/dist/types/ValueObjects/Version.test.d.ts.map +0 -1
|
@@ -18,10 +18,10 @@ export class Quaternion {
|
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
20
|
* Checks two quaternions to see if they are close
|
|
21
|
-
* @param a
|
|
22
|
-
* @param b
|
|
21
|
+
* @param a Quaternion A
|
|
22
|
+
* @param b Quaternion B
|
|
23
23
|
* @param threshold "Close" threshold. Defaults to 0.001
|
|
24
|
-
* @returns True if each of
|
|
24
|
+
* @returns True if each of Quaternion's components are within the threshold of each other
|
|
25
25
|
*/
|
|
26
26
|
static Close(a, b, threshold = 0.001) {
|
|
27
27
|
const aArray = a.toArray();
|
|
@@ -41,7 +41,7 @@ export class Quaternion {
|
|
|
41
41
|
}
|
|
42
42
|
/**
|
|
43
43
|
* Multiplies A*B
|
|
44
|
-
* @param a
|
|
44
|
+
* @param a Quaternion A
|
|
45
45
|
* @param b Quaternion B
|
|
46
46
|
* @returns The result of A*B
|
|
47
47
|
*/
|
|
@@ -53,15 +53,15 @@ export class Quaternion {
|
|
|
53
53
|
return Quaternion.FromArray([x, y, z, w]);
|
|
54
54
|
}
|
|
55
55
|
/**
|
|
56
|
-
* Creates a new
|
|
57
|
-
* @param values The four values of the
|
|
58
|
-
* @returns A
|
|
56
|
+
* Creates a new Quaternion from an array of values
|
|
57
|
+
* @param values The four values of the Quaternion: [x,y,z,w]
|
|
58
|
+
* @returns A Quaternion
|
|
59
59
|
*/
|
|
60
60
|
static FromArray(values) {
|
|
61
61
|
return new Quaternion(values[0], values[1], values[2], values[3]);
|
|
62
62
|
}
|
|
63
63
|
/**
|
|
64
|
-
* Creates a
|
|
64
|
+
* Creates a Quaternion from a Data Transfer Object
|
|
65
65
|
* @param dto The Data Transfer Object
|
|
66
66
|
* @returns The Quaternion
|
|
67
67
|
*/
|
|
@@ -76,10 +76,10 @@ export class Quaternion {
|
|
|
76
76
|
return new Quaternion(0, 0, 0, 1);
|
|
77
77
|
}
|
|
78
78
|
/**
|
|
79
|
-
* Creates
|
|
79
|
+
* Creates a quaternion about an axis for a given angle
|
|
80
80
|
* @param axis The rotation axis
|
|
81
81
|
* @param angle The rotation angle
|
|
82
|
-
* @returns The resulting
|
|
82
|
+
* @returns The resulting Quaternion
|
|
83
83
|
*/
|
|
84
84
|
static FromAngleAxis(axis, angle) {
|
|
85
85
|
const sin = Math.sin(angle.radians / 2);
|
|
@@ -112,11 +112,11 @@ export class Quaternion {
|
|
|
112
112
|
return Quaternion.FromYawPitchRoll(yaw, pitch, roll);
|
|
113
113
|
}
|
|
114
114
|
/**
|
|
115
|
-
*
|
|
115
|
+
* Forms a Quaternion from the Yaw-Pitch-Roll (Tait-Bryan) convention
|
|
116
116
|
* @param yaw defines the rotation around the y axis
|
|
117
117
|
* @param pitch defines the rotation around the x axis
|
|
118
118
|
* @param roll defines the rotation around the z axis
|
|
119
|
-
* @returns the resulting
|
|
119
|
+
* @returns the resulting quaternion
|
|
120
120
|
*/
|
|
121
121
|
static FromYawPitchRoll(yaw, pitch, roll) {
|
|
122
122
|
const halfRoll = roll.radians * 0.5;
|
|
@@ -139,7 +139,7 @@ export class Quaternion {
|
|
|
139
139
|
* @param x Rotation about the x axis
|
|
140
140
|
* @param y Rotation about the y axis
|
|
141
141
|
* @param z Rotation about the z axis
|
|
142
|
-
* @returns The
|
|
142
|
+
* @returns The Quaternion
|
|
143
143
|
*/
|
|
144
144
|
static FromEuler(x, y, z) {
|
|
145
145
|
return this.FromYawPitchRoll(y, x, z);
|
|
@@ -166,9 +166,9 @@ export class Quaternion {
|
|
|
166
166
|
/**
|
|
167
167
|
* Spherically interpolates between two quaternions
|
|
168
168
|
* @param initial The initial quaternion
|
|
169
|
-
* @param final The final
|
|
170
|
-
* @param percent The percent along the slerp. 0 will return the initial
|
|
171
|
-
* @returns The interpolated
|
|
169
|
+
* @param final The final quaternion
|
|
170
|
+
* @param percent The percent along the slerp. 0 will return the initial quaternion and 1 will return the final quaternion
|
|
171
|
+
* @returns The interpolated quaternion
|
|
172
172
|
*/
|
|
173
173
|
static Slerp(initial, final, percent) {
|
|
174
174
|
let A;
|
|
@@ -201,7 +201,7 @@ export class Quaternion {
|
|
|
201
201
|
/**
|
|
202
202
|
* Calculates a Quaternion from a rotation matrix
|
|
203
203
|
* @param rotationMatrix A normalized, non-scaled rotation matrix
|
|
204
|
-
* @returns The
|
|
204
|
+
* @returns The Quaternion
|
|
205
205
|
*/
|
|
206
206
|
static FromRotationMatrix(rotationMatrix) {
|
|
207
207
|
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"]}
|
|
@@ -56,17 +56,24 @@ export class Vector2 {
|
|
|
56
56
|
/**
|
|
57
57
|
* Get the magnitude (length) of the vector
|
|
58
58
|
*/
|
|
59
|
-
get
|
|
59
|
+
get magnitude() {
|
|
60
60
|
const xSqr = this.x * this.x;
|
|
61
61
|
const ySqr = this.y * this.y;
|
|
62
62
|
const magnitude = Math.sqrt(xSqr + ySqr);
|
|
63
63
|
return magnitude;
|
|
64
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* @deprecated Use magnitude instead - this property is kept for backward compatibility
|
|
67
|
+
* Get the magnitude (length) of the vector
|
|
68
|
+
*/
|
|
69
|
+
get magnitued() {
|
|
70
|
+
return this.magnitude;
|
|
71
|
+
}
|
|
65
72
|
/**
|
|
66
73
|
* Get the unit vector
|
|
67
74
|
*/
|
|
68
75
|
get unit() {
|
|
69
|
-
const mag = this.
|
|
76
|
+
const mag = this.magnitude;
|
|
70
77
|
if (mag === 0) {
|
|
71
78
|
return Vector2.Zero();
|
|
72
79
|
}
|
|
@@ -75,14 +82,14 @@ export class Vector2 {
|
|
|
75
82
|
return new Vector2(unitX, unitY);
|
|
76
83
|
}
|
|
77
84
|
/**
|
|
78
|
-
* Returns the angle of the direction of this
|
|
85
|
+
* Returns the angle of the direction of this vector in degrees.
|
|
79
86
|
* A right vector [1,0] will return 0, a left vector [-1,0] will return 180, an up vector [0,1] will return 90 and a down vector [0,-1] will return -90
|
|
80
87
|
*/
|
|
81
88
|
get theta() {
|
|
82
89
|
return (Math.atan2(this.y, this.x) * 180) / Math.PI;
|
|
83
90
|
}
|
|
84
91
|
/**
|
|
85
|
-
*
|
|
92
|
+
* Returns the vector as an array of numbers [x,y]
|
|
86
93
|
*/
|
|
87
94
|
get array() {
|
|
88
95
|
return [this.x, this.y];
|
|
@@ -107,7 +114,7 @@ export class Vector2 {
|
|
|
107
114
|
*/
|
|
108
115
|
Vector2.Close = (a, b, threshold = 0.01) => {
|
|
109
116
|
const diff = Vector2.Subtract(a, b);
|
|
110
|
-
const diffMag = diff.
|
|
117
|
+
const diffMag = diff.magnitude;
|
|
111
118
|
if (diffMag < threshold)
|
|
112
119
|
return true;
|
|
113
120
|
else
|
|
@@ -136,7 +143,7 @@ Vector2.Scale = (vector, scale) => {
|
|
|
136
143
|
return new Vector2(x, y);
|
|
137
144
|
};
|
|
138
145
|
/**
|
|
139
|
-
* Creates a new vector of a given
|
|
146
|
+
* Creates a new vector of a given length and a unit that is equal to the original vector
|
|
140
147
|
* @param vector The original vector. This determines the unit of the final vector
|
|
141
148
|
* @param length The desired length of the final vector
|
|
142
149
|
* @returns The final vector
|
|
@@ -164,8 +171,8 @@ Vector2.Dot = (a, b) => {
|
|
|
164
171
|
*/
|
|
165
172
|
Vector2.AngleBetween = (a, b) => {
|
|
166
173
|
const dot = Vector2.Dot(a, b);
|
|
167
|
-
const
|
|
168
|
-
const angRadians = Math.acos(dot /
|
|
174
|
+
const magnitudes = a.magnitude * b.magnitude;
|
|
175
|
+
const angRadians = Math.acos(dot / magnitudes);
|
|
169
176
|
return Angle.FromRadians(angRadians);
|
|
170
177
|
};
|
|
171
178
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Vector2.js","sourceRoot":"","sources":["../../../src/ValueObjects/Vector2.ts"],"names":[],"mappings":"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","sourcesContent":["import { Angle } from \".\";\r\n\r\nexport class Vector2 {\r\n /**\r\n * Creates a zero vector\r\n * @returns Vector [0,0]\r\n */\r\n public static Zero(): Vector2 {\r\n return new Vector2(0, 0);\r\n }\r\n\r\n /**\r\n * Creates a one vector\r\n * @returns Vector [1,1]\r\n */\r\n public static One(): Vector2 {\r\n return new Vector2(1, 1);\r\n }\r\n\r\n /**\r\n * Checks to see if Vector A equals Vector B\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @returns True if Vector A === Vector B\r\n */\r\n public static Equal(a: Vector2, b: Vector2): boolean {\r\n if (a.x !== b.x) return false;\r\n if (a.y !== b.y) return false;\r\n return true;\r\n }\r\n\r\n /**\r\n * Creates a Vector from a Data Transfer Object\r\n * @param dto The Data Transfer Object\r\n * @returns The Vector\r\n */\r\n public static FromDTO(dto: { x: number; y: number }): Vector2 {\r\n return new Vector2(dto.x, dto.y);\r\n }\r\n\r\n /**\r\n * Adds Vector B to Vector A\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @returns A + B\r\n */\r\n public static Add(a: Vector2, b: Vector2): Vector2 {\r\n return new Vector2(a.x + b.x, a.y + b.y);\r\n }\r\n\r\n /**\r\n * Subtracts Vector B from Vector A\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @returns A - B\r\n */\r\n public static Subtract(a: Vector2, b: Vector2): Vector2 {\r\n return new Vector2(a.x - b.x, a.y - b.y);\r\n }\r\n\r\n /**\r\n * Checks to see if Vector A is close to Vector B\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @param threshold Tolerance to define \"close\". Defaults to 0.01\r\n * @returns True if A and B are close enough\r\n */\r\n public static Close = (\r\n a: Vector2,\r\n b: Vector2,\r\n threshold: number = 0.01\r\n ): boolean => {\r\n const diff = Vector2.Subtract(a, b);\r\n const diffMag = diff.magnitued;\r\n\r\n if (diffMag < threshold) return true;\r\n else return false;\r\n };\r\n\r\n /**\r\n * Rotates a vector by an angle\r\n * @param vec The original vector\r\n * @param angle The angle\r\n * @returns A new Vector that has been rotated from the original by an angle\r\n */\r\n public static Rotate = (vec: Vector2, angle: Angle): Vector2 => {\r\n const x = vec.x * Math.cos(angle.radians) - vec.y * Math.sin(angle.radians);\r\n const y = vec.x * Math.sin(angle.radians) + vec.y * Math.cos(angle.radians);\r\n return new Vector2(x, y);\r\n };\r\n\r\n /**\r\n * Scales a vector uniformly\r\n * @param vector The original vector\r\n * @param scale Scale factor\r\n * @returns A new, scaled vector\r\n */\r\n public static Scale = (vector: Vector2, scale: number): Vector2 => {\r\n const x = scale * vector.x;\r\n const y = scale * vector.y;\r\n return new Vector2(x, y);\r\n };\r\n\r\n /**\r\n * Creates a new vector of a given lenght and a unit that is equal to the original vector\r\n * @param vector The original vector. This determines the unit of the final vector\r\n * @param length The desired length of the final vector\r\n * @returns The final vector\r\n */\r\n public static NewVectorOfLength = (\r\n vector: Vector2,\r\n length: number\r\n ): Vector2 => {\r\n const unit = vector.unit;\r\n const x = length * unit.x;\r\n const y = length * unit.y;\r\n return new Vector2(x, y);\r\n };\r\n\r\n /**\r\n * Calculate the dot product between Vectors A and B\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @returns The Dot product between A and B\r\n */\r\n public static Dot = (a: Vector2, b: Vector2): number => {\r\n return a.x * b.x + a.y * b.y;\r\n };\r\n\r\n /**\r\n * Calculates the dot product between Vectors A and B\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @returns A . B\r\n */\r\n public static AngleBetween = (a: Vector2, b: Vector2): Angle => {\r\n const dot = Vector2.Dot(a, b);\r\n const magnitues = a.magnitued * b.magnitued;\r\n\r\n const angRadians = Math.acos(dot / magnitues);\r\n\r\n return Angle.FromRadians(angRadians);\r\n };\r\n\r\n /**\r\n * Calculates the Cross product between Vectors A and B\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @returns A X B\r\n */\r\n public static Cross = (a: Vector2, b: Vector2): number => {\r\n return a.x * b.y - a.y * b.x;\r\n };\r\n\r\n readonly x: number;\r\n readonly y: number;\r\n\r\n /**\r\n * Get the magnitude (length) of the vector\r\n */\r\n get magnitued(): number {\r\n const xSqr = this.x * this.x;\r\n const ySqr = this.y * this.y;\r\n\r\n const magnitude = Math.sqrt(xSqr + ySqr);\r\n return magnitude;\r\n }\r\n\r\n /**\r\n * Get the unit vector\r\n */\r\n get unit(): Vector2 {\r\n const mag = this.magnitued;\r\n if (mag === 0) {\r\n return Vector2.Zero();\r\n }\r\n\r\n const unitX = this.x / mag;\r\n const unitY = this.y / mag;\r\n return new Vector2(unitX, unitY);\r\n }\r\n\r\n /**\r\n * Returns the angle of the direction of this angle in degrees.\r\n * A right vector [1,0] will return 0, a left vector [-1,0] will return 180, an up vector [0,1] will return 90 and a down vector [0,-1] will return -90\r\n */\r\n get theta(): number {\r\n return (Math.atan2(this.y, this.x) * 180) / Math.PI;\r\n }\r\n\r\n /**\r\n * Retuns the vector as an array of numbers [x,y]\r\n */\r\n get array(): [number, number] {\r\n return [this.x, this.y];\r\n }\r\n\r\n /**\r\n * Get the vector as a Data Transfer Object\r\n */\r\n get dto(): { x: number; y: number } {\r\n return { x: this.x, y: this.y };\r\n }\r\n\r\n constructor(x: number, y: number) {\r\n this.x = x;\r\n this.y = y;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"Vector2.js","sourceRoot":"","sources":["../../../src/ValueObjects/Vector2.ts"],"names":[],"mappings":"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","sourcesContent":["import { Angle } from \".\";\r\n\r\nexport class Vector2 {\r\n /**\r\n * Creates a zero vector\r\n * @returns Vector [0,0]\r\n */\r\n public static Zero(): Vector2 {\r\n return new Vector2(0, 0);\r\n }\r\n\r\n /**\r\n * Creates a one vector\r\n * @returns Vector [1,1]\r\n */\r\n public static One(): Vector2 {\r\n return new Vector2(1, 1);\r\n }\r\n\r\n /**\r\n * Checks to see if Vector A equals Vector B\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @returns True if Vector A === Vector B\r\n */\r\n public static Equal(a: Vector2, b: Vector2): boolean {\r\n if (a.x !== b.x) return false;\r\n if (a.y !== b.y) return false;\r\n return true;\r\n }\r\n\r\n /**\r\n * Creates a Vector from a Data Transfer Object\r\n * @param dto The Data Transfer Object\r\n * @returns The Vector\r\n */\r\n public static FromDTO(dto: { x: number; y: number }): Vector2 {\r\n return new Vector2(dto.x, dto.y);\r\n }\r\n\r\n /**\r\n * Adds Vector B to Vector A\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @returns A + B\r\n */\r\n public static Add(a: Vector2, b: Vector2): Vector2 {\r\n return new Vector2(a.x + b.x, a.y + b.y);\r\n }\r\n\r\n /**\r\n * Subtracts Vector B from Vector A\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @returns A - B\r\n */\r\n public static Subtract(a: Vector2, b: Vector2): Vector2 {\r\n return new Vector2(a.x - b.x, a.y - b.y);\r\n }\r\n\r\n /**\r\n * Checks to see if Vector A is close to Vector B\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @param threshold Tolerance to define \"close\". Defaults to 0.01\r\n * @returns True if A and B are close enough\r\n */\r\n public static Close = (\r\n a: Vector2,\r\n b: Vector2,\r\n threshold: number = 0.01\r\n ): boolean => {\r\n const diff = Vector2.Subtract(a, b);\r\n const diffMag = diff.magnitude;\r\n\r\n if (diffMag < threshold) return true;\r\n else return false;\r\n };\r\n\r\n /**\r\n * Rotates a vector by an angle\r\n * @param vec The original vector\r\n * @param angle The angle\r\n * @returns A new Vector that has been rotated from the original by an angle\r\n */\r\n public static Rotate = (vec: Vector2, angle: Angle): Vector2 => {\r\n const x = vec.x * Math.cos(angle.radians) - vec.y * Math.sin(angle.radians);\r\n const y = vec.x * Math.sin(angle.radians) + vec.y * Math.cos(angle.radians);\r\n return new Vector2(x, y);\r\n };\r\n\r\n /**\r\n * Scales a vector uniformly\r\n * @param vector The original vector\r\n * @param scale Scale factor\r\n * @returns A new, scaled vector\r\n */\r\n public static Scale = (vector: Vector2, scale: number): Vector2 => {\r\n const x = scale * vector.x;\r\n const y = scale * vector.y;\r\n return new Vector2(x, y);\r\n };\r\n\r\n /**\r\n * Creates a new vector of a given length and a unit that is equal to the original vector\r\n * @param vector The original vector. This determines the unit of the final vector\r\n * @param length The desired length of the final vector\r\n * @returns The final vector\r\n */\r\n public static NewVectorOfLength = (\r\n vector: Vector2,\r\n length: number\r\n ): Vector2 => {\r\n const unit = vector.unit;\r\n const x = length * unit.x;\r\n const y = length * unit.y;\r\n return new Vector2(x, y);\r\n };\r\n\r\n /**\r\n * Calculate the dot product between Vectors A and B\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @returns The Dot product between A and B\r\n */\r\n public static Dot = (a: Vector2, b: Vector2): number => {\r\n return a.x * b.x + a.y * b.y;\r\n };\r\n\r\n /**\r\n * Calculates the dot product between Vectors A and B\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @returns A . B\r\n */\r\n public static AngleBetween = (a: Vector2, b: Vector2): Angle => {\r\n const dot = Vector2.Dot(a, b);\r\n const magnitudes = a.magnitude * b.magnitude;\r\n\r\n const angRadians = Math.acos(dot / magnitudes);\r\n\r\n return Angle.FromRadians(angRadians);\r\n };\r\n\r\n /**\r\n * Calculates the Cross product between Vectors A and B\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @returns A X B\r\n */\r\n public static Cross = (a: Vector2, b: Vector2): number => {\r\n return a.x * b.y - a.y * b.x;\r\n };\r\n\r\n readonly x: number;\r\n readonly y: number;\r\n\r\n /**\r\n * Get the magnitude (length) of the vector\r\n */\r\n get magnitude(): number {\r\n const xSqr = this.x * this.x;\r\n const ySqr = this.y * this.y;\r\n\r\n const magnitude = Math.sqrt(xSqr + ySqr);\r\n return magnitude;\r\n }\r\n \r\n /**\r\n * @deprecated Use magnitude instead - this property is kept for backward compatibility\r\n * Get the magnitude (length) of the vector\r\n */\r\n get magnitued(): number {\r\n return this.magnitude;\r\n }\r\n\r\n /**\r\n * Get the unit vector\r\n */\r\n get unit(): Vector2 {\r\n const mag = this.magnitude;\r\n if (mag === 0) {\r\n return Vector2.Zero();\r\n }\r\n\r\n const unitX = this.x / mag;\r\n const unitY = this.y / mag;\r\n return new Vector2(unitX, unitY);\r\n }\r\n\r\n /**\r\n * Returns the angle of the direction of this vector in degrees.\r\n * A right vector [1,0] will return 0, a left vector [-1,0] will return 180, an up vector [0,1] will return 90 and a down vector [0,-1] will return -90\r\n */\r\n get theta(): number {\r\n return (Math.atan2(this.y, this.x) * 180) / Math.PI;\r\n }\r\n\r\n /**\r\n * Returns the vector as an array of numbers [x,y]\r\n */\r\n get array(): [number, number] {\r\n return [this.x, this.y];\r\n }\r\n\r\n /**\r\n * Get the vector as a Data Transfer Object\r\n */\r\n get dto(): { x: number; y: number } {\r\n return { x: this.x, y: this.y };\r\n }\r\n\r\n constructor(x: number, y: number) {\r\n this.x = x;\r\n this.y = y;\r\n }\r\n}\r\n"]}
|
|
@@ -1,15 +1,57 @@
|
|
|
1
1
|
import { ObservableEntity } from "../Entities";
|
|
2
2
|
import { AppObjectComponent } from "./AppObjectComponent";
|
|
3
3
|
import { AppObjectRepo } from "./AppObjectRepo";
|
|
4
|
+
/**
|
|
5
|
+
* AppObject is the central class in the VIVED application architecture.
|
|
6
|
+
* It serves as a container for components that implement the application's functionality.
|
|
7
|
+
* Each AppObject is identified by a unique ID and registered with an AppObjectRepo.
|
|
8
|
+
*
|
|
9
|
+
* AppObjects are observable entities that notify observers when their components change.
|
|
10
|
+
* This enables reactive programming patterns throughout the application.
|
|
11
|
+
*/
|
|
4
12
|
export declare abstract class AppObject extends ObservableEntity {
|
|
13
|
+
/** Unique identifier for this AppObject */
|
|
5
14
|
abstract readonly id: string;
|
|
15
|
+
/** Repository that manages this AppObject */
|
|
6
16
|
abstract readonly appObjectRepo: AppObjectRepo;
|
|
17
|
+
/**
|
|
18
|
+
* Checks if this AppObject has a component of the specified type
|
|
19
|
+
* @param type The component type identifier
|
|
20
|
+
* @returns True if the component exists, false otherwise
|
|
21
|
+
*/
|
|
7
22
|
abstract hasComponent(type: string): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Adds a component to this AppObject
|
|
25
|
+
* If a component of the same type already exists, it will be replaced
|
|
26
|
+
* @param component The component to add
|
|
27
|
+
*/
|
|
8
28
|
abstract addComponent(component: AppObjectComponent): void;
|
|
29
|
+
/**
|
|
30
|
+
* Retrieves a component by type
|
|
31
|
+
* @param type The component type identifier
|
|
32
|
+
* @returns The component cast to type T, or undefined if not found
|
|
33
|
+
*/
|
|
9
34
|
abstract getComponent<T extends AppObjectComponent>(type: string): T | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Removes a component by type
|
|
37
|
+
* @param type The component type identifier
|
|
38
|
+
*/
|
|
10
39
|
abstract removeComponent(type: string): void;
|
|
40
|
+
/**
|
|
41
|
+
* Gets all components attached to this AppObject
|
|
42
|
+
* @returns Array of all components
|
|
43
|
+
*/
|
|
11
44
|
abstract allComponents(): AppObjectComponent[];
|
|
45
|
+
/**
|
|
46
|
+
* Cleans up resources and removes this AppObject from its repository
|
|
47
|
+
*/
|
|
12
48
|
abstract dispose(): void;
|
|
13
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* Factory function to create a new AppObject
|
|
52
|
+
* @param id Unique identifier for the new AppObject
|
|
53
|
+
* @param repo Repository to register the AppObject with
|
|
54
|
+
* @returns A new AppObject instance
|
|
55
|
+
*/
|
|
14
56
|
export declare function makeAppObject(id: string, repo: AppObjectRepo): AppObject;
|
|
15
57
|
//# sourceMappingURL=AppObject.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppObject.d.ts","sourceRoot":"","sources":["../../../src/AppObject/AppObject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,8BAAsB,SAAU,SAAQ,gBAAgB;IACtD,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"AppObject.d.ts","sourceRoot":"","sources":["../../../src/AppObject/AppObject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;;;GAOG;AACH,8BAAsB,SAAU,SAAQ,gBAAgB;IACtD,2CAA2C;IAC3C,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAE7B,6CAA6C;IAC7C,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IAE/C;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAE5C;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,kBAAkB,GAAG,IAAI;IAE1D;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,CAAC,SAAS,kBAAkB,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAEhF;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAE5C;;;OAGG;IACH,QAAQ,CAAC,aAAa,IAAI,kBAAkB,EAAE;IAE9C;;OAEG;IACH,QAAQ,CAAC,OAAO,IAAI,IAAI;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,SAAS,CAExE"}
|
|
@@ -1,26 +1,106 @@
|
|
|
1
1
|
import { AppObject } from "./AppObject";
|
|
2
2
|
import { AppObjectRepo } from "./AppObjectRepo";
|
|
3
|
+
/**
|
|
4
|
+
* Enumeration of the different types of components in the architecture.
|
|
5
|
+
* Each type serves a specific purpose in the application structure.
|
|
6
|
+
*/
|
|
3
7
|
export declare enum AppObjectComponentType {
|
|
8
|
+
/** Stores and manages application state */
|
|
4
9
|
ENTITY = "Entity",
|
|
10
|
+
/** Transforms application state into view models */
|
|
5
11
|
PM = "Presentation Manager",
|
|
12
|
+
/** Implements business logic and coordinates between layers */
|
|
6
13
|
UC = "Use Case",
|
|
14
|
+
/** Handles user inputs and external events */
|
|
7
15
|
CONTROLLER = "Controller",
|
|
16
|
+
/** Renders UI elements and interacts with the DOM/rendering system */
|
|
8
17
|
VIEW = "View",
|
|
18
|
+
/** Default type for components that don't fit the standard categories */
|
|
9
19
|
UNKNOWN = "Unknown"
|
|
10
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Base class for all components in the AppObject architecture.
|
|
23
|
+
*
|
|
24
|
+
* Components attach to AppObjects and provide specific functionality based on their type.
|
|
25
|
+
* The architecture follows a clean separation of concerns, with each component type
|
|
26
|
+
* having a well-defined responsibility in the application.
|
|
27
|
+
*
|
|
28
|
+
* Components can communicate with each other through various mechanisms:
|
|
29
|
+
* - Direct access via parent AppObject
|
|
30
|
+
* - Repository-level singleton access
|
|
31
|
+
* - Observer patterns for reactive updates
|
|
32
|
+
*/
|
|
11
33
|
export declare class AppObjectComponent {
|
|
34
|
+
/** The type category of this component */
|
|
12
35
|
readonly componentType: AppObjectComponentType;
|
|
36
|
+
/** Unique type identifier for this specific component */
|
|
13
37
|
readonly type: string;
|
|
38
|
+
/** The parent AppObject this component is attached to */
|
|
14
39
|
readonly appObject: AppObject;
|
|
40
|
+
/**
|
|
41
|
+
* Convenience accessor for the repository containing all AppObjects
|
|
42
|
+
* @returns The application's AppObjectRepo
|
|
43
|
+
*/
|
|
15
44
|
get appObjects(): AppObjectRepo;
|
|
45
|
+
/** Cache for components to avoid repeated lookups */
|
|
16
46
|
private cachedComponents;
|
|
47
|
+
/**
|
|
48
|
+
* Retrieves a singleton component of the specified type from the repository
|
|
49
|
+
* Results are cached for better performance in repeated calls
|
|
50
|
+
*
|
|
51
|
+
* @param type The component type identifier to look up
|
|
52
|
+
* @returns The singleton component cast to type T, or undefined if not found
|
|
53
|
+
*/
|
|
17
54
|
getCachedSingleton<T extends AppObjectComponent>(type: string): T | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Retrieves a component from the same AppObject as this component
|
|
57
|
+
* Results are cached for better performance in repeated calls
|
|
58
|
+
*
|
|
59
|
+
* @param type The component type identifier to look up
|
|
60
|
+
* @returns The component cast to type T, or undefined if not found
|
|
61
|
+
*/
|
|
18
62
|
getCachedLocalComponent<T extends AppObjectComponent>(type: string): T | undefined;
|
|
63
|
+
/**
|
|
64
|
+
* Retrieves a singleton component from the repository with customizable logging
|
|
65
|
+
* Unlike getCachedSingleton, results are not cached
|
|
66
|
+
*
|
|
67
|
+
* @param type The component type identifier to look up
|
|
68
|
+
* @param logType The severity level for logging if component isn't found
|
|
69
|
+
* @returns The singleton component cast to type T, or undefined if not found
|
|
70
|
+
*/
|
|
19
71
|
getSingleton<T extends AppObjectComponent>(type: string, logType?: "LOG" | "WARN" | "ERROR"): T | undefined;
|
|
72
|
+
/**
|
|
73
|
+
* Cleans up resources used by this component
|
|
74
|
+
* Removes itself from the parent AppObject if it's still attached
|
|
75
|
+
*/
|
|
20
76
|
dispose(): void;
|
|
77
|
+
/**
|
|
78
|
+
* Logs an informational message to the application's logging system
|
|
79
|
+
* Messages are prefixed with the AppObject ID and component type for easier debugging
|
|
80
|
+
*
|
|
81
|
+
* @param message The message to log
|
|
82
|
+
*/
|
|
21
83
|
log(message: string): void;
|
|
84
|
+
/**
|
|
85
|
+
* Logs a warning message to the application's logging system
|
|
86
|
+
* Messages are prefixed with the AppObject ID and component type for easier debugging
|
|
87
|
+
*
|
|
88
|
+
* @param message The warning message to log
|
|
89
|
+
*/
|
|
22
90
|
warn(message: string): void;
|
|
91
|
+
/**
|
|
92
|
+
* Logs an error message to the application's logging system
|
|
93
|
+
* Messages are prefixed with the AppObject ID and component type for easier debugging
|
|
94
|
+
*
|
|
95
|
+
* @param message The error message to log
|
|
96
|
+
*/
|
|
23
97
|
error(message: string): void;
|
|
98
|
+
/**
|
|
99
|
+
* Creates a new component and attaches it to the specified AppObject
|
|
100
|
+
*
|
|
101
|
+
* @param appObject The parent AppObject this component will be attached to
|
|
102
|
+
* @param type The unique type identifier for this component
|
|
103
|
+
*/
|
|
24
104
|
constructor(appObject: AppObject, type: string);
|
|
25
105
|
}
|
|
26
106
|
//# sourceMappingURL=AppObjectComponent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppObjectComponent.d.ts","sourceRoot":"","sources":["../../../src/AppObject/AppObjectComponent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,oBAAY,sBAAsB;IAChC,MAAM,WAAW;
|
|
1
|
+
{"version":3,"file":"AppObjectComponent.d.ts","sourceRoot":"","sources":["../../../src/AppObject/AppObjectComponent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;GAGG;AACH,oBAAY,sBAAsB;IAChC,2CAA2C;IAC3C,MAAM,WAAW;IAEjB,oDAAoD;IACpD,EAAE,yBAAyB;IAE3B,+DAA+D;IAC/D,EAAE,aAAa;IAEf,8CAA8C;IAC9C,UAAU,eAAe;IAEzB,sEAAsE;IACtE,IAAI,SAAS;IAEb,yEAAyE;IACzE,OAAO,YAAY;CACpB;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,kBAAkB;IAC7B,0CAA0C;IAC1C,QAAQ,CAAC,aAAa,EAAE,sBAAsB,CAAkC;IAEhF,yDAAyD;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,yDAAyD;IACzD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAE9B;;;OAGG;IACH,IAAI,UAAU,IAAI,aAAa,CAE9B;IAED,qDAAqD;IACrD,OAAO,CAAC,gBAAgB,CAAyC;IAEjE;;;;;;OAMG;IACH,kBAAkB,CAAC,CAAC,SAAS,kBAAkB,EAC7C,IAAI,EAAE,MAAM,GACX,CAAC,GAAG,SAAS;IAahB;;;;;;OAMG;IACH,uBAAuB,CAAC,CAAC,SAAS,kBAAkB,EAClD,IAAI,EAAE,MAAM,GACX,CAAC,GAAG,SAAS;IAchB;;;;;;;OAOG;IACH,YAAY,CAAC,CAAC,SAAS,kBAAkB,EACvC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,KAAK,GAAG,MAAM,GAAG,OAAgB,GACzC,CAAC,GAAG,SAAS;IAqBhB;;;OAGG;IACH,OAAO;IAMP;;;;;OAKG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM;IAInB;;;;;OAKG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM;IAIpB;;;;;OAKG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM;IAIrB;;;;;OAKG;gBACS,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM;CAK/C"}
|
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
import { AppObjectComponent, AppObjectComponentType } from "./AppObjectComponent";
|
|
2
|
+
/**
|
|
3
|
+
* AppObjectController serves as a base controller class within the application framework.
|
|
4
|
+
*
|
|
5
|
+
* Controllers are components that handle logic-related operations for an AppObject,
|
|
6
|
+
* such as user input processing, state management, or business logic implementation.
|
|
7
|
+
* Extend this class to create specialized controllers for specific application features.
|
|
8
|
+
*
|
|
9
|
+
* @extends AppObjectComponent
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* class PlayerController extends AppObjectController {
|
|
13
|
+
* handleUserInput(input: UserInput) {
|
|
14
|
+
* // Process user input to control player object
|
|
15
|
+
* }
|
|
16
|
+
* }
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
2
19
|
export declare class AppObjectController extends AppObjectComponent {
|
|
20
|
+
/**
|
|
21
|
+
* The component type identifier used to categorize this component as a controller
|
|
22
|
+
* This property helps the component system identify and manage controller components.
|
|
23
|
+
* @readonly
|
|
24
|
+
*/
|
|
3
25
|
readonly componentType = AppObjectComponentType.CONTROLLER;
|
|
4
26
|
}
|
|
5
27
|
//# sourceMappingURL=AppObjectController.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppObjectController.d.ts","sourceRoot":"","sources":["../../../src/AppObject/AppObjectController.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAE9B,qBAAa,mBAAoB,SAAQ,kBAAkB;IACzD,QAAQ,CAAC,aAAa,qCAAqC;CAC5D"}
|
|
1
|
+
{"version":3,"file":"AppObjectController.d.ts","sourceRoot":"","sources":["../../../src/AppObject/AppObjectController.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAE9B;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,mBAAoB,SAAQ,kBAAkB;IACzD;;;;OAIG;IACH,QAAQ,CAAC,aAAa,qCAAqC;CAC5D"}
|
|
@@ -1,16 +1,71 @@
|
|
|
1
1
|
import { AppObject } from "./AppObject";
|
|
2
2
|
import { AppObjectComponent, AppObjectComponentType } from "./AppObjectComponent";
|
|
3
|
+
/**
|
|
4
|
+
* Observer function type for entity state changes or disposal
|
|
5
|
+
* No parameters are passed to the observer functions
|
|
6
|
+
*/
|
|
3
7
|
export type AppObjectEntityObserver = () => void;
|
|
8
|
+
/**
|
|
9
|
+
* Entity component that manages application state
|
|
10
|
+
*
|
|
11
|
+
* AppObjectEntity is responsible for storing and managing state data within the application.
|
|
12
|
+
* It uses the observer pattern to notify interested parties of changes to its state.
|
|
13
|
+
*
|
|
14
|
+
* In a typical application flow:
|
|
15
|
+
* 1. Controllers modify entity state in response to user actions
|
|
16
|
+
* 2. Entities notify observers (typically PMs) of state changes
|
|
17
|
+
* 3. PMs transform entity state into view models
|
|
18
|
+
* 4. Views render based on the view models
|
|
19
|
+
*/
|
|
4
20
|
export declare class AppObjectEntity extends AppObjectComponent {
|
|
21
|
+
/** Identifies this as an Entity component */
|
|
5
22
|
readonly componentType = AppObjectComponentType.ENTITY;
|
|
23
|
+
/** List of observers to notify when this entity is disposed */
|
|
6
24
|
private onDisposeObserverList;
|
|
25
|
+
/**
|
|
26
|
+
* Adds an observer to be notified when this entity is disposed
|
|
27
|
+
* @param observer Function to call on disposal
|
|
28
|
+
*/
|
|
7
29
|
addOnDisposeObserver: (observer: AppObjectEntityObserver) => void;
|
|
30
|
+
/**
|
|
31
|
+
* Removes a previously added dispose observer
|
|
32
|
+
* @param observer The observer function to remove
|
|
33
|
+
*/
|
|
8
34
|
removeOnDisposeObserver: (observer: AppObjectEntityObserver) => void;
|
|
35
|
+
/** List of observers to notify when this entity's state changes */
|
|
9
36
|
private onChangeObserverList;
|
|
37
|
+
/**
|
|
38
|
+
* Adds an observer to be notified when this entity's state changes
|
|
39
|
+
* @param observer Function to call on state change
|
|
40
|
+
*/
|
|
10
41
|
addChangeObserver: (observer: AppObjectEntityObserver) => void;
|
|
42
|
+
/**
|
|
43
|
+
* Removes a previously added change observer
|
|
44
|
+
* @param observer The observer function to remove
|
|
45
|
+
*/
|
|
11
46
|
removeChangeObserver: (observer: AppObjectEntityObserver) => void;
|
|
47
|
+
/**
|
|
48
|
+
* Notifies all change observers that this entity's state has changed
|
|
49
|
+
* This should be called by derived classes when their state changes
|
|
50
|
+
*/
|
|
12
51
|
notifyOnChange: () => void;
|
|
52
|
+
/**
|
|
53
|
+
* Cleans up resources and notifies dispose observers
|
|
54
|
+
*
|
|
55
|
+
* This method:
|
|
56
|
+
* 1. Removes the change observer from the parent AppObject
|
|
57
|
+
* 2. Notifies all dispose observers
|
|
58
|
+
* 3. Clears all observer lists
|
|
59
|
+
* 4. Calls the parent class dispose method
|
|
60
|
+
*/
|
|
13
61
|
dispose(): void;
|
|
62
|
+
/**
|
|
63
|
+
* Creates a new entity component and attaches it to the specified AppObject
|
|
64
|
+
* Automatically adds the AppObject's notify method as a change observer
|
|
65
|
+
*
|
|
66
|
+
* @param appObject The parent AppObject this component will be attached to
|
|
67
|
+
* @param type The unique type identifier for this component
|
|
68
|
+
*/
|
|
14
69
|
constructor(appObject: AppObject, type: string);
|
|
15
70
|
}
|
|
16
71
|
//# sourceMappingURL=AppObjectEntity.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppObjectEntity.d.ts","sourceRoot":"","sources":["../../../src/AppObject/AppObjectEntity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAElF,MAAM,MAAM,uBAAuB,GAAG,MAAM,IAAI,CAAC;AAEjD,qBAAa,eAAgB,SAAQ,kBAAkB;IACrD,QAAQ,CAAC,aAAa,iCAAiC;IAEvD,OAAO,CAAC,qBAAqB,CAA4B;
|
|
1
|
+
{"version":3,"file":"AppObjectEntity.d.ts","sourceRoot":"","sources":["../../../src/AppObject/AppObjectEntity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAElF;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,MAAM,IAAI,CAAC;AAEjD;;;;;;;;;;;GAWG;AACH,qBAAa,eAAgB,SAAQ,kBAAkB;IACrD,6CAA6C;IAC7C,QAAQ,CAAC,aAAa,iCAAiC;IAEvD,+DAA+D;IAC/D,OAAO,CAAC,qBAAqB,CAA4B;IAEzD;;;OAGG;IACH,oBAAoB,GAAI,UAAU,uBAAuB,UAEvD;IAEF;;;OAGG;IACH,uBAAuB,GAAI,UAAU,uBAAuB,KAAG,IAAI,CAEjE;IAEF,mEAAmE;IACnE,OAAO,CAAC,oBAAoB,CAA4B;IAExD;;;OAGG;IACH,iBAAiB,GAAI,UAAU,uBAAuB,KAAG,IAAI,CAE3D;IAEF;;;OAGG;IACH,oBAAoB,GAAI,UAAU,uBAAuB,KAAG,IAAI,CAE9D;IAEF;;;OAGG;IACH,cAAc,aAEZ;IAEF;;;;;;;;OAQG;IACH,OAAO;IAUP;;;;;;OAMG;gBACS,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM;CAM/C"}
|