excalibur 0.25.2 → 0.25.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -2
- package/build/dist/Actions/Action/Blink.js +51 -0
- package/build/dist/Actions/Action/Blink.js.map +1 -0
- package/build/dist/Actions/Action/CallMethod.js +21 -0
- package/build/dist/Actions/Action/CallMethod.js.map +1 -0
- package/build/dist/Actions/Action/Delay.js +25 -0
- package/build/dist/Actions/Action/Delay.js.map +1 -0
- package/build/dist/Actions/Action/Die.js +22 -0
- package/build/dist/Actions/Action/Die.js.map +1 -0
- package/build/dist/Actions/Action/EaseTo.js +69 -0
- package/build/dist/Actions/Action/EaseTo.js.map +1 -0
- package/build/dist/Actions/Action/Fade.js +46 -0
- package/build/dist/Actions/Action/Fade.js.map +1 -0
- package/build/dist/Actions/Action/Follow.js +55 -0
- package/build/dist/Actions/Action/Follow.js.map +1 -0
- package/build/dist/Actions/Action/Meet.js +52 -0
- package/build/dist/Actions/Action/Meet.js.map +1 -0
- package/build/dist/Actions/Action/MoveBy.js +47 -0
- package/build/dist/Actions/Action/MoveBy.js.map +1 -0
- package/build/dist/Actions/Action/MoveTo.js +40 -0
- package/build/dist/Actions/Action/MoveTo.js.map +1 -0
- package/build/dist/Actions/Action/Repeat.js +31 -0
- package/build/dist/Actions/Action/Repeat.js.map +1 -0
- package/build/dist/Actions/Action/RepeatForever.js +37 -0
- package/build/dist/Actions/Action/RepeatForever.js.map +1 -0
- package/build/dist/Actions/Action/RotateBy.js +91 -0
- package/build/dist/Actions/Action/RotateBy.js.map +1 -0
- package/build/dist/Actions/Action/RotateTo.js +90 -0
- package/build/dist/Actions/Action/RotateTo.js.map +1 -0
- package/build/dist/Actions/Action/ScaleBy.js +45 -0
- package/build/dist/Actions/Action/ScaleBy.js.map +1 -0
- package/build/dist/Actions/Action/ScaleTo.js +56 -0
- package/build/dist/Actions/Action/ScaleTo.js.map +1 -0
- package/build/dist/Actions/Action.js +2 -0
- package/build/dist/Actions/Action.js.map +1 -0
- package/build/dist/Actions/ActionContext.js +305 -0
- package/build/dist/Actions/ActionContext.js.map +1 -0
- package/build/dist/Actions/ActionQueue.js +87 -0
- package/build/dist/Actions/ActionQueue.js.map +1 -0
- package/build/dist/Actions/Actionable.js +2 -0
- package/build/dist/Actions/Actionable.js.map +1 -0
- package/build/dist/Actions/ActionsComponent.js +198 -0
- package/build/dist/Actions/ActionsComponent.js.map +1 -0
- package/build/dist/Actions/ActionsSystem.js +18 -0
- package/build/dist/Actions/ActionsSystem.js.map +1 -0
- package/build/dist/Actions/Index.js +22 -0
- package/build/dist/Actions/Index.js.map +1 -0
- package/build/dist/Actions/RotationType.js +27 -0
- package/build/dist/Actions/RotationType.js.map +1 -0
- package/build/dist/Actor.js +831 -0
- package/build/dist/Actor.js.map +1 -0
- package/build/dist/Camera.js +663 -0
- package/build/dist/Camera.js.map +1 -0
- package/build/dist/Class.js +48 -0
- package/build/dist/Class.js.map +1 -0
- package/build/dist/Collision/BodyComponent.js +351 -0
- package/build/dist/Collision/BodyComponent.js.map +1 -0
- package/build/dist/Collision/BoundingBox.js +361 -0
- package/build/dist/Collision/BoundingBox.js.map +1 -0
- package/build/dist/Collision/ColliderComponent.js +198 -0
- package/build/dist/Collision/ColliderComponent.js.map +1 -0
- package/build/dist/Collision/Colliders/CircleCollider.js +264 -0
- package/build/dist/Collision/Colliders/CircleCollider.js.map +1 -0
- package/build/dist/Collision/Colliders/ClosestLineJumpTable.js +211 -0
- package/build/dist/Collision/Colliders/ClosestLineJumpTable.js.map +1 -0
- package/build/dist/Collision/Colliders/Collider.js +26 -0
- package/build/dist/Collision/Colliders/Collider.js.map +1 -0
- package/build/dist/Collision/Colliders/CollisionJumpTable.js +301 -0
- package/build/dist/Collision/Colliders/CollisionJumpTable.js.map +1 -0
- package/build/dist/Collision/Colliders/CompositeCollider.js +232 -0
- package/build/dist/Collision/Colliders/CompositeCollider.js.map +1 -0
- package/build/dist/Collision/Colliders/EdgeCollider.js +253 -0
- package/build/dist/Collision/Colliders/EdgeCollider.js.map +1 -0
- package/build/dist/Collision/Colliders/PolygonCollider.js +389 -0
- package/build/dist/Collision/Colliders/PolygonCollider.js.map +1 -0
- package/build/dist/Collision/Colliders/SeparatingAxis.js +67 -0
- package/build/dist/Collision/Colliders/SeparatingAxis.js.map +1 -0
- package/build/dist/Collision/Colliders/Shape.js +102 -0
- package/build/dist/Collision/Colliders/Shape.js.map +1 -0
- package/build/dist/Collision/CollisionSystem.js +116 -0
- package/build/dist/Collision/CollisionSystem.js.map +1 -0
- package/build/dist/Collision/CollisionType.js +33 -0
- package/build/dist/Collision/CollisionType.js.map +1 -0
- package/build/dist/Collision/Detection/CollisionContact.js +46 -0
- package/build/dist/Collision/Detection/CollisionContact.js.map +1 -0
- package/build/dist/Collision/Detection/CollisionProcessor.js +2 -0
- package/build/dist/Collision/Detection/CollisionProcessor.js.map +1 -0
- package/build/dist/Collision/Detection/DynamicTree.js +442 -0
- package/build/dist/Collision/Detection/DynamicTree.js.map +1 -0
- package/build/dist/Collision/Detection/DynamicTreeCollisionProcessor.js +211 -0
- package/build/dist/Collision/Detection/DynamicTreeCollisionProcessor.js.map +1 -0
- package/build/dist/Collision/Detection/Pair.js +92 -0
- package/build/dist/Collision/Detection/Pair.js.map +1 -0
- package/build/dist/Collision/Group/CollisionGroup.js +114 -0
- package/build/dist/Collision/Group/CollisionGroup.js.map +1 -0
- package/build/dist/Collision/Group/CollisionGroupManager.js +52 -0
- package/build/dist/Collision/Group/CollisionGroupManager.js.map +1 -0
- package/build/dist/Collision/Index.js +29 -0
- package/build/dist/Collision/Index.js.map +1 -0
- package/build/dist/Collision/Integrator.js +11 -0
- package/build/dist/Collision/Integrator.js.map +1 -0
- package/build/dist/Collision/MotionSystem.js +42 -0
- package/build/dist/Collision/MotionSystem.js.map +1 -0
- package/build/dist/Collision/Physics.js +163 -0
- package/build/dist/Collision/Physics.js.map +1 -0
- package/build/dist/Collision/Side.js +51 -0
- package/build/dist/Collision/Side.js.map +1 -0
- package/build/dist/Collision/Solver/ArcadeSolver.js +101 -0
- package/build/dist/Collision/Solver/ArcadeSolver.js.map +1 -0
- package/build/dist/Collision/Solver/ContactConstraintPoint.js +83 -0
- package/build/dist/Collision/Solver/ContactConstraintPoint.js.map +1 -0
- package/build/dist/Collision/Solver/RealisticSolver.js +248 -0
- package/build/dist/Collision/Solver/RealisticSolver.js.map +1 -0
- package/build/dist/Collision/Solver/Solver.js +37 -0
- package/build/dist/Collision/Solver/Solver.js.map +1 -0
- package/build/dist/Color.js +461 -0
- package/build/dist/Color.js.map +1 -0
- package/build/dist/Configurable.js +32 -0
- package/build/dist/Configurable.js.map +1 -0
- package/build/dist/Debug/Debug.js +375 -0
- package/build/dist/Debug/Debug.js.map +1 -0
- package/build/dist/Debug/DebugFlags.js +40 -0
- package/build/dist/Debug/DebugFlags.js.map +1 -0
- package/build/dist/Debug/DebugSystem.js +251 -0
- package/build/dist/Debug/DebugSystem.js.map +1 -0
- package/build/dist/Debug/index.js +4 -0
- package/build/dist/Debug/index.js.map +1 -0
- package/build/dist/Deprecated.js +2 -0
- package/build/dist/Deprecated.js.map +1 -0
- package/build/dist/Drawing/Animation.js +294 -0
- package/build/dist/Drawing/Animation.js.map +1 -0
- package/build/dist/Drawing/CanvasDrawComponent.js +16 -0
- package/build/dist/Drawing/CanvasDrawComponent.js.map +1 -0
- package/build/dist/Drawing/CanvasDrawingSystem.js +95 -0
- package/build/dist/Drawing/CanvasDrawingSystem.js.map +1 -0
- package/build/dist/Drawing/Index.js +10 -0
- package/build/dist/Drawing/Index.js.map +1 -0
- package/build/dist/Drawing/Polygon.js +139 -0
- package/build/dist/Drawing/Polygon.js.map +1 -0
- package/build/dist/Drawing/Sprite.js +355 -0
- package/build/dist/Drawing/Sprite.js.map +1 -0
- package/build/dist/Drawing/SpriteEffects.js +246 -0
- package/build/dist/Drawing/SpriteEffects.js.map +1 -0
- package/build/dist/Drawing/SpriteSheet.js +413 -0
- package/build/dist/Drawing/SpriteSheet.js.map +1 -0
- package/build/dist/Drawing/Texture.js +69 -0
- package/build/dist/Drawing/Texture.js.map +1 -0
- package/build/dist/Engine.d.ts +4 -1
- package/build/dist/Engine.js +985 -0
- package/build/dist/Engine.js.map +1 -0
- package/build/dist/EntityComponentSystem/Component.js +65 -0
- package/build/dist/EntityComponentSystem/Component.js.map +1 -0
- package/build/dist/EntityComponentSystem/Components/MotionComponent.js +33 -0
- package/build/dist/EntityComponentSystem/Components/MotionComponent.js.map +1 -0
- package/build/dist/EntityComponentSystem/Components/TransformComponent.js +249 -0
- package/build/dist/EntityComponentSystem/Components/TransformComponent.js.map +1 -0
- package/build/dist/EntityComponentSystem/Entity.js +452 -0
- package/build/dist/EntityComponentSystem/Entity.js.map +1 -0
- package/build/dist/EntityComponentSystem/EntityManager.js +128 -0
- package/build/dist/EntityComponentSystem/EntityManager.js.map +1 -0
- package/build/dist/EntityComponentSystem/Query.js +91 -0
- package/build/dist/EntityComponentSystem/Query.js.map +1 -0
- package/build/dist/EntityComponentSystem/QueryManager.js +90 -0
- package/build/dist/EntityComponentSystem/QueryManager.js.map +1 -0
- package/build/dist/EntityComponentSystem/System.js +76 -0
- package/build/dist/EntityComponentSystem/System.js.map +1 -0
- package/build/dist/EntityComponentSystem/SystemManager.js +102 -0
- package/build/dist/EntityComponentSystem/SystemManager.js.map +1 -0
- package/build/dist/EntityComponentSystem/Util.js +5 -0
- package/build/dist/EntityComponentSystem/Util.js.map +1 -0
- package/build/dist/EntityComponentSystem/World.js +55 -0
- package/build/dist/EntityComponentSystem/World.js.map +1 -0
- package/build/dist/EntityComponentSystem/index.js +11 -0
- package/build/dist/EntityComponentSystem/index.js.map +1 -0
- package/build/dist/EventDispatcher.js +114 -0
- package/build/dist/EventDispatcher.js.map +1 -0
- package/build/dist/Events/ExEvent.js +12 -0
- package/build/dist/Events/ExEvent.js.map +1 -0
- package/build/dist/Events/MediaEvents.js +75 -0
- package/build/dist/Events/MediaEvents.js.map +1 -0
- package/build/dist/Events/PointerEvents.js +52 -0
- package/build/dist/Events/PointerEvents.js.map +1 -0
- package/build/dist/Events.js +497 -0
- package/build/dist/Events.js.map +1 -0
- package/build/dist/Flags.js +90 -0
- package/build/dist/Flags.js.map +1 -0
- package/build/dist/Graphics/Animation.js +310 -0
- package/build/dist/Graphics/Animation.js.map +1 -0
- package/build/dist/Graphics/Canvas.js +38 -0
- package/build/dist/Graphics/Canvas.js.map +1 -0
- package/build/dist/Graphics/Circle.js +47 -0
- package/build/dist/Graphics/Circle.js.map +1 -0
- package/build/dist/Graphics/Context/ExcaliburGraphicsContext.js +2 -0
- package/build/dist/Graphics/Context/ExcaliburGraphicsContext.js.map +1 -0
- package/build/dist/Graphics/Context/ExcaliburGraphicsContext2DCanvas.js +207 -0
- package/build/dist/Graphics/Context/ExcaliburGraphicsContext2DCanvas.js.map +1 -0
- package/build/dist/Graphics/Context/ExcaliburGraphicsContextWebGL.js +331 -0
- package/build/dist/Graphics/Context/ExcaliburGraphicsContextWebGL.js.map +1 -0
- package/build/dist/Graphics/Context/circle-renderer/circle-renderer.js +160 -0
- package/build/dist/Graphics/Context/circle-renderer/circle-renderer.js.map +1 -0
- package/build/dist/Graphics/Context/debug-text.js +47 -0
- package/build/dist/Graphics/Context/debug-text.js.map +1 -0
- package/build/dist/Graphics/Context/image-renderer/image-renderer.js +209 -0
- package/build/dist/Graphics/Context/image-renderer/image-renderer.js.map +1 -0
- package/build/dist/Graphics/Context/line-renderer/line-renderer.js +87 -0
- package/build/dist/Graphics/Context/line-renderer/line-renderer.js.map +1 -0
- package/build/dist/Graphics/Context/point-renderer/point-renderer.js +82 -0
- package/build/dist/Graphics/Context/point-renderer/point-renderer.js.map +1 -0
- package/build/dist/Graphics/Context/quad-index-buffer.js +69 -0
- package/build/dist/Graphics/Context/quad-index-buffer.js.map +1 -0
- package/build/dist/Graphics/Context/rectangle-renderer/rectangle-renderer.js +272 -0
- package/build/dist/Graphics/Context/rectangle-renderer/rectangle-renderer.js.map +1 -0
- package/build/dist/Graphics/Context/render-source.js +16 -0
- package/build/dist/Graphics/Context/render-source.js.map +1 -0
- package/build/dist/Graphics/Context/render-target.js +65 -0
- package/build/dist/Graphics/Context/render-target.js.map +1 -0
- package/build/dist/Graphics/Context/renderer.js +2 -0
- package/build/dist/Graphics/Context/renderer.js.map +1 -0
- package/build/dist/Graphics/Context/screen-pass-painter/screen-pass-painter.js +53 -0
- package/build/dist/Graphics/Context/screen-pass-painter/screen-pass-painter.js.map +1 -0
- package/build/dist/Graphics/Context/shader.js +236 -0
- package/build/dist/Graphics/Context/shader.js.map +1 -0
- package/build/dist/Graphics/Context/state-stack.js +27 -0
- package/build/dist/Graphics/Context/state-stack.js.map +1 -0
- package/build/dist/Graphics/Context/texture-loader.d.ts +8 -0
- package/build/dist/Graphics/Context/texture-loader.js +121 -0
- package/build/dist/Graphics/Context/texture-loader.js.map +1 -0
- package/build/dist/Graphics/Context/transform-stack.js +30 -0
- package/build/dist/Graphics/Context/transform-stack.js.map +1 -0
- package/build/dist/Graphics/Context/vertex-buffer.js +45 -0
- package/build/dist/Graphics/Context/vertex-buffer.js.map +1 -0
- package/build/dist/Graphics/Context/vertex-layout.js +93 -0
- package/build/dist/Graphics/Context/vertex-layout.js.map +1 -0
- package/build/dist/Graphics/Context/webgl-adapter.js +19 -0
- package/build/dist/Graphics/Context/webgl-adapter.js.map +1 -0
- package/build/dist/Graphics/Context/webgl-util.js +105 -0
- package/build/dist/Graphics/Context/webgl-util.js.map +1 -0
- package/build/dist/Graphics/DebugGraphicsComponent.js +15 -0
- package/build/dist/Graphics/DebugGraphicsComponent.js.map +1 -0
- package/build/dist/Graphics/Filtering.js +17 -0
- package/build/dist/Graphics/Filtering.js.map +1 -0
- package/build/dist/Graphics/Font.js +293 -0
- package/build/dist/Graphics/Font.js.map +1 -0
- package/build/dist/Graphics/FontCommon.js +109 -0
- package/build/dist/Graphics/FontCommon.js.map +1 -0
- package/build/dist/Graphics/Graphic.js +200 -0
- package/build/dist/Graphics/Graphic.js.map +1 -0
- package/build/dist/Graphics/GraphicsComponent.js +290 -0
- package/build/dist/Graphics/GraphicsComponent.js.map +1 -0
- package/build/dist/Graphics/GraphicsDiagnostics.js +9 -0
- package/build/dist/Graphics/GraphicsDiagnostics.js.map +1 -0
- package/build/dist/Graphics/GraphicsGroup.js +69 -0
- package/build/dist/Graphics/GraphicsGroup.js.map +1 -0
- package/build/dist/Graphics/GraphicsSystem.js +153 -0
- package/build/dist/Graphics/GraphicsSystem.js.map +1 -0
- package/build/dist/Graphics/ImageSource.js +116 -0
- package/build/dist/Graphics/ImageSource.js.map +1 -0
- package/build/dist/Graphics/Polygon.js +59 -0
- package/build/dist/Graphics/Polygon.js.map +1 -0
- package/build/dist/Graphics/PostProcessor/ColorBlindnessMode.js +7 -0
- package/build/dist/Graphics/PostProcessor/ColorBlindnessMode.js.map +1 -0
- package/build/dist/Graphics/PostProcessor/ColorBlindnessPostProcessor.js +52 -0
- package/build/dist/Graphics/PostProcessor/ColorBlindnessPostProcessor.js.map +1 -0
- package/build/dist/Graphics/PostProcessor/PostProcessor.js +2 -0
- package/build/dist/Graphics/PostProcessor/PostProcessor.js.map +1 -0
- package/build/dist/Graphics/PostProcessor/ScreenShader.js +56 -0
- package/build/dist/Graphics/PostProcessor/ScreenShader.js.map +1 -0
- package/build/dist/Graphics/Raster.js +207 -0
- package/build/dist/Graphics/Raster.js.map +1 -0
- package/build/dist/Graphics/Rectangle.js +29 -0
- package/build/dist/Graphics/Rectangle.js.map +1 -0
- package/build/dist/Graphics/Sprite.js +103 -0
- package/build/dist/Graphics/Sprite.js.map +1 -0
- package/build/dist/Graphics/SpriteFont.js +120 -0
- package/build/dist/Graphics/SpriteFont.js.map +1 -0
- package/build/dist/Graphics/SpriteSheet.js +115 -0
- package/build/dist/Graphics/SpriteSheet.js.map +1 -0
- package/build/dist/Graphics/Text.js +94 -0
- package/build/dist/Graphics/Text.js.map +1 -0
- package/build/dist/Graphics/index.js +42 -0
- package/build/dist/Graphics/index.js.map +1 -0
- package/build/dist/Id.js +8 -0
- package/build/dist/Id.js.map +1 -0
- package/build/dist/Input/CapturePointerConfig.js +5 -0
- package/build/dist/Input/CapturePointerConfig.js.map +1 -0
- package/build/dist/Input/EngineInput.js +2 -0
- package/build/dist/Input/EngineInput.js.map +1 -0
- package/build/dist/Input/Gamepad.js +358 -0
- package/build/dist/Input/Gamepad.js.map +1 -0
- package/build/dist/Input/Index.js +22 -0
- package/build/dist/Input/Index.js.map +1 -0
- package/build/dist/Input/Keyboard.js +267 -0
- package/build/dist/Input/Keyboard.js.map +1 -0
- package/build/dist/Input/NativePointerButton.js +12 -0
- package/build/dist/Input/NativePointerButton.js.map +1 -0
- package/build/dist/Input/PointerAbstraction.js +41 -0
- package/build/dist/Input/PointerAbstraction.js.map +1 -0
- package/build/dist/Input/PointerButton.js +12 -0
- package/build/dist/Input/PointerButton.js.map +1 -0
- package/build/dist/Input/PointerComponent.js +28 -0
- package/build/dist/Input/PointerComponent.js.map +1 -0
- package/build/dist/Input/PointerEvent.js +25 -0
- package/build/dist/Input/PointerEvent.js.map +1 -0
- package/build/dist/Input/PointerEventReceiver.js +414 -0
- package/build/dist/Input/PointerEventReceiver.js.map +1 -0
- package/build/dist/Input/PointerScope.js +16 -0
- package/build/dist/Input/PointerScope.js.map +1 -0
- package/build/dist/Input/PointerSystem.js +217 -0
- package/build/dist/Input/PointerSystem.js.map +1 -0
- package/build/dist/Input/PointerType.js +11 -0
- package/build/dist/Input/PointerType.js.map +1 -0
- package/build/dist/Input/WheelDeltaMode.js +7 -0
- package/build/dist/Input/WheelDeltaMode.js.map +1 -0
- package/build/dist/Input/WheelEvent.js +21 -0
- package/build/dist/Input/WheelEvent.js.map +1 -0
- package/build/dist/Interfaces/Audio.js +2 -0
- package/build/dist/Interfaces/Audio.js.map +1 -0
- package/build/dist/Interfaces/AudioImplementation.js +11 -0
- package/build/dist/Interfaces/AudioImplementation.js.map +1 -0
- package/build/dist/Interfaces/Clonable.js +2 -0
- package/build/dist/Interfaces/Clonable.js.map +1 -0
- package/build/dist/Interfaces/Drawable.js +2 -0
- package/build/dist/Interfaces/Drawable.js.map +1 -0
- package/build/dist/Interfaces/Evented.js +2 -0
- package/build/dist/Interfaces/Evented.js.map +1 -0
- package/build/dist/Interfaces/Index.js +10 -0
- package/build/dist/Interfaces/Index.js.map +1 -0
- package/build/dist/Interfaces/LifecycleEvents.js +51 -0
- package/build/dist/Interfaces/LifecycleEvents.js.map +1 -0
- package/build/dist/Interfaces/Loadable.js +2 -0
- package/build/dist/Interfaces/Loadable.js.map +1 -0
- package/build/dist/Interfaces/PointerEventHandlers.js +2 -0
- package/build/dist/Interfaces/PointerEventHandlers.js.map +1 -0
- package/build/dist/Interfaces/Trait.js +2 -0
- package/build/dist/Interfaces/Trait.js.map +1 -0
- package/build/dist/Label.js +273 -0
- package/build/dist/Label.js.map +1 -0
- package/build/dist/Loader.js +367 -0
- package/build/dist/Loader.js.map +1 -0
- package/build/dist/Math/Index.js +10 -0
- package/build/dist/Math/Index.js.map +1 -0
- package/build/dist/Math/Random.js +239 -0
- package/build/dist/Math/Random.js.map +1 -0
- package/build/dist/Math/global-coordinates.js +30 -0
- package/build/dist/Math/global-coordinates.js.map +1 -0
- package/build/dist/Math/line.js +194 -0
- package/build/dist/Math/line.js.map +1 -0
- package/build/dist/Math/matrix.js +446 -0
- package/build/dist/Math/matrix.js.map +1 -0
- package/build/dist/Math/projection.js +24 -0
- package/build/dist/Math/projection.js.map +1 -0
- package/build/dist/Math/ray.js +52 -0
- package/build/dist/Math/ray.js.map +1 -0
- package/build/dist/Math/util.js +82 -0
- package/build/dist/Math/util.js.map +1 -0
- package/build/dist/Math/vector-view.js +25 -0
- package/build/dist/Math/vector-view.js.map +1 -0
- package/build/dist/Math/vector.js +326 -0
- package/build/dist/Math/vector.js.map +1 -0
- package/build/dist/Particles.js +449 -0
- package/build/dist/Particles.js.map +1 -0
- package/build/dist/Polyfill.js +56 -0
- package/build/dist/Polyfill.js.map +1 -0
- package/build/dist/Promises.js +205 -0
- package/build/dist/Promises.js.map +1 -0
- package/build/dist/Resources/Gif.js +479 -0
- package/build/dist/Resources/Gif.js.map +1 -0
- package/build/dist/Resources/Index.js +4 -0
- package/build/dist/Resources/Index.js.map +1 -0
- package/build/dist/Resources/Resource.js +74 -0
- package/build/dist/Resources/Resource.js.map +1 -0
- package/build/dist/Resources/Sound/AudioContext.js +16 -0
- package/build/dist/Resources/Sound/AudioContext.js.map +1 -0
- package/build/dist/Resources/Sound/Index.js +4 -0
- package/build/dist/Resources/Sound/Index.js.map +1 -0
- package/build/dist/Resources/Sound/Sound.js +240 -0
- package/build/dist/Resources/Sound/Sound.js.map +1 -0
- package/build/dist/Resources/Sound/WebAudioInstance.js +160 -0
- package/build/dist/Resources/Sound/WebAudioInstance.js.map +1 -0
- package/build/dist/Scene.js +458 -0
- package/build/dist/Scene.js.map +1 -0
- package/build/dist/Screen.js +634 -0
- package/build/dist/Screen.js.map +1 -0
- package/build/dist/ScreenElement.js +29 -0
- package/build/dist/ScreenElement.js.map +1 -0
- package/build/dist/TileMap.js +488 -0
- package/build/dist/TileMap.js.map +1 -0
- package/build/dist/Timer.js +198 -0
- package/build/dist/Timer.js.map +1 -0
- package/build/dist/Traits/Index.js +5 -0
- package/build/dist/Traits/Index.js.map +1 -0
- package/build/dist/Traits/OffscreenCulling.js +35 -0
- package/build/dist/Traits/OffscreenCulling.js.map +1 -0
- package/build/dist/Trigger.js +113 -0
- package/build/dist/Trigger.js.map +1 -0
- package/build/dist/Util/Actors.js +19 -0
- package/build/dist/Util/Actors.js.map +1 -0
- package/build/dist/Util/Browser.js +66 -0
- package/build/dist/Util/Browser.js.map +1 -0
- package/build/dist/Util/Clock.js +219 -0
- package/build/dist/Util/Clock.js.map +1 -0
- package/build/dist/Util/CullingBox.js +104 -0
- package/build/dist/Util/CullingBox.js.map +1 -0
- package/build/dist/Util/Decorators.js +78 -0
- package/build/dist/Util/Decorators.js.map +1 -0
- package/build/dist/Util/Detector.js +167 -0
- package/build/dist/Util/Detector.js.map +1 -0
- package/build/dist/Util/DrawUtil.js +117 -0
- package/build/dist/Util/DrawUtil.js.map +1 -0
- package/build/dist/Util/EasingFunctions.js +118 -0
- package/build/dist/Util/EasingFunctions.js.map +1 -0
- package/build/dist/Util/Fps.js +47 -0
- package/build/dist/Util/Fps.js.map +1 -0
- package/build/dist/Util/Index.js +7 -0
- package/build/dist/Util/Index.js.map +1 -0
- package/build/dist/Util/Log.js +195 -0
- package/build/dist/Util/Log.js.map +1 -0
- package/build/dist/Util/Observable.js +60 -0
- package/build/dist/Util/Observable.js.map +1 -0
- package/build/dist/Util/Pool.js +66 -0
- package/build/dist/Util/Pool.js.map +1 -0
- package/build/dist/Util/SortedList.js +261 -0
- package/build/dist/Util/SortedList.js.map +1 -0
- package/build/dist/Util/Sound.js +22 -0
- package/build/dist/Util/Sound.js.map +1 -0
- package/build/dist/Util/Util.js +294 -0
- package/build/dist/Util/Util.js.map +1 -0
- package/build/dist/Util/Watch.js +67 -0
- package/build/dist/Util/Watch.js.map +1 -0
- package/build/dist/Util/WebAudio.js +62 -0
- package/build/dist/Util/WebAudio.js.map +1 -0
- package/build/dist/excalibur.js +101 -22
- package/build/dist/excalibur.js.map +1 -1
- package/build/dist/excalibur.min.js +1 -1
- package/build/dist/excalibur.min.js.LICENSE.txt +1 -1
- package/build/dist/excalibur.min.js.map +1 -1
- package/build/dist/index.js +74 -0
- package/build/dist/index.js.map +1 -0
- package/build/esm/Engine.d.ts +4 -1
- package/build/esm/Graphics/Context/texture-loader.d.ts +8 -0
- package/build/esm/excalibur.js +101 -22
- package/build/esm/excalibur.js.map +1 -1
- package/build/esm/excalibur.min.js +1 -1
- package/build/esm/excalibur.min.js.LICENSE.txt +1 -1
- package/build/esm/excalibur.min.js.map +1 -1
- package/package.json +23 -22
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { PostCollisionEvent, PreCollisionEvent } from '../../Events';
|
|
2
|
+
import { CollisionType } from '../CollisionType';
|
|
3
|
+
import { Side } from '../Side';
|
|
4
|
+
import { CollisionSolver } from './Solver';
|
|
5
|
+
import { BodyComponent } from '../BodyComponent';
|
|
6
|
+
/**
|
|
7
|
+
* ArcadeSolver is the default in Excalibur. It solves collisions so that there is no overlap between contacts,
|
|
8
|
+
* and negates velocity along the collision normal.
|
|
9
|
+
*
|
|
10
|
+
* This is usually the type of collisions used for 2D games that don't need a more realistic collision simulation.
|
|
11
|
+
*
|
|
12
|
+
*/
|
|
13
|
+
export class ArcadeSolver extends CollisionSolver {
|
|
14
|
+
preSolve(contacts) {
|
|
15
|
+
for (const contact of contacts) {
|
|
16
|
+
const side = Side.fromDirection(contact.mtv);
|
|
17
|
+
const mtv = contact.mtv.negate();
|
|
18
|
+
// Publish collision events on both participants
|
|
19
|
+
contact.colliderA.events.emit('precollision', new PreCollisionEvent(contact.colliderA, contact.colliderB, side, mtv));
|
|
20
|
+
contact.colliderB.events.emit('precollision', new PreCollisionEvent(contact.colliderB, contact.colliderA, Side.getOpposite(side), mtv.negate()));
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
postSolve(contacts) {
|
|
24
|
+
var _a, _b;
|
|
25
|
+
for (const contact of contacts) {
|
|
26
|
+
const colliderA = contact.colliderA;
|
|
27
|
+
const colliderB = contact.colliderB;
|
|
28
|
+
const bodyA = (_a = colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);
|
|
29
|
+
const bodyB = (_b = colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);
|
|
30
|
+
if (bodyA && bodyB) {
|
|
31
|
+
if (bodyA.collisionType === CollisionType.Passive || bodyB.collisionType === CollisionType.Passive) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const side = Side.fromDirection(contact.mtv);
|
|
36
|
+
const mtv = contact.mtv.negate();
|
|
37
|
+
// Publish collision events on both participants
|
|
38
|
+
contact.colliderA.events.emit('postcollision', new PostCollisionEvent(contact.colliderA, contact.colliderB, side, mtv));
|
|
39
|
+
contact.colliderB.events.emit('postcollision', new PostCollisionEvent(contact.colliderB, contact.colliderA, Side.getOpposite(side), mtv.negate()));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
solvePosition(contacts) {
|
|
43
|
+
var _a, _b;
|
|
44
|
+
for (const contact of contacts) {
|
|
45
|
+
// if bounds no longer interesect skip to the next
|
|
46
|
+
// this removes jitter from overlapping/stacked solid tiles or a wall of solid tiles
|
|
47
|
+
if (!contact.colliderA.bounds.intersect(contact.colliderB.bounds)) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
let mtv = contact.mtv;
|
|
51
|
+
const colliderA = contact.colliderA;
|
|
52
|
+
const colliderB = contact.colliderB;
|
|
53
|
+
const bodyA = (_a = colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);
|
|
54
|
+
const bodyB = (_b = colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);
|
|
55
|
+
if (bodyA && bodyB) {
|
|
56
|
+
if (bodyA.collisionType === CollisionType.Passive || bodyB.collisionType === CollisionType.Passive) {
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (bodyA.collisionType === CollisionType.Active && bodyB.collisionType === CollisionType.Active) {
|
|
60
|
+
// split overlaps if both are Active
|
|
61
|
+
mtv = mtv.scale(0.5);
|
|
62
|
+
}
|
|
63
|
+
// Resolve overlaps
|
|
64
|
+
if (bodyA.collisionType === CollisionType.Active) {
|
|
65
|
+
bodyA.pos.x -= mtv.x;
|
|
66
|
+
bodyA.pos.y -= mtv.y;
|
|
67
|
+
}
|
|
68
|
+
if (bodyB.collisionType === CollisionType.Active) {
|
|
69
|
+
bodyB.pos.x += mtv.x;
|
|
70
|
+
bodyB.pos.y += mtv.y;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
solveVelocity(contacts) {
|
|
76
|
+
var _a, _b;
|
|
77
|
+
for (const contact of contacts) {
|
|
78
|
+
const colliderA = contact.colliderA;
|
|
79
|
+
const colliderB = contact.colliderB;
|
|
80
|
+
const bodyA = (_a = colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);
|
|
81
|
+
const bodyB = (_b = colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);
|
|
82
|
+
if (bodyA && bodyB) {
|
|
83
|
+
if (bodyA.collisionType === CollisionType.Passive || bodyB.collisionType === CollisionType.Passive) {
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
const normal = contact.normal;
|
|
87
|
+
const opposite = normal.negate();
|
|
88
|
+
// Cancel out velocity opposite direction of collision normal
|
|
89
|
+
if (bodyA.collisionType === CollisionType.Active) {
|
|
90
|
+
const velAdj = normal.scale(normal.dot(bodyA.vel.negate()));
|
|
91
|
+
bodyA.vel = bodyA.vel.add(velAdj);
|
|
92
|
+
}
|
|
93
|
+
if (bodyB.collisionType === CollisionType.Active) {
|
|
94
|
+
const velAdj = opposite.scale(opposite.dot(bodyB.vel.negate()));
|
|
95
|
+
bodyB.vel = bodyB.vel.add(velAdj);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=ArcadeSolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArcadeSolver.js","sourceRoot":"","sources":["../../../../src/engine/Collision/Solver/ArcadeSolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Vector } from '../../Math/vector';
|
|
2
|
+
import { BodyComponent } from '../BodyComponent';
|
|
3
|
+
/**
|
|
4
|
+
* Holds information about contact points, meant to be reused over multiple frames of contact
|
|
5
|
+
*/
|
|
6
|
+
export class ContactConstraintPoint {
|
|
7
|
+
constructor(point, local, contact) {
|
|
8
|
+
this.point = point;
|
|
9
|
+
this.local = local;
|
|
10
|
+
this.contact = contact;
|
|
11
|
+
/**
|
|
12
|
+
* Impulse accumulated over time in normal direction
|
|
13
|
+
*/
|
|
14
|
+
this.normalImpulse = 0;
|
|
15
|
+
/**
|
|
16
|
+
* Impulse accumulated over time in the tangent direction
|
|
17
|
+
*/
|
|
18
|
+
this.tangentImpulse = 0;
|
|
19
|
+
/**
|
|
20
|
+
* Effective mass seen in the normal direction
|
|
21
|
+
*/
|
|
22
|
+
this.normalMass = 0;
|
|
23
|
+
/**
|
|
24
|
+
* Effective mass seen in the tangent direction
|
|
25
|
+
*/
|
|
26
|
+
this.tangentMass = 0;
|
|
27
|
+
/**
|
|
28
|
+
* Direction from center of mass of bodyA to contact point
|
|
29
|
+
*/
|
|
30
|
+
this.aToContact = new Vector(0, 0);
|
|
31
|
+
/**
|
|
32
|
+
* Direction from center of mass of bodyB to contact point
|
|
33
|
+
*/
|
|
34
|
+
this.bToContact = new Vector(0, 0);
|
|
35
|
+
this.update();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Updates the contact information
|
|
39
|
+
*/
|
|
40
|
+
update() {
|
|
41
|
+
var _a, _b;
|
|
42
|
+
const bodyA = (_a = this.contact.colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);
|
|
43
|
+
const bodyB = (_b = this.contact.colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);
|
|
44
|
+
if (bodyA && bodyB) {
|
|
45
|
+
const normal = this.contact.normal;
|
|
46
|
+
const tangent = this.contact.tangent;
|
|
47
|
+
this.aToContact = this.point.sub(bodyA.pos);
|
|
48
|
+
this.bToContact = this.point.sub(bodyB.pos);
|
|
49
|
+
const aToContactNormal = this.aToContact.cross(normal);
|
|
50
|
+
const bToContactNormal = this.bToContact.cross(normal);
|
|
51
|
+
this.normalMass =
|
|
52
|
+
bodyA.inverseMass +
|
|
53
|
+
bodyB.inverseMass +
|
|
54
|
+
bodyA.inverseInertia * aToContactNormal * aToContactNormal +
|
|
55
|
+
bodyB.inverseInertia * bToContactNormal * bToContactNormal;
|
|
56
|
+
const aToContactTangent = this.aToContact.cross(tangent);
|
|
57
|
+
const bToContactTangent = this.bToContact.cross(tangent);
|
|
58
|
+
this.tangentMass =
|
|
59
|
+
bodyA.inverseMass +
|
|
60
|
+
bodyB.inverseMass +
|
|
61
|
+
bodyA.inverseInertia * aToContactTangent * aToContactTangent +
|
|
62
|
+
bodyB.inverseInertia * bToContactTangent * bToContactTangent;
|
|
63
|
+
}
|
|
64
|
+
return this;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Returns the relative velocity between bodyA and bodyB
|
|
68
|
+
*/
|
|
69
|
+
getRelativeVelocity() {
|
|
70
|
+
var _a, _b;
|
|
71
|
+
const bodyA = (_a = this.contact.colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);
|
|
72
|
+
const bodyB = (_b = this.contact.colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);
|
|
73
|
+
if (bodyA && bodyB) {
|
|
74
|
+
// Relative velocity in linear terms
|
|
75
|
+
// Angular to linear velocity formula -> omega = velocity/radius so omega x radius = velocity
|
|
76
|
+
const velA = bodyA.vel.add(Vector.cross(bodyA.angularVelocity, this.aToContact));
|
|
77
|
+
const velB = bodyB.vel.add(Vector.cross(bodyB.angularVelocity, this.bToContact));
|
|
78
|
+
return velB.sub(velA);
|
|
79
|
+
}
|
|
80
|
+
return Vector.Zero;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=ContactConstraintPoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContactConstraintPoint.js","sourceRoot":"","sources":["../../../../src/engine/Collision/Solver/ContactConstraintPoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD;;GAEG;AACH,MAAM,OAAO,sBAAsB;IACjC,YAAmB,KAAa,EAAS,KAAa,EAAS,OAAyB;QAArE,UAAK,GAAL,KAAK,CAAQ;QAAS,UAAK,GAAL,KAAK,CAAQ;QAAS,YAAO,GAAP,OAAO,CAAkB;QAwDxF;;WAEG;QACI,kBAAa,GAAW,CAAC,CAAC;QAEjC;;WAEG;QACI,mBAAc,GAAW,CAAC,CAAC;QAElC;;WAEG;QACI,eAAU,GAAW,CAAC,CAAC;QAE9B;;WAEG;QACI,gBAAW,GAAW,CAAC,CAAC;QAE/B;;WAEG;QACI,eAAU,GAAW,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE7C;;WAEG;QACI,eAAU,GAAW,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAnF3C,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,MAAM;;QACJ,MAAM,KAAK,GAAG,MAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,0CAAE,GAAG,CAAC,aAAa,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,MAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,0CAAE,GAAG,CAAC,aAAa,CAAC,CAAC;QAE/D,IAAI,KAAK,IAAI,KAAK,EAAE;YAClB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YAErC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE5C,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACvD,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAEvD,IAAI,CAAC,UAAU;gBACb,KAAK,CAAC,WAAW;oBACjB,KAAK,CAAC,WAAW;oBACjB,KAAK,CAAC,cAAc,GAAG,gBAAgB,GAAG,gBAAgB;oBAC1D,KAAK,CAAC,cAAc,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;YAE7D,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACzD,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAEzD,IAAI,CAAC,WAAW;gBACd,KAAK,CAAC,WAAW;oBACjB,KAAK,CAAC,WAAW;oBACjB,KAAK,CAAC,cAAc,GAAG,iBAAiB,GAAG,iBAAiB;oBAC5D,KAAK,CAAC,cAAc,GAAG,iBAAiB,GAAG,iBAAiB,CAAC;SAChE;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACI,mBAAmB;;QACxB,MAAM,KAAK,GAAG,MAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,0CAAE,GAAG,CAAC,aAAa,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,MAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,0CAAE,GAAG,CAAC,aAAa,CAAC,CAAC;QAC/D,IAAI,KAAK,IAAI,KAAK,EAAE;YAClB,oCAAoC;YACpC,6FAA6F;YAC7F,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACjF,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACjF,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SACvB;QACD,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;CA+BF"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import { CollisionPostSolveEvent, CollisionPreSolveEvent, PostCollisionEvent, PreCollisionEvent } from '../../Events';
|
|
2
|
+
import { clamp } from '../../Math/util';
|
|
3
|
+
import { CollisionType } from '../CollisionType';
|
|
4
|
+
import { ContactConstraintPoint } from './ContactConstraintPoint';
|
|
5
|
+
import { Side } from '../Side';
|
|
6
|
+
import { Physics } from '../Physics';
|
|
7
|
+
import { CollisionSolver } from './Solver';
|
|
8
|
+
import { BodyComponent } from '../BodyComponent';
|
|
9
|
+
import { CollisionJumpTable } from '../Colliders/CollisionJumpTable';
|
|
10
|
+
export class RealisticSolver extends CollisionSolver {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
this.lastFrameContacts = new Map();
|
|
14
|
+
// map contact id to contact points
|
|
15
|
+
this.idToContactConstraint = new Map();
|
|
16
|
+
}
|
|
17
|
+
getContactConstraints(id) {
|
|
18
|
+
var _a;
|
|
19
|
+
return (_a = this.idToContactConstraint.get(id)) !== null && _a !== void 0 ? _a : [];
|
|
20
|
+
}
|
|
21
|
+
preSolve(contacts) {
|
|
22
|
+
var _a, _b, _c;
|
|
23
|
+
for (const contact of contacts) {
|
|
24
|
+
// Publish collision events on both participants
|
|
25
|
+
const side = Side.fromDirection(contact.mtv);
|
|
26
|
+
contact.colliderA.events.emit('precollision', new PreCollisionEvent(contact.colliderA, contact.colliderB, side, contact.mtv));
|
|
27
|
+
contact.colliderA.events.emit('beforecollisionresolve', new CollisionPreSolveEvent(contact.colliderA, contact.colliderB, side, contact.mtv, contact));
|
|
28
|
+
contact.colliderB.events.emit('precollision', new PreCollisionEvent(contact.colliderB, contact.colliderA, Side.getOpposite(side), contact.mtv.negate()));
|
|
29
|
+
contact.colliderB.events.emit('beforecollisionresolve', new CollisionPreSolveEvent(contact.colliderB, contact.colliderA, Side.getOpposite(side), contact.mtv.negate(), contact));
|
|
30
|
+
// Match awake state for sleeping
|
|
31
|
+
contact.matchAwake();
|
|
32
|
+
}
|
|
33
|
+
// Keep track of contacts that done
|
|
34
|
+
const finishedContactIds = Array.from(this.idToContactConstraint.keys());
|
|
35
|
+
for (const contact of contacts) {
|
|
36
|
+
// Remove all current contacts that are not done
|
|
37
|
+
const index = finishedContactIds.indexOf(contact.id);
|
|
38
|
+
if (index > -1) {
|
|
39
|
+
finishedContactIds.splice(index, 1);
|
|
40
|
+
}
|
|
41
|
+
const contactPoints = (_a = this.idToContactConstraint.get(contact.id)) !== null && _a !== void 0 ? _a : [];
|
|
42
|
+
let pointIndex = 0;
|
|
43
|
+
const bodyA = contact.colliderA.owner.get(BodyComponent);
|
|
44
|
+
const bodyB = contact.colliderB.owner.get(BodyComponent);
|
|
45
|
+
if (bodyA && bodyB) {
|
|
46
|
+
for (const point of contact.points) {
|
|
47
|
+
const normal = contact.normal;
|
|
48
|
+
const tangent = contact.tangent;
|
|
49
|
+
const aToContact = point.sub(bodyA.pos);
|
|
50
|
+
const bToContact = point.sub(bodyB.pos);
|
|
51
|
+
const aToContactNormal = aToContact.cross(normal);
|
|
52
|
+
const bToContactNormal = bToContact.cross(normal);
|
|
53
|
+
const normalMass = bodyA.inverseMass +
|
|
54
|
+
bodyB.inverseMass +
|
|
55
|
+
bodyA.inverseInertia * aToContactNormal * aToContactNormal +
|
|
56
|
+
bodyB.inverseInertia * bToContactNormal * bToContactNormal;
|
|
57
|
+
const aToContactTangent = aToContact.cross(tangent);
|
|
58
|
+
const bToContactTangent = bToContact.cross(tangent);
|
|
59
|
+
const tangentMass = bodyA.inverseMass +
|
|
60
|
+
bodyB.inverseMass +
|
|
61
|
+
bodyA.inverseInertia * aToContactTangent * aToContactTangent +
|
|
62
|
+
bodyB.inverseInertia * bToContactTangent * bToContactTangent;
|
|
63
|
+
// Preserve normal/tangent impulse by re-using the contact point if it's close
|
|
64
|
+
if (contactPoints[pointIndex] && ((_c = (_b = contactPoints[pointIndex]) === null || _b === void 0 ? void 0 : _b.point) === null || _c === void 0 ? void 0 : _c.squareDistance(point)) < 4) {
|
|
65
|
+
contactPoints[pointIndex].point = point;
|
|
66
|
+
contactPoints[pointIndex].local = contact.localPoints[pointIndex];
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
// new contact if it's not close or doesn't exist
|
|
70
|
+
contactPoints[pointIndex] = new ContactConstraintPoint(point, contact.localPoints[pointIndex], contact);
|
|
71
|
+
}
|
|
72
|
+
// Update contact point calculations
|
|
73
|
+
contactPoints[pointIndex].aToContact = aToContact;
|
|
74
|
+
contactPoints[pointIndex].bToContact = bToContact;
|
|
75
|
+
contactPoints[pointIndex].normalMass = normalMass;
|
|
76
|
+
contactPoints[pointIndex].tangentMass = tangentMass;
|
|
77
|
+
pointIndex++;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
this.idToContactConstraint.set(contact.id, contactPoints);
|
|
81
|
+
}
|
|
82
|
+
// Clean up any contacts that did not occur last frame
|
|
83
|
+
for (const id of finishedContactIds) {
|
|
84
|
+
this.idToContactConstraint.delete(id);
|
|
85
|
+
}
|
|
86
|
+
// Warm contacts with accumulated impulse
|
|
87
|
+
// Useful for tall stacks
|
|
88
|
+
if (Physics.warmStart) {
|
|
89
|
+
this.warmStart(contacts);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
for (const contact of contacts) {
|
|
93
|
+
const contactPoints = this.getContactConstraints(contact.id);
|
|
94
|
+
for (const point of contactPoints) {
|
|
95
|
+
point.normalImpulse = 0;
|
|
96
|
+
point.tangentImpulse = 0;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
postSolve(contacts) {
|
|
102
|
+
for (const contact of contacts) {
|
|
103
|
+
const bodyA = contact.colliderA.owner.get(BodyComponent);
|
|
104
|
+
const bodyB = contact.colliderB.owner.get(BodyComponent);
|
|
105
|
+
if (bodyA && bodyB) {
|
|
106
|
+
// Skip post solve for active+passive collisions
|
|
107
|
+
if (bodyA.collisionType === CollisionType.Passive || bodyB.collisionType === CollisionType.Passive) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
// Update motion values for sleeping
|
|
111
|
+
bodyA.updateMotion();
|
|
112
|
+
bodyB.updateMotion();
|
|
113
|
+
}
|
|
114
|
+
// Publish collision events on both participants
|
|
115
|
+
const side = Side.fromDirection(contact.mtv);
|
|
116
|
+
contact.colliderA.events.emit('postcollision', new PostCollisionEvent(contact.colliderA, contact.colliderB, side, contact.mtv));
|
|
117
|
+
contact.colliderA.events.emit('aftercollisionresolve', new CollisionPostSolveEvent(contact.colliderA, contact.colliderB, side, contact.mtv, contact));
|
|
118
|
+
contact.colliderB.events.emit('postcollision', new PostCollisionEvent(contact.colliderB, contact.colliderA, Side.getOpposite(side), contact.mtv.negate()));
|
|
119
|
+
contact.colliderB.events.emit('aftercollisionresolve', new CollisionPostSolveEvent(contact.colliderB, contact.colliderA, Side.getOpposite(side), contact.mtv.negate(), contact));
|
|
120
|
+
}
|
|
121
|
+
// Store contacts
|
|
122
|
+
this.lastFrameContacts.clear();
|
|
123
|
+
for (const c of contacts) {
|
|
124
|
+
this.lastFrameContacts.set(c.id, c);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Warm up body's based on previous frame contact points
|
|
129
|
+
* @param contacts
|
|
130
|
+
*/
|
|
131
|
+
warmStart(contacts) {
|
|
132
|
+
var _a, _b, _c;
|
|
133
|
+
for (const contact of contacts) {
|
|
134
|
+
const bodyA = (_a = contact.colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);
|
|
135
|
+
const bodyB = (_b = contact.colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);
|
|
136
|
+
if (bodyA && bodyB) {
|
|
137
|
+
const contactPoints = (_c = this.idToContactConstraint.get(contact.id)) !== null && _c !== void 0 ? _c : [];
|
|
138
|
+
for (const point of contactPoints) {
|
|
139
|
+
if (Physics.warmStart) {
|
|
140
|
+
const normalImpulse = contact.normal.scale(point.normalImpulse);
|
|
141
|
+
const tangentImpulse = contact.tangent.scale(point.tangentImpulse);
|
|
142
|
+
const impulse = normalImpulse.add(tangentImpulse);
|
|
143
|
+
bodyA.applyImpulse(point.point, impulse.negate());
|
|
144
|
+
bodyB.applyImpulse(point.point, impulse);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
point.normalImpulse = 0;
|
|
148
|
+
point.tangentImpulse = 0;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Iteratively solve the position overlap constraint
|
|
156
|
+
* @param contacts
|
|
157
|
+
*/
|
|
158
|
+
solvePosition(contacts) {
|
|
159
|
+
var _a, _b, _c;
|
|
160
|
+
for (let i = 0; i < Physics.positionIterations; i++) {
|
|
161
|
+
for (const contact of contacts) {
|
|
162
|
+
const bodyA = (_a = contact.colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);
|
|
163
|
+
const bodyB = (_b = contact.colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);
|
|
164
|
+
if (bodyA && bodyB) {
|
|
165
|
+
// Skip solving active+passive
|
|
166
|
+
if (bodyA.collisionType === CollisionType.Passive || bodyB.collisionType === CollisionType.Passive) {
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
const constraints = (_c = this.idToContactConstraint.get(contact.id)) !== null && _c !== void 0 ? _c : [];
|
|
170
|
+
for (const point of constraints) {
|
|
171
|
+
const normal = contact.normal;
|
|
172
|
+
const separation = CollisionJumpTable.FindContactSeparation(contact, point.local);
|
|
173
|
+
const steeringConstant = Physics.steeringFactor; //0.2;
|
|
174
|
+
const maxCorrection = -5;
|
|
175
|
+
const slop = Physics.slop; //1;
|
|
176
|
+
// Clamp to avoid over-correction
|
|
177
|
+
// Remember that we are shooting for 0 overlap in the end
|
|
178
|
+
const steeringForce = clamp(steeringConstant * (separation + slop), maxCorrection, 0);
|
|
179
|
+
const impulse = normal.scale(-steeringForce / point.normalMass);
|
|
180
|
+
// This is a pseudo impulse, meaning we aren't doing a real impulse calculation
|
|
181
|
+
// We adjust position and rotation instead of doing the velocity
|
|
182
|
+
if (bodyA.collisionType === CollisionType.Active) {
|
|
183
|
+
bodyA.pos = bodyA.pos.add(impulse.negate().scale(bodyA.inverseMass));
|
|
184
|
+
bodyA.rotation -= point.aToContact.cross(impulse) * bodyA.inverseInertia;
|
|
185
|
+
}
|
|
186
|
+
if (bodyB.collisionType === CollisionType.Active) {
|
|
187
|
+
bodyB.pos = bodyB.pos.add(impulse.scale(bodyB.inverseMass));
|
|
188
|
+
bodyB.rotation += point.bToContact.cross(impulse) * bodyB.inverseInertia;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
solveVelocity(contacts) {
|
|
196
|
+
var _a, _b, _c;
|
|
197
|
+
for (let i = 0; i < Physics.velocityIterations; i++) {
|
|
198
|
+
for (const contact of contacts) {
|
|
199
|
+
const bodyA = (_a = contact.colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);
|
|
200
|
+
const bodyB = (_b = contact.colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);
|
|
201
|
+
if (bodyA && bodyB) {
|
|
202
|
+
// Skip solving active+passive
|
|
203
|
+
if (bodyA.collisionType === CollisionType.Passive || bodyB.collisionType === CollisionType.Passive) {
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
const restitution = bodyA.bounciness * bodyB.bounciness;
|
|
207
|
+
const friction = Math.min(bodyA.friction, bodyB.friction);
|
|
208
|
+
const constraints = (_c = this.idToContactConstraint.get(contact.id)) !== null && _c !== void 0 ? _c : [];
|
|
209
|
+
for (const point of constraints) {
|
|
210
|
+
const relativeVelocity = point.getRelativeVelocity();
|
|
211
|
+
// Negate velocity in tangent direction to simulate friction
|
|
212
|
+
const tangentVelocity = -relativeVelocity.dot(contact.tangent);
|
|
213
|
+
let impulseDelta = tangentVelocity / point.tangentMass;
|
|
214
|
+
// Clamping based in Erin Catto's GDC 2006 talk
|
|
215
|
+
// Correct clamping https://github.com/erincatto/box2d-lite/blob/master/docs/GDC2006_Catto_Erin_PhysicsTutorial.pdf
|
|
216
|
+
// Accumulated fiction impulse is always between -uMaxFriction < dT < uMaxFriction
|
|
217
|
+
// But deltas can vary
|
|
218
|
+
const maxFriction = friction * point.normalImpulse;
|
|
219
|
+
const newImpulse = clamp(point.tangentImpulse + impulseDelta, -maxFriction, maxFriction);
|
|
220
|
+
impulseDelta = newImpulse - point.tangentImpulse;
|
|
221
|
+
point.tangentImpulse = newImpulse;
|
|
222
|
+
const impulse = contact.tangent.scale(impulseDelta);
|
|
223
|
+
bodyA.applyImpulse(point.point, impulse.negate());
|
|
224
|
+
bodyB.applyImpulse(point.point, impulse);
|
|
225
|
+
}
|
|
226
|
+
for (const point of constraints) {
|
|
227
|
+
// Need to recalc relative velocity because the previous step could have changed vel
|
|
228
|
+
const relativeVelocity = point.getRelativeVelocity();
|
|
229
|
+
// Compute impulse in normal direction
|
|
230
|
+
const normalVelocity = relativeVelocity.dot(contact.normal);
|
|
231
|
+
// See https://en.wikipedia.org/wiki/Collision_response
|
|
232
|
+
let impulseDelta = (-(1 + restitution) * normalVelocity) / point.normalMass;
|
|
233
|
+
// Clamping based in Erin Catto's GDC 2014 talk
|
|
234
|
+
// Accumulated impulse stored in the contact is always positive (dV > 0)
|
|
235
|
+
// But deltas can be negative
|
|
236
|
+
const newImpulse = Math.max(point.normalImpulse + impulseDelta, 0);
|
|
237
|
+
impulseDelta = newImpulse - point.normalImpulse;
|
|
238
|
+
point.normalImpulse = newImpulse;
|
|
239
|
+
const impulse = contact.normal.scale(impulseDelta);
|
|
240
|
+
bodyA.applyImpulse(point.point, impulse.negate());
|
|
241
|
+
bodyB.applyImpulse(point.point, impulse);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=RealisticSolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RealisticSolver.js","sourceRoot":"","sources":["../../../../src/engine/Collision/Solver/RealisticSolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A collision solver figures out how to position colliders such that they are no longer overlapping
|
|
3
|
+
*
|
|
4
|
+
* Solvers are executed in the order
|
|
5
|
+
*
|
|
6
|
+
* 1. preSolve
|
|
7
|
+
* 2. solveVelocity
|
|
8
|
+
* 3. solvePosition
|
|
9
|
+
* 4. postSolve
|
|
10
|
+
* @inheritdoc
|
|
11
|
+
*/
|
|
12
|
+
export class CollisionSolver {
|
|
13
|
+
/**
|
|
14
|
+
* Solves overlapping contact in
|
|
15
|
+
*
|
|
16
|
+
* Solvers are executed in the order
|
|
17
|
+
* 1. preSolve
|
|
18
|
+
* 2. solveVelocity
|
|
19
|
+
* 3. solvePosition
|
|
20
|
+
* 4. postSolve
|
|
21
|
+
* @param contacts
|
|
22
|
+
*/
|
|
23
|
+
solve(contacts) {
|
|
24
|
+
// Events and init
|
|
25
|
+
this.preSolve(contacts);
|
|
26
|
+
// Remove any canceled contacts
|
|
27
|
+
contacts = contacts.filter(c => !c.isCanceled());
|
|
28
|
+
// Solve velocity first
|
|
29
|
+
this.solveVelocity(contacts);
|
|
30
|
+
// Solve position last because non-overlap is the most important
|
|
31
|
+
this.solvePosition(contacts);
|
|
32
|
+
// Events and any contact house-keeping the solver needs
|
|
33
|
+
this.postSolve(contacts);
|
|
34
|
+
return contacts;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=Solver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Solver.js","sourceRoot":"","sources":["../../../../src/engine/Collision/Solver/Solver.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,MAAM,OAAgB,eAAe;IA8BnC;;;;;;;;;OASG;IACI,KAAK,CAAC,QAA4B;QACvC,kBAAkB;QAClB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAExB,+BAA+B;QAC/B,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QAEjD,uBAAuB;QACvB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAE7B,gEAAgE;QAChE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAE7B,wDAAwD;QACxD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEzB,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF"}
|