├── .babelrc ├── .eslintrc ├── .gitignore ├── LICENSE ├── README.md ├── lazer.png ├── package.json ├── src ├── Lazer.js ├── Version.js ├── cache │ ├── BaseCache.js │ ├── Cache.js │ ├── CacheEntry.js │ ├── ImageCache.js │ └── types │ │ ├── CacheFile.js │ │ └── ImageFile.js ├── canvas │ ├── BackgroundColor.js │ ├── Canvas.js │ ├── DrawImage.js │ ├── DrawImageFromMatrix.js │ ├── GetContext.js │ ├── ImageRendering.js │ ├── ResetTransform.js │ ├── Resize.js │ ├── SetTransform.js │ ├── SetTransformFromMatrix.js │ ├── Smoothing.js │ ├── TouchAction.js │ ├── UserSelect.js │ ├── effects │ │ ├── Brightness.js │ │ ├── Grayscale.js │ │ ├── Invert.js │ │ ├── Luminance.js │ │ ├── Move.js │ │ ├── MoveHorizontal.js │ │ ├── MoveVertical.js │ │ ├── ReplaceRGB.js │ │ ├── ReplaceRGBA.js │ │ └── Threshold.js │ ├── filters │ │ ├── Blur.js │ │ ├── Convolve.js │ │ ├── Distort.js │ │ ├── EdgeDetect.js │ │ ├── EdgeDetectDark.js │ │ ├── Emboss.js │ │ ├── EmbossSubtle.js │ │ ├── FlipHorizontal.js │ │ ├── FlipVertical.js │ │ ├── Laplace.js │ │ ├── MeanRemoval.js │ │ └── Sharpen.js │ ├── graphics │ │ ├── Arc.js │ │ ├── BeginPath.js │ │ ├── Circle.js │ │ ├── Clear.js │ │ ├── ClosePath.js │ │ ├── Fill.js │ │ ├── FillGradient.js │ │ ├── FillPattern.js │ │ ├── Gradient.js │ │ ├── LineCap.js │ │ ├── LineDash.js │ │ ├── LineJoin.js │ │ ├── LineStyle.js │ │ ├── LineWidth.js │ │ ├── LinearGradient.js │ │ ├── MiterLimit.js │ │ ├── Pattern.js │ │ ├── Plot.js │ │ ├── RadialGradient.js │ │ ├── Rectangle.js │ │ ├── Restore.js │ │ ├── Save.js │ │ ├── Shadow.js │ │ ├── Stroke.js │ │ ├── StrokeGradient.js │ │ └── StrokePattern.js │ ├── imagedata │ │ ├── BilinearSample.js │ │ ├── CopyImageData.js │ │ ├── CreateImageData.js │ │ ├── GetBounds.js │ │ ├── GetFirstPixel.js │ │ ├── GetImageData.js │ │ ├── GetIndex.js │ │ ├── GetIndexFast.js │ │ ├── GetPixel.js │ │ ├── GetPixels3x3.js │ │ ├── GetX.js │ │ ├── GetXY.js │ │ ├── GetY.js │ │ ├── Process.js │ │ ├── PutImageData.js │ │ ├── ScanBottomToTop.js │ │ ├── ScanLeftToRight.js │ │ ├── ScanRightToLeft.js │ │ ├── ScanTopToBottom.js │ │ └── SetPixel.js │ ├── pixels │ │ ├── GetPixel.js │ │ ├── PixelData.js │ │ ├── Process.js │ │ ├── SetPixel.js │ │ └── SetPixels.js │ └── shapes │ │ ├── Circle.js │ │ ├── Rectangle.js │ │ ├── Shape.js │ │ ├── ShapeFill.js │ │ ├── ShapeGradient.js │ │ ├── ShapeStroke.js │ │ └── Star.js ├── components │ ├── GameObject.js │ ├── Position.js │ ├── Transform.js │ └── Transform2D.js ├── config │ ├── Config.js │ └── settings │ │ ├── Dimensions.js │ │ ├── DisableAudio.js │ │ ├── DisableWebAudio.js │ │ ├── DisableWebGL.js │ │ ├── FrameRate.js │ │ ├── GameTitle.js │ │ ├── Parent.js │ │ ├── PixelArt.js │ │ ├── State.js │ │ └── Transparent.js ├── create │ ├── Grid.js │ ├── RenderToCanvas.js │ ├── palettes │ │ ├── Arne16.js │ │ ├── C64.js │ │ ├── CGA.js │ │ ├── JMP.js │ │ └── MSX.js │ └── sprite-generator │ │ └── Mask.js ├── device │ ├── Browser.js │ ├── Device.js │ ├── Endian.js │ ├── Features.js │ ├── Input.js │ ├── OS.js │ └── features │ │ └── WebGL.js ├── dom │ ├── AddEventListener.js │ ├── AddToDOM.js │ ├── Boot.js │ ├── RemoveEventListener.js │ ├── RemoveFromDOM.js │ └── RequestAnimationFrame.js ├── fx │ ├── plasma │ │ └── Plasma.js │ ├── sinusdots │ │ └── SinusDots.js │ └── starfield │ │ └── 2d │ │ ├── Starfield2D.js │ │ ├── Starfield2DDot.js │ │ └── Starfield2DImage.js ├── game │ └── nano │ │ ├── Game.js │ │ └── Sprite.js ├── geom │ ├── circle │ │ ├── Area.js │ │ ├── Circle.js │ │ ├── Circumference.js │ │ ├── CircumferencePoint.js │ │ ├── Clone.js │ │ ├── ContainsXY.js │ │ ├── Copy.js │ │ ├── Equals.js │ │ ├── GetBounds.js │ │ ├── Random.js │ │ └── Translate.js │ ├── earclipping │ │ ├── Ear.js │ │ ├── IsCCW.js │ │ ├── IsEarConvex.js │ │ ├── PolygonInsideEar.js │ │ ├── Triangulate.js │ │ ├── VertexInsideEar.js │ │ └── toCCW.js │ ├── intersect │ │ ├── CircleToCircle.js │ │ ├── CircleToRectangle.js │ │ ├── LineSegmentToLineSegment.js │ │ ├── LineToLine.js │ │ └── RectangleToRectangle.js │ ├── line │ │ ├── Angle.js │ │ ├── BresenhamLine.js │ │ ├── CenterOn.js │ │ ├── Clone.js │ │ ├── Copy.js │ │ ├── GetMidPoint.js │ │ ├── Height.js │ │ ├── Length.js │ │ ├── Line.js │ │ ├── NormalAngle.js │ │ ├── NormalX.js │ │ ├── NormalY.js │ │ ├── PerpSlope.js │ │ ├── PointOnLine.js │ │ ├── PointOnSegment.js │ │ ├── Random.js │ │ ├── Reflect.js │ │ ├── SetFromAngle.js │ │ ├── Slope.js │ │ └── Width.js │ └── rectangle │ │ ├── Area.js │ │ ├── Ceil.js │ │ ├── CeilAll.js │ │ ├── CenterOn.js │ │ ├── Clone.js │ │ ├── ContainsRect.js │ │ ├── ContainsXY.js │ │ ├── Copy.js │ │ ├── FitInside.js │ │ ├── FitOutside.js │ │ ├── Floor.js │ │ ├── FloorAll.js │ │ ├── GetAspectRatio.js │ │ ├── GetCenter.js │ │ ├── GetSize.js │ │ ├── Inflate.js │ │ ├── MergePoints.js │ │ ├── MergeRect.js │ │ ├── MergeXY.js │ │ ├── Overlaps.js │ │ ├── Perimeter.js │ │ ├── Random.js │ │ ├── Rectangle.js │ │ ├── Scale.js │ │ ├── Translate.js │ │ └── Union.js ├── graphics │ └── color │ │ ├── BaseColor.js │ │ ├── BlendModes.js │ │ ├── CSStoRGB.js │ │ ├── ColorToRGB.js │ │ ├── ComponentToHex.js │ │ ├── GetColor.js │ │ ├── GetColor32.js │ │ ├── HSLtoRGB.js │ │ ├── HSVColorWheel.js │ │ ├── HSVtoRGB.js │ │ ├── HueToColor.js │ │ ├── LinearInterpolation.js │ │ ├── RGBtoHSV.js │ │ ├── RGBtoString.js │ │ └── RandomRGB.js ├── input │ └── keyboard │ │ ├── Key.js │ │ ├── combo │ │ ├── AdvanceKeyCombo.js │ │ ├── KeyCombo.js │ │ └── ProcessKeyCombo.js │ │ ├── events │ │ ├── AddKeyDown.js │ │ ├── AddKeyPress.js │ │ ├── AddKeyUp.js │ │ ├── ProcessKeyDown.js │ │ ├── ProcessKeyUp.js │ │ ├── RemoveKeyDown.js │ │ ├── RemoveKeyPress.js │ │ └── RemoveKeyUp.js │ │ ├── keys │ │ ├── A.js │ │ ├── ALT.js │ │ ├── B.js │ │ ├── BACKSPACE.js │ │ ├── BACKWARD_SLASH.js │ │ ├── C.js │ │ ├── CAPS_LOCK.js │ │ ├── CLEAR.js │ │ ├── CLOSED_BRACKET.js │ │ ├── COLON.js │ │ ├── COMMA.js │ │ ├── CONTROL.js │ │ ├── D.js │ │ ├── DELETE.js │ │ ├── DOWN.js │ │ ├── E.js │ │ ├── EIGHT.js │ │ ├── END.js │ │ ├── ENTER.js │ │ ├── EQUALS.js │ │ ├── ESC.js │ │ ├── F.js │ │ ├── F1.js │ │ ├── F10.js │ │ ├── F11.js │ │ ├── F12.js │ │ ├── F13.js │ │ ├── F14.js │ │ ├── F15.js │ │ ├── F2.js │ │ ├── F3.js │ │ ├── F4.js │ │ ├── F5.js │ │ ├── F6.js │ │ ├── F7.js │ │ ├── F8.js │ │ ├── F9.js │ │ ├── FIVE.js │ │ ├── FOUR.js │ │ ├── G.js │ │ ├── H.js │ │ ├── HELP.js │ │ ├── HOME.js │ │ ├── I.js │ │ ├── INSERT.js │ │ ├── J.js │ │ ├── K.js │ │ ├── L.js │ │ ├── LEFT.js │ │ ├── M.js │ │ ├── MINUS.js │ │ ├── N.js │ │ ├── NINE.js │ │ ├── NUMPAD_0.js │ │ ├── NUMPAD_1.js │ │ ├── NUMPAD_2.js │ │ ├── NUMPAD_3.js │ │ ├── NUMPAD_4.js │ │ ├── NUMPAD_5.js │ │ ├── NUMPAD_6.js │ │ ├── NUMPAD_7.js │ │ ├── NUMPAD_8.js │ │ ├── NUMPAD_9.js │ │ ├── NUMPAD_ADD.js │ │ ├── NUMPAD_DECIMAL.js │ │ ├── NUMPAD_DIVIDE.js │ │ ├── NUMPAD_ENTER.js │ │ ├── NUMPAD_MULTIPLY.js │ │ ├── NUMPAD_SUBTRACT.js │ │ ├── NUM_LOCK.js │ │ ├── O.js │ │ ├── ONE.js │ │ ├── OPEN_BRACKET.js │ │ ├── P.js │ │ ├── PAGE_DOWN.js │ │ ├── PAGE_UP.js │ │ ├── PERIOD.js │ │ ├── PLUS.js │ │ ├── Q.js │ │ ├── QUESTION_MARK.js │ │ ├── QUOTES.js │ │ ├── R.js │ │ ├── RIGHT.js │ │ ├── S.js │ │ ├── SEVEN.js │ │ ├── SHIFT.js │ │ ├── SIX.js │ │ ├── SPACEBAR.js │ │ ├── T.js │ │ ├── TAB.js │ │ ├── THREE.js │ │ ├── TILDE.js │ │ ├── TWO.js │ │ ├── U.js │ │ ├── UNDERSCORE.js │ │ ├── UP.js │ │ ├── V.js │ │ ├── W.js │ │ ├── X.js │ │ ├── Y.js │ │ ├── Z.js │ │ └── ZERO.js │ │ └── state │ │ ├── DownDuration.js │ │ ├── JustDown.js │ │ ├── JustUp.js │ │ ├── ResetKey.js │ │ └── UpDuration.js ├── loader │ ├── BaseLoader.js │ ├── File.js │ ├── Loader.js │ ├── MergeXHRSettings.js │ ├── MultiFile.js │ ├── XHRLoader.js │ ├── XHRSettings.js │ └── types │ │ ├── AtlasJSONFile.js │ │ ├── AtlasXMLFile.js │ │ ├── BinaryFile.js │ │ ├── GLSLFile.js │ │ ├── ImageFile.js │ │ ├── JSONFile.js │ │ ├── TextFile.js │ │ └── XMLFile.js ├── math │ ├── Angle.js │ ├── Average.js │ ├── Bernstein.js │ ├── Between.js │ ├── CatmullRom.js │ ├── CeilTo.js │ ├── Clamp.js │ ├── Constants.js │ ├── DegToRad.js │ ├── Difference.js │ ├── Factorial.js │ ├── FloatBetween.js │ ├── FloorTo.js │ ├── Fuzzy.js │ ├── GetPow2.js │ ├── IsPow2.js │ ├── Linear.js │ ├── Math.js │ ├── MaxAdd.js │ ├── MinSub.js │ ├── Percent.js │ ├── RadToDeg.js │ ├── RandomDataGenerator.js │ ├── Rotate.js │ ├── RotateAround.js │ ├── RoundAwayFromZero.js │ ├── RoundTo.js │ ├── SinCosTableGenerator.js │ ├── SmoothStep.js │ ├── SmootherStep.js │ ├── SnapTo.js │ ├── Wrap.js │ ├── distance │ │ ├── DistanceBetween.js │ │ ├── DistancePower.js │ │ └── DistanceSquared.js │ ├── easing │ │ ├── Back.js │ │ ├── Bounce.js │ │ ├── Circular.js │ │ ├── Cubic.js │ │ ├── Elastic.js │ │ ├── Expo.js │ │ ├── Linear.js │ │ ├── Quadratic.js │ │ ├── Quartic.js │ │ ├── Quintic.js │ │ └── Sine.js │ ├── interpolation │ │ ├── Bezier.js │ │ ├── CatmullRom.js │ │ └── Linear.js │ ├── matrix │ │ ├── mat23 │ │ │ ├── Add.js │ │ │ ├── Build.js │ │ │ ├── BuildIdentity.js │ │ │ ├── Clone.js │ │ │ ├── Copy.js │ │ │ ├── Determinant.js │ │ │ ├── Invert.js │ │ │ ├── IsIdentity.js │ │ │ ├── Multiply.js │ │ │ ├── Rotate.js │ │ │ ├── ScalarAdd.js │ │ │ ├── ScalarMultiply.js │ │ │ ├── ScalarSubtract.js │ │ │ ├── Scale.js │ │ │ ├── Set.js │ │ │ ├── SetIdentity.js │ │ │ ├── Subtract.js │ │ │ ├── Transform.js │ │ │ └── Translate.js │ │ ├── mat33 │ │ │ ├── At.js │ │ │ ├── Build.js │ │ │ ├── BuildIdentity.js │ │ │ ├── Copy.js │ │ │ ├── Determinant.js │ │ │ ├── Equal.js │ │ │ ├── FromAxisRotation.js │ │ │ ├── FromQuaternion.js │ │ │ ├── Inverse.js │ │ │ ├── InverseTranspose.js │ │ │ ├── Mat33.js │ │ │ ├── Multiply.js │ │ │ ├── Right.js │ │ │ ├── ScalarAdd.js │ │ │ ├── ScalarMultiply.js │ │ │ ├── ScalarSub.js │ │ │ ├── SetAt.js │ │ │ ├── SetRight.js │ │ │ ├── SetUp.js │ │ │ ├── Transform.js │ │ │ ├── TransformByVector.js │ │ │ ├── Transpose.js │ │ │ └── Up.js │ │ ├── mat34 │ │ │ ├── BuildIdentity.js │ │ │ ├── Pos.js │ │ │ └── Scale.js │ │ ├── mat43 │ │ │ ├── At.js │ │ │ ├── Build.js │ │ │ ├── BuildIdentity.js │ │ │ ├── BuildTranslation.js │ │ │ ├── Copy.js │ │ │ ├── Determinant.js │ │ │ ├── FromAxisRotation.js │ │ │ ├── FromM33V3.js │ │ │ ├── FromQuaternionPos.js │ │ │ ├── FromRT.js │ │ │ ├── FromRTS.js │ │ │ ├── Inverse.js │ │ │ ├── InverseOrthonormal.js │ │ │ ├── InverseTransposeProjection.js │ │ │ ├── Multiply.js │ │ │ ├── MultiplyTranspose.js │ │ │ ├── NegOffset.js │ │ │ ├── Offset.js │ │ │ ├── Orthonormalize.js │ │ │ ├── Pos.js │ │ │ ├── Right.js │ │ │ ├── ScalarAdd.js │ │ │ ├── ScalarMultiply.js │ │ │ ├── ScalarSub.js │ │ │ ├── Scale.js │ │ │ ├── SetAt.js │ │ │ ├── SetAxisRotation.js │ │ │ ├── SetPos.js │ │ │ ├── SetRight.js │ │ │ ├── SetUp.js │ │ │ ├── TransformPoint.js │ │ │ ├── TransformVector.js │ │ │ ├── Translate.js │ │ │ ├── Transpose.js │ │ │ └── Up.js │ │ └── mat44 │ │ │ ├── At.js │ │ │ ├── Build.js │ │ │ ├── BuildIdentity.js │ │ │ ├── Copy.js │ │ │ ├── Inverse.js │ │ │ ├── Multiply.js │ │ │ ├── Pos.js │ │ │ ├── Right.js │ │ │ ├── ScalarAdd.js │ │ │ ├── ScalarMultiply.js │ │ │ ├── ScalarSub.js │ │ │ ├── Scale.js │ │ │ ├── SetAt.js │ │ │ ├── SetPos.js │ │ │ ├── SetRight.js │ │ │ ├── SetUp.js │ │ │ ├── TransformVector.js │ │ │ ├── Translate.js │ │ │ ├── Transpose.js │ │ │ └── Up.js │ ├── quaternion │ │ ├── Build.js │ │ ├── Conjugate.js │ │ ├── Copy.js │ │ ├── Dot.js │ │ ├── Equal.js │ │ ├── FromAxisRotation.js │ │ ├── FromM43.js │ │ ├── IsSimilar.js │ │ ├── Length.js │ │ ├── Lerp.js │ │ ├── Multiply.js │ │ ├── MultiplyTranslate.js │ │ ├── Normalize.js │ │ ├── PosBuild.js │ │ ├── PosMultiply.js │ │ ├── PosTransformPoint.js │ │ ├── PosTransformVector.js │ │ ├── Slerp.js │ │ ├── ToAxisRotation.js │ │ └── TransformVector.js │ ├── transform │ │ └── 2d │ │ │ ├── SetTransformToCSS.js │ │ │ ├── SetTransformToContext.js │ │ │ ├── basic │ │ │ ├── BaseTransform.js │ │ │ └── Transform.js │ │ │ ├── components │ │ │ ├── BaseTransformComponent.js │ │ │ ├── Pivot.js │ │ │ ├── Position.js │ │ │ ├── Rotation.js │ │ │ ├── RotationAnchor.js │ │ │ └── Scale.js │ │ │ ├── minimal │ │ │ ├── BaseTransform.js │ │ │ └── Transform.js │ │ │ └── standard │ │ │ ├── BaseTransform.js │ │ │ └── Transform.js │ └── vector │ │ ├── common │ │ ├── Rotate.js │ │ └── RotateAround.js │ │ ├── vec2 │ │ ├── Abs.js │ │ ├── Add.js │ │ ├── Add3.js │ │ ├── Add4.js │ │ ├── Angle.js │ │ ├── Build.js │ │ ├── BuildOne.js │ │ ├── BuildXAxis.js │ │ ├── BuildYAxis.js │ │ ├── BuildZero.js │ │ ├── Ceil.js │ │ ├── Copy.js │ │ ├── Distance.js │ │ ├── DistanceSq.js │ │ ├── Dot.js │ │ ├── Equal.js │ │ ├── Floor.js │ │ ├── Length.js │ │ ├── LengthSq.js │ │ ├── Lerp.js │ │ ├── Mask.js │ │ ├── Max.js │ │ ├── Min.js │ │ ├── Multiply.js │ │ ├── MultiplyAdd.js │ │ ├── Neg.js │ │ ├── Normalize.js │ │ ├── ObservableVec2.js │ │ ├── PerpDot.js │ │ ├── Project.js │ │ ├── Reciprocal.js │ │ ├── ScalarAdd.js │ │ ├── ScalarBuild.js │ │ ├── ScalarMask.js │ │ ├── ScalarMax.js │ │ ├── ScalarMin.js │ │ ├── ScalarMultiply.js │ │ ├── ScalarMultiplyAdd.js │ │ ├── ScalarSub.js │ │ ├── Select.js │ │ ├── Set.js │ │ ├── Sub.js │ │ └── Vec2.js │ │ ├── vec3 │ │ ├── Abs.js │ │ ├── Add.js │ │ ├── Add3.js │ │ ├── Add4.js │ │ ├── Angle.js │ │ ├── Build.js │ │ ├── BuildOne.js │ │ ├── BuildXAxis.js │ │ ├── BuildYAxis.js │ │ ├── BuildZAxis.js │ │ ├── BuildZero.js │ │ ├── Copy.js │ │ ├── Cross.js │ │ ├── Distance.js │ │ ├── DistanceSq.js │ │ ├── Dot.js │ │ ├── Equal.js │ │ ├── Length.js │ │ ├── LengthSq.js │ │ ├── Lerp.js │ │ ├── Mask.js │ │ ├── Max.js │ │ ├── Min.js │ │ ├── Multiply.js │ │ ├── MultiplyAdd.js │ │ ├── Neg.js │ │ ├── Normalize.js │ │ ├── Project.js │ │ ├── Reciprocal.js │ │ ├── ScalarAdd.js │ │ ├── ScalarBuild.js │ │ ├── ScalarMask.js │ │ ├── ScalarMax.js │ │ ├── ScalarMin.js │ │ ├── ScalarMultiply.js │ │ ├── ScalarMultiplyAdd.js │ │ ├── ScalarSub.js │ │ ├── Select.js │ │ ├── Set.js │ │ ├── Sub.js │ │ └── Vec3.js │ │ └── vec4 │ │ ├── Abs.js │ │ ├── Add.js │ │ ├── Add3.js │ │ ├── Add4.js │ │ ├── Build.js │ │ ├── BuildOne.js │ │ ├── BuildZero.js │ │ ├── Copy.js │ │ ├── Dot.js │ │ ├── Equal.js │ │ ├── Length.js │ │ ├── LengthSq.js │ │ ├── Many.js │ │ ├── Mask.js │ │ ├── Max.js │ │ ├── Min.js │ │ ├── Multiply.js │ │ ├── MultiplyAdd.js │ │ ├── Neg.js │ │ ├── Reciprocal.js │ │ ├── ScalarAdd.js │ │ ├── ScalarBuild.js │ │ ├── ScalarEqual.js │ │ ├── ScalarMask.js │ │ ├── ScalarMax.js │ │ ├── ScalarMin.js │ │ ├── ScalarMultiply.js │ │ ├── ScalarMultiplyAdd.js │ │ ├── ScalarSub.js │ │ ├── Select.js │ │ ├── Set.js │ │ └── Sub.js ├── physics │ └── arcade │ │ ├── Body.js │ │ ├── Constants.js │ │ ├── collider │ │ ├── AABBCollider.js │ │ ├── PolygonCollider.js │ │ └── RectangleCollider.js │ │ ├── collision │ │ ├── AABBtoAABB.js │ │ └── PolygonToPolygon.js │ │ └── system │ │ ├── CollisionCallback.js │ │ ├── CollisionSystem.js │ │ └── PhysicsSystem.js ├── renderers │ ├── batch_point │ │ └── WebGLBatchedPoint.js │ ├── batch_texture │ │ └── WebGLRenderer.js │ ├── minimal │ │ ├── CanvasRenderer.js │ │ ├── MinimalRenderer.js │ │ └── WebGLRenderer.js │ ├── nano │ │ └── WebGL.js │ └── point │ │ ├── CanvasRenderer.js │ │ ├── PointRenderer.js │ │ └── WebGLRenderer.js ├── sat │ ├── GetNormalizedPolygonAxes.js │ ├── GetPolygonAxes.js │ ├── GetProjectionRange.js │ ├── ProjectionsSeparated.js │ └── collision │ │ ├── CircleToCircleCorrection.js │ │ ├── CircleToCircleTest.js │ │ ├── CorrectionData.js │ │ ├── PolygonToCircleCorrection.js │ │ ├── PolygonToCircleTest.js │ │ ├── PolygonToPolygonCorrection.js │ │ ├── PolygonToPolygonTest.js │ │ ├── RectPolygonToPolygonTest.js │ │ ├── RectPolygonToRectPolygonCorrection.js │ │ ├── RectPolygonToRectPolygonTest.js │ │ ├── RectangleToRectangleCorrection.js │ │ ├── RectangleToRectangleTest.js │ │ └── point │ │ ├── CircleToPointTest.js │ │ ├── PolygonToPointTest.js │ │ ├── RectPolygonToPointTest.js │ │ └── RectangleToPointTest.js ├── sound │ └── sfxr │ │ ├── Rand.js │ │ ├── RandFloat.js │ │ ├── Shapes.js │ │ ├── data │ │ ├── GenerateData.js │ │ ├── UpdateData.js │ │ └── generators │ │ │ ├── Envelope.js │ │ │ ├── Filter.js │ │ │ ├── Noise.js │ │ │ ├── Phaser.js │ │ │ ├── Repeat.js │ │ │ └── Vibrato.js │ │ ├── effects │ │ ├── Effect.js │ │ ├── Envelope.js │ │ ├── HighPassFilter.js │ │ ├── LowPassFilter.js │ │ ├── Phaser.js │ │ ├── Repeat.js │ │ ├── SquareDuty.js │ │ ├── Tonal.js │ │ ├── Tone.js │ │ └── Vibrato.js │ │ ├── synths │ │ ├── BlipSelect.js │ │ ├── Explosion.js │ │ ├── HitHurt.js │ │ ├── LaserShoot.js │ │ ├── PickUpCoin.js │ │ ├── PowerUp.js │ │ ├── PushSound.js │ │ └── Random.js │ │ └── webaudio │ │ ├── Generate.js │ │ └── SoundEffect.js ├── state │ ├── State.js │ └── StateManager.js ├── system │ ├── EventDispatcher.js │ ├── MainLoop.js │ ├── NOOP.js │ ├── ParseXML.js │ ├── Signal.js │ ├── SignalBinding.js │ └── SignalGroup.js ├── texture │ ├── Frame.js │ ├── FrameSet.js │ ├── SetTrim.js │ ├── Texture2D.js │ ├── TextureDiv.js │ ├── TextureWebGL.js │ ├── UpdateUVs.js │ ├── blendmodes │ │ ├── canvas │ │ │ ├── Add.js │ │ │ ├── Color.js │ │ │ ├── ColorBurn.js │ │ │ ├── ColorDodge.js │ │ │ ├── Darken.js │ │ │ ├── Difference.js │ │ │ ├── Exclusion.js │ │ │ ├── HardLight.js │ │ │ ├── Hue.js │ │ │ ├── Lighten.js │ │ │ ├── Luminosity.js │ │ │ ├── Multiply.js │ │ │ ├── Normal.js │ │ │ ├── Overlay.js │ │ │ ├── Saturation.js │ │ │ ├── Screen.js │ │ │ └── SoftLight.js │ │ └── webgl │ │ │ ├── Add.js │ │ │ ├── Color.js │ │ │ ├── ColorBurn.js │ │ │ ├── ColorDodge.js │ │ │ ├── Darken.js │ │ │ ├── Difference.js │ │ │ ├── Exclusion.js │ │ │ ├── HardLight.js │ │ │ ├── Hue.js │ │ │ ├── Lighten.js │ │ │ ├── Luminosity.js │ │ │ ├── Multiply.js │ │ │ ├── Normal.js │ │ │ ├── Overlay.js │ │ │ ├── Saturation.js │ │ │ ├── Screen.js │ │ │ └── SoftLight.js │ ├── default │ │ ├── Blank32x32.js │ │ └── MissingImage32x32.js │ └── parsers │ │ ├── Image.js │ │ ├── SpriteSheet.js │ │ ├── TexturePackerJSONArray.js │ │ └── TexturePackerJSONHash.js ├── time │ ├── Clock.js │ └── MasterClock.js ├── utils │ ├── Banner.js │ ├── Compose.js │ ├── array │ │ ├── FindClosestInSorted.js │ │ ├── GetRandomElement.js │ │ ├── NumberArray.js │ │ ├── NumberArrayStep.js │ │ ├── RemoveRandomElement.js │ │ ├── RotateLeft.js │ │ ├── RotateRight.js │ │ ├── Shuffle.js │ │ ├── SpliceOne.js │ │ └── matrix │ │ │ ├── CheckMatrix.js │ │ │ ├── MatrixToString.js │ │ │ ├── ReverseColumns.js │ │ │ ├── ReverseRows.js │ │ │ ├── Rotate180.js │ │ │ ├── RotateLeft.js │ │ │ ├── RotateMatrix.js │ │ │ ├── RotateRight.js │ │ │ └── TransposeMatrix.js │ └── string │ │ └── Pad.js └── webgl │ ├── Attribute.js │ ├── CompileShader.js │ ├── ContextHandler.js │ ├── ContextOptions.js │ ├── GLTexture.js │ ├── GetContext.js │ ├── Program.js │ ├── RenderList.js │ ├── Shader.js │ ├── VertexBuffer.js │ └── vbo │ ├── AddQuadAlphaColor.js │ ├── AddVert.js │ ├── VertexArrayBuffer.js │ └── VertexIndexBuffer.js ├── tests └── geom │ └── rectangle │ ├── rectangle1.js │ ├── rectangle2-area.js │ └── rectangle3-ceil.js └── worklog.md /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015"] 3 | } 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # System and IDE files 2 | Thumbs.db 3 | .DS_Store 4 | .idea 5 | *.suo 6 | *.sublime-project 7 | *.sublime-workspace 8 | 9 | # Vendors 10 | node_modules/ 11 | 12 | # Build 13 | dist/ 14 | /npm-debug.log 15 | out/ 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![lazer](http://phaser.io/content/news/2016/01/phaser-in-2015-and-beyond5.png) 2 | 3 | This repo is deprecated and will soon be removed. 4 | -------------------------------------------------------------------------------- /lazer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/photonstorm/lazer/d611bc8be69f42ef699b6aa6ad08edc73226e626/lazer.png -------------------------------------------------------------------------------- /src/Lazer.js: -------------------------------------------------------------------------------- 1 | var Lazer = { 2 | 3 | /** 4 | * AUTO renderer - picks between WebGL or Canvas based on device. 5 | * @constant 6 | * @type {integer} 7 | */ 8 | AUTO: 0, 9 | 10 | /** 11 | * Canvas Renderer. 12 | * @constant 13 | * @type {integer} 14 | */ 15 | CANVAS: 1, 16 | 17 | /** 18 | * WebGL Renderer. 19 | * @constant 20 | * @type {integer} 21 | */ 22 | WEBGL: 2, 23 | 24 | /** 25 | * Headless renderer (not visual output) 26 | * @constant 27 | * @type {integer} 28 | */ 29 | HEADLESS: 3 30 | 31 | }; 32 | -------------------------------------------------------------------------------- /src/Version.js: -------------------------------------------------------------------------------- 1 | export const Version = { 2 | major: 1, 3 | minor: 2, 4 | point: 3, 5 | build: 1, 6 | date: '12th January 2016' 7 | }; -------------------------------------------------------------------------------- /src/cache/CacheEntry.js: -------------------------------------------------------------------------------- 1 | export default function CacheEntry (key, url, data) { 2 | 3 | return { 4 | 5 | key: key, 6 | url: url, 7 | data: data 8 | 9 | }; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/cache/ImageCache.js: -------------------------------------------------------------------------------- 1 | import BaseCache from 'cache/BaseCache.js'; 2 | import ImageFile from 'cache/types/ImageFile.js'; 3 | 4 | export default class ImageCache extends BaseCache { 5 | 6 | constructor () { 7 | 8 | super(); 9 | 10 | } 11 | 12 | add (key, url, data) { 13 | 14 | const entry = new ImageFile(key, url, data); 15 | 16 | // Add BaseTexture here 17 | 18 | super.add(key, entry); 19 | 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/cache/types/CacheFile.js: -------------------------------------------------------------------------------- 1 | export default class CacheFile { 2 | 3 | constructor (key, url, data) { 4 | 5 | this.key = key; 6 | this.url = url; 7 | this.data = data; 8 | 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/cache/types/ImageFile.js: -------------------------------------------------------------------------------- 1 | import CacheFile from 'cache/types/CacheFile.js'; 2 | 3 | export default class ImageFile extends CacheFile { 4 | 5 | constructor (key, url, data) { 6 | 7 | super(key, url, data); 8 | 9 | this.baseTexture = ''; 10 | 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/canvas/BackgroundColor.js: -------------------------------------------------------------------------------- 1 | // Sets the backgroundColor property of the canvas CSS style element to the given color string. 2 | 3 | export default function BackgroundColor (canvas, color = 'rgb(0, 0, 0)') { 4 | 5 | canvas.style.backgroundColor = color; 6 | 7 | return canvas; 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/canvas/Canvas.js: -------------------------------------------------------------------------------- 1 | // Need to add in a CanvasPool that sets a parent, but that will be one 2 | // layer up from this 3 | 4 | export default function (width = 256, height = 256, id = '') { 5 | 6 | const canvas = document.createElement('canvas'); 7 | 8 | if (id !== '') 9 | { 10 | canvas.id = id; 11 | } 12 | 13 | canvas.width = width; 14 | canvas.height = height; 15 | canvas.style.display = 'block'; 16 | 17 | return canvas; 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/canvas/GetContext.js: -------------------------------------------------------------------------------- 1 | export default function GetContext (canvas, options) { 2 | 3 | return ( 4 | canvas.getContext('2d', options) || 5 | null 6 | ); 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/canvas/ResetTransform.js: -------------------------------------------------------------------------------- 1 | 2 | export default function ResetTransform (context) { 3 | 4 | context.setTransform(1, 0, 0, 1, 0, 0); 5 | 6 | return context; 7 | 8 | } -------------------------------------------------------------------------------- /src/canvas/Resize.js: -------------------------------------------------------------------------------- 1 | 2 | export default function Resize (canvas, width, height = width) { 3 | 4 | width = Math.abs(width); 5 | height = Math.abs(height); 6 | 7 | if (canvas.width !== width) 8 | { 9 | canvas.width = width; 10 | } 11 | 12 | if (canvas.height !== height) 13 | { 14 | canvas.height = height; 15 | } 16 | 17 | return canvas; 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/canvas/SetTransformFromMatrix.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Sets the transform of the given canvas to the matrix values provided. 3 | * 4 | * @param {CanvasRenderingContext2D} context - The context to set the transform on. 5 | * @param {Mat33} mat33 - 6 | * @return {CanvasRenderingContext2D} Returns the source context. 7 | */ 8 | export default function SetTransformFromMatrix (context, mat33) { 9 | 10 | context.setTransform(mat33.a, mat33.b, mat33.c, mat33.d, mat33.tx, mat33.ty); 11 | 12 | return context; 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/canvas/TouchAction.js: -------------------------------------------------------------------------------- 1 | export default function (canvas, value = 'none') { 2 | 3 | canvas.style.msTouchAction = value; 4 | canvas.style['ms-touch-action'] = value; 5 | canvas.style['touch-action'] = value; 6 | 7 | return canvas; 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/canvas/UserSelect.js: -------------------------------------------------------------------------------- 1 | export default function (canvas, value = 'none') { 2 | 3 | canvas.style['-webkit-touch-callout'] = value; 4 | canvas.style['-webkit-user-select'] = value; 5 | canvas.style['-khtml-user-select'] = value; 6 | canvas.style['-moz-user-select'] = value; 7 | canvas.style['-ms-user-select'] = value; 8 | canvas.style['user-select'] = value; 9 | canvas.style['-webkit-tap-highlight-color'] = 'rgba(0, 0, 0, 0)'; 10 | 11 | return canvas; 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/canvas/effects/Brightness.js: -------------------------------------------------------------------------------- 1 | import ProcessPixels from 'canvas/pixels/Process.js'; 2 | 3 | export default function Brightness (amount, context, x = 0, y = 0, width = 0, height = 0) { 4 | 5 | let effect = function (x, y, r, g, b, a) { 6 | 7 | r += amount; 8 | g += amount; 9 | b += amount; 10 | 11 | return [ r, g, b, a ]; 12 | 13 | }; 14 | 15 | ProcessPixels(context, effect, x, y, width, height); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/canvas/effects/Grayscale.js: -------------------------------------------------------------------------------- 1 | import ProcessPixels from 'canvas/pixels/Process.js'; 2 | 3 | export default function Grayscale (context, x = 0, y = 0, width = 0, height = 0) { 4 | 5 | let effect = function (x, y, r, g, b, a) { 6 | 7 | // The human eye is bad at seeing red and blue, so we de-emphasize them. 8 | const avg = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); 9 | 10 | r = avg; 11 | g = avg; 12 | b = avg; 13 | 14 | return [ r, g, b, a ]; 15 | 16 | }; 17 | 18 | ProcessPixels(context, effect, x, y, width, height); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/canvas/effects/Invert.js: -------------------------------------------------------------------------------- 1 | import ProcessPixels from 'canvas/pixels/Process.js'; 2 | 3 | export default function Invert (context, x = 0, y = 0, width = 0, height = 0) { 4 | 5 | let effect = function (x, y, r, g, b, a) { 6 | 7 | r = 255 - r; 8 | g = 255 - g; 9 | b = 255 - b; 10 | 11 | return [ r, g, b, a ]; 12 | 13 | }; 14 | 15 | ProcessPixels(context, effect, x, y, width, height); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/canvas/effects/Luminance.js: -------------------------------------------------------------------------------- 1 | import ProcessPixels from 'canvas/pixels/Process.js'; 2 | 3 | export default function Luminance (context, x = 0, y = 0, width = 0, height = 0) { 4 | 5 | let effect = function (x, y, r, g, b, a) { 6 | 7 | // The human eye is bad at seeing red and blue, so we de-emphasize them. 8 | const avg = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); 9 | 10 | r = avg; 11 | g = avg; 12 | b = avg; 13 | 14 | return [ r, g, b, a ]; 15 | 16 | }; 17 | 18 | ProcessPixels(context, effect, x, y, width, height); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/canvas/effects/MoveHorizontal.js: -------------------------------------------------------------------------------- 1 | import Move from 'canvas/effects/Move.js'; 2 | 3 | export default function MoveHorizontal (canvas, distance, wrap = true) { 4 | 5 | return Move(canvas, distance, 0, wrap, false); 6 | 7 | } -------------------------------------------------------------------------------- /src/canvas/effects/MoveVertical.js: -------------------------------------------------------------------------------- 1 | import Move from 'canvas/effects/Move.js'; 2 | 3 | export default function MoveVertical (canvas, distance, wrap = true) { 4 | 5 | return Move(canvas, 0, distance, false, wrap); 6 | 7 | } -------------------------------------------------------------------------------- /src/canvas/effects/Threshold.js: -------------------------------------------------------------------------------- 1 | import ProcessPixels from 'canvas/pixels/Process.js'; 2 | 3 | export default function Threshold (amount, context, x = 0, y = 0, width = 0, height = 0) { 4 | 5 | let effect = function (x, y, r, g, b, a) { 6 | 7 | let avg = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); 8 | 9 | avg = (avg >= amount) ? 255 : 0; 10 | 11 | r = avg; 12 | g = avg; 13 | b = avg; 14 | 15 | return [ r, g, b, a ]; 16 | 17 | }; 18 | 19 | ProcessPixels(context, effect, x, y, width, height); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/canvas/filters/Blur.js: -------------------------------------------------------------------------------- 1 | import Convolve from 'canvas/filters/Convolve.js'; 2 | 3 | export default function Blur (imageData) { 4 | 5 | return Convolve(imageData, [ 1, 2, 1, 2, 4, 2, 1, 2, 1 ]); 6 | 7 | } -------------------------------------------------------------------------------- /src/canvas/filters/EdgeDetect.js: -------------------------------------------------------------------------------- 1 | import Convolve from 'canvas/filters/Convolve.js'; 2 | 3 | export default function EdgeDetect (imageData) { 4 | 5 | return Convolve(imageData, [ 1, 1, 1, 1, -7, 1, 1, 1, 1 ]); 6 | 7 | } -------------------------------------------------------------------------------- /src/canvas/filters/EdgeDetectDark.js: -------------------------------------------------------------------------------- 1 | import Convolve from 'canvas/filters/Convolve.js'; 2 | 3 | export default function EdgeDetectDark (imageData) { 4 | 5 | return Convolve(imageData, [ -5, 0, 0, 0, 0, 0, 0, 0, 5 ]); 6 | 7 | } -------------------------------------------------------------------------------- /src/canvas/filters/Emboss.js: -------------------------------------------------------------------------------- 1 | import Convolve from 'canvas/filters/Convolve.js'; 2 | 3 | export default function Emboss (imageData, offset = 127) { 4 | 5 | return Convolve(imageData, [ 2, 0, 0, 0, -1, 0, 0, 0, -1 ], false, offset); 6 | 7 | } -------------------------------------------------------------------------------- /src/canvas/filters/EmbossSubtle.js: -------------------------------------------------------------------------------- 1 | import Convolve from 'canvas/filters/Convolve.js'; 2 | 3 | export default function EmbossSubtle (imageData) { 4 | 5 | return Convolve(imageData, [ 1, 1, -1, 1, 3, -1, 1, -1, -1 ]); 6 | 7 | } -------------------------------------------------------------------------------- /src/canvas/filters/Laplace.js: -------------------------------------------------------------------------------- 1 | import Convolve from 'canvas/filters/Convolve.js'; 2 | 3 | export default function Laplace (imageData) { 4 | 5 | return Convolve(imageData, [ -1, -1, -1, -1, 8, -1, -1, -1, -1 ]); 6 | 7 | } -------------------------------------------------------------------------------- /src/canvas/filters/MeanRemoval.js: -------------------------------------------------------------------------------- 1 | import Convolve from 'canvas/filters/Convolve.js'; 2 | 3 | export default function MeanRemoval (imageData) { 4 | 5 | return Convolve(imageData, [-1, -1, -1, -1, 9, -1, -1, -1, -1]); 6 | 7 | } -------------------------------------------------------------------------------- /src/canvas/filters/Sharpen.js: -------------------------------------------------------------------------------- 1 | import Convolve from 'canvas/filters/Convolve.js'; 2 | 3 | export default function Sharpen (imageData) { 4 | 5 | return Convolve(imageData, [0, -2, 0, -2, 11, -2, 0, -2, 0]); 6 | 7 | } -------------------------------------------------------------------------------- /src/canvas/graphics/BeginPath.js: -------------------------------------------------------------------------------- 1 | export default function BeginPath (context) { 2 | 3 | context.beginPath(); 4 | 5 | return context; 6 | 7 | } -------------------------------------------------------------------------------- /src/canvas/graphics/Circle.js: -------------------------------------------------------------------------------- 1 | // Warning: Doesn't begin or close the path 2 | 3 | // rotation is in radians 4 | export default function Circle (context, x, y, radius = 128, rotation = 0, fromCenter = false) { 5 | 6 | context.save(); 7 | 8 | context.translate(x, y); 9 | context.rotate(rotation); 10 | 11 | if (fromCenter) 12 | { 13 | context.moveTo(0, 0); 14 | } 15 | 16 | context.arc(0, 0, radius, 0, 2 * Math.PI); 17 | 18 | context.restore(); 19 | 20 | return context; 21 | 22 | } -------------------------------------------------------------------------------- /src/canvas/graphics/ClosePath.js: -------------------------------------------------------------------------------- 1 | export default function ClosePath (context) { 2 | 3 | context.closePath(); 4 | 5 | return context; 6 | 7 | } -------------------------------------------------------------------------------- /src/canvas/graphics/Fill.js: -------------------------------------------------------------------------------- 1 | 2 | export default function Fill (context, r, g, b, a = 1) { 3 | 4 | context.fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; 5 | 6 | context.fill(); 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/canvas/graphics/FillGradient.js: -------------------------------------------------------------------------------- 1 | 2 | export default function FillGradient (context, gradient) { 3 | 4 | context.fillStyle = gradient; 5 | 6 | context.fill(); 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/canvas/graphics/FillPattern.js: -------------------------------------------------------------------------------- 1 | 2 | export default function FillPattern (context, pattern) { 3 | 4 | context.fillStyle = pattern; 5 | 6 | context.fill(); 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/canvas/graphics/Gradient.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | export default class Gradient { 4 | 5 | constructor (x1, y1) { 6 | 7 | } 8 | 9 | } -------------------------------------------------------------------------------- /src/canvas/graphics/LineCap.js: -------------------------------------------------------------------------------- 1 | 2 | // butt, round or square 3 | export default function LineCap (context, cap = 'butt') { 4 | 5 | context.lineCap = cap; 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/canvas/graphics/LineDash.js: -------------------------------------------------------------------------------- 1 | 2 | // An Array. A list of numbers that specifies distances to alternately draw a line and a gap (in coordinate space units). 3 | // If the number of elements in the array is odd, the elements of the array get copied and concatenated. 4 | // For example, [5, 15, 25] will become [5, 15, 25, 5, 15, 25]. 5 | 6 | export default function LineDash (context, segments = [5, 5], offset = 0) { 7 | 8 | context.setLineDash(segments); 9 | context.lineDashOffset = offset; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/canvas/graphics/LineJoin.js: -------------------------------------------------------------------------------- 1 | 2 | // bevel, round or miter 3 | export default function LineJoin (context, join = 'bevel') { 4 | 5 | context.lineJoin = join; 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/canvas/graphics/LineStyle.js: -------------------------------------------------------------------------------- 1 | // Encapsulates setting all the line properties in a single function 2 | 3 | // butt, round or square 4 | // bevel, round or miter 5 | export default function LineStyle (context, width = 1, cap = 'butt', join = 'bevel', segments = null, offset = 0, miter = 10) { 6 | 7 | context.lineWidth = width; 8 | context.lineCap = cap; 9 | context.lineJoin = join; 10 | context.miterLimit = miter; 11 | 12 | if (segments) 13 | { 14 | context.setLineDash(segments); 15 | context.lineDashOffset = offset; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/canvas/graphics/LineWidth.js: -------------------------------------------------------------------------------- 1 | 2 | export default function LineWidth (context, width = 1) { 3 | 4 | context.lineWidth = width; 5 | 6 | } 7 | -------------------------------------------------------------------------------- /src/canvas/graphics/MiterLimit.js: -------------------------------------------------------------------------------- 1 | 2 | // A number specifying the miter limit ratio in space units. Zero, negative, Infinity and NaN values are ignored. 3 | 4 | export default function MiterLimit (context, limit = 10) { 5 | 6 | context.miterLimit = limit; 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/canvas/graphics/Pattern.js: -------------------------------------------------------------------------------- 1 | 2 | export default function Pattern (source, context, wrapX = true, wrapY = true) { 3 | 4 | let type = 'no-repeat'; 5 | 6 | if (wrapX && wrapY) 7 | { 8 | type = 'repeat'; 9 | } 10 | else if (wrapX) 11 | { 12 | type = 'repeat-x'; 13 | } 14 | else if (wrapY) 15 | { 16 | type = 'repeat-y'; 17 | } 18 | 19 | return context.createPattern(source, type); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/canvas/graphics/Plot.js: -------------------------------------------------------------------------------- 1 | 2 | export default function Plot (context, x, y, size = 1, color = '#ffffff') { 3 | 4 | const oldStyle = context.fillStyle; 5 | 6 | context.fillStyle = color; 7 | 8 | context.fillRect(x, y, size, size); 9 | 10 | context.fillStyle = oldStyle; 11 | 12 | return context; 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/canvas/graphics/Rectangle.js: -------------------------------------------------------------------------------- 1 | // Warning: Doesn't save context state OR begin or close the path 2 | 3 | // rotation is in radians 4 | export default function Rectangle (context, x, y, width = 128, height = 128, rotation = 0, fromCenter = false) { 5 | 6 | context.translate(x, y); 7 | context.rotate(rotation); 8 | 9 | if (fromCenter) 10 | { 11 | context.rect(-width * 0.5, -height * 0.5, width, height); 12 | } 13 | else 14 | { 15 | context.rect(0, 0, width, height); 16 | } 17 | 18 | } -------------------------------------------------------------------------------- /src/canvas/graphics/Restore.js: -------------------------------------------------------------------------------- 1 | export default function Restore (context) { 2 | 3 | context.restore(); 4 | 5 | return context; 6 | 7 | } -------------------------------------------------------------------------------- /src/canvas/graphics/Save.js: -------------------------------------------------------------------------------- 1 | export default function Save (context) { 2 | 3 | context.save(); 4 | 5 | return context; 6 | 7 | } -------------------------------------------------------------------------------- /src/canvas/graphics/Stroke.js: -------------------------------------------------------------------------------- 1 | 2 | export default function Stroke (context, r, g, b, a = 1) { 3 | 4 | context.strokeStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; 5 | 6 | context.stroke(); 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/canvas/graphics/StrokeGradient.js: -------------------------------------------------------------------------------- 1 | 2 | export default function StrokeGradient (context, gradient) { 3 | 4 | context.strokeStyle = gradient; 5 | 6 | context.stroke(); 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/canvas/graphics/StrokePattern.js: -------------------------------------------------------------------------------- 1 | 2 | export default function StrokePattern (context, pattern) { 3 | 4 | context.strokeStyle = pattern; 5 | 6 | context.stroke(); 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/canvas/imagedata/CopyImageData.js: -------------------------------------------------------------------------------- 1 | // Creates an ImageData compatible object (although it won't pass a 'typeof' check) 2 | 3 | export default function CopyImageData (imageData) { 4 | 5 | return { 6 | width: imageData.width, 7 | height: imageData.height, 8 | data: new Float32Array(imageData.data.slice()) 9 | }; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/canvas/imagedata/CreateImageData.js: -------------------------------------------------------------------------------- 1 | // Creates an ImageData compatible object (although it won't pass a 'typeof' check) 2 | 3 | export default function CreateImageData (width, height) { 4 | 5 | return { width: width, height: height, data: new Float32Array(width * height * 4) }; 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/canvas/imagedata/GetIndex.js: -------------------------------------------------------------------------------- 1 | 2 | export default function GetIndex (imageData, x, y) { 3 | 4 | x = Math.abs(Math.round(x)); 5 | y = Math.abs(Math.round(y)); 6 | 7 | if (x < imageData.width && y < imageData.height) 8 | { 9 | return (x + y * imageData.width) * 4; 10 | } 11 | else 12 | { 13 | return -1; 14 | } 15 | 16 | } -------------------------------------------------------------------------------- /src/canvas/imagedata/GetIndexFast.js: -------------------------------------------------------------------------------- 1 | // Safe for when you are absolutely sure that the x and y 2 | // values are absolute integers and within the bounds 3 | // of the imageData 4 | 5 | export default function GetIndexFast (imageData, x, y) { 6 | 7 | return (x + y * imageData.width) * 4; 8 | 9 | } -------------------------------------------------------------------------------- /src/canvas/imagedata/GetX.js: -------------------------------------------------------------------------------- 1 | // Based on the given index return the X component 2 | 3 | export default function GetX (imageData, index) { 4 | 5 | return Math.floor(index / 4) % imageData.width; 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/canvas/imagedata/GetXY.js: -------------------------------------------------------------------------------- 1 | import GetX from 'canvas/imagedata/GetX.js'; 2 | import GetY from 'canvas/imagedata/GetY.js'; 3 | 4 | // Based on the given index return the X and Y components 5 | 6 | export default function GetXY (imageData, index) { 7 | 8 | return [ GetX(imageData, index), GetY(imageData, index) ]; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/canvas/imagedata/GetY.js: -------------------------------------------------------------------------------- 1 | // Based on the given index return the Y component 2 | 3 | export default function GetY (imageData, index) { 4 | 5 | return Math.floor(Math.floor(index / imageData.width) / 4); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/canvas/imagedata/PutImageData.js: -------------------------------------------------------------------------------- 1 | 2 | export default function PutImageData (context, imageData, x = 0, y = 0, dirtyX, dirtyY, dirtyWidth, dirtyHeight) { 3 | 4 | if (dirtyX !== undefined) 5 | { 6 | context.putImageData(imageData, x, y, dirtyX, dirtyY, dirtyWidth, dirtyHeight); 7 | } 8 | else 9 | { 10 | context.putImageData(imageData, x, y); 11 | } 12 | 13 | return context; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/canvas/imagedata/ScanBottomToTop.js: -------------------------------------------------------------------------------- 1 | import GetXY from 'canvas/imagedata/GetXY.js'; 2 | 3 | // Scans the given imageData from bottom to top (proceeding right to left) 4 | // until it hits a pixel with an alpha value > tolerance 5 | 6 | export default function ScanBottomToTop (imageData, tolerance = 0) { 7 | 8 | for (let i = imageData.data.length; i > 0; i -= 4) 9 | { 10 | if (imageData.data[i] > tolerance) 11 | { 12 | return GetXY(imageData, i - 3); 13 | } 14 | } 15 | 16 | return false; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/canvas/imagedata/ScanTopToBottom.js: -------------------------------------------------------------------------------- 1 | import GetXY from 'canvas/imagedata/GetXY.js'; 2 | 3 | // Scans the given imageData from top to bottom (proceeding left to right) 4 | // until it hits a pixel with an alpha value > tolerance 5 | 6 | export default function ScanTopToBottom (imageData, tolerance = 0) { 7 | 8 | for (let i = 3; i < imageData.data.length; i += 4) 9 | { 10 | if (imageData.data[i] > tolerance) 11 | { 12 | return GetXY(imageData, i - 3); 13 | } 14 | } 15 | 16 | return false; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/components/GameObject.js: -------------------------------------------------------------------------------- 1 | 2 | export default function GameObjectFactory (base, transform) { 3 | 4 | // Add various base GameObject properties 5 | 6 | return { 7 | 8 | name: '', 9 | 10 | 11 | 12 | transform: transform 13 | 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/config/settings/Dimensions.js: -------------------------------------------------------------------------------- 1 | export default function Dimensions (width = 800, height = 600) { 2 | 3 | return { 4 | name: 'dimensions', 5 | properties: { 6 | width, 7 | height 8 | } 9 | }; 10 | 11 | } -------------------------------------------------------------------------------- /src/config/settings/DisableAudio.js: -------------------------------------------------------------------------------- 1 | export default function DisableAudio (value = false) { 2 | 3 | return { 4 | name: 'disableAudio', 5 | value 6 | }; 7 | 8 | } -------------------------------------------------------------------------------- /src/config/settings/DisableWebAudio.js: -------------------------------------------------------------------------------- 1 | export default function DisableWebAudio (value = false) { 2 | 3 | return { 4 | name: 'disableWebAudio', 5 | value 6 | }; 7 | 8 | } -------------------------------------------------------------------------------- /src/config/settings/DisableWebGL.js: -------------------------------------------------------------------------------- 1 | export default function DisableWebGL (value = false) { 2 | 3 | return { 4 | name: 'disableWebGL', 5 | value 6 | }; 7 | 8 | } -------------------------------------------------------------------------------- /src/config/settings/FrameRate.js: -------------------------------------------------------------------------------- 1 | export default function FrameRate (value = 60) { 2 | 3 | return { 4 | name: 'frameRate', 5 | value 6 | }; 7 | 8 | } -------------------------------------------------------------------------------- /src/config/settings/GameTitle.js: -------------------------------------------------------------------------------- 1 | export default function GameTitle (name, url) { 2 | 3 | return { 4 | name: 'gameTitle', 5 | properties: { 6 | name, 7 | url 8 | } 9 | }; 10 | 11 | } -------------------------------------------------------------------------------- /src/config/settings/Parent.js: -------------------------------------------------------------------------------- 1 | export default function Parent (value = '') { 2 | 3 | return { 4 | name: 'parent', 5 | value 6 | }; 7 | 8 | } -------------------------------------------------------------------------------- /src/config/settings/PixelArt.js: -------------------------------------------------------------------------------- 1 | export default function PixelArt (value = false) { 2 | 3 | return { 4 | name: 'pixelArt', 5 | value 6 | }; 7 | 8 | } -------------------------------------------------------------------------------- /src/config/settings/State.js: -------------------------------------------------------------------------------- 1 | import BaseState from 'state/State.js'; 2 | 3 | export default function State (settings) { 4 | 5 | return { 6 | name: 'state', 7 | value: BaseState(settings) 8 | }; 9 | 10 | } -------------------------------------------------------------------------------- /src/config/settings/Transparent.js: -------------------------------------------------------------------------------- 1 | export default function Transparent (value = false) { 2 | 3 | return { 4 | name: 'transparent', 5 | value 6 | }; 7 | 8 | } -------------------------------------------------------------------------------- /src/create/palettes/Arne16.js: -------------------------------------------------------------------------------- 1 | /** 2 | * A 16 color palette by [Arne](http://androidarts.com/palette/16pal.htm) 3 | * @constant 4 | * @type {Array} 5 | */ 6 | 7 | export const PALETTE_ARNE = [ 8 | '#000', 9 | '#9D9D9D', 10 | '#FFF', 11 | '#BE2633', 12 | '#E06F8B', 13 | '#493C2B', 14 | '#A46422', 15 | '#EB8931', 16 | '#F7E26B', 17 | '#2F484E', 18 | '#44891A', 19 | '#A3CE27', 20 | '#1B2632', 21 | '#005784', 22 | '#31A2F2', 23 | '#B2DCEF' 24 | ]; 25 | -------------------------------------------------------------------------------- /src/create/palettes/C64.js: -------------------------------------------------------------------------------- 1 | /** 2 | * A 16 color C64 inspired palette. 3 | * @constant 4 | * @type {Array} 5 | */ 6 | 7 | export const PALETTE_C64 = [ 8 | '#000', 9 | '#fff', 10 | '#8b4131', 11 | '#7bbdc5', 12 | '#8b41ac', 13 | '#6aac41', 14 | '#3931a4', 15 | '#d5de73', 16 | '#945a20', 17 | '#5a4100', 18 | '#bd736a', 19 | '#525252', 20 | '#838383', 21 | '#acee8b', 22 | '#7b73de', 23 | '#acacac' 24 | ]; 25 | -------------------------------------------------------------------------------- /src/create/palettes/CGA.js: -------------------------------------------------------------------------------- 1 | /** 2 | * A 16 color CGA inspired palette by [Arne](http://androidarts.com/palette/16pal.htm) 3 | * @constant 4 | * @type {Array} 5 | */ 6 | 7 | export const PALETTE_CGA = [ 8 | '#000', 9 | '#2234d1', 10 | '#0c7e45', 11 | '#44aacc', 12 | '#8a3622', 13 | '#5c2e78', 14 | '#aa5c3d', 15 | '#b5b5b5', 16 | '#5e606e', 17 | '#4c81fb', 18 | '#6cd947', 19 | '#7be2f9', 20 | '#eb8a60', 21 | '#e23d69', 22 | '#ffd93f', 23 | '#fff' 24 | ]; 25 | -------------------------------------------------------------------------------- /src/create/palettes/JMP.js: -------------------------------------------------------------------------------- 1 | /** 2 | * A 16 color JMP palette by [Arne](http://androidarts.com/palette/16pal.htm) 3 | * @constant 4 | * @type {Array} 5 | */ 6 | 7 | export const PALETTE_JMP = [ 8 | '#000', 9 | '#191028', 10 | '#46af45', 11 | '#a1d685', 12 | '#453e78', 13 | '#7664fe', 14 | '#833129', 15 | '#9ec2e8', 16 | '#dc534b', 17 | '#e18d79', 18 | '#d6b97b', 19 | '#e9d8a1', 20 | '#216c4b', 21 | '#d365c8', 22 | '#afaab9', 23 | '#f5f4eb' 24 | ]; 25 | -------------------------------------------------------------------------------- /src/create/palettes/MSX.js: -------------------------------------------------------------------------------- 1 | /** 2 | * A 16 color palette inspired by Japanese computers like the MSX. 3 | * @constant 4 | * @type {Array} 5 | */ 6 | 7 | export const PALETTE_MSX = [ 8 | '#000', 9 | '#191028', 10 | '#46af45', 11 | '#a1d685', 12 | '#453e78', 13 | '#7664fe', 14 | '#833129', 15 | '#9ec2e8', 16 | '#dc534b', 17 | '#e18d79', 18 | '#d6b97b', 19 | '#e9d8a1', 20 | '#216c4b', 21 | '#d365c8', 22 | '#afaab9', 23 | '#fff' 24 | ]; 25 | -------------------------------------------------------------------------------- /src/device/Device.js: -------------------------------------------------------------------------------- 1 | import OS from 'device/OS.js'; 2 | import Endian from 'device/Endian.js'; 3 | 4 | export default class Device { 5 | 6 | constructor () { 7 | 8 | this.os = new OS(); 9 | this.LITTLE_ENDIAN = Endian(); 10 | 11 | } 12 | 13 | } -------------------------------------------------------------------------------- /src/device/features/WebGL.js: -------------------------------------------------------------------------------- 1 | import WebGLGetContext from 'webgl/GetContext.js'; 2 | 3 | export default function () { 4 | 5 | try { 6 | let canvas = document.createElement('canvas'); 7 | 8 | if (WebGLGetContext(canvas) === null) 9 | { 10 | return false; 11 | } 12 | } 13 | catch (error) 14 | { 15 | return false; 16 | } 17 | 18 | return true; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/dom/AddEventListener.js: -------------------------------------------------------------------------------- 1 | export default function AddEventListener (target, event, listener, useCapture = false) { 2 | 3 | target.addEventListener(event, listener, useCapture); 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/dom/RemoveEventListener.js: -------------------------------------------------------------------------------- 1 | export default function RemoveEventListener (target, event, listener) { 2 | 3 | target.removeEventListener(event, listener); 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/dom/RemoveFromDOM.js: -------------------------------------------------------------------------------- 1 | export default function RemoveFromDOM (element) { 2 | 3 | if (element.parentNode) 4 | { 5 | element.parentNode.removeChild(element); 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/geom/circle/Area.js: -------------------------------------------------------------------------------- 1 | export default function Area (circle) { 2 | 3 | if (circle.radius > 0) 4 | { 5 | return Math.PI * circle.radius * circle.radius; 6 | } 7 | else 8 | { 9 | return 0; 10 | } 11 | 12 | } -------------------------------------------------------------------------------- /src/geom/circle/Circumference.js: -------------------------------------------------------------------------------- 1 | export default function Circumference (circle) { 2 | 3 | return 2 * (Math.PI * circle.radius); 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/geom/circle/CircumferencePoint.js: -------------------------------------------------------------------------------- 1 | export default function CircumferencePoint (circle, angle, out = { x: 0, y: 0 }) { 2 | 3 | out.x = circle.x + circle.radius * Math.cos(angle); 4 | out.y = circle.y + circle.radius * Math.sin(angle); 5 | 6 | return out; 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/geom/circle/Clone.js: -------------------------------------------------------------------------------- 1 | import Circle from 'geom/circle/Circle.js'; 2 | 3 | export default function Clone (source) { 4 | 5 | return Circle(source.x, source.y, source.radius); 6 | 7 | } -------------------------------------------------------------------------------- /src/geom/circle/Copy.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copies the x, y and diameter properties from any given object to this Circle. 3 | * @method Phaser.Circle#copyFrom 4 | * @param {any} source - The object to copy from. 5 | * @return {Circle} This Circle object. 6 | */ 7 | export default function Copy (source, dest) { 8 | 9 | return dest.set(source.x, source.y, source.radius); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/geom/circle/Equals.js: -------------------------------------------------------------------------------- 1 | export default function Equals (a, b) { 2 | 3 | return (a.x === b.x && a.y === b.y && a.radius === b.radius); 4 | 5 | } -------------------------------------------------------------------------------- /src/geom/circle/GetBounds.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Returns the framing rectangle of the circle as a Phaser.Rectangle object. 3 | * 4 | * @method Phaser.Circle#getBounds 5 | * @return {Phaser.Rectangle} The bounds of the Circle. 6 | */ 7 | export default function GetBounds (circle, out = { x: 0, y: 0, width: 0, height: 0 }) { 8 | 9 | out.x = circle.x - circle.radius; 10 | out.y = circle.y - circle.radius; 11 | out.width = circle.diameter; 12 | out.height = circle.diameter; 13 | 14 | return out; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/geom/circle/Translate.js: -------------------------------------------------------------------------------- 1 | export default function Translate (circle, x, y) { 2 | 3 | circle.x += x; 4 | circle.y += y; 5 | 6 | return circle; 7 | 8 | } -------------------------------------------------------------------------------- /src/geom/earclipping/Ear.js: -------------------------------------------------------------------------------- 1 | export default function Ear(v0, v1, v2) { 2 | return [v0, v1, v2]; 3 | } -------------------------------------------------------------------------------- /src/geom/earclipping/IsCCW.js: -------------------------------------------------------------------------------- 1 | export default function IsCCW(polygon) { 2 | let test = 0, 3 | length = polygon.length, 4 | index, 5 | v0, 6 | v1; 7 | 8 | for (index = 0; index < length; ++index) { 9 | v0 = polygon[index]; 10 | v1 = polygon[(index + 1) % length]; 11 | test = test + ((v1[0] - v0[0]) * (v1[1] + v0[1])); 12 | } 13 | return test < 0; 14 | } -------------------------------------------------------------------------------- /src/geom/earclipping/IsEarConvex.js: -------------------------------------------------------------------------------- 1 | // Using Graham Scan to detect if ear is convex 2 | export default function IsEarConvex(v0, v1, v2) { 3 | return (v1[0] - v0[0]) * (v2[1] - v0[1]) - (v1[1] - v0[1]) * (v2[0] - v0[0]) <= 0; 4 | } -------------------------------------------------------------------------------- /src/geom/earclipping/PolygonInsideEar.js: -------------------------------------------------------------------------------- 1 | import VertexInsideEar from 'geom/earclipping/VertexInsideEar.js' 2 | 3 | export default function PolygonInsideEar(vertices, v0, v1, v2) { 4 | let index = 0, 5 | length = vertices.length; 6 | 7 | for (index = 0; index < length; ++index) { 8 | if (VertexInsideEar(vertices[index], v0, v1, v2)) { 9 | return true; 10 | } 11 | } 12 | return false; 13 | } -------------------------------------------------------------------------------- /src/geom/earclipping/toCCW.js: -------------------------------------------------------------------------------- 1 | import IsCCW from 'geom/earclipping/IsCCW.js' 2 | 3 | export default function ToCCW(polygon) { 4 | if (!IsCCW(polygon)) { 5 | 6 | } 7 | return polygon; 8 | } -------------------------------------------------------------------------------- /src/geom/intersect/CircleToCircle.js: -------------------------------------------------------------------------------- 1 | import DistanceBetween from 'math/distance/DistanceBetween.js'; 2 | 3 | export default function CircleToCircle (a, b) { 4 | 5 | return (DistanceBetween(a.x, a.y, b.x, b.y) <= (a.radius + b.radius)); 6 | 7 | } -------------------------------------------------------------------------------- /src/geom/intersect/RectangleToRectangle.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Checks if the given Rectangles intersect. 3 | * @param {Phaser.Rectangle} r - The Rectangle object to test. 4 | * @return {boolean} True if the two objects intersect, otherwise false. 5 | */ 6 | export default function RectangleToRectangle (a, b) { 7 | 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/geom/line/Angle.js: -------------------------------------------------------------------------------- 1 | export default function Angle (line) { 2 | 3 | return Math.atan2(line.y2 - line.y1, line.x2 - line.x1); 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/geom/line/Clone.js: -------------------------------------------------------------------------------- 1 | import Line from 'geom/line/Line.js'; 2 | 3 | export default function Clone (source) { 4 | 5 | return Line(source.x1, source.y1, source.x2, source.y2); 6 | 7 | } -------------------------------------------------------------------------------- /src/geom/line/Copy.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copies the x, y and diameter properties from any given object to this Circle. 3 | * @method Phaser.Circle#copyFrom 4 | * @param {any} source - The object to copy from. 5 | * @return {Circle} This Circle object. 6 | */ 7 | export default function Copy (source, dest) { 8 | 9 | return dest.set(source.x1, source.y1, source.x2, source.y2); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/geom/line/Height.js: -------------------------------------------------------------------------------- 1 | export default function Height (line) { 2 | 3 | return Math.abs(line.y1 - line.y2); 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/geom/line/Length.js: -------------------------------------------------------------------------------- 1 | export default function Length (line) { 2 | 3 | return Math.sqrt( 4 | (line.x2 - line.x1) * (line.x2 - line.x1) + 5 | (line.y2 - line.y1) * (line.y2 - line.y1) 6 | ); 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/geom/line/NormalAngle.js: -------------------------------------------------------------------------------- 1 | import Angle from 'geom/line/Angle.js'; 2 | import Wrap from 'math/Wrap.js'; 3 | 4 | export default function NormalAngle (line) { 5 | 6 | return Wrap(Angle(line) - 1.5707963267948966, -Math.PI, Math.PI); 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/geom/line/NormalX.js: -------------------------------------------------------------------------------- 1 | import Angle from 'geom/line/Angle.js'; 2 | 3 | /** 4 | * @name Phaser.Line#normalX 5 | * @property {number} normalX - Gets the x component of the left-hand normal of this line. 6 | * @readonly 7 | */ 8 | 9 | export default function NormalX (line) { 10 | 11 | return Math.cos(Angle(line) - 1.5707963267948966); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/geom/line/NormalY.js: -------------------------------------------------------------------------------- 1 | import Angle from 'geom/line/Angle.js'; 2 | 3 | /** 4 | * @name Phaser.Line#normalY 5 | * @property {number} normalY - Gets the y component of the left-hand normal of this line. 6 | * @readonly 7 | */ 8 | 9 | export default function NormalY (line) { 10 | 11 | return Math.sin(Angle(line) - 1.5707963267948966); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/geom/line/PerpSlope.js: -------------------------------------------------------------------------------- 1 | export default function PerpSlope (line) { 2 | 3 | return -((line.x2 - line.x1) / (line.y2 - line.y1)); 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/geom/line/PointOnLine.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Tests if the given coordinates fall on this line. See pointOnSegment to test against just the line segment. 3 | * 4 | * @method Phaser.Line#pointOnLine 5 | * @param {number} x - The line to check against this one. 6 | * @param {number} y - The line to check against this one. 7 | * @return {boolean} True if the point is on the line, false if not. 8 | */ 9 | export default function PointOnLine (line, x, y) { 10 | 11 | return ((x - line.x1) * (line.y2 - line.y1) === (line.x2 - line.x1) * (y - line.y1)); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/geom/line/Slope.js: -------------------------------------------------------------------------------- 1 | export default function Slope (line) { 2 | 3 | return (line.y2 - line.y1) / (line.x2 - line.x1); 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/geom/line/Width.js: -------------------------------------------------------------------------------- 1 | export default function Width (line) { 2 | 3 | return Math.abs(line.x1 - line.x2); 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/geom/rectangle/Area.js: -------------------------------------------------------------------------------- 1 | export default function Area (rect) { 2 | 3 | return rect.width * rect.height; 4 | 5 | } -------------------------------------------------------------------------------- /src/geom/rectangle/Ceil.js: -------------------------------------------------------------------------------- 1 | export default function Ceil (rect) { 2 | 3 | rect.x = Math.ceil(rect.x); 4 | rect.y = Math.ceil(rect.y); 5 | 6 | return rect; 7 | 8 | } -------------------------------------------------------------------------------- /src/geom/rectangle/CeilAll.js: -------------------------------------------------------------------------------- 1 | export default function CeilAll (rect) { 2 | 3 | rect.x = Math.ceil(rect.x); 4 | rect.y = Math.ceil(rect.y); 5 | rect.width = Math.ceil(rect.width); 6 | rect.height = Math.ceil(rect.height); 7 | 8 | return rect; 9 | 10 | } -------------------------------------------------------------------------------- /src/geom/rectangle/CenterOn.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Centers this Rectangle so that the center coordinates match the given x and y values. 3 | * 4 | * @method Phaser.Rectangle#centerOn 5 | * @param {number} x - The x coordinate to place the center of the Rectangle at. 6 | * @param {number} y - The y coordinate to place the center of the Rectangle at. 7 | * @return {Phaser.Rectangle} This Rectangle object 8 | */ 9 | export default function CenterOn (rect, x, y) { 10 | 11 | rect.x = x - (rect.width / 2); 12 | rect.y = y - (rect.height / 2); 13 | 14 | return rect; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/geom/rectangle/Clone.js: -------------------------------------------------------------------------------- 1 | import Rectangle from 'geom/rectangle/Rectangle.js'; 2 | 3 | export default function Clone (source) { 4 | 5 | return Rectangle(source.x, source.y, source.width, source.height); 6 | 7 | } -------------------------------------------------------------------------------- /src/geom/rectangle/ContainsXY.js: -------------------------------------------------------------------------------- 1 | export default function ContainsXY (rect, x, y) { 2 | 3 | if (rect.width <= 0 || rect.height <= 0) 4 | { 5 | return false; 6 | } 7 | 8 | return (rect.x <= x && rect.x + rect.width >= x && rect.y <= y && rect.y + rect.height >= y); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/geom/rectangle/Copy.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copies the x, y and diameter properties from any given object to this Circle. 3 | * @method Phaser.Circle#copyFrom 4 | * @param {any} source - The object to copy from. 5 | * @return {Circle} This Circle object. 6 | */ 7 | export default function Copy (source, dest) { 8 | 9 | return dest.set(source.x, source.y, source.width, source.height); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/geom/rectangle/Floor.js: -------------------------------------------------------------------------------- 1 | export default function Floor (rect) { 2 | 3 | rect.x = Math.floor(rect.x); 4 | rect.y = Math.floor(rect.y); 5 | 6 | return rect; 7 | 8 | } -------------------------------------------------------------------------------- /src/geom/rectangle/FloorAll.js: -------------------------------------------------------------------------------- 1 | export default function FloorAll (rect) { 2 | 3 | rect.x = Math.floor(rect.x); 4 | rect.y = Math.floor(rect.y); 5 | rect.width = Math.floor(rect.width); 6 | rect.height = Math.floor(rect.height); 7 | 8 | return rect; 9 | 10 | } -------------------------------------------------------------------------------- /src/geom/rectangle/GetAspectRatio.js: -------------------------------------------------------------------------------- 1 | export default function GetAspectRatio (rect) { 2 | 3 | return (rect.height === 0) ? NaN : rect.width / rect.height; 4 | 5 | } -------------------------------------------------------------------------------- /src/geom/rectangle/GetCenter.js: -------------------------------------------------------------------------------- 1 | // The center of the Rectangle object, expressed as a Point object 2 | 3 | export default function GetCenter (rect, out = { x: 0, y: 0 }) { 4 | 5 | out.x = rect.right / 2; 6 | out.y = rect.bottom / 2; 7 | 8 | return out; 9 | 10 | } -------------------------------------------------------------------------------- /src/geom/rectangle/GetSize.js: -------------------------------------------------------------------------------- 1 | // The size of the Rectangle object, expressed as a Point object 2 | // with the values of the width and height properties. 3 | 4 | export default function GetSize (rect, out = { x: 0, y: 0 }) { 5 | 6 | out.x = rect.width; 7 | out.y = rect.height; 8 | 9 | return out; 10 | 11 | } -------------------------------------------------------------------------------- /src/geom/rectangle/MergeXY.js: -------------------------------------------------------------------------------- 1 | 2 | export default function MergeXY (target, x, y) { 3 | 4 | let minX = Math.min(target.x, x); 5 | let maxX = Math.max(target.right, x); 6 | 7 | target.x = minX; 8 | target.width = maxX - minX; 9 | 10 | let minY = Math.min(target.y, y); 11 | let maxY = Math.max(target.bottom, y); 12 | 13 | target.y = minY; 14 | target.height = maxY - minY; 15 | 16 | return target; 17 | 18 | } -------------------------------------------------------------------------------- /src/geom/rectangle/Overlaps.js: -------------------------------------------------------------------------------- 1 | export default function Overlaps (rectA, rectB) { 2 | 3 | return ( 4 | rectA.x < rectB.right && 5 | rectA.right > rectB.x && 6 | rectA.y < rectB.bottom && 7 | rectA.bottom > rectB.y 8 | ); 9 | 10 | } -------------------------------------------------------------------------------- /src/geom/rectangle/Perimeter.js: -------------------------------------------------------------------------------- 1 | export default function Perimeter (rect) { 2 | 3 | return 2 * (rect.width + rect.height); 4 | 5 | } -------------------------------------------------------------------------------- /src/geom/rectangle/Random.js: -------------------------------------------------------------------------------- 1 | export default function Random (rect, out = { x: 0, y: 0 }) { 2 | 3 | out.x = rect.x + (Math.random() * rect.width); 4 | out.y = rect.y + (Math.random() * rect.height); 5 | 6 | return out; 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/geom/rectangle/Translate.js: -------------------------------------------------------------------------------- 1 | export default function Translate (rect, x, y) { 2 | 3 | rect.x += x; 4 | rect.y += y; 5 | 6 | return rect; 7 | 8 | } -------------------------------------------------------------------------------- /src/geom/rectangle/Union.js: -------------------------------------------------------------------------------- 1 | import Rectangle from 'geom/rectangle/Rectangle.js'; 2 | 3 | export default function Union (rectA, rectB, output = Rectangle()) { 4 | 5 | let x = Math.min(rectA.x, rectB.x); 6 | let y = Math.min(rectA.y, rectB.y); 7 | 8 | return output.set( 9 | x, 10 | y, 11 | Math.max(rectA.right, rectB.right) - x, 12 | Math.max(rectA.bottom, rectB.bottom) - y 13 | ); 14 | 15 | } -------------------------------------------------------------------------------- /src/graphics/color/ColorToRGB.js: -------------------------------------------------------------------------------- 1 | export default function (color) { 2 | 3 | if (color > 16777215) 4 | { 5 | const a = color >>> 24; 6 | } 7 | else 8 | { 9 | const a = 255; 10 | } 11 | 12 | const r = color >> 16 & 0xFF; 13 | const g = color >> 8 & 0xFF; 14 | const b = color & 0xFF; 15 | 16 | return { r, g, b, a }; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/graphics/color/ComponentToHex.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Return a string containing a hex representation of the given color component. 3 | * 4 | * @param {integer} color - The color channel to get the hex value for, must be a value between 0 and 255. 5 | * @return {string} A string of length 2 characters, i.e. 255 = ff, 100 = 64. 6 | */ 7 | export default function (color) { 8 | 9 | const hex = color.toString(16); 10 | 11 | return (hex.length === 1) ? '0' + hex : hex; 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/graphics/color/GetColor.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Given 3 color values this will return an integer representation of it. 3 | * 4 | * @method getColor 5 | * @param {integer} r - The red color component in the range 0 - 255. 6 | * @param {integer} g - The green color component in the range 0 - 255. 7 | * @param {integer} b - The blue color component in the range 0 - 255. 8 | * @return {integer} A native color value integer (format: 0xRRGGBB). 9 | */ 10 | export default function (r, g, b) { 11 | 12 | return r << 16 | g << 8 | b; 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/graphics/color/HSLtoRGB.js: -------------------------------------------------------------------------------- 1 | import HueToColor from 'graphics/color/HueToColor.js'; 2 | 3 | export default function (h, s, l) { 4 | 5 | // achromatic by default 6 | let r = l; 7 | let g = l; 8 | let b = l; 9 | 10 | if (s !== 0) 11 | { 12 | const q = (l < 0.5) ? l * (1 + s) : l + s - l * s; 13 | const p = 2 * l - q; 14 | 15 | r = HueToColor(p, q, h + 1 / 3); 16 | g = HueToColor(p, q, h); 17 | b = HueToColor(p, q, h - 1 / 3); 18 | } 19 | 20 | return { r: r * 255, g: g * 255, b: b * 255 }; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/graphics/color/RGBtoString.js: -------------------------------------------------------------------------------- 1 | import ComponentToHex from 'graphics/color/ComponentToHex.js'; 2 | 3 | export default function (r, g, b, a = 255, prefix = '#') { 4 | 5 | if (prefix === '#') 6 | { 7 | return '#' + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1); 8 | } 9 | else 10 | { 11 | return '0x' + ComponentToHex(a) + ComponentToHex(r) + ComponentToHex(g) + ComponentToHex(b); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/graphics/color/RandomRGB.js: -------------------------------------------------------------------------------- 1 | export default function (min = 0, max = 255) { 2 | 3 | const r = min + Math.round(Math.random() * (max - min)); 4 | const g = min + Math.round(Math.random() * (max - min)); 5 | const b = min + Math.round(Math.random() * (max - min)); 6 | 7 | return { r, g, b }; 8 | 9 | } -------------------------------------------------------------------------------- /src/input/keyboard/combo/AdvanceKeyCombo.js: -------------------------------------------------------------------------------- 1 | // Return boolean (true if it reached the end of the combo, false if not) 2 | 3 | export default function AdvanceKeyCombo (event, combo) { 4 | 5 | combo.timeLastMatched = event.timeStamp; 6 | combo.index++; 7 | 8 | if (combo.index === combo.size) 9 | { 10 | return true; 11 | } 12 | else 13 | { 14 | combo.current = combo.keyCodes[combo.index]; 15 | return false; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/input/keyboard/events/AddKeyDown.js: -------------------------------------------------------------------------------- 1 | import AddEventListener from 'dom/AddEventListener.js'; 2 | 3 | // Adds a keydown event listener to the specified target (usually 'window') 4 | 5 | export default function AddKeyDown (target, listener, useCapture = false) { 6 | 7 | AddEventListener(target, 'keydown', listener, useCapture); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/input/keyboard/events/AddKeyPress.js: -------------------------------------------------------------------------------- 1 | import AddEventListener from 'dom/AddEventListener.js'; 2 | 3 | // Adds a keypress event listener to the specified target (usually 'window') 4 | 5 | export default function AddKeyPress (target, listener, useCapture = false) { 6 | 7 | AddEventListener(target, 'keypress', listener, useCapture); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/input/keyboard/events/AddKeyUp.js: -------------------------------------------------------------------------------- 1 | import AddEventListener from 'dom/AddEventListener.js'; 2 | 3 | // Adds a keyup event listener to the specified target (usually 'window') 4 | 5 | export default function AddKeyUp (target, listener, useCapture = false) { 6 | 7 | AddEventListener(target, 'keyup', listener, useCapture); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/input/keyboard/events/RemoveKeyDown.js: -------------------------------------------------------------------------------- 1 | import RemoveEventListener from 'dom/RemoveEventListener.js'; 2 | 3 | export default function RemoveKeyDown (target, listener) { 4 | 5 | RemoveEventListener(target, 'keydown', listener); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/events/RemoveKeyPress.js: -------------------------------------------------------------------------------- 1 | import RemoveEventListener from 'dom/RemoveEventListener.js'; 2 | 3 | export default function RemoveKeyPress (target, listener) { 4 | 5 | RemoveEventListener(target, 'keypress', listener); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/events/RemoveKeyUp.js: -------------------------------------------------------------------------------- 1 | import RemoveEventListener from 'dom/RemoveEventListener.js'; 2 | 3 | export default function RemoveKeyUp (target, listener) { 4 | 5 | RemoveEventListener(target, 'keyup', listener); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/A.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function A () { 4 | 5 | return Key('A'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/ALT.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function ALT () { 4 | 5 | return Key(18, 'ALT'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/B.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function B () { 4 | 5 | return Key('B'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/BACKSPACE.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function BACKSPACE () { 4 | 5 | return Key(8, 'BACKSPACE'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/BACKWARD_SLASH.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function BACKWARD_SLASH () { 4 | 5 | return Key(220, 'BACKWARD_SLASH'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/C.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function C () { 4 | 5 | return Key('C'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/CAPS_LOCK.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function CAPS_LOCK () { 4 | 5 | return Key(20, 'CAPS_LOCK'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/CLEAR.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function CLEAR () { 4 | 5 | return Key(12, 'CLEAR'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/CLOSED_BRACKET.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function CLOSED_BRACKET () { 4 | 5 | return Key(221, 'CLOSED_BRACKET'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/COLON.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function COLON () { 4 | 5 | return Key(186, 'COLON'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/COMMA.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function COMMA () { 4 | 5 | return Key(188, 'COMMA'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/CONTROL.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function CONTROL () { 4 | 5 | return Key(17, 'CONTROL'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/D.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function D () { 4 | 5 | return Key('D'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/DELETE.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function DELETE () { 4 | 5 | return Key(46, 'DELETE'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/DOWN.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function DOWN () { 4 | 5 | return Key(40, 'DOWN'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/E.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function E () { 4 | 5 | return Key('E'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/EIGHT.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function EIGHT () { 4 | 5 | return Key('8'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/END.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function END () { 4 | 5 | return Key(35, 'END'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/ENTER.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function ENTER () { 4 | 5 | return Key(13, 'ENTER'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/EQUALS.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function EQUALS () { 4 | 5 | return Key(187, 'EQUALS'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/ESC.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function ESC () { 4 | 5 | return Key(27, 'ESC'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/F.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function F () { 4 | 5 | return Key('F'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/F1.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function F1 () { 4 | 5 | return Key(112, 'F1'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/F10.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function F10 () { 4 | 5 | return Key(121, 'F10'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/F11.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function F11 () { 4 | 5 | return Key(122, 'F11'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/F12.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function F12 () { 4 | 5 | return Key(123, 'F12'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/F13.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function F13 () { 4 | 5 | return Key(124, 'F13'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/F14.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function F14 () { 4 | 5 | return Key(125, 'F14'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/F15.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function F15 () { 4 | 5 | return Key(126, 'F15'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/F2.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function F2 () { 4 | 5 | return Key(113, 'F2'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/F3.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function F3 () { 4 | 5 | return Key(114, 'F3'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/F4.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function F4 () { 4 | 5 | return Key(115, 'F4'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/F5.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function F5 () { 4 | 5 | return Key(116, 'F5'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/F6.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function F6 () { 4 | 5 | return Key(117, 'F6'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/F7.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function F7 () { 4 | 5 | return Key(118, 'F7'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/F8.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function F8 () { 4 | 5 | return Key(119, 'F8'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/F9.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function F9 () { 4 | 5 | return Key(120, 'F9'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/FIVE.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function FIVE () { 4 | 5 | return Key('5'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/FOUR.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function FOUR () { 4 | 5 | return Key('4'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/G.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function G () { 4 | 5 | return Key('G'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/H.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function H () { 4 | 5 | return Key('H'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/HELP.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function HELP () { 4 | 5 | return Key(47, 'HELP'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/HOME.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function HOME () { 4 | 5 | return Key(36, 'HOME'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/I.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function I () { 4 | 5 | return Key('I'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/INSERT.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function INSERT () { 4 | 5 | return Key(45, 'INSERT'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/J.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function J () { 4 | 5 | return Key('J'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/K.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function K () { 4 | 5 | return Key('K'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/L.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function L () { 4 | 5 | return Key('L'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/LEFT.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function LEFT () { 4 | 5 | return Key(37, 'LEFT'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/M.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function M () { 4 | 5 | return Key('M'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/MINUS.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function MINUS () { 4 | 5 | return Key(44, 'MINUS'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/N.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function N () { 4 | 5 | return Key('N'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/NINE.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function NINE () { 4 | 5 | return Key('9'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/NUMPAD_0.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function NUMPAD_0 () { 4 | 5 | return Key(96, 'NUMPAD_0'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/NUMPAD_1.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function NUMPAD_1 () { 4 | 5 | return Key(97, 'NUMPAD_1'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/NUMPAD_2.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function NUMPAD_2 () { 4 | 5 | return Key(98, 'NUMPAD_2'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/NUMPAD_3.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function NUMPAD_3 () { 4 | 5 | return Key(99, 'NUMPAD_3'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/NUMPAD_4.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function NUMPAD_4 () { 4 | 5 | return Key(100, 'NUMPAD_4'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/NUMPAD_5.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function NUMPAD_5 () { 4 | 5 | return Key(101, 'NUMPAD_5'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/NUMPAD_6.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function NUMPAD_6 () { 4 | 5 | return Key(102, 'NUMPAD_6'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/NUMPAD_7.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function NUMPAD_7 () { 4 | 5 | return Key(103, 'NUMPAD_7'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/NUMPAD_8.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function NUMPAD_8 () { 4 | 5 | return Key(104, 'NUMPAD_8'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/NUMPAD_9.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function NUMPAD_9 () { 4 | 5 | return Key(105, 'NUMPAD_9'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/NUMPAD_ADD.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function NUMPAD_ADD () { 4 | 5 | return Key(107, 'NUMPAD_ADD'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/NUMPAD_DECIMAL.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function NUMPAD_DECIMAL () { 4 | 5 | return Key(110, 'NUMPAD_DECIMAL'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/NUMPAD_DIVIDE.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function NUMPAD_DIVIDE () { 4 | 5 | return Key(111, 'NUMPAD_DIVIDE'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/NUMPAD_ENTER.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function NUMPAD_ENTER () { 4 | 5 | return Key(108, 'NUMPAD_ENTER'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/NUMPAD_MULTIPLY.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function NUMPAD_MULTIPLY () { 4 | 5 | return Key(106, 'NUMPAD_MULTIPLY'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/NUMPAD_SUBTRACT.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function NUMPAD_SUBTRACT () { 4 | 5 | return Key(109, 'NUMPAD_SUBTRACT'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/NUM_LOCK.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function NUM_LOCK () { 4 | 5 | return Key(144, 'NUM_LOCK'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/O.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function O () { 4 | 5 | return Key('O'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/ONE.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function ONE () { 4 | 5 | return Key('1'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/OPEN_BRACKET.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function OPEN_BRACKET () { 4 | 5 | return Key(219, 'OPEN_BRACKET'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/P.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function P () { 4 | 5 | return Key('P'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/PAGE_DOWN.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function PAGE_DOWN () { 4 | 5 | return Key(34, 'PAGE_DOWN'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/PAGE_UP.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function PAGE_UP () { 4 | 5 | return Key(33, 'PAGE_UP'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/PERIOD.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function PERIOD () { 4 | 5 | return Key(190, 'PERIOD'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/PLUS.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function PLUS () { 4 | 5 | return Key(43, 'PLUS'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/Q.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function Q () { 4 | 5 | return Key('Q'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/QUESTION_MARK.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function QUESTION_MARK () { 4 | 5 | return Key(191, 'QUESTION_MARK'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/QUOTES.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function QUOTES () { 4 | 5 | return Key(222, 'QUOTES'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/R.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function R () { 4 | 5 | return Key('R'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/RIGHT.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function RIGHT () { 4 | 5 | return Key(39, 'RIGHT'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/S.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function S () { 4 | 5 | return Key('S'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/SEVEN.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function SEVEN () { 4 | 5 | return Key('7'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/SHIFT.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function SHIFT () { 4 | 5 | return Key(16, 'SHIFT'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/SIX.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function SIX () { 4 | 5 | return Key('6'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/SPACEBAR.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function SPACEBAR () { 4 | 5 | return Key(32, 'SPACEBAR'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/T.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function T () { 4 | 5 | return Key('T'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/TAB.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function TAB () { 4 | 5 | return Key(9, 'TAB'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/THREE.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function THREE () { 4 | 5 | return Key('3'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/TILDE.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function TILDE () { 4 | 5 | return Key(192, 'TILDE'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/TWO.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function TWO () { 4 | 5 | return Key('2'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/U.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function U () { 4 | 5 | return Key('U'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/UNDERSCORE.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function UNDERSCORE () { 4 | 5 | return Key(189, 'UNDERSCORE'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/UP.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function UP () { 4 | 5 | return Key(38, 'UP'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/V.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function V () { 4 | 5 | return Key('V'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/W.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function W () { 4 | 5 | return Key('W'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/X.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function X () { 4 | 5 | return Key('X'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/Y.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function Y () { 4 | 5 | return Key('Y'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/Z.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function Z () { 4 | 5 | return Key('Z'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/input/keyboard/keys/ZERO.js: -------------------------------------------------------------------------------- 1 | import Key from 'input/keyboard/Key.js'; 2 | 3 | export default function ZERO () { 4 | 5 | return Key('0'); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/loader/types/AtlasJSONFile.js: -------------------------------------------------------------------------------- 1 | import ImageFile from 'loader/types/ImageFile.js'; 2 | import JSONFile from 'loader/types/JSONFile.js'; 3 | import MultiFile from 'loader/MultiFile.js'; 4 | 5 | export default function AtlasJSONFile (key, textureURL, atlasURL, atlasData) { 6 | 7 | if (atlasURL === '' && atlasData === null) 8 | { 9 | atlasURL = key + '.json'; 10 | } 11 | 12 | return MultiFile( 13 | ImageFile(key, textureURL), 14 | JSONFile(key, atlasURL, atlasData) 15 | ); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/loader/types/AtlasXMLFile.js: -------------------------------------------------------------------------------- 1 | import ImageFile from 'loader/types/ImageFile.js'; 2 | import XMLFile from 'loader/types/XMLFile.js'; 3 | import MultiFile from 'loader/MultiFile.js'; 4 | 5 | export default function AtlasXMLFile (key, textureURL, atlasURL, atlasData) { 6 | 7 | if (atlasURL === '' && atlasData === null) 8 | { 9 | atlasURL = key + '.xml'; 10 | } 11 | 12 | return MultiFile( 13 | ImageFile(key, textureURL), 14 | XMLFile(key, atlasURL, atlasData) 15 | ); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/math/Average.js: -------------------------------------------------------------------------------- 1 | // Add spread operator 2 | export default function Average () { 3 | 4 | let sum = 0; 5 | let len = arguments.length; 6 | 7 | for (let i = 0; i < len; i++) 8 | { 9 | sum += (+arguments[i]); 10 | } 11 | 12 | return sum / len; 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/math/Bernstein.js: -------------------------------------------------------------------------------- 1 | import Factorial from 'math/Factorial.js'; 2 | 3 | export default function (n, i) { 4 | 5 | return Factorial(n) / Factorial(i) / Factorial(n - i); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/math/Between.js: -------------------------------------------------------------------------------- 1 | export default function Between (min, max) { 2 | 3 | return Math.floor(Math.random() * (max - min + 1) + min); 4 | 5 | } -------------------------------------------------------------------------------- /src/math/CatmullRom.js: -------------------------------------------------------------------------------- 1 | export default function (p0, p1, p2, p3, t) { 2 | 3 | var v0 = (p2 - p0) * 0.5, v1 = (p3 - p1) * 0.5, t2 = t * t, t3 = t * t2; 4 | 5 | return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1; 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/math/CeilTo.js: -------------------------------------------------------------------------------- 1 | export default function (value, place = 0, base = 10) { 2 | 3 | var p = Math.pow(base, -place); 4 | 5 | return Math.ceil(value * p) / p; 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/math/Clamp.js: -------------------------------------------------------------------------------- 1 | export default function Clamp (value, low, high) { 2 | 3 | if (value < low) 4 | { 5 | return low; 6 | } 7 | else if (value > high) 8 | { 9 | return high; 10 | } 11 | else 12 | { 13 | return value; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/math/Constants.js: -------------------------------------------------------------------------------- 1 | export const PI2 = Math.PI * 2; 2 | export const HALFPI = Math.PI * 0.5; 3 | export const EPSILON = 1.0e-6; 4 | -------------------------------------------------------------------------------- /src/math/DegToRad.js: -------------------------------------------------------------------------------- 1 | const degToRad = Math.PI / 180; 2 | 3 | export default function DegToRad (degrees) { 4 | 5 | return degrees * degToRad; 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/math/Difference.js: -------------------------------------------------------------------------------- 1 | export default function (a, b) { 2 | 3 | return Math.abs(a - b); 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/math/Factorial.js: -------------------------------------------------------------------------------- 1 | export default function (value) { 2 | 3 | if (value === 0) 4 | { 5 | return 1; 6 | } 7 | 8 | let res = value; 9 | 10 | while (--value) 11 | { 12 | res *= value; 13 | } 14 | 15 | return res; 16 | 17 | } -------------------------------------------------------------------------------- /src/math/FloatBetween.js: -------------------------------------------------------------------------------- 1 | export default function FloatBetween (min, max) { 2 | 3 | return Math.random() * (max - min + 1) + min; 4 | 5 | } -------------------------------------------------------------------------------- /src/math/FloorTo.js: -------------------------------------------------------------------------------- 1 | export default function (value, place = 0, base = 10) { 2 | 3 | var p = Math.pow(base, -place); 4 | 5 | return Math.floor(value * p) / p; 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/math/GetPow2.js: -------------------------------------------------------------------------------- 1 | // Takes value and returns the nearest power of 2 2 | 3 | export default function GetPow2 (value) { 4 | 5 | // Math.log(2) 6 | var index = Math.log(value) / 0.6931471805599453; 7 | 8 | return (1 << Math.ceil(index)); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/IsPow2.js: -------------------------------------------------------------------------------- 1 | // Is value a power of 2? 2 | 3 | export default function IsPow2 (value) { 4 | 5 | return (value > 0 && (value & (value - 1)) === 0); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/math/Linear.js: -------------------------------------------------------------------------------- 1 | export default function (p0, p1, t) { 2 | 3 | return (p1 - p0) * t + p0; 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/math/Math.js: -------------------------------------------------------------------------------- 1 | import * as Fuzzy from 'math/Fuzzy.js'; 2 | import * as SnapTo from 'math/SnapTo.js'; 3 | import * as Angle from 'math/Angle.js'; 4 | import roundTo from 'math/RoundTo.js'; 5 | import floorTo from 'math/FloorTo.js'; 6 | import ceilTo from 'math/CeilTo.js'; 7 | 8 | export default class Math { 9 | 10 | constructor () { 11 | 12 | this.fuzzy = Fuzzy; 13 | this.snap = SnapTo; 14 | this.roundTo = roundTo; 15 | this.floorTo = floorTo; 16 | this.ceilTo = ceilTo; 17 | this.angle = Angle; 18 | 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/math/MaxAdd.js: -------------------------------------------------------------------------------- 1 | 2 | export default function (value, amount, max) { 3 | 4 | return Math.min(value + amount, max); 5 | 6 | } 7 | -------------------------------------------------------------------------------- /src/math/MinSub.js: -------------------------------------------------------------------------------- 1 | export default function (value, amount, min) { 2 | 3 | return Math.max(value - amount, min); 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/math/Percent.js: -------------------------------------------------------------------------------- 1 | export default function (a, b, base = 0) { 2 | 3 | if (a > b || base > b) 4 | { 5 | return 1; 6 | } 7 | else if (a < base || base > a) 8 | { 9 | return 0; 10 | } 11 | else 12 | { 13 | return (a - base) / b; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/math/RadToDeg.js: -------------------------------------------------------------------------------- 1 | let radToDeg = 180 / Math.PI; 2 | 3 | export default function (radians) { 4 | 5 | return radians * radToDeg; 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/math/Rotate.js: -------------------------------------------------------------------------------- 1 | // p = Point or any object with public x/y properties 2 | export default function (p, angle) { 3 | 4 | let x = p.x; 5 | let y = p.y; 6 | 7 | p.x = x * Math.cos(angle) - y * Math.sin(angle); 8 | p.y = x * Math.sin(angle) + y * Math.cos(angle); 9 | 10 | return p; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/RotateAround.js: -------------------------------------------------------------------------------- 1 | // p = Point or any object with public x/y properties 2 | export default function (p, cx, cy, angle) { 3 | 4 | const c = Math.cos(angle); 5 | const s = Math.sin(angle); 6 | 7 | const x = p.x - cx; 8 | const y = p.y - cy; 9 | 10 | p.x = x * c - y * s + cx; 11 | p.y = x * s + y * c + cy; 12 | 13 | return p; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/math/RoundAwayFromZero.js: -------------------------------------------------------------------------------- 1 | export default function RoundAwayFromZero (value) { 2 | 3 | // "Opposite" of truncate. 4 | return (value > 0) ? Math.ceil(value) : Math.floor(value); 5 | 6 | } 7 | -------------------------------------------------------------------------------- /src/math/RoundTo.js: -------------------------------------------------------------------------------- 1 | export default function (value, place = 0, base = 10) { 2 | 3 | var p = Math.pow(base, -place); 4 | 5 | return Math.round(value * p) / p; 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/math/SinCosTableGenerator.js: -------------------------------------------------------------------------------- 1 | 2 | export default function SinCosTableGenerator (length, sinAmp = 1, cosAmp = 1, frequency = 1) { 3 | 4 | frequency *= Math.PI / length; 5 | 6 | let cos = []; 7 | let sin = []; 8 | 9 | for (let c = 0; c < length; c++) 10 | { 11 | cosAmp -= sinAmp * frequency; 12 | sinAmp += cosAmp * frequency; 13 | 14 | cos[c] = cosAmp; 15 | sin[c] = sinAmp; 16 | } 17 | 18 | return { sin, cos, length }; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/math/SmoothStep.js: -------------------------------------------------------------------------------- 1 | export default function (x, min, max) { 2 | 3 | x = Math.max(0, Math.min(1, (x - min) / (max - min))); 4 | 5 | return x * x * (3 - 2 * x); 6 | 7 | } 8 | 9 | -------------------------------------------------------------------------------- /src/math/SmootherStep.js: -------------------------------------------------------------------------------- 1 | export default function (x, min, max) { 2 | 3 | x = Math.max(0, Math.min(1, (x - min) / (max - min))); 4 | 5 | return x * x * x * (x * (x * 6 - 15) + 10); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/math/Wrap.js: -------------------------------------------------------------------------------- 1 | export default function Wrap (value, min, max) { 2 | 3 | let range = max - min; 4 | 5 | if (range <= 0) 6 | { 7 | return 0; 8 | } 9 | 10 | let result = (value - min) % range; 11 | 12 | if (result < 0) 13 | { 14 | result += range; 15 | } 16 | 17 | return result + min; 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/math/distance/DistanceBetween.js: -------------------------------------------------------------------------------- 1 | export default function DistanceBetween (x1, y1, x2, y2) { 2 | 3 | let dx = x1 - x2; 4 | let dy = y1 - y2; 5 | 6 | return Math.sqrt(dx * dx + dy * dy); 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/math/distance/DistancePower.js: -------------------------------------------------------------------------------- 1 | export default function DistancePower (x1, y1, x2, y2, pow = 2) { 2 | 3 | return Math.sqrt(Math.pow(x2 - x1, pow) + Math.pow(y2 - y1, pow)); 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/math/distance/DistanceSquared.js: -------------------------------------------------------------------------------- 1 | export default function DistanceSquared (x1, y1, x2, y2) { 2 | 3 | let dx = x1 - x2; 4 | let dy = y1 - y2; 5 | 6 | return dx * dx + dy * dy; 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/math/easing/Circular.js: -------------------------------------------------------------------------------- 1 | export function In (v) { 2 | 3 | return 1 - Math.sqrt(1 - v * v); 4 | 5 | } 6 | 7 | export function Out (v) { 8 | 9 | return Math.sqrt(1 - (--v * v)); 10 | 11 | } 12 | 13 | export function InOut (v) { 14 | 15 | if ((v *= 2) < 1) 16 | { 17 | return -0.5 * (Math.sqrt(1 - v * v) - 1); 18 | } 19 | else 20 | { 21 | return 0.5 * (Math.sqrt(1 - (v -= 2) * v) + 1); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/math/easing/Cubic.js: -------------------------------------------------------------------------------- 1 | export function In (v) { 2 | 3 | return v * v * v; 4 | 5 | } 6 | 7 | export function Out (v) { 8 | 9 | return --v * v * v + 1; 10 | 11 | } 12 | 13 | export function InOut (v) { 14 | 15 | if ((v *= 2) < 1) 16 | { 17 | return 0.5 * v * v * v; 18 | } 19 | else 20 | { 21 | return 0.5 * ((v -= 2) * v * v + 2); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/math/easing/Expo.js: -------------------------------------------------------------------------------- 1 | export function In (v) { 2 | 3 | return Math.pow(2, 10 * (v - 1)) - 0.001; 4 | 5 | } 6 | 7 | export function Out (v) { 8 | 9 | return 1 - Math.pow(2, -10 * v); 10 | 11 | } 12 | 13 | export function InOut (v) { 14 | 15 | if ((v *= 2) < 1) 16 | { 17 | return 0.5 * Math.pow(2, 10 * (v - 1)); 18 | } 19 | else 20 | { 21 | return 0.5 * (2 - Math.pow(2, -10 * (v - 1))); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/math/easing/Linear.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Linear Easing (no variation). 3 | * 4 | * @method Lazer.Easing.Linear#None 5 | * @param {number} v - The value to be tweened. 6 | * @returns {number} v. 7 | */ 8 | export default function (v) { 9 | 10 | return v; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/easing/Quadratic.js: -------------------------------------------------------------------------------- 1 | export function In (v) { 2 | 3 | return v * v; 4 | 5 | } 6 | 7 | export function Out (v) { 8 | 9 | return v * (2 - v); 10 | 11 | } 12 | 13 | export function InOut (v) { 14 | 15 | if ((v *= 2) < 1) 16 | { 17 | return 0.5 * v * v; 18 | } 19 | else 20 | { 21 | return -0.5 * (--v * (v - 2) - 1); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/math/easing/Quartic.js: -------------------------------------------------------------------------------- 1 | export function In (v) { 2 | 3 | return v * v * v * v; 4 | 5 | } 6 | 7 | export function Out (v) { 8 | 9 | return 1 - (--v * v * v * v); 10 | 11 | } 12 | 13 | export function InOut (v) { 14 | 15 | if ((v *= 2) < 1) 16 | { 17 | return 0.5 * v * v * v * v; 18 | } 19 | else 20 | { 21 | return -0.5 * ((v -= 2) * v * v * v - 2); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/math/easing/Quintic.js: -------------------------------------------------------------------------------- 1 | export function In (v) { 2 | 3 | return v * v * v * v * v; 4 | 5 | } 6 | 7 | export function Out (v) { 8 | 9 | return --v * v * v * v * v + 1; 10 | 11 | } 12 | 13 | export function InOut (v) { 14 | 15 | if ((v *= 2) < 1) 16 | { 17 | return 0.5 * v * v * v * v * v; 18 | } 19 | else 20 | { 21 | return 0.5 * ((v -= 2) * v * v * v * v + 2); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/math/interpolation/Bezier.js: -------------------------------------------------------------------------------- 1 | import Bernstein from 'math/Bernstein.js'; 2 | 3 | export default function (v, k) { 4 | 5 | let b = 0; 6 | let n = v.length - 1; 7 | 8 | for (let i = 0; i <= n; i++) 9 | { 10 | b += Math.pow(1 - k, n - i) * Math.pow(k, i) * v[i] * Bernstein(n, i); 11 | } 12 | 13 | return b; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/math/interpolation/Linear.js: -------------------------------------------------------------------------------- 1 | import Linear from 'math/Linear.js'; 2 | 3 | export default function (v, k) { 4 | 5 | let m = v.length - 1; 6 | let f = m * k; 7 | let i = Math.floor(f); 8 | 9 | if (k < 0) 10 | { 11 | return Linear(v[0], v[1], f); 12 | } 13 | 14 | if (k > 1) 15 | { 16 | return Linear(v[m], v[m - 1], m - f); 17 | } 18 | 19 | return Linear(v[i], v[(i + 1 > m) ? m : i + 1], f - i); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/math/matrix/mat23/Add.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | // Adds a to b and puts result into dst 4 | 5 | export default function Add (a, b, dst = new mat(6)) { 6 | 7 | dst[0] = a[0] + b[0]; 8 | dst[1] = a[1] + b[1]; 9 | dst[2] = a[2] + b[2]; 10 | dst[3] = a[3] + b[3]; 11 | dst[4] = a[4] + b[4]; 12 | dst[5] = a[5] + b[5]; 13 | 14 | return dst; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/math/matrix/mat23/BuildIdentity.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function BuildIdentity (dst = new mat(6)) { 4 | 5 | dst[0] = 1; 6 | dst[1] = 0; 7 | dst[2] = 0; 8 | dst[3] = 1; 9 | dst[4] = 0; 10 | dst[5] = 0; 11 | 12 | return dst; 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/math/matrix/mat23/Clone.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | // Create new mat with values cloned from src 4 | 5 | export default function Clone (src) { 6 | 7 | let dst = new mat(6); 8 | 9 | dst[0] = src[0]; 10 | dst[1] = src[1]; 11 | dst[2] = src[2]; 12 | dst[3] = src[3]; 13 | dst[4] = src[4]; 14 | dst[5] = src[5]; 15 | 16 | return dst; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/math/matrix/mat23/Copy.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | // Copy values from src to dst 4 | 5 | export default function Copy (src, dst = new mat(6)) { 6 | 7 | dst[0] = src[0]; 8 | dst[1] = src[1]; 9 | dst[2] = src[2]; 10 | dst[3] = src[3]; 11 | dst[4] = src[4]; 12 | dst[5] = src[5]; 13 | 14 | return dst; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/math/matrix/mat23/Determinant.js: -------------------------------------------------------------------------------- 1 | 2 | export default function Determinant (src) { 3 | 4 | return src[0] * src[3] - src[1] * src[2]; 5 | 6 | } 7 | -------------------------------------------------------------------------------- /src/math/matrix/mat23/IsIdentity.js: -------------------------------------------------------------------------------- 1 | 2 | export default function IsIdentity (dst) { 3 | 4 | return ( 5 | dst[0] === 1 && 6 | dst[1] === 0 && 7 | dst[2] === 0 && 8 | dst[3] === 1 && 9 | dst[4] === 0 && 10 | dst[5] === 0 11 | ); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/math/matrix/mat23/Rotate.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | // Rotates matrix a by rad (radians) and puts result into dst 4 | 5 | export default function Rotate (a, rad, dst = new mat(6)) { 6 | 7 | const s = Math.sin(rad); 8 | const c = Math.cos(rad); 9 | 10 | dst[0] = a[0] * c + a[2] * s; 11 | dst[1] = a[1] * c + a[3] * s; 12 | dst[2] = a[0] * -s + a[2] * c; 13 | dst[3] = a[1] * -s + a[3] * c; 14 | dst[4] = a[4]; 15 | dst[5] = a[5]; 16 | 17 | return dst; 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/math/matrix/mat23/ScalarAdd.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | // Add b to each element in matrix a, store results in dst 4 | 5 | export default function ScalarAdd (a, b, dst = new mat(6)) { 6 | 7 | dst[0] = a[0] + b; 8 | dst[1] = a[1] + b; 9 | dst[2] = a[2] + b; 10 | dst[3] = a[3] + b; 11 | dst[4] = a[4] + b; 12 | dst[5] = a[5] + b; 13 | 14 | return dst; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/math/matrix/mat23/ScalarMultiply.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | // Multiply each element in matrix a but the float b, store results in dst 4 | 5 | export default function ScalarMultiply (a, b, dst = new mat(6)) { 6 | 7 | dst[0] = a[0] * b; 8 | dst[1] = a[1] * b; 9 | dst[2] = a[2] * b; 10 | dst[3] = a[3] * b; 11 | dst[4] = a[4] * b; 12 | dst[5] = a[5] * b; 13 | 14 | return dst; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/math/matrix/mat23/ScalarSubtract.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | // Subtract b from each element in matrix a, store results in dst 4 | 5 | export default function ScalarSubtract (a, b, dst = new mat(6)) { 6 | 7 | dst[0] = a[0] - b; 8 | dst[1] = a[1] - b; 9 | dst[2] = a[2] - b; 10 | dst[3] = a[3] - b; 11 | dst[4] = a[4] - b; 12 | dst[5] = a[5] - b; 13 | 14 | return dst; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/math/matrix/mat23/Scale.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | // Scales matrix a by the dimensions given in vector v, puts result into dst 4 | 5 | export default function Scale (a, v, dst = new mat(6)) { 6 | 7 | dst[0] = a[0] * v[0]; 8 | dst[1] = a[1] * v[0]; 9 | dst[2] = a[0] * v[1]; 10 | dst[3] = a[1] * v[1]; 11 | dst[4] = a[4]; 12 | dst[5] = a[5]; 13 | 14 | return dst; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/math/matrix/mat23/Set.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | // dst = mat23 or similar structure 4 | 5 | export default function Set (dst, a = 1, b = 0, c = 0, d = 1, e = 0, f = 0) { 6 | 7 | dst[0] = a; 8 | dst[1] = b; 9 | dst[2] = c; 10 | dst[3] = d; 11 | dst[4] = e; 12 | dst[5] = f; 13 | 14 | return dst; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/math/matrix/mat23/SetIdentity.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | // Sets mat to be identity matrix 4 | 5 | export default function SetIdentity (dst) { 6 | 7 | dst[0] = 1; 8 | dst[1] = 0; 9 | dst[2] = 0; 10 | dst[3] = 1; 11 | dst[4] = 0; 12 | dst[5] = 0; 13 | 14 | return dst; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/math/matrix/mat23/Subtract.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | // Subtracts matrix b from a, puts result into dst 4 | 5 | export default function Subtract (a, b, dst = new mat(6)) { 6 | 7 | dst[0] = a[0] - b[0]; 8 | dst[1] = a[1] - b[1]; 9 | dst[2] = a[2] - b[2]; 10 | dst[3] = a[3] - b[3]; 11 | dst[4] = a[4] - b[4]; 12 | dst[5] = a[5] - b[5]; 13 | 14 | return dst; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/math/matrix/mat23/Translate.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | // Translates matrix a by the dimensions given in vector v, puts result into dst 4 | 5 | export default function Translate (a, v, dst = new mat(6)) { 6 | 7 | dst[0] = a[0]; 8 | dst[1] = a[1]; 9 | dst[2] = a[0]; 10 | dst[3] = a[1]; 11 | dst[4] = a[0] * v[0] + a[2] * v[1] + a[4]; 12 | dst[5] = a[1] * v[0] + a[3] * v[1] + a[5]; 13 | 14 | return dst; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/math/matrix/mat33/At.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (m, dst = new mat(9)) { 4 | 5 | dst[0] = m[6]; 6 | dst[1] = m[7]; 7 | dst[2] = m[8]; 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/matrix/mat33/BuildIdentity.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function BuildIdentity (dst = new mat(9)) { 4 | 5 | dst[0] = 1; 6 | dst[1] = 0; 7 | dst[2] = 0; 8 | dst[3] = 0; 9 | dst[4] = 1; 10 | dst[5] = 0; 11 | dst[6] = 0; 12 | dst[7] = 0; 13 | dst[8] = 1; 14 | 15 | return dst; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/math/matrix/mat33/Copy.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (src, dst = new mat(9)) { 4 | 5 | dst[0] = src[0]; 6 | dst[1] = src[1]; 7 | dst[2] = src[2]; 8 | dst[3] = src[3]; 9 | dst[4] = src[4]; 10 | dst[5] = src[5]; 11 | dst[6] = src[6]; 12 | dst[7] = src[7]; 13 | dst[8] = src[8]; 14 | 15 | return dst; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/math/matrix/mat33/Determinant.js: -------------------------------------------------------------------------------- 1 | export default function (m) { 2 | 3 | const m0 = m[0]; 4 | const m1 = m[1]; 5 | const m2 = m[2]; 6 | const m3 = m[3]; 7 | const m4 = m[4]; 8 | const m5 = m[5]; 9 | const m6 = m[6]; 10 | const m7 = m[7]; 11 | const m8 = m[8]; 12 | 13 | return ( 14 | m0 * (m4 * m8 - m5 * m7) + 15 | m1 * (m5 * m6 - m3 * m8) + 16 | m2 * (m3 * m7 - m4 * m6) 17 | ); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/math/matrix/mat33/Equal.js: -------------------------------------------------------------------------------- 1 | export default function (a, b, precision = 1e-6) { 2 | 3 | return ( 4 | Math.abs(a[0] - b[0]) <= precision && 5 | Math.abs(a[1] - b[1]) <= precision && 6 | Math.abs(a[2] - b[2]) <= precision && 7 | Math.abs(a[3] - b[3]) <= precision && 8 | Math.abs(a[4] - b[4]) <= precision && 9 | Math.abs(a[5] - b[5]) <= precision && 10 | Math.abs(a[6] - b[6]) <= precision && 11 | Math.abs(a[7] - b[7]) <= precision && 12 | Math.abs(a[8] - b[8]) <= precision 13 | ); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/math/matrix/mat33/Right.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (m, dst = new mat(9)) { 4 | 5 | dst[0] = m[0]; 6 | dst[1] = m[1]; 7 | dst[2] = m[2]; 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/matrix/mat33/ScalarAdd.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (m, s, dst = new mat(9)) { 4 | 5 | dst[0] = m[0] + s; 6 | dst[1] = m[1] + s; 7 | dst[2] = m[2] + s; 8 | dst[3] = m[3] + s; 9 | dst[4] = m[4] + s; 10 | dst[5] = m[5] + s; 11 | dst[6] = m[6] + s; 12 | dst[7] = m[7] + s; 13 | dst[8] = m[8] + s; 14 | 15 | return dst; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/math/matrix/mat33/ScalarMultiply.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (m, s, dst = new mat(9)) { 4 | 5 | dst[0] = m[0] * s; 6 | dst[1] = m[1] * s; 7 | dst[2] = m[2] * s; 8 | dst[3] = m[3] * s; 9 | dst[4] = m[4] * s; 10 | dst[5] = m[5] * s; 11 | dst[6] = m[6] * s; 12 | dst[7] = m[7] * s; 13 | dst[8] = m[8] * s; 14 | 15 | return dst; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/math/matrix/mat33/ScalarSub.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (m, s, dst = new mat(9)) { 4 | 5 | dst[0] = m[0] - s; 6 | dst[1] = m[1] - s; 7 | dst[2] = m[2] - s; 8 | dst[3] = m[3] - s; 9 | dst[4] = m[4] - s; 10 | dst[5] = m[5] - s; 11 | dst[6] = m[6] - s; 12 | dst[7] = m[7] - s; 13 | dst[8] = m[8] - s; 14 | 15 | return dst; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/math/matrix/mat33/SetAt.js: -------------------------------------------------------------------------------- 1 | // v = vec3 - x,y,z 2 | 3 | export default function SetAt (m, v) { 4 | 5 | m[6] = v[0]; 6 | m[7] = v[1]; 7 | m[8] = v[2]; 8 | 9 | return m; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/matrix/mat33/SetRight.js: -------------------------------------------------------------------------------- 1 | export default function (m, v) { 2 | 3 | m[0] = v[0]; 4 | m[1] = v[1]; 5 | m[2] = v[2]; 6 | 7 | return m; 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/math/matrix/mat33/SetUp.js: -------------------------------------------------------------------------------- 1 | export default function (m, v) { 2 | 3 | m[3] = v[0]; 4 | m[4] = v[1]; 5 | m[5] = v[2]; 6 | 7 | return m; 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/math/matrix/mat33/Transform.js: -------------------------------------------------------------------------------- 1 | // m = mat33 like object 2 | // angle is in radians 3 | 4 | export default function Transform (m, rotationDirection, x = 0, y = 0, angle = 0, scaleX = 1, scaleY = 1) { 5 | 6 | let c = Math.cos(angle); 7 | let s = Math.sin(angle) * rotationDirection; 8 | 9 | m[0] = c * scaleX; 10 | m[1] = -s * scaleY; 11 | m[2] = 0; 12 | m[3] = s * scaleX; 13 | m[4] = c * scaleY; 14 | m[5] = 0; 15 | m[6] = x; 16 | m[7] = y; 17 | m[8] = 1; 18 | 19 | return m; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/math/matrix/mat33/TransformByVector.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function TransformByVector (m, v, dst = new mat(9)) { 4 | 5 | const v0 = v[0]; 6 | const v1 = v[1]; 7 | const v2 = v[2]; 8 | 9 | dst[0] = (m[0] * v0 + m[3] * v1 + m[6] * v2); 10 | dst[1] = (m[1] * v0 + m[4] * v1 + m[7] * v2); 11 | dst[2] = (m[2] * v0 + m[5] * v1 + m[8] * v2); 12 | 13 | return dst; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/math/matrix/mat33/Transpose.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (m, dst = new mat(9)) { 4 | 5 | dst[0] = m[0]; 6 | dst[1] = m[3]; 7 | dst[2] = m[6]; 8 | dst[3] = m[1]; 9 | dst[4] = m[4]; 10 | dst[5] = m[7]; 11 | dst[6] = m[2]; 12 | dst[7] = m[5]; 13 | dst[8] = m[8]; 14 | 15 | return dst; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/math/matrix/mat33/Up.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (m, dst = new mat(9)) { 4 | 5 | dst[0] = m[3]; 6 | dst[1] = m[4]; 7 | dst[2] = m[5]; 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/matrix/mat34/BuildIdentity.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (dst = new mat(12)) { 4 | 5 | dst[0] = 1; 6 | dst[1] = 0; 7 | dst[2] = 0; 8 | dst[3] = 0; 9 | dst[4] = 0; 10 | dst[5] = 1; 11 | dst[6] = 0; 12 | dst[7] = 0; 13 | dst[8] = 0; 14 | dst[9] = 0; 15 | dst[10] = 1; 16 | dst[11] = 0; 17 | 18 | return dst; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/math/matrix/mat34/Pos.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (m, dst = new mat(12)) { 4 | 5 | dst[0] = m[3]; 6 | dst[1] = m[7]; 7 | dst[2] = m[11]; 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/matrix/mat43/At.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (m, dst = new mat(12)) { 4 | 5 | dst[0] = m[6]; 6 | dst[1] = m[7]; 7 | dst[2] = m[8]; 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/matrix/mat43/BuildIdentity.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (dst = new mat(12)) { 4 | 5 | dst[0] = 1; 6 | dst[1] = 0; 7 | dst[2] = 0; 8 | dst[3] = 0; 9 | dst[4] = 1; 10 | dst[5] = 0; 11 | dst[6] = 0; 12 | dst[7] = 0; 13 | dst[8] = 1; 14 | dst[9] = 0; 15 | dst[10] = 0; 16 | dst[11] = 0; 17 | 18 | return dst; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/math/matrix/mat43/Copy.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (src, dst = new mat(12)) { 4 | 5 | dst[0] = src[0]; 6 | dst[1] = src[1]; 7 | dst[2] = src[2]; 8 | dst[3] = src[3]; 9 | dst[4] = src[4]; 10 | dst[5] = src[5]; 11 | dst[6] = src[6]; 12 | dst[7] = src[7]; 13 | dst[8] = src[8]; 14 | dst[9] = src[9]; 15 | dst[10] = src[10]; 16 | dst[11] = src[11]; 17 | 18 | return dst; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/math/matrix/mat43/Determinant.js: -------------------------------------------------------------------------------- 1 | export default function (m) { 2 | 3 | return ( 4 | m[0] * (m[4] * m[8] - m[5] * m[7]) + 5 | m[1] * (m[5] * m[6] - m[3] * m[8]) + 6 | m[2] * (m[3] * m[7] - m[4] * m[6]) 7 | ); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/math/matrix/mat43/FromM33V3.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (m, v, dst = new mat(12)) { 4 | 5 | dst[0] = m[0]; 6 | dst[1] = m[1]; 7 | dst[2] = m[2]; 8 | dst[3] = m[3]; 9 | dst[4] = m[4]; 10 | dst[5] = m[5]; 11 | dst[6] = m[6]; 12 | dst[7] = m[7]; 13 | dst[8] = m[8]; 14 | dst[9] = v[0]; 15 | dst[10] = v[1]; 16 | dst[11] = v[2]; 17 | 18 | return dst; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/math/matrix/mat43/Pos.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (m, dst = new mat(12)) { 4 | 5 | dst[0] = m[9]; 6 | dst[1] = m[10]; 7 | dst[2] = m[11]; 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/matrix/mat43/Right.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (m, dst = new mat(12)) { 4 | 5 | dst[0] = m[0]; 6 | dst[1] = m[1]; 7 | dst[2] = m[2]; 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/matrix/mat43/ScalarAdd.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (m, s, dst = new mat(12)) { 4 | 5 | dst[0] = m[0] + s; 6 | dst[1] = m[1] + s; 7 | dst[2] = m[2] + s; 8 | dst[3] = m[3] + s; 9 | dst[4] = m[4] + s; 10 | dst[5] = m[5] + s; 11 | dst[6] = m[6] + s; 12 | dst[7] = m[7] + s; 13 | dst[8] = m[8] + s; 14 | dst[9] = m[9] + s; 15 | dst[10] = m[10] + s; 16 | dst[11] = m[11] + s; 17 | 18 | return dst; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/math/matrix/mat43/ScalarMultiply.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (m, s, dst = new mat(12)) { 4 | 5 | dst[0] = m[0] * s; 6 | dst[1] = m[1] * s; 7 | dst[2] = m[2] * s; 8 | dst[3] = m[3] * s; 9 | dst[4] = m[4] * s; 10 | dst[5] = m[5] * s; 11 | dst[6] = m[6] * s; 12 | dst[7] = m[7] * s; 13 | dst[8] = m[8] * s; 14 | dst[9] = m[9] * s; 15 | dst[10] = m[10] * s; 16 | dst[11] = m[11] * s; 17 | 18 | return dst; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/math/matrix/mat43/ScalarSub.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (m, s, dst = new mat(12)) { 4 | 5 | dst[0] = m[0] - s; 6 | dst[1] = m[1] - s; 7 | dst[2] = m[2] - s; 8 | dst[3] = m[3] - s; 9 | dst[4] = m[4] - s; 10 | dst[5] = m[5] - s; 11 | dst[6] = m[6] - s; 12 | dst[7] = m[7] - s; 13 | dst[8] = m[8] - s; 14 | dst[9] = m[9] - s; 15 | dst[10] = m[10] - s; 16 | dst[11] = m[11] - s; 17 | 18 | return dst; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/math/matrix/mat43/SetAt.js: -------------------------------------------------------------------------------- 1 | export default function (m, v) { 2 | 3 | m[6] = v[0]; 4 | m[7] = v[1]; 5 | m[8] = v[2]; 6 | 7 | return m; 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/math/matrix/mat43/SetPos.js: -------------------------------------------------------------------------------- 1 | export default function (m, v) { 2 | 3 | m[9] = v[0]; 4 | m[10] = v[1]; 5 | m[11] = v[2]; 6 | 7 | return m; 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/math/matrix/mat43/SetRight.js: -------------------------------------------------------------------------------- 1 | export default function (m, v) { 2 | 3 | m[0] = v[0]; 4 | m[1] = v[1]; 5 | m[2] = v[2]; 6 | 7 | return m; 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/math/matrix/mat43/SetUp.js: -------------------------------------------------------------------------------- 1 | export default function (m, v) { 2 | 3 | m[3] = v[0]; 4 | m[4] = v[1]; 5 | m[5] = v[2]; 6 | 7 | return m; 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/math/matrix/mat43/TransformPoint.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (m, v, dst = new mat(12)) { 4 | 5 | const v0 = v[0]; 6 | const v1 = v[1]; 7 | const v2 = v[2]; 8 | 9 | dst[0] = m[0] * v0 + m[3] * v1 + m[6] * v2 + m[9]; 10 | dst[1] = m[1] * v0 + m[4] * v1 + m[7] * v2 + m[10]; 11 | dst[2] = m[2] * v0 + m[5] * v1 + m[8] * v2 + m[11]; 12 | 13 | return dst; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/math/matrix/mat43/TransformVector.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (m, v, dst = new mat(12)) { 4 | 5 | const v0 = v[0]; 6 | const v1 = v[1]; 7 | const v2 = v[2]; 8 | 9 | dst[0] = m[0] * v0 + m[3] * v1 + m[6] * v2; 10 | dst[1] = m[1] * v0 + m[4] * v1 + m[7] * v2; 11 | dst[2] = m[2] * v0 + m[5] * v1 + m[8] * v2; 12 | 13 | return dst; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/math/matrix/mat43/Translate.js: -------------------------------------------------------------------------------- 1 | export default function (matrix, pos) { 2 | 3 | matrix[9] += pos[0]; 4 | matrix[10] += pos[1]; 5 | matrix[11] += pos[2]; 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/math/matrix/mat43/Transpose.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (m, dst = new mat(12)) { 4 | 5 | dst[0] = m[0]; 6 | dst[1] = m[3]; 7 | dst[2] = m[6]; 8 | dst[3] = m[9]; 9 | dst[4] = m[1]; 10 | dst[5] = m[4]; 11 | dst[6] = m[7]; 12 | dst[7] = m[10]; 13 | dst[8] = m[2]; 14 | dst[9] = m[5]; 15 | dst[10] = m[8]; 16 | dst[11] = m[11]; 17 | 18 | return dst; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/math/matrix/mat43/Up.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (m, dst = new mat(12)) { 4 | 5 | dst[0] = m[3]; 6 | dst[1] = m[4]; 7 | dst[2] = m[5]; 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/matrix/mat44/At.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (m, dst = new mat(16)) { 4 | 5 | dst[0] = m[8]; 6 | dst[1] = m[9]; 7 | dst[2] = m[10]; 8 | dst[3] = m[11]; 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/matrix/mat44/BuildIdentity.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (dst = new mat(16)) { 4 | 5 | dst[0] = 1; 6 | dst[1] = 0; 7 | dst[2] = 0; 8 | dst[3] = 0; 9 | dst[4] = 1; 10 | dst[5] = 0; 11 | dst[6] = 0; 12 | dst[7] = 0; 13 | dst[8] = 1; 14 | dst[9] = 0; 15 | dst[10] = 0; 16 | dst[11] = 0; 17 | dst[12] = 0; 18 | dst[13] = 0; 19 | dst[14] = 0; 20 | dst[15] = 1; 21 | 22 | return dst; 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/math/matrix/mat44/Copy.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (src, dst = new mat(16)) { 4 | 5 | dst[0] = src[0]; 6 | dst[1] = src[1]; 7 | dst[2] = src[2]; 8 | dst[3] = src[3]; 9 | dst[4] = src[4]; 10 | dst[5] = src[5]; 11 | dst[6] = src[6]; 12 | dst[7] = src[7]; 13 | dst[8] = src[8]; 14 | dst[9] = src[9]; 15 | dst[10] = src[10]; 16 | dst[11] = src[11]; 17 | dst[12] = src[12]; 18 | dst[13] = src[13]; 19 | dst[14] = src[14]; 20 | dst[15] = src[15]; 21 | 22 | return dst; 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/math/matrix/mat44/Pos.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (m, dst = new mat(16)) { 4 | 5 | dst[0] = m[12]; 6 | dst[1] = m[13]; 7 | dst[2] = m[14]; 8 | dst[3] = m[15]; 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/matrix/mat44/Right.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (m, dst = new mat(16)) { 4 | 5 | dst[0] = m[0]; 6 | dst[1] = m[1]; 7 | dst[2] = m[2]; 8 | dst[3] = m[3]; 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/matrix/mat44/SetAt.js: -------------------------------------------------------------------------------- 1 | export default function (m, v) { 2 | 3 | m[8] = v[0]; 4 | m[9] = v[1]; 5 | m[10] = v[2]; 6 | m[11] = v[3]; 7 | 8 | return m; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/matrix/mat44/SetPos.js: -------------------------------------------------------------------------------- 1 | export default function (m, v) { 2 | 3 | m[12] = v[0]; 4 | m[13] = v[1]; 5 | m[14] = v[2]; 6 | m[15] = v[3]; 7 | 8 | return m; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/matrix/mat44/SetRight.js: -------------------------------------------------------------------------------- 1 | export default function (m, v) { 2 | 3 | m[0] = v[0]; 4 | m[1] = v[1]; 5 | m[2] = v[2]; 6 | m[3] = v[3]; 7 | 8 | return m; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/matrix/mat44/SetUp.js: -------------------------------------------------------------------------------- 1 | export default function (m, v) { 2 | 3 | m[4] = v[0]; 4 | m[5] = v[1]; 5 | m[6] = v[2]; 6 | m[7] = v[3]; 7 | 8 | return m; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/matrix/mat44/Translate.js: -------------------------------------------------------------------------------- 1 | export default function (m, p) { 2 | 3 | m[12] += v[0]; 4 | m[13] += v[1]; 5 | m[14] += v[2]; 6 | m[15] += v[3]; 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/math/matrix/mat44/Transpose.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (m, dst = new mat(16)) { 4 | 5 | dst[0] = m[0]; 6 | dst[1] = m[4]; 7 | dst[2] = m[8]; 8 | dst[3] = m[12]; 9 | dst[4] = m[1]; 10 | dst[5] = m[5]; 11 | dst[6] = m[9]; 12 | dst[7] = m[13]; 13 | dst[8] = m[2]; 14 | dst[9] = m[6]; 15 | dst[10] = m[10]; 16 | dst[11] = m[14]; 17 | dst[12] = m[3]; 18 | dst[13] = m[7]; 19 | dst[14] = m[11]; 20 | dst[15] = m[15]; 21 | 22 | return dst; 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/math/matrix/mat44/Up.js: -------------------------------------------------------------------------------- 1 | let mat = Float32Array; 2 | 3 | export default function (m, dst = new mat(16)) { 4 | 5 | dst[0] = m[4]; 6 | dst[1] = m[5]; 7 | dst[2] = m[6]; 8 | dst[3] = m[7]; 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/quaternion/Build.js: -------------------------------------------------------------------------------- 1 | let quat = Float32Array; 2 | 3 | export default function (x, y, z, w, dst = new quat(4)) { 4 | 5 | dst[0] = x; 6 | dst[1] = y; 7 | dst[2] = z; 8 | dst[3] = w; 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/quaternion/Conjugate.js: -------------------------------------------------------------------------------- 1 | let quat = Float32Array; 2 | 3 | export default function (q, dst = new quat(4)) { 4 | 5 | dst[0] = -q[0]; 6 | dst[1] = -q[1]; 7 | dst[2] = -q[2]; 8 | dst[3] = q[3]; 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/quaternion/Copy.js: -------------------------------------------------------------------------------- 1 | let quat = Float32Array; 2 | 3 | export default function (src, dst = new quat(4)) { 4 | 5 | dst[0] = src[0]; 6 | dst[1] = src[1]; 7 | dst[2] = src[2]; 8 | dst[3] = src[3]; 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/quaternion/Dot.js: -------------------------------------------------------------------------------- 1 | import Dot from 'math/vector/vec4/Dot.js'; 2 | 3 | export default function (q1, q2) { 4 | 5 | return Dot(q1, q2); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/math/quaternion/Equal.js: -------------------------------------------------------------------------------- 1 | export default function (q1, q2, precision = 1e-6) { 2 | 3 | return ( 4 | Math.abs(q1[0] - q2[0]) <= precision && 5 | Math.abs(q1[1] - q2[1]) <= precision && 6 | Math.abs(q1[2] - q2[2]) <= precision && 7 | Math.abs(q1[3] - q2[3]) <= precision 8 | ); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/quaternion/FromAxisRotation.js: -------------------------------------------------------------------------------- 1 | import Normalize from 'math/quaternion/Normalize.js'; 2 | 3 | let quat = Float32Array; 4 | 5 | export default function (axis, angle, dst = new quat(4)) { 6 | 7 | const omega = 0.5 * angle; 8 | const s = Math.sin(omega); 9 | const c = Math.cos(omega); 10 | 11 | dst[0] = axis[0] * s; 12 | dst[1] = axis[1] * s; 13 | dst[2] = axis[2] * s; 14 | dst[3] = c; 15 | 16 | return Normalize(dst, dst); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/math/quaternion/Length.js: -------------------------------------------------------------------------------- 1 | import Length from 'math/vector/vec4/Length.js'; 2 | 3 | export default function (q) { 4 | 5 | return Length(q); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/math/quaternion/Lerp.js: -------------------------------------------------------------------------------- 1 | let quat = Float32Array; 2 | 3 | export default function (q1, q2, t, dst = new quat(4)) { 4 | 5 | const q1x = q1[0]; 6 | const q1y = q1[1]; 7 | const q1z = q1[2]; 8 | const q1w = q1[3]; 9 | 10 | const q2x = q2[0]; 11 | const q2y = q2[1]; 12 | const q2z = q2[2]; 13 | const q2w = q2[3]; 14 | 15 | dst[0] = ((q2x - q1x) * t) + q1x; 16 | dst[1] = ((q2y - q1y) * t) + q1y; 17 | dst[2] = ((q2z - q1z) * t) + q1z; 18 | dst[3] = ((q2w - q1w) * t) + q1w; 19 | 20 | return dst; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/math/quaternion/Normalize.js: -------------------------------------------------------------------------------- 1 | import BuildZero from 'math/vector/vec4/BuildZero.js'; 2 | import ScalarMultiply from 'math/vector/vec4/ScalarMultiply.js'; 3 | import Dot from 'math/vector/quaternion/Dot.js'; 4 | 5 | let quat = Float32Array; 6 | 7 | export default function (q, dst = new quat(4)) { 8 | 9 | const norme = Dot(q, q); 10 | 11 | if (norme === 0) 12 | { 13 | return BuildZero(dst); 14 | } 15 | else 16 | { 17 | return ScalarMultiply(q, 1 / Math.sqrt(norme), dst); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/math/quaternion/PosMultiply.js: -------------------------------------------------------------------------------- 1 | import Multiply from 'math/quaternion/Multiply.js'; 2 | import PosTransformPoint from 'math/quaternion/PosTransformPoint.js'; 3 | 4 | export default function (qp, p) { 5 | 6 | const v2 = qp2.slice(4, 7); 7 | const qr = Multiply(qp1, qp2); 8 | const pr = PosTransformPoint(qp1, v2); 9 | 10 | qr[4] = pr[0]; 11 | qr[5] = pr[1]; 12 | qr[6] = pr[2]; 13 | 14 | return qr; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/math/quaternion/PosTransformPoint.js: -------------------------------------------------------------------------------- 1 | import Add from 'math/vector/vec3/Add.js'; 2 | import TransformVector from 'math/quaternion/TransformVector.js'; 3 | 4 | export default function (qp, p) { 5 | 6 | const offset = qp.slice(4, 7); 7 | 8 | const rotatedp = TransformVector(qp, p); 9 | 10 | return Add(rotatedp, offset); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/quaternion/PosTransformVector.js: -------------------------------------------------------------------------------- 1 | import TransformVector from 'math/quaternion/TransformVector.js'; 2 | 3 | let vec3 = Float32Array; 4 | 5 | export default function (qp, n, dst = new vec3(3)) { 6 | 7 | return TransformVector(qp, n, dst); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/math/transform/2d/SetTransformToCSS.js: -------------------------------------------------------------------------------- 1 | export default function SetTransformToCSS (transform, element, i = 1) { 2 | 3 | if (transform.dirty) 4 | { 5 | transform.updateTransform(i); 6 | } 7 | 8 | let t = transform.local; 9 | let ax = transform.rotationAnchor.x * 100; 10 | let ay = transform.rotationAnchor.y * 100; 11 | 12 | element.style['transform-origin'] = `${ax}% ${ay}% 0px`; 13 | element.style.transform = `matrix(${t[0]}, ${t[1]}, ${t[2]}, ${t[3]}, ${t[4]}, ${t[5]})`; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/math/transform/2d/SetTransformToContext.js: -------------------------------------------------------------------------------- 1 | export default function SetTransformToContext (transform, context, i = 1) { 2 | 3 | if (transform.dirty) 4 | { 5 | transform.updateTransform(i); 6 | } 7 | 8 | context.setTransform( 9 | transform.local[0], // scale x 10 | transform.local[1], // shear y 11 | transform.local[2], // shear x 12 | transform.local[3], // scale y 13 | transform.local[4], // translate x 14 | transform.local[5] // translate y 15 | ); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/math/vector/common/Rotate.js: -------------------------------------------------------------------------------- 1 | export default function (v, angle) { 2 | 3 | let x = v[0]; 4 | let y = v[1]; 5 | 6 | v[0] = x * Math.cos(angle) - y * Math.sin(angle); 7 | v[1] = x * Math.sin(angle) + y * Math.cos(angle); 8 | 9 | return v; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/vector/common/RotateAround.js: -------------------------------------------------------------------------------- 1 | export default function (v, cx, cy, angle) { 2 | 3 | const c = Math.cos(angle); 4 | const s = Math.sin(angle); 5 | 6 | const x = v[0] - cx; 7 | const y = v[1] - cy; 8 | 9 | v[0] = x * c - y * s + cx; 10 | v[1] = x * s + y * c + cy; 11 | 12 | return v; 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/math/vector/vec2/Abs.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (a, dst = new vec2(2)) { 4 | 5 | dst[0] = Math.abs(a[0]); 6 | dst[1] = Math.abs(a[1]); 7 | 8 | return dst; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec2/Add.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec2(2)) { 4 | 5 | dst[0] = a[0] + b[0]; 6 | dst[1] = a[1] + b[1]; 7 | 8 | return dst; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec2/Add3.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (a, b, c, dst = new vec2(2)) { 4 | 5 | dst[0] = a[0] + b[0] + c[0]; 6 | dst[1] = a[1] + b[1] + c[1]; 7 | 8 | return dst; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec2/Add4.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (a, b, c, d, dst = new vec2(2)) { 4 | 5 | dst[0] = a[0] + b[0] + c[0] + d[0]; 6 | dst[1] = a[1] + b[1] + c[1] + d[1]; 7 | 8 | return dst; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec2/Angle.js: -------------------------------------------------------------------------------- 1 | import Clamp from 'math/Clamp.js'; 2 | 3 | // Get the angle in radians between the two given vectors 4 | 5 | export default function (a, b) { 6 | 7 | const dot = a[0] * b[0] + a[1] * b[1]; 8 | const len = Math.sqrt(a[0] * a[0] + a[1] * a[1]); 9 | const lenV = Math.sqrt(b[0] * b[0] + b[1] * b[1]); 10 | 11 | return Math.acos(Clamp(dot / (len * lenV), -1, 1)); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/math/vector/vec2/Build.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (x, y, dst = new vec2(2)) { 4 | 5 | dst[0] = x; 6 | dst[1] = y; 7 | 8 | return dst; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec2/BuildOne.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (dst = new vec2(2)) { 4 | 5 | dst[0] = 1; 6 | dst[1] = 1; 7 | 8 | return dst; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec2/BuildXAxis.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (dst = new vec2(2)) { 4 | 5 | dst[0] = 1; 6 | dst[1] = 0; 7 | 8 | return dst; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec2/BuildYAxis.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (dst = new vec2(2)) { 4 | 5 | dst[0] = 0; 6 | dst[1] = 1; 7 | 8 | return dst; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec2/BuildZero.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (dst = new vec2(2)) { 4 | 5 | dst[0] = 0; 6 | dst[1] = 0; 7 | 8 | return dst; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec2/Ceil.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (a, dst = new vec2(2)) { 4 | 5 | dst[0] = Math.ceil(a[0]); 6 | dst[1] = Math.ceil(a[1]); 7 | 8 | return dst; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec2/Copy.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (src, dst = new vec2(2)) { 4 | 5 | dst[0] = src[0]; 6 | dst[1] = src[1]; 7 | 8 | return dst; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec2/Distance.js: -------------------------------------------------------------------------------- 1 | export default function (a, b) { 2 | 3 | const dx = a[0] - b[0]; 4 | const dy = a[1] - b[1]; 5 | 6 | return Math.sqrt(dx * dx + dy * dy); 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/math/vector/vec2/DistanceSq.js: -------------------------------------------------------------------------------- 1 | export default function (a, b) { 2 | 3 | const dx = a[0] - b[0]; 4 | const dy = a[1] - b[1]; 5 | 6 | return dx * dx + dy * dy; 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/math/vector/vec2/Dot.js: -------------------------------------------------------------------------------- 1 | 2 | export default function (a, b) { 3 | 4 | return (a[0] * b[0]) + (a[1] * b[1]); 5 | 6 | } 7 | -------------------------------------------------------------------------------- /src/math/vector/vec2/Equal.js: -------------------------------------------------------------------------------- 1 | 2 | export default function (a, b, precision = 1e-6) { 3 | 4 | return ( 5 | Math.abs(a[0] - b[0]) <= precision && 6 | Math.abs(a[1] - b[1]) <= precision 7 | ); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/math/vector/vec2/Floor.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (a, dst = new vec2(2)) { 4 | 5 | dst[0] = Math.floor(a[0]); 6 | dst[1] = Math.floor(a[1]); 7 | 8 | return dst; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec2/Length.js: -------------------------------------------------------------------------------- 1 | 2 | export default function (a) { 3 | 4 | let x = a[0]; 5 | let y = a[1]; 6 | 7 | return Math.sqrt((x * x) + (y * y)); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/math/vector/vec2/LengthSq.js: -------------------------------------------------------------------------------- 1 | 2 | export default function (a) { 3 | 4 | let x = a[0]; 5 | let y = a[1]; 6 | 7 | return (x * x) + (y * y); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/math/vector/vec2/Lerp.js: -------------------------------------------------------------------------------- 1 | // A linear interpolation between a and b (by amount 't') 2 | // Set into a which is returned 3 | 4 | let vec2 = Float32Array; 5 | 6 | export default function (a, b, t, dst = new vec2(2)) { 7 | 8 | dst[0] = a[0] + ((b[0] - a[0]) * t); 9 | dst[1] = a[1] + ((b[1] - a[1]) * t); 10 | 11 | return dst; 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/math/vector/vec2/Max.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec2(2)) { 4 | 5 | dst[0] = Math.max(a[0], b[0]); 6 | dst[1] = Math.max(a[1], b[1]); 7 | 8 | return dst; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec2/Min.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec2(2)) { 4 | 5 | dst[0] = Math.min(a[0], b[0]); 6 | dst[1] = Math.min(a[1], b[1]); 7 | 8 | return dst; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec2/Multiply.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec2(2)) { 4 | 5 | dst[0] = a[0] * b[0]; 6 | dst[1] = a[1] * b[1]; 7 | 8 | return dst; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec2/MultiplyAdd.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (a, b, c, dst = new vec2(2)) { 4 | 5 | dst[0] = (a[0] * b[0]) + c[0]; 6 | dst[1] = (a[1] * b[1]) + c[1]; 7 | 8 | return dst; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec2/Neg.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (a, dst = new vec2(2)) { 4 | 5 | dst[0] = -a[0]; 6 | dst[1] = -a[1]; 7 | 8 | return dst; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec2/Normalize.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (a, dst = new vec2(2)) { 4 | 5 | const x = a[0]; 6 | const y = a[1]; 7 | const lsq = x * x + y * y; 8 | 9 | if (lsq > 0) 10 | { 11 | const lr = 1 / Math.sqrt(lsq); 12 | 13 | dst[0] = x * lr; 14 | dst[1] = y * lr; 15 | } 16 | else 17 | { 18 | dst[0] = 0; 19 | dst[1] = 0; 20 | } 21 | 22 | return dst; 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/math/vector/vec2/PerpDot.js: -------------------------------------------------------------------------------- 1 | export default function (a, b) { 2 | 3 | return (a[0] * b[1]) - (a[1] * b[0]); 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/math/vector/vec2/Project.js: -------------------------------------------------------------------------------- 1 | // Project vector b onto vector a and return a 2 | 3 | export default function (a, b) { 4 | 5 | const dot = a[0] * b[0] + a[1] * b[1]; 6 | const lenV = b[0] * b[0] + b[1] * b[1]; 7 | const s = dot / lenV; 8 | 9 | a[0] *= s; 10 | a[1] *= s; 11 | 12 | return a; 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/math/vector/vec2/Reciprocal.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export function reciprocal (a, dst = new vec2(2)) { 4 | 5 | // let rcp = VMath.reciprocal; 6 | 7 | // dst[0] = rcp(a[0]); 8 | // dst[1] = rcp(a[1]); 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/vector/vec2/ScalarAdd.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec2(2)) { 4 | 5 | dst[0] = a[0] + b; 6 | dst[1] = a[1] + b; 7 | 8 | return dst; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec2/ScalarBuild.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (a, dst = new vec2(2)) { 4 | 5 | dst[0] = a; 6 | dst[1] = a; 7 | 8 | return dst; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec2/ScalarMask.js: -------------------------------------------------------------------------------- 1 | 2 | export function equal (a, b, precision = 1e-6) { 3 | 4 | return [ 5 | Math.abs(a[0] - b) <= precision, 6 | Math.abs(a[1] - b) <= precision 7 | ]; 8 | 9 | } 10 | 11 | export function less (a, b) { 12 | 13 | return [ a[0] < b, a[1] < b ]; 14 | 15 | } 16 | 17 | export function greater (a, b) { 18 | 19 | return [ a[0] > b, a[1] > b ]; 20 | 21 | } 22 | 23 | export function greaterEq (a, b) { 24 | 25 | return [ a[0] >= b, a[1] >= b ]; 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/math/vector/vec2/ScalarMax.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec2(2)) { 4 | 5 | dst[0] = Math.max(a[0], b); 6 | dst[1] = Math.max(a[1], b); 7 | 8 | return dst; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec2/ScalarMin.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec2(2)) { 4 | 5 | dst[0] = Math.min(a[0], b); 6 | dst[1] = Math.min(a[1], b); 7 | 8 | return dst; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec2/ScalarMultiply.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec2(2)) { 4 | 5 | if (b === 0) 6 | { 7 | dst[0] = 0; 8 | dst[1] = 0; 9 | } 10 | else 11 | { 12 | dst[0] = a[0] * b; 13 | dst[1] = a[1] * b; 14 | } 15 | 16 | return dst; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/math/vector/vec2/ScalarMultiplyAdd.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (a, b, c, dst = new vec2(2)) { 4 | 5 | dst[0] = a[0] + b[0] * c; 6 | dst[1] = a[1] + b[1] * c; 7 | 8 | return dst; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec2/ScalarSub.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec2(2)) { 4 | 5 | dst[0] = a[0] - b; 6 | dst[1] = a[1] - b; 7 | 8 | return dst; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec2/Select.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (m, a, b, dst = new vec2(2)) { 4 | 5 | dst[0] = m[0] ? a[0] : b[0]; 6 | dst[1] = m[1] ? a[1] : b[1]; 7 | 8 | return dst; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec2/Set.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (v, a) { 4 | 5 | v[0] = a[0]; 6 | v[1] = a[1]; 7 | 8 | return v; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec2/Sub.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec2(2)) { 4 | 5 | dst[0] = a[0] - b[0]; 6 | dst[1] = a[1] - b[1]; 7 | 8 | return dst; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec3/Abs.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (a, dst = new vec3(3)) { 4 | 5 | dst[0] = Math.abs(a[0]); 6 | dst[1] = Math.abs(a[1]); 7 | dst[2] = Math.abs(a[2]); 8 | 9 | return dst; 10 | 11 | } 12 | 13 | -------------------------------------------------------------------------------- /src/math/vector/vec3/Add.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec3(3)) { 4 | 5 | dst[0] = a[0] + b[0]; 6 | dst[1] = a[1] + b[1]; 7 | dst[2] = a[2] + b[2]; 8 | 9 | return dst; 10 | 11 | } 12 | 13 | -------------------------------------------------------------------------------- /src/math/vector/vec3/Add3.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (a, b, c, dst = new vec3(3)) { 4 | 5 | dst[0] = a[0] + b[0] + c[0]; 6 | dst[1] = a[1] + b[1] + c[1]; 7 | dst[2] = a[2] + b[2] + c[2]; 8 | 9 | return dst; 10 | 11 | } 12 | 13 | -------------------------------------------------------------------------------- /src/math/vector/vec3/Add4.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (a, b, c, d, dst = new vec3(3)) { 4 | 5 | dst[0] = a[0] + b[0] + c[0] + d[0]; 6 | dst[1] = a[1] + b[1] + c[1] + d[1]; 7 | dst[2] = a[2] + b[2] + c[2] + d[2]; 8 | 9 | return dst; 10 | 11 | } 12 | 13 | -------------------------------------------------------------------------------- /src/math/vector/vec3/Angle.js: -------------------------------------------------------------------------------- 1 | import Clamp from 'math/Clamp.js'; 2 | 3 | // Get the angle in radians between the two given vectors 4 | 5 | export default function (a, b) { 6 | 7 | const dot = a[0] * b[0] + a[1] * b[1] + a[2] * (b[2] || 1); 8 | const len = Math.sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2]); 9 | const lenV = Math.sqrt(b[0] * b[0] + b[1] * b[1] + b[2] * b[2]); 10 | 11 | return Math.acos(Clamp(dot / (len * lenV), -1, 1)); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/math/vector/vec3/Build.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (x, y, z, dst = new vec3(3)) { 4 | 5 | dst[0] = x; 6 | dst[1] = y; 7 | dst[2] = z; 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/vector/vec3/BuildOne.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (dst = new vec3(3)) { 4 | 5 | dst[0] = 1; 6 | dst[1] = 1; 7 | dst[2] = 1; 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/vector/vec3/BuildXAxis.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (dst = new vec3(3)) { 4 | 5 | dst[0] = 1; 6 | dst[1] = 0; 7 | dst[2] = 0; 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/vector/vec3/BuildYAxis.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (dst = new vec3(3)) { 4 | 5 | dst[0] = 0; 6 | dst[1] = 1; 7 | dst[2] = 0; 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/vector/vec3/BuildZAxis.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (dst = new vec3(3)) { 4 | 5 | dst[0] = 0; 6 | dst[1] = 0; 7 | dst[2] = 1; 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/vector/vec3/BuildZero.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (dst = new vec3(3)) { 4 | 5 | dst[0] = 0; 6 | dst[1] = 0; 7 | dst[2] = 0; 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/vector/vec3/Copy.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (src, dst = new vec3(3)) { 4 | 5 | dst[0] = src[0]; 6 | dst[1] = src[1]; 7 | dst[2] = src[2]; 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/vector/vec3/Cross.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec3(3)) { 4 | 5 | const a0 = a[0]; 6 | const a1 = a[1]; 7 | const a2 = a[2]; 8 | 9 | const b0 = b[0]; 10 | const b1 = b[1]; 11 | const b2 = b[2]; 12 | 13 | dst[0] = (a1 * b2) - (a2 * b1); 14 | dst[1] = (a2 * b0) - (a0 * b2); 15 | dst[2] = (a0 * b1) - (a1 * b0); 16 | 17 | return dst; 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/math/vector/vec3/Distance.js: -------------------------------------------------------------------------------- 1 | export default function (a, b) { 2 | 3 | const dx = a[0] - b[0]; 4 | const dy = a[1] - b[1]; 5 | const dz = a[2] - b[2]; 6 | 7 | return Math.sqrt(dx * dx + dy * dy + dz * dz); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/math/vector/vec3/DistanceSq.js: -------------------------------------------------------------------------------- 1 | export default function (a, b) { 2 | 3 | const dx = a[0] - b[0]; 4 | const dy = a[1] - b[1]; 5 | const dz = a[2] - b[2]; 6 | 7 | return dx * dx + dy * dy + dz * dz; 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/math/vector/vec3/Dot.js: -------------------------------------------------------------------------------- 1 | 2 | export default function (a, b) { 3 | 4 | return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] + b[2]); 5 | 6 | } 7 | 8 | -------------------------------------------------------------------------------- /src/math/vector/vec3/Equal.js: -------------------------------------------------------------------------------- 1 | 2 | export default function (a, b, precision = 1e-6) { 3 | 4 | return ( 5 | Math.abs(a[0] - b[0]) <= precision && 6 | Math.abs(a[1] - b[1]) <= precision && 7 | Math.abs(a[2] - b[2]) <= precision 8 | ); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec3/Length.js: -------------------------------------------------------------------------------- 1 | 2 | export default function (a) { 3 | 4 | const x = a[0]; 5 | const y = a[1]; 6 | const z = a[2]; 7 | 8 | return Math.sqrt((x * x) + (y * y) + (z * z)); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec3/LengthSq.js: -------------------------------------------------------------------------------- 1 | 2 | export default function (a) { 3 | 4 | const x = a[0]; 5 | const y = a[1]; 6 | const z = a[2]; 7 | 8 | return (x * x) + (y * y) + (z * z); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec3/Lerp.js: -------------------------------------------------------------------------------- 1 | // A linear interpolation between a and b (by amount 't') 2 | // Set into a which is returned 3 | 4 | export default function (a, b, t) { 5 | 6 | a[0] += (b[0] - a[0]) * t; 7 | a[1] += (b[1] - a[1]) * t; 8 | a[2] += (b[2] - a[2]) * t; 9 | 10 | return a; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/vector/vec3/Max.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec3(3)) { 4 | 5 | dst[0] = Math.max(a[0], b[0]); 6 | dst[1] = Math.max(a[1], b[1]); 7 | dst[2] = Math.max(a[2], b[2]); 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/vector/vec3/Min.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec3(3)) { 4 | 5 | dst[0] = Math.min(a[0], b[0]); 6 | dst[1] = Math.min(a[1], b[1]); 7 | dst[2] = Math.min(a[2], b[2]); 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/vector/vec3/Multiply.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec3(3)) { 4 | 5 | dst[0] = a[0] * b[0]; 6 | dst[1] = a[1] * b[1]; 7 | dst[2] = a[2] * b[2]; 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/vector/vec3/MultiplyAdd.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (a, b, c, dst = new vec3(3)) { 4 | 5 | dst[0] = (a[0] * b[0]) + c[0]; 6 | dst[1] = (a[1] * b[1]) + c[1]; 7 | dst[2] = (a[2] * b[2]) + c[2]; 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/vector/vec3/Neg.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (a, dst = new vec3(3)) { 4 | 5 | dst[0] = -a[0]; 6 | dst[1] = -a[1]; 7 | dst[2] = -a[2]; 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/vector/vec3/Normalize.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (a, dst = new vec3(3)) { 4 | 5 | const x = a[0]; 6 | const y = a[1]; 7 | const z = a[2]; 8 | 9 | const lsq = (x * x) + (y * y) + (z * z); 10 | 11 | if (lsq > 0) 12 | { 13 | const lr = 1 / Math.sqrt(lsq); 14 | 15 | dst[0] = x * lr; 16 | dst[1] = y * lr; 17 | dst[2] = z * lr; 18 | } 19 | else 20 | { 21 | dst[0] = 0; 22 | dst[1] = 0; 23 | dst[2] = 0; 24 | } 25 | 26 | return dst; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/math/vector/vec3/Project.js: -------------------------------------------------------------------------------- 1 | // Project vector b onto vector a and return a 2 | 3 | export default function (a, b) { 4 | 5 | const dot = a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; 6 | const lenV = b[0] * b[0] + b[1] * b[1] + b[2] * b[2]; 7 | const s = dot / lenV; 8 | 9 | a[0] *= s; 10 | a[1] *= s; 11 | a[2] *= s; 12 | 13 | return a; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/math/vector/vec3/Reciprocal.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (a, dst = new vec3(3)) { 4 | 5 | // let rcp = VMath.reciprocal; 6 | 7 | // var rcp = VMath.reciprocal; 8 | // dst[0] = rcp(a[0]); 9 | // dst[1] = rcp(a[1]); 10 | // dst[2] = rcp(a[2]); 11 | 12 | return dst; 13 | 14 | } 15 | 16 | -------------------------------------------------------------------------------- /src/math/vector/vec3/ScalarAdd.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec3(3)) { 4 | 5 | dst[0] = a[0] + b; 6 | dst[1] = a[1] + b; 7 | dst[2] = a[2] + b; 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/vector/vec3/ScalarBuild.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (a, dst = new vec3(3)) { 4 | 5 | dst[0] = a; 6 | dst[1] = a; 7 | dst[2] = a; 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/vector/vec3/ScalarMax.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec3(3)) { 4 | 5 | dst[0] = Math.max(a[0], b); 6 | dst[1] = Math.max(a[1], b); 7 | dst[2] = Math.max(a[2], b); 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/vector/vec3/ScalarMin.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec3(3)) { 4 | 5 | dst[0] = Math.min(a[0], b); 6 | dst[1] = Math.min(a[1], b); 7 | dst[2] = Math.min(a[2], b); 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/vector/vec3/ScalarMultiply.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec3(3)) { 4 | 5 | if (b === 0) 6 | { 7 | dst[0] = 0; 8 | dst[1] = 0; 9 | dst[2] = 0; 10 | } 11 | else 12 | { 13 | dst[0] = a[0] * b; 14 | dst[1] = a[1] * b; 15 | dst[2] = a[2] * b; 16 | } 17 | 18 | return dst; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/math/vector/vec3/ScalarMultiplyAdd.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (a, b, c, dst = new vec3(3)) { 4 | 5 | dst[0] = a[0] + b[0] * c; 6 | dst[1] = a[1] + b[1] * c; 7 | dst[2] = a[2] + b[2] * c; 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/vector/vec3/ScalarSub.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec3(3)) { 4 | 5 | dst[0] = a[0] - b; 6 | dst[1] = a[1] - b; 7 | dst[2] = a[2] - b; 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/vector/vec3/Select.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (m, a, b, dst = new vec3(3)) { 4 | 5 | dst[0] = m[0] ? a[0] : b[0]; 6 | dst[1] = m[1] ? a[1] : b[1]; 7 | dst[2] = m[2] ? a[2] : b[2]; 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/vector/vec3/Set.js: -------------------------------------------------------------------------------- 1 | 2 | export default function (v, a) { 3 | 4 | v[0] = a[0]; 5 | v[1] = a[1]; 6 | v[2] = a[2]; 7 | 8 | return v; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/math/vector/vec3/Sub.js: -------------------------------------------------------------------------------- 1 | let vec3 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec3(3)) { 4 | 5 | dst[0] = a[0] - b[0]; 6 | dst[1] = a[1] - b[1]; 7 | dst[2] = a[2] - b[2]; 8 | 9 | return dst; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/vector/vec4/Abs.js: -------------------------------------------------------------------------------- 1 | let vec4 = Float32Array; 2 | 3 | export default function (a, dst = new vec4(4)) { 4 | 5 | dst[0] = Math.abs(a[0]); 6 | dst[1] = Math.abs(a[1]); 7 | dst[2] = Math.abs(a[2]); 8 | dst[3] = Math.abs(a[3]); 9 | 10 | return dst; 11 | } 12 | -------------------------------------------------------------------------------- /src/math/vector/vec4/Add.js: -------------------------------------------------------------------------------- 1 | let vec4 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec4(4)) { 4 | 5 | dst[0] = a[0] + b[0]; 6 | dst[1] = a[1] + b[1]; 7 | dst[2] = a[2] + b[2]; 8 | dst[3] = a[3] + b[3]; 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/vector/vec4/Add3.js: -------------------------------------------------------------------------------- 1 | let vec4 = Float32Array; 2 | 3 | export default function (a, b, c, dst = new vec4(4)) { 4 | 5 | dst[0] = a[0] + b[0] + c[0]; 6 | dst[1] = a[1] + b[1] + c[1]; 7 | dst[2] = a[2] + b[2] + c[2]; 8 | dst[3] = a[3] + b[3] + c[3]; 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/vector/vec4/Add4.js: -------------------------------------------------------------------------------- 1 | let vec4 = Float32Array; 2 | 3 | export default function (a, b, c, d, dst = new vec4(4)) { 4 | 5 | dst[0] = a[0] + b[0] + c[0] + d[0]; 6 | dst[1] = a[1] + b[1] + c[1] + d[1]; 7 | dst[2] = a[2] + b[2] + c[2] + d[2]; 8 | dst[3] = a[3] + b[3] + c[3] + d[3]; 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/vector/vec4/Build.js: -------------------------------------------------------------------------------- 1 | let vec4 = Float32Array; 2 | 3 | export default function (a, b, c, d, dst = new vec4(4)) { 4 | 5 | dst[0] = a; 6 | dst[1] = b; 7 | dst[2] = c; 8 | dst[3] = d; 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/vector/vec4/BuildOne.js: -------------------------------------------------------------------------------- 1 | let vec4 = Float32Array; 2 | 3 | export default function (dst = new vec4(4)) { 4 | 5 | dst[0] = 1; 6 | dst[1] = 1; 7 | dst[2] = 1; 8 | dst[3] = 1; 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/vector/vec4/BuildZero.js: -------------------------------------------------------------------------------- 1 | let vec4 = Float32Array; 2 | 3 | export default function (dst = new vec4(4)) { 4 | 5 | dst[0] = 0; 6 | dst[1] = 0; 7 | dst[2] = 0; 8 | dst[3] = 0; 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/vector/vec4/Copy.js: -------------------------------------------------------------------------------- 1 | let vec4 = Float32Array; 2 | 3 | export default function (src, dst = new vec4(4)) { 4 | 5 | dst[0] = src[0]; 6 | dst[1] = src[1]; 7 | dst[2] = src[2]; 8 | dst[3] = src[3]; 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/vector/vec4/Dot.js: -------------------------------------------------------------------------------- 1 | let vec4 = Float32Array; 2 | 3 | export default function (a, b) { 4 | 5 | return (a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/math/vector/vec4/Equal.js: -------------------------------------------------------------------------------- 1 | 2 | export default function (a, b, precision = 1e-6) { 3 | 4 | return ( 5 | Math.abs(a[0] - b[0]) <= precision && 6 | Math.abs(a[1] - b[1]) <= precision && 7 | Math.abs(a[2] - b[2]) <= precision && 8 | Math.abs(a[3] - b[3]) <= precision 9 | ); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/vector/vec4/Length.js: -------------------------------------------------------------------------------- 1 | 2 | export default function (a) { 3 | 4 | const a0 = a[0]; 5 | const a1 = a[1]; 6 | const a2 = a[2]; 7 | const a3 = a[3]; 8 | 9 | return Math.sqrt((a0 * a0) + (a1 * a1) + (a2 * a2) + (a3 * a3)); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/vector/vec4/LengthSq.js: -------------------------------------------------------------------------------- 1 | 2 | export default function (a) { 3 | 4 | const a0 = a[0]; 5 | const a1 = a[1]; 6 | const a2 = a[2]; 7 | const a3 = a[3]; 8 | 9 | return (a0 * a0) + (a1 * a1) + (a2 * a2) + (a3 * a3); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/math/vector/vec4/Many.js: -------------------------------------------------------------------------------- 1 | 2 | export default function (m) { 3 | 4 | return (m[0] || m[1] || m[2] || m[3]); 5 | 6 | } 7 | -------------------------------------------------------------------------------- /src/math/vector/vec4/Max.js: -------------------------------------------------------------------------------- 1 | let vec4 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec4(4)) { 4 | 5 | dst[0] = Math.max(a[0], b[0]); 6 | dst[1] = Math.max(a[1], b[1]); 7 | dst[2] = Math.max(a[2], b[2]); 8 | dst[3] = Math.max(a[3], b[3]); 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/vector/vec4/Min.js: -------------------------------------------------------------------------------- 1 | let vec4 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec4(4)) { 4 | 5 | dst[0] = Math.min(a[0], b[0]); 6 | dst[1] = Math.min(a[1], b[1]); 7 | dst[2] = Math.min(a[2], b[2]); 8 | dst[3] = Math.min(a[3], b[3]); 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/vector/vec4/Multiply.js: -------------------------------------------------------------------------------- 1 | let vec4 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec4(4)) { 4 | 5 | dst[0] = a[0] * b[0]; 6 | dst[1] = a[1] * b[1]; 7 | dst[2] = a[2] * b[2]; 8 | dst[3] = a[3] * b[3]; 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/vector/vec4/Neg.js: -------------------------------------------------------------------------------- 1 | let vec4 = Float32Array; 2 | 3 | export default function (a, dst = new vec4(4)) { 4 | 5 | dst[0] = -a[0]; 6 | dst[1] = -a[1]; 7 | dst[2] = -a[2]; 8 | dst[3] = -a[3]; 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/vector/vec4/Reciprocal.js: -------------------------------------------------------------------------------- 1 | let vec4 = Float32Array; 2 | 3 | export default function (a, dst = new vec4(4)) { 4 | 5 | // var rcp = VMath.reciprocal; 6 | 7 | // dst[0] = rcp(a[0]); 8 | // dst[1] = rcp(a[1]); 9 | // dst[2] = rcp(a[2]); 10 | // dst[3] = rcp(a[3]); 11 | 12 | return dst; 13 | 14 | } 15 | 16 | -------------------------------------------------------------------------------- /src/math/vector/vec4/ScalarAdd.js: -------------------------------------------------------------------------------- 1 | let vec4 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec4(4)) { 4 | 5 | dst[0] = a[0] + b; 6 | dst[1] = a[1] + b; 7 | dst[2] = a[2] + b; 8 | dst[3] = a[3] + b; 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/vector/vec4/ScalarBuild.js: -------------------------------------------------------------------------------- 1 | let vec4 = Float32Array; 2 | 3 | export default function (a, dst = new vec4(4)) { 4 | 5 | dst[0] = a; 6 | dst[1] = a; 7 | dst[2] = a; 8 | dst[3] = a; 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/vector/vec4/ScalarEqual.js: -------------------------------------------------------------------------------- 1 | let vec4 = Float32Array; 2 | 3 | export default function (a, b, precision = 1e-6) { 4 | 5 | return ( 6 | Math.abs(a[0] - b) <= precision && 7 | Math.abs(a[1] - b) <= precision && 8 | Math.abs(a[2] - b) <= precision && 9 | Math.abs(a[3] - b) <= precision 10 | ); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/vector/vec4/ScalarMax.js: -------------------------------------------------------------------------------- 1 | let vec4 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec4(4)) { 4 | 5 | dst[0] = Math.max(a[0], b); 6 | dst[1] = Math.max(a[1], b); 7 | dst[2] = Math.max(a[2], b); 8 | dst[3] = Math.max(a[3], b); 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/vector/vec4/ScalarMin.js: -------------------------------------------------------------------------------- 1 | let vec4 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec4(4)) { 4 | 5 | dst[0] = Math.min(a[0], b); 6 | dst[1] = Math.min(a[1], b); 7 | dst[2] = Math.min(a[2], b); 8 | dst[3] = Math.min(a[3], b); 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/vector/vec4/ScalarMultiply.js: -------------------------------------------------------------------------------- 1 | let vec4 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec4(4)) { 4 | 5 | if (b === 0) 6 | { 7 | dst[0] = 0; 8 | dst[1] = 0; 9 | dst[2] = 0; 10 | dst[3] = 0; 11 | } 12 | else 13 | { 14 | dst[0] = a[0] * b; 15 | dst[1] = a[1] * b; 16 | dst[2] = a[2] * b; 17 | dst[3] = a[3] * b; 18 | } 19 | 20 | return dst; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/math/vector/vec4/ScalarMultiplyAdd.js: -------------------------------------------------------------------------------- 1 | let vec4 = Float32Array; 2 | 3 | export default function (a, b, c, dst = new vec4(4)) { 4 | 5 | dst[0] = a[0] + b[0] * c; 6 | dst[1] = a[1] + b[1] * c; 7 | dst[2] = a[2] + b[2] * c; 8 | dst[3] = a[3] + b[3] * c; 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/vector/vec4/ScalarSub.js: -------------------------------------------------------------------------------- 1 | let vec4 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec4(4)) { 4 | 5 | dst[0] = a[0] - b; 6 | dst[1] = a[1] - b; 7 | dst[2] = a[2] - b; 8 | dst[3] = a[3] - b; 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/vector/vec4/Select.js: -------------------------------------------------------------------------------- 1 | let vec4 = Float32Array; 2 | 3 | export default function (m, a, b, dst = new vec4(4)) { 4 | 5 | dst[0] = m[0] ? a[0] : b[0]; 6 | dst[1] = m[1] ? a[1] : b[1]; 7 | dst[2] = m[2] ? a[2] : b[2]; 8 | dst[3] = m[3] ? a[3] : b[3]; 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/math/vector/vec4/Set.js: -------------------------------------------------------------------------------- 1 | 2 | export default function (v, a) { 3 | 4 | v[0] = a[0]; 5 | v[1] = a[1]; 6 | v[2] = a[2]; 7 | v[3] = a[3]; 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/math/vector/vec4/Sub.js: -------------------------------------------------------------------------------- 1 | let vec4 = Float32Array; 2 | 3 | export default function (a, b, dst = new vec4(4)) { 4 | 5 | dst[0] = a[0] - b[0]; 6 | dst[1] = a[1] - b[1]; 7 | dst[2] = a[2] - b[2]; 8 | dst[3] = a[3] - b[3]; 9 | 10 | return dst; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/physics/arcade/Constants.js: -------------------------------------------------------------------------------- 1 | // TODO: This should be modifiable. 2 | export const MAX_COLLIDERS = 100000; 3 | export const MAX_BODIES = 100000; 4 | export const POLYONG_COLLIDER = 0; 5 | export const AABB_COLLIDER = 1; -------------------------------------------------------------------------------- /src/sat/ProjectionsSeparated.js: -------------------------------------------------------------------------------- 1 | export default function (intervalA, intervalB) { 2 | return (intervalA[0] > intervalB[1] || intervalB[0] > intervalA[1]); 3 | } -------------------------------------------------------------------------------- /src/sat/collision/CircleToCircleTest.js: -------------------------------------------------------------------------------- 1 | import Sub from 'math/vector/vec2/Sub.js' 2 | import Length from 'math/vector/vec2/Length.js' 3 | 4 | export default function (circlePositionA, circleRadiusA, circlePositionB, circleRadiusB) { 5 | return (Length(Sub(circlePositionA, circlePositionB)) <= circleRadiusA + circleRadiusB) 6 | } -------------------------------------------------------------------------------- /src/sat/collision/CorrectionData.js: -------------------------------------------------------------------------------- 1 | let vec2 = Float32Array; 2 | const MAX_NUM = Number.MAX_VALUE; 3 | 4 | export default class CorrectionData { 5 | constructor() { 6 | this.unit = new vec2(2); 7 | this.overlap = MAX_NUM; 8 | this.correction = new vec2(2); 9 | } 10 | clear() { 11 | this.unit[0] = 0; 12 | this.unit[1] = 0; 13 | this.overlap = MAX_NUM; 14 | this.correction[0] = 0; 15 | this.correction[1] = 0; 16 | } 17 | } -------------------------------------------------------------------------------- /src/sat/collision/RectPolygonToPolygonTest.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/photonstorm/lazer/d611bc8be69f42ef699b6aa6ad08edc73226e626/src/sat/collision/RectPolygonToPolygonTest.js -------------------------------------------------------------------------------- /src/sat/collision/point/CircleToPointTest.js: -------------------------------------------------------------------------------- 1 | import Sub from 'math/vector/vec2/Sub.js' 2 | import Length from 'math/vector/vec2/Length.js' 3 | 4 | export default function (point, circlePosition, circleRadius) { 5 | return (Length(Sub(point, circlePosition)) <= circleRadius) 6 | } -------------------------------------------------------------------------------- /src/sat/collision/point/RectangleToPointTest.js: -------------------------------------------------------------------------------- 1 | let Abs = Math.abs; 2 | // Expects rectangle data to be laid like this: 3 | // [x, y, width, height] 4 | export default function (point, rectangle) { 5 | let halfWidth = rectangle[2] / 2; 6 | let halfHeight = rectangle[3] / 2; 7 | let distanceX = (rectangle[0] + halfWidth) - (point[0]); 8 | let distanceY = (rectangle[1] + halfHeight) - (point[1]); 9 | if (halfWidth - Abs(distanceX) < 0 || 10 | halfHeight - Abs(distanceY) < 0) 11 | return false; 12 | return true; 13 | } -------------------------------------------------------------------------------- /src/sound/sfxr/Rand.js: -------------------------------------------------------------------------------- 1 | export default function Rand (max) { 2 | 3 | return Math.floor(Math.random() * (max + 1)); 4 | 5 | } -------------------------------------------------------------------------------- /src/sound/sfxr/RandFloat.js: -------------------------------------------------------------------------------- 1 | export default function RandFloat (range) { 2 | 3 | return Math.random() * range; 4 | 5 | } -------------------------------------------------------------------------------- /src/sound/sfxr/Shapes.js: -------------------------------------------------------------------------------- 1 | export const SQUARE = 0; 2 | export const SAWTOOTH = 1; 3 | export const SINE = 2; 4 | export const NOISE = 3; 5 | export const TRIANGLE = 4; 6 | export const BREAKER = 5; 7 | 8 | let shapes = [ SQUARE, SAWTOOTH, SINE, NOISE, TRIANGLE, BREAKER ]; 9 | 10 | // Must provide frnd, a function that returns a random number (seedable if needed) 11 | 12 | // Returns a random shape 13 | 14 | export default function GetShape (frnd) { 15 | 16 | return Math.floor(frnd(shapes.length)); 17 | 18 | } -------------------------------------------------------------------------------- /src/sound/sfxr/data/generators/Envelope.js: -------------------------------------------------------------------------------- 1 | export default function Envelope (fx) { 2 | 3 | let length = [ 4 | Math.floor(fx.envelope.attack * fx.envelope.attack * 100000), 5 | Math.floor(fx.envelope.sustain * fx.envelope.sustain * 100000), 6 | Math.floor(fx.envelope.decay * fx.envelope.decay * 100000) 7 | ]; 8 | 9 | return { 10 | vol: 0, 11 | stage: 0, 12 | time: 0, 13 | length, 14 | totalLength: length[0] + length[1] + length[2] 15 | }; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/sound/sfxr/data/generators/Filter.js: -------------------------------------------------------------------------------- 1 | export default function Filter (fx) { 2 | 3 | let w = Math.pow(fx.lpf.frequency, 3) * 0.1; 4 | let dmp = 5 / (1 + Math.pow(fx.lpf.resonance, 2) * 20) * (0.01 + w); 5 | 6 | if (dmp > 0.8) 7 | { 8 | dmp = 0.8; 9 | } 10 | 11 | return { 12 | p: 0, 13 | dp: 0, 14 | w, 15 | wd: 1 + fx.lpf.ramp * 0.0001, 16 | dmp, 17 | php: 0, 18 | hp: Math.pow(fx.hpf.frequency, 2) * 0.1, 19 | hpd: 1 + fx.hpf.ramp * 0.0003 20 | }; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/sound/sfxr/data/generators/Noise.js: -------------------------------------------------------------------------------- 1 | export default function Noise (fx) { 2 | 3 | // Noise 4 | let buffer = []; 5 | 6 | for (let i = 0; i < 32; ++i) 7 | { 8 | buffer[i] = Math.random() * 2 - 1; 9 | } 10 | 11 | return { 12 | buffer 13 | }; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/sound/sfxr/data/generators/Repeat.js: -------------------------------------------------------------------------------- 1 | export default function Repeat (fx) { 2 | 3 | let limit = Math.floor(Math.pow(1 - fx.repeat.speed, 2) * 20000 + 32); 4 | 5 | if (fx.repeat.speed === 0) 6 | { 7 | limit = 0; 8 | } 9 | 10 | return { 11 | limit 12 | }; 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/sound/sfxr/data/generators/Vibrato.js: -------------------------------------------------------------------------------- 1 | export default function Vibrato (fx) { 2 | 3 | return { 4 | phase: 0, 5 | speed: Math.pow(fx.vibrato.speed, 2) * 0.01, 6 | amp: fx.vibrato.strength * 0.5 7 | }; 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/sound/sfxr/effects/Envelope.js: -------------------------------------------------------------------------------- 1 | 2 | export default function Envelope ( 3 | { 4 | attack = 0, 5 | sustain = 0.3, 6 | punch = 0, 7 | decay = 0.4 8 | } = {} 9 | ) { 10 | 11 | return { 12 | 13 | attack, 14 | sustain, 15 | punch, 16 | decay 17 | 18 | }; 19 | 20 | } -------------------------------------------------------------------------------- /src/sound/sfxr/effects/HighPassFilter.js: -------------------------------------------------------------------------------- 1 | 2 | export default function HighPassFilter ( 3 | { 4 | frequency = 0, 5 | ramp = 0 6 | } = {} 7 | ) { 8 | 9 | return { 10 | 11 | frequency, // High-pass filter cutoff 12 | ramp, // High-pass filter cutoff sweep (SIGNED) 13 | 14 | }; 15 | 16 | } -------------------------------------------------------------------------------- /src/sound/sfxr/effects/LowPassFilter.js: -------------------------------------------------------------------------------- 1 | 2 | export default function LowPassFilter ( 3 | { 4 | frequency = 1, 5 | ramp = 0, 6 | resonance = 0 7 | } = {} 8 | ) { 9 | 10 | return { 11 | 12 | frequency, // Low-pass filter cutoff 13 | ramp, // Low-pass filter cutoff sweep (SIGNED) 14 | resonance // Low-pass filter resonance 15 | 16 | }; 17 | 18 | } -------------------------------------------------------------------------------- /src/sound/sfxr/effects/Phaser.js: -------------------------------------------------------------------------------- 1 | 2 | export default function Phaser ( 3 | { 4 | offset = 0, 5 | ramp = 0 6 | } = {} 7 | ) { 8 | 9 | return { 10 | 11 | offset, // Phaser offset (SIGNED) 12 | ramp // Phaser sweep (SIGNED) 13 | 14 | }; 15 | 16 | } -------------------------------------------------------------------------------- /src/sound/sfxr/effects/Repeat.js: -------------------------------------------------------------------------------- 1 | 2 | export default function Repeat ( 3 | { 4 | speed = 0 5 | } = {} 6 | ) { 7 | 8 | return { 9 | 10 | speed 11 | 12 | }; 13 | 14 | } -------------------------------------------------------------------------------- /src/sound/sfxr/effects/SquareDuty.js: -------------------------------------------------------------------------------- 1 | 2 | export default function SquareDuty ( 3 | { 4 | value = 0, 5 | ramp = 0 6 | } = {} 7 | ) { 8 | 9 | return { 10 | 11 | value, // Square Duty 12 | ramp // Duty Sweep 13 | 14 | }; 15 | 16 | } -------------------------------------------------------------------------------- /src/sound/sfxr/effects/Tonal.js: -------------------------------------------------------------------------------- 1 | 2 | export default function Tonal ( 3 | { 4 | mod = 0, 5 | speed = 0 6 | } = {} 7 | ) { 8 | 9 | return { 10 | 11 | mod, // Change amount 12 | speed // Change speed 13 | 14 | }; 15 | 16 | } -------------------------------------------------------------------------------- /src/sound/sfxr/effects/Tone.js: -------------------------------------------------------------------------------- 1 | 2 | export default function Tone ( 3 | { 4 | frequency = 0.3, 5 | limit = 0, 6 | ramp = 0, 7 | deltaRamp = 0 8 | } = {} 9 | ) { 10 | 11 | return { 12 | 13 | frequency, // Start frequency 14 | limit, // Min frequency cutoff 15 | ramp, // Slide (SIGNED) 16 | deltaRamp // Delta slide (SIGNED) 17 | 18 | }; 19 | 20 | } -------------------------------------------------------------------------------- /src/sound/sfxr/effects/Vibrato.js: -------------------------------------------------------------------------------- 1 | 2 | export default function Vibrato ( 3 | { 4 | strength = 0, 5 | speed = 0 6 | } = {} 7 | ) { 8 | 9 | return { 10 | 11 | strength, // Vibrato depth 12 | speed // Vibrato speed 13 | 14 | }; 15 | 16 | } -------------------------------------------------------------------------------- /src/system/EventDispatcher.js: -------------------------------------------------------------------------------- 1 | import Signal from 'system/Signal.js'; 2 | 3 | export default class EventDispatcher { 4 | 5 | constructor () { 6 | 7 | 8 | } 9 | 10 | add (event, callback) { 11 | 12 | } 13 | 14 | remove (event, callback) { 15 | 16 | 17 | } 18 | 19 | dispatch (...args) { 20 | 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/system/NOOP.js: -------------------------------------------------------------------------------- 1 | // In all major browsers, replacing non-specified functions with NOOPs 2 | // seems to be as fast or slightly faster than using conditions to only 3 | // call the functions if they are specified. This is probably due to empty 4 | // functions being optimized away. http://jsperf.com/noop-vs-condition 5 | 6 | export default function NOOP () { 7 | 8 | // That's right, there's nothing here. 9 | 10 | } -------------------------------------------------------------------------------- /src/texture/blendmodes/canvas/Add.js: -------------------------------------------------------------------------------- 1 | export default function Add () { 2 | 3 | return { 4 | type: 1, 5 | mode: 'lighter' 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/canvas/Color.js: -------------------------------------------------------------------------------- 1 | export default function Color (useNew) { 2 | 3 | return { 4 | type: 15, 5 | mode: (useNew) ? 'color' : 'source-over' 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/canvas/ColorBurn.js: -------------------------------------------------------------------------------- 1 | export default function ColorBurn (useNew) { 2 | 3 | return { 4 | type: 8, 5 | mode: (useNew) ? 'color-burn' : 'source-over' 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/canvas/ColorDodge.js: -------------------------------------------------------------------------------- 1 | export default function ColorDodge (useNew) { 2 | 3 | return { 4 | type: 7, 5 | mode: (useNew) ? 'color-dodge' : 'source-over' 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/canvas/Darken.js: -------------------------------------------------------------------------------- 1 | export default function Darken (useNew) { 2 | 3 | return { 4 | type: 5, 5 | mode: (useNew) ? 'darken' : 'source-over' 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/canvas/Difference.js: -------------------------------------------------------------------------------- 1 | export default function Difference (useNew) { 2 | 3 | return { 4 | type: 11, 5 | mode: (useNew) ? 'difference' : 'source-over' 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/canvas/Exclusion.js: -------------------------------------------------------------------------------- 1 | export default function Exclusion (useNew) { 2 | 3 | return { 4 | type: 12, 5 | mode: (useNew) ? 'exclusion' : 'source-over' 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/canvas/HardLight.js: -------------------------------------------------------------------------------- 1 | export default function HardLight (useNew) { 2 | 3 | return { 4 | type: 9, 5 | mode: (useNew) ? 'hard-light' : 'source-over' 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/canvas/Hue.js: -------------------------------------------------------------------------------- 1 | export default function Hue (useNew) { 2 | 3 | return { 4 | type: 13, 5 | mode: (useNew) ? 'hue' : 'source-over' 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/canvas/Lighten.js: -------------------------------------------------------------------------------- 1 | export default function Lighten (useNew) { 2 | 3 | return { 4 | type: 6, 5 | mode: (useNew) ? 'lighten' : 'source-over' 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/canvas/Luminosity.js: -------------------------------------------------------------------------------- 1 | export default function Luminosity (useNew) { 2 | 3 | return { 4 | type: 16, 5 | mode: (useNew) ? 'luminosity' : 'source-over' 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/canvas/Multiply.js: -------------------------------------------------------------------------------- 1 | export default function Multiply (useNew) { 2 | 3 | return { 4 | type: 2, 5 | mode: (useNew) ? 'multiply' : 'source-over' 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/canvas/Normal.js: -------------------------------------------------------------------------------- 1 | export default function Normal () { 2 | 3 | return { 4 | type: 0, 5 | mode: 'source-over' 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/canvas/Overlay.js: -------------------------------------------------------------------------------- 1 | export default function Overlay (useNew) { 2 | 3 | return { 4 | type: 4, 5 | mode: (useNew) ? 'overlay' : 'source-over' 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/canvas/Saturation.js: -------------------------------------------------------------------------------- 1 | export default function Saturation (useNew) { 2 | 3 | return { 4 | type: 14, 5 | mode: (useNew) ? 'saturation' : 'source-over' 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/canvas/Screen.js: -------------------------------------------------------------------------------- 1 | export default function Screen (useNew) { 2 | 3 | return { 4 | type: 3, 5 | mode: (useNew) ? 'screen' : 'source-over' 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/canvas/SoftLight.js: -------------------------------------------------------------------------------- 1 | export default function SoftLight (useNew) { 2 | 3 | return { 4 | type: 10, 5 | mode: (useNew) ? 'soft-light' : 'source-over' 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/webgl/Add.js: -------------------------------------------------------------------------------- 1 | export default function Add (gl) { 2 | 3 | return { 4 | type: 1, 5 | mode: [gl.SRC_ALPHA, gl.DST_ALPHA] 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/webgl/Color.js: -------------------------------------------------------------------------------- 1 | export default function Color (gl) { 2 | 3 | return { 4 | type: 15, 5 | mode: [gl.ONE, gl.ONE_MINUS_SRC_ALPHA] 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/webgl/ColorBurn.js: -------------------------------------------------------------------------------- 1 | export default function ColorBurn (gl) { 2 | 3 | return { 4 | type: 8, 5 | mode: [gl.ONE, gl.ONE_MINUS_SRC_ALPHA] 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/webgl/ColorDodge.js: -------------------------------------------------------------------------------- 1 | export default function ColorDodge (gl) { 2 | 3 | return { 4 | type: 7, 5 | mode: [gl.ONE, gl.ONE_MINUS_SRC_ALPHA] 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/webgl/Darken.js: -------------------------------------------------------------------------------- 1 | export default function Darken (gl) { 2 | 3 | return { 4 | type: 5, 5 | mode: [gl.ONE, gl.ONE_MINUS_SRC_ALPHA] 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/webgl/Difference.js: -------------------------------------------------------------------------------- 1 | export default function Difference (gl) { 2 | 3 | return { 4 | type: 11, 5 | mode: [gl.ONE, gl.ONE_MINUS_SRC_ALPHA] 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/webgl/Exclusion.js: -------------------------------------------------------------------------------- 1 | export default function Exclusion (gl) { 2 | 3 | return { 4 | type: 12, 5 | mode: [gl.ONE, gl.ONE_MINUS_SRC_ALPHA] 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/webgl/HardLight.js: -------------------------------------------------------------------------------- 1 | export default function HardLight (gl) { 2 | 3 | return { 4 | type: 9, 5 | mode: [gl.ONE, gl.ONE_MINUS_SRC_ALPHA] 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/webgl/Hue.js: -------------------------------------------------------------------------------- 1 | export default function Hue (gl) { 2 | 3 | return { 4 | type: 13, 5 | mode: [gl.ONE, gl.ONE_MINUS_SRC_ALPHA] 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/webgl/Lighten.js: -------------------------------------------------------------------------------- 1 | export default function Lighten (gl) { 2 | 3 | return { 4 | type: 6, 5 | mode: [gl.ONE, gl.ONE_MINUS_SRC_ALPHA] 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/webgl/Luminosity.js: -------------------------------------------------------------------------------- 1 | export default function Luminosity (gl) { 2 | 3 | return { 4 | type: 16, 5 | mode: [gl.ONE, gl.ONE_MINUS_SRC_ALPHA] 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/webgl/Multiply.js: -------------------------------------------------------------------------------- 1 | export default function Multiply (gl) { 2 | 3 | return { 4 | type: 2, 5 | mode: [gl.DST_COLOR, gl.ONE_MINUS_SRC_ALPHA] 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/webgl/Normal.js: -------------------------------------------------------------------------------- 1 | export default function Normal (gl) { 2 | 3 | return { 4 | type: 0, 5 | mode: [gl.ONE, gl.ONE_MINUS_SRC_ALPHA] 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/webgl/Overlay.js: -------------------------------------------------------------------------------- 1 | export default function Overlay (gl) { 2 | 3 | return { 4 | type: 4, 5 | mode: [gl.ONE, gl.ONE_MINUS_SRC_ALPHA] 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/webgl/Saturation.js: -------------------------------------------------------------------------------- 1 | export default function Saturation (gl) { 2 | 3 | return { 4 | type: 14, 5 | mode: [gl.ONE, gl.ONE_MINUS_SRC_ALPHA] 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/webgl/Screen.js: -------------------------------------------------------------------------------- 1 | export default function Screen (gl) { 2 | 3 | return { 4 | type: 3, 5 | mode: [gl.SRC_ALPHA, gl.ONE] 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/blendmodes/webgl/SoftLight.js: -------------------------------------------------------------------------------- 1 | export default function SoftLight (gl) { 2 | 3 | return { 4 | type: 10, 5 | mode: [gl.ONE, gl.ONE_MINUS_SRC_ALPHA] 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/texture/default/Blank32x32.js: -------------------------------------------------------------------------------- 1 | // Returns a transparent 32x32 PNG as an Image object 2 | 3 | export default function Blank32x32 () { 4 | 5 | let img = new Image(); 6 | 7 | img.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgAQMAAABJtOi3AAAAA1BMVEX///+nxBvIAAAAAXRSTlMAQObYZgAAABVJREFUeF7NwIEAAAAAgKD9qdeocAMAoAABm3DkcAAAAABJRU5ErkJggg=="; 8 | 9 | return img; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/texture/parsers/Image.js: -------------------------------------------------------------------------------- 1 | import Frame from 'texture/Frame.js'; 2 | 3 | // source = image reference 4 | 5 | export default function Image (source) { 6 | 7 | return Frame(source.name, source, 0, 0, source.width, sourcee.height); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/utils/array/Shuffle.js: -------------------------------------------------------------------------------- 1 | /** 2 | * A standard Fisher-Yates Array shuffle implementation which modifies the array in place. 3 | * 4 | * @method 5 | * @param {any[]} array - The array to shuffle. 6 | * @return {any[]} The original array, now shuffled. 7 | */ 8 | export default function Shuffle (array) { 9 | 10 | for (let i = array.length - 1; i > 0; i--) 11 | { 12 | let j = Math.floor(Math.random() * (i + 1)); 13 | let temp = array[i]; 14 | array[i] = array[j]; 15 | array[j] = temp; 16 | } 17 | 18 | return array; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/utils/array/SpliceOne.js: -------------------------------------------------------------------------------- 1 | // Removes a single item from an array and returns it 2 | // without creating gc (like the native splice does) 3 | // Based on code by Mike Reinstein 4 | 5 | export default function SpliceOne (array, index) { 6 | 7 | if (index >= array.length) 8 | { 9 | return; 10 | } 11 | 12 | const len = array.length - 1; 13 | 14 | const item = array[index]; 15 | 16 | for (let i = index; i < len; i++) 17 | { 18 | array[i] = array[i + 1]; 19 | } 20 | 21 | array.length = len; 22 | 23 | return item; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/utils/array/matrix/CheckMatrix.js: -------------------------------------------------------------------------------- 1 | export default function CheckMatrix (matrix) { 2 | 3 | if (!Array.isArray(matrix) || matrix.length < 2 || !Array.isArray(matrix[0])) 4 | { 5 | return false; 6 | } 7 | 8 | // How long is the first row? 9 | const size = matrix[0].length; 10 | 11 | // Validate the rest of the rows are the same length 12 | for (let row of matrix) 13 | { 14 | if (row.length !== size) 15 | { 16 | return false; 17 | } 18 | } 19 | 20 | return true; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/utils/array/matrix/ReverseColumns.js: -------------------------------------------------------------------------------- 1 | export default function ReverseColumns (matrix) { 2 | 3 | for (let i = 0; i < matrix.length; i++) 4 | { 5 | matrix[i].reverse(); 6 | } 7 | 8 | return matrix; 9 | 10 | } -------------------------------------------------------------------------------- /src/utils/array/matrix/ReverseRows.js: -------------------------------------------------------------------------------- 1 | export default function ReverseRows (matrix) { 2 | 3 | return matrix.reverse(); 4 | 5 | } -------------------------------------------------------------------------------- /src/utils/array/matrix/Rotate180.js: -------------------------------------------------------------------------------- 1 | import RotateMatrix from 'utils/array/matrix/RotateMatrix.js'; 2 | 3 | export default function Rotate180 (matrix) { 4 | 5 | return RotateMatrix(matrix, 180); 6 | 7 | } -------------------------------------------------------------------------------- /src/utils/array/matrix/RotateLeft.js: -------------------------------------------------------------------------------- 1 | import RotateMatrix from 'utils/array/matrix/RotateMatrix.js'; 2 | 3 | export default function RotateLeft (matrix) { 4 | 5 | return RotateMatrix(matrix, -90); 6 | 7 | } -------------------------------------------------------------------------------- /src/utils/array/matrix/RotateRight.js: -------------------------------------------------------------------------------- 1 | import RotateMatrix from 'utils/array/matrix/RotateMatrix.js'; 2 | 3 | export default function RotateRight (matrix) { 4 | 5 | return RotateMatrix(matrix, 90); 6 | 7 | } -------------------------------------------------------------------------------- /src/utils/string/Pad.js: -------------------------------------------------------------------------------- 1 | // Pad out the given string (val) to the 'amt' number of characters using 'ch' as the extra characters 2 | // if the string needs padding 3 | 4 | export default function Pad (val, amt, ch = ' ') { 5 | 6 | let str = val 7 | 8 | const max = Math.abs(amt); 9 | 10 | while (str.length < max) 11 | { 12 | if (amt < 0) 13 | { 14 | str += ch; 15 | } 16 | else 17 | { 18 | str = ch + str; 19 | } 20 | } 21 | 22 | return str; 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/webgl/ContextOptions.js: -------------------------------------------------------------------------------- 1 | 2 | export default function WebGLContextOptions ({ alpha = false, antialias = true, premultipliedAlpha = false, stencil = false, preserveDrawingBuffer = false } = {}) { 3 | 4 | return { 5 | alpha: alpha, 6 | antialias: antialias, 7 | premultipliedAlpha: premultipliedAlpha, 8 | stencil: stencil, 9 | preserveDrawingBuffer: preserveDrawingBuffer 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/webgl/GetContext.js: -------------------------------------------------------------------------------- 1 | export default function (canvas, options) { 2 | 3 | return ( 4 | canvas.getContext('webgl', options) || 5 | canvas.getContext('experimental-webgl', options) || 6 | null 7 | ); 8 | 9 | } -------------------------------------------------------------------------------- /src/webgl/RenderList.js: -------------------------------------------------------------------------------- 1 | export default class RenderList { 2 | 3 | constructor () { 4 | 5 | this.list = new Set(); 6 | 7 | } 8 | 9 | clear () { 10 | 11 | this.list.clear(); 12 | 13 | } 14 | 15 | get length () { 16 | 17 | return this.list.size; 18 | 19 | } 20 | 21 | add (texture) { 22 | 23 | this.list.add(texture); 24 | 25 | } 26 | 27 | } -------------------------------------------------------------------------------- /src/webgl/Shader.js: -------------------------------------------------------------------------------- 1 | export default class WebGLShader { 2 | 3 | constructor (gl) { 4 | 5 | this.gl = gl; 6 | 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/webgl/vbo/AddVert.js: -------------------------------------------------------------------------------- 1 | // Add a single vert set into the Vertex Buffer 2 | 3 | export default function AddVert (buffer, x, y) { 4 | 5 | buffer.vertices[buffer.index++] = x; 6 | buffer.vertices[buffer.index++] = y; 7 | 8 | buffer.total++; 9 | 10 | // return the starting index of the point 11 | return (buffer.index - 2); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /tests/geom/rectangle/rectangle2-area.js: -------------------------------------------------------------------------------- 1 | import test from 'ava'; 2 | import 'babel-core/register'; 3 | import Rectangle from '../../../src/geom/rectangle/Rectangle.js' 4 | import Area from '../../../src/geom/rectangle/Area.js' 5 | 6 | test('Rectangle.Area', t => { 7 | 8 | let r = Rectangle(0, 0, 100, 64); 9 | 10 | t.plan(1); 11 | 12 | t.is(Area(r), 6400); 13 | 14 | }); 15 | -------------------------------------------------------------------------------- /tests/geom/rectangle/rectangle3-ceil.js: -------------------------------------------------------------------------------- 1 | import test from 'ava'; 2 | import 'babel-core/register'; 3 | import Rectangle from '../../../src/geom/rectangle/Rectangle.js' 4 | import Ceil from '../../../src/geom/rectangle/Ceil.js' 5 | 6 | test('Rectangle.Ceil', t => { 7 | 8 | let r = Rectangle(34.2, 39.8, 1, 1); 9 | 10 | Ceil(r); 11 | 12 | t.plan(2); 13 | 14 | t.is(r.x, 35); 15 | t.is(r.y, 40); 16 | 17 | }); 18 | --------------------------------------------------------------------------------