toaimin-indie-engine 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/README.md +55 -0
  2. package/cli/bin.cjs +99 -0
  3. package/dist/audio/AudioBus.d.ts +30 -0
  4. package/dist/audio/AudioBus.d.ts.map +1 -0
  5. package/dist/audio/AudioMock.d.ts +112 -0
  6. package/dist/audio/AudioMock.d.ts.map +1 -0
  7. package/dist/audio/ProceduralAudio.d.ts +48 -0
  8. package/dist/audio/ProceduralAudio.d.ts.map +1 -0
  9. package/dist/audio/SoundManager.d.ts +73 -0
  10. package/dist/audio/SoundManager.d.ts.map +1 -0
  11. package/dist/audio/VoicePool.d.ts +26 -0
  12. package/dist/audio/VoicePool.d.ts.map +1 -0
  13. package/dist/audio/index.d.ts +7 -0
  14. package/dist/audio/index.d.ts.map +1 -0
  15. package/dist/audio/types.d.ts +87 -0
  16. package/dist/audio/types.d.ts.map +1 -0
  17. package/dist/core/EventEmitter.d.ts +64 -0
  18. package/dist/core/EventEmitter.d.ts.map +1 -0
  19. package/dist/core/Game.d.ts +248 -0
  20. package/dist/core/Game.d.ts.map +1 -0
  21. package/dist/core/GameLoop.d.ts +128 -0
  22. package/dist/core/GameLoop.d.ts.map +1 -0
  23. package/dist/core/Time.d.ts +73 -0
  24. package/dist/core/Time.d.ts.map +1 -0
  25. package/dist/core/index.d.ts +5 -0
  26. package/dist/core/index.d.ts.map +1 -0
  27. package/dist/entity/Component.d.ts +31 -0
  28. package/dist/entity/Component.d.ts.map +1 -0
  29. package/dist/entity/Entity.d.ts +61 -0
  30. package/dist/entity/Entity.d.ts.map +1 -0
  31. package/dist/entity/EntityManager.d.ts +46 -0
  32. package/dist/entity/EntityManager.d.ts.map +1 -0
  33. package/dist/entity/components/ColliderComponent.d.ts +47 -0
  34. package/dist/entity/components/ColliderComponent.d.ts.map +1 -0
  35. package/dist/entity/components/RigidBodyComponent.d.ts +38 -0
  36. package/dist/entity/components/RigidBodyComponent.d.ts.map +1 -0
  37. package/dist/entity/components/ScriptComponent.d.ts +32 -0
  38. package/dist/entity/components/ScriptComponent.d.ts.map +1 -0
  39. package/dist/entity/components/ShapeComponent.d.ts +50 -0
  40. package/dist/entity/components/ShapeComponent.d.ts.map +1 -0
  41. package/dist/entity/components/SpriteComponent.d.ts +31 -0
  42. package/dist/entity/components/SpriteComponent.d.ts.map +1 -0
  43. package/dist/entity/components/index.d.ts +6 -0
  44. package/dist/entity/components/index.d.ts.map +1 -0
  45. package/dist/entity/index.d.ts +5 -0
  46. package/dist/entity/index.d.ts.map +1 -0
  47. package/dist/index.cjs +4 -0
  48. package/dist/index.cjs.map +1 -0
  49. package/dist/index.d.ts +15 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +6326 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/input/ActionMap.d.ts +91 -0
  54. package/dist/input/ActionMap.d.ts.map +1 -0
  55. package/dist/input/InputManager.d.ts +102 -0
  56. package/dist/input/InputManager.d.ts.map +1 -0
  57. package/dist/input/Pointer.d.ts +115 -0
  58. package/dist/input/Pointer.d.ts.map +1 -0
  59. package/dist/input/VirtualJoystick.d.ts +79 -0
  60. package/dist/input/VirtualJoystick.d.ts.map +1 -0
  61. package/dist/input/index.d.ts +5 -0
  62. package/dist/input/index.d.ts.map +1 -0
  63. package/dist/math/Circle.d.ts +39 -0
  64. package/dist/math/Circle.d.ts.map +1 -0
  65. package/dist/math/Color.d.ts +58 -0
  66. package/dist/math/Color.d.ts.map +1 -0
  67. package/dist/math/MathUtils.d.ts +82 -0
  68. package/dist/math/MathUtils.d.ts.map +1 -0
  69. package/dist/math/Matrix2D.d.ts +97 -0
  70. package/dist/math/Matrix2D.d.ts.map +1 -0
  71. package/dist/math/Rect.d.ts +54 -0
  72. package/dist/math/Rect.d.ts.map +1 -0
  73. package/dist/math/Transform2D.d.ts +47 -0
  74. package/dist/math/Transform2D.d.ts.map +1 -0
  75. package/dist/math/Vector2.d.ts +89 -0
  76. package/dist/math/Vector2.d.ts.map +1 -0
  77. package/dist/math/index.d.ts +8 -0
  78. package/dist/math/index.d.ts.map +1 -0
  79. package/dist/physics/BoxCollider2D.d.ts +38 -0
  80. package/dist/physics/BoxCollider2D.d.ts.map +1 -0
  81. package/dist/physics/CircleCollider2D.d.ts +27 -0
  82. package/dist/physics/CircleCollider2D.d.ts.map +1 -0
  83. package/dist/physics/Collider2D.d.ts +79 -0
  84. package/dist/physics/Collider2D.d.ts.map +1 -0
  85. package/dist/physics/CollisionFSM.d.ts +84 -0
  86. package/dist/physics/CollisionFSM.d.ts.map +1 -0
  87. package/dist/physics/ContactSolver.d.ts +58 -0
  88. package/dist/physics/ContactSolver.d.ts.map +1 -0
  89. package/dist/physics/Narrowphase.d.ts +25 -0
  90. package/dist/physics/Narrowphase.d.ts.map +1 -0
  91. package/dist/physics/PhysicsWorld2D.d.ts +75 -0
  92. package/dist/physics/PhysicsWorld2D.d.ts.map +1 -0
  93. package/dist/physics/Raycast.d.ts +38 -0
  94. package/dist/physics/Raycast.d.ts.map +1 -0
  95. package/dist/physics/RigidBody2D.d.ts +118 -0
  96. package/dist/physics/RigidBody2D.d.ts.map +1 -0
  97. package/dist/physics/SpatialGrid.d.ts +78 -0
  98. package/dist/physics/SpatialGrid.d.ts.map +1 -0
  99. package/dist/physics/index.d.ts +14 -0
  100. package/dist/physics/index.d.ts.map +1 -0
  101. package/dist/rendering/Animation.d.ts +62 -0
  102. package/dist/rendering/Animation.d.ts.map +1 -0
  103. package/dist/rendering/AssetLoader.d.ts +35 -0
  104. package/dist/rendering/AssetLoader.d.ts.map +1 -0
  105. package/dist/rendering/Camera2D.d.ts +109 -0
  106. package/dist/rendering/Camera2D.d.ts.map +1 -0
  107. package/dist/rendering/CanvasContext.d.ts +80 -0
  108. package/dist/rendering/CanvasContext.d.ts.map +1 -0
  109. package/dist/rendering/CanvasMock.d.ts +163 -0
  110. package/dist/rendering/CanvasMock.d.ts.map +1 -0
  111. package/dist/rendering/ParticleSystem.d.ts +103 -0
  112. package/dist/rendering/ParticleSystem.d.ts.map +1 -0
  113. package/dist/rendering/Renderer.d.ts +98 -0
  114. package/dist/rendering/Renderer.d.ts.map +1 -0
  115. package/dist/rendering/Shapes.d.ts +24 -0
  116. package/dist/rendering/Shapes.d.ts.map +1 -0
  117. package/dist/rendering/Sprite.d.ts +74 -0
  118. package/dist/rendering/Sprite.d.ts.map +1 -0
  119. package/dist/rendering/SpriteSheet.d.ts +22 -0
  120. package/dist/rendering/SpriteSheet.d.ts.map +1 -0
  121. package/dist/rendering/index.d.ts +11 -0
  122. package/dist/rendering/index.d.ts.map +1 -0
  123. package/dist/scene/Blackboard.d.ts +81 -0
  124. package/dist/scene/Blackboard.d.ts.map +1 -0
  125. package/dist/scene/Scene.d.ts +160 -0
  126. package/dist/scene/Scene.d.ts.map +1 -0
  127. package/dist/scene/SceneManager.d.ts +142 -0
  128. package/dist/scene/SceneManager.d.ts.map +1 -0
  129. package/dist/scene/SceneTransition.d.ts +118 -0
  130. package/dist/scene/SceneTransition.d.ts.map +1 -0
  131. package/dist/scene/index.d.ts +5 -0
  132. package/dist/scene/index.d.ts.map +1 -0
  133. package/dist/ui/UIAnchor.d.ts +31 -0
  134. package/dist/ui/UIAnchor.d.ts.map +1 -0
  135. package/dist/ui/UIButton.d.ts +48 -0
  136. package/dist/ui/UIButton.d.ts.map +1 -0
  137. package/dist/ui/UIElement.d.ts +108 -0
  138. package/dist/ui/UIElement.d.ts.map +1 -0
  139. package/dist/ui/UILabel.d.ts +54 -0
  140. package/dist/ui/UILabel.d.ts.map +1 -0
  141. package/dist/ui/UIManager.d.ts +41 -0
  142. package/dist/ui/UIManager.d.ts.map +1 -0
  143. package/dist/ui/UIPanel.d.ts +36 -0
  144. package/dist/ui/UIPanel.d.ts.map +1 -0
  145. package/dist/ui/UIProgressBar.d.ts +47 -0
  146. package/dist/ui/UIProgressBar.d.ts.map +1 -0
  147. package/dist/ui/index.d.ts +8 -0
  148. package/dist/ui/index.d.ts.map +1 -0
  149. package/package.json +47 -0
@@ -0,0 +1,97 @@
1
+ import { Vector2 } from './Vector2';
2
+ /**
3
+ * 2D 3x3 Affine Transformation Matrix
4
+ * Matches HTML5 Canvas 2D matrix layout:
5
+ * [ a c tx ]
6
+ * [ b d ty ]
7
+ * [ 0 0 1 ]
8
+ *
9
+ * a: scale X / cos
10
+ * b: skew Y / sin
11
+ * c: skew X / -sin
12
+ * d: scale Y / cos
13
+ * tx: translation X
14
+ * ty: translation Y
15
+ */
16
+ export declare class Matrix2D {
17
+ a: number;
18
+ b: number;
19
+ c: number;
20
+ d: number;
21
+ tx: number;
22
+ ty: number;
23
+ constructor(a?: number, b?: number, c?: number, d?: number, tx?: number, ty?: number);
24
+ set(a: number, b: number, c: number, d: number, tx: number, ty: number): this;
25
+ identity(): this;
26
+ copy(other: Matrix2D): this;
27
+ clone(): Matrix2D;
28
+ /**
29
+ * Determinant: a * d - b * c
30
+ */
31
+ determinant(): number;
32
+ /**
33
+ * Inverts the matrix in-place.
34
+ * Guarded against singular / degenerate matrices (|det| < 1e-10).
35
+ * In degenerate cases, resets to identity safely without NaN.
36
+ */
37
+ invert(): this;
38
+ getInverse(out?: Matrix2D): Matrix2D;
39
+ /**
40
+ * Multiplies this matrix by another (this * other).
41
+ * Returns a new Matrix2D instance.
42
+ */
43
+ multiply(other: Matrix2D): Matrix2D;
44
+ /**
45
+ * Multiplies this matrix by other in-place: this = this * other.
46
+ * Alias: append()
47
+ */
48
+ multiplyInPlace(other: Matrix2D): this;
49
+ append(other: Matrix2D): this;
50
+ /**
51
+ * Pre-multiplies this matrix by other in-place: this = other * this.
52
+ */
53
+ prepend(other: Matrix2D): this;
54
+ translate(x: number, y: number): this;
55
+ rotate(radians: number): this;
56
+ scale(sx: number, sy?: number): this;
57
+ /**
58
+ * Directly sets this matrix from Translation, Rotation, Scale, and Pivot in a single step with zero allocations.
59
+ * Point order: Translate(-pivot) -> Scale -> Rotate -> Translate(position)
60
+ */
61
+ fromTransform(x: number, y: number, rotation: number, scaleX: number, scaleY: number, pivotX?: number, pivotY?: number): this;
62
+ /**
63
+ * Transforms a 2D point vector by this affine matrix:
64
+ * x' = a * x + c * y + tx
65
+ * y' = b * x + d * y + ty
66
+ */
67
+ transformPoint(point: Vector2, out?: Vector2): Vector2;
68
+ /**
69
+ * Transforms a 2D direction vector (ignores translation components tx, ty):
70
+ * x' = a * x + c * y
71
+ * y' = b * x + d * y
72
+ */
73
+ transformDirection(direction: Vector2, out?: Vector2): Vector2;
74
+ /**
75
+ * Decomposes matrix into position, rotation (radians), and scale.
76
+ */
77
+ decompose(out?: {
78
+ position: Vector2;
79
+ rotation: number;
80
+ scale: Vector2;
81
+ }): {
82
+ position: Vector2;
83
+ rotation: number;
84
+ scale: Vector2;
85
+ };
86
+ /**
87
+ * Directly sets this matrix to a 2D Canvas context.
88
+ */
89
+ applyToContext(ctx: CanvasRenderingContext2D): void;
90
+ /**
91
+ * Multiplies this matrix onto the current Canvas context matrix.
92
+ */
93
+ transformContext(ctx: CanvasRenderingContext2D): void;
94
+ equals(other: Matrix2D, epsilon?: number): boolean;
95
+ static identity(): Matrix2D;
96
+ }
97
+ //# sourceMappingURL=Matrix2D.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Matrix2D.d.ts","sourceRoot":"","sources":["../../src/math/Matrix2D.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;;;;;;;;;;;GAaG;AACH,qBAAa,QAAQ;IACZ,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;gBAGhB,CAAC,GAAE,MAAU,EACb,CAAC,GAAE,MAAU,EACb,CAAC,GAAE,MAAU,EACb,CAAC,GAAE,MAAU,EACb,EAAE,GAAE,MAAU,EACd,EAAE,GAAE,MAAU;IAUT,GAAG,CACR,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,GACT,IAAI;IAUA,QAAQ,IAAI,IAAI;IAIhB,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI3B,KAAK,IAAI,QAAQ;IAIxB;;OAEG;IACI,WAAW,IAAI,MAAM;IAI5B;;;;OAIG;IACI,MAAM,IAAI,IAAI;IA0Bd,UAAU,CAAC,GAAG,CAAC,EAAE,QAAQ,GAAG,QAAQ;IAK3C;;;OAGG;IACI,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ;IAI1C;;;OAGG;IACI,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IActC,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAIpC;;OAEG;IACI,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAc9B,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAMrC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAgB7B,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,GAAE,MAAW,GAAG,IAAI;IAQ/C;;;OAGG;IACI,aAAa,CAClB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,MAAU,EAClB,MAAM,GAAE,MAAU,GACjB,IAAI;IAmBP;;;;OAIG;IACI,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,OAAO;IAS7D;;;;OAIG;IACI,kBAAkB,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,OAAO;IASrE;;OAEG;IACI,SAAS,CAAC,GAAG,CAAC,EAAE;QACrB,QAAQ,EAAE,OAAO,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,OAAO,CAAC;KAChB,GAAG;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE;IAe3D;;OAEG;IACI,cAAc,CAAC,GAAG,EAAE,wBAAwB,GAAG,IAAI;IAI1D;;OAEG;IACI,gBAAgB,CAAC,GAAG,EAAE,wBAAwB,GAAG,IAAI;IAIrD,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,GAAE,MAAa,GAAG,OAAO;WAWjD,QAAQ,IAAI,QAAQ;CAGnC"}
@@ -0,0 +1,54 @@
1
+ import { Vector2 } from './Vector2';
2
+ /**
3
+ * Axis-Aligned Bounding Box (AABB) 2D Rectangle.
4
+ * Coordinates follow 2D screen convention (x, y at top-left).
5
+ */
6
+ export declare class Rect {
7
+ x: number;
8
+ y: number;
9
+ width: number;
10
+ height: number;
11
+ constructor(x?: number, y?: number, width?: number, height?: number);
12
+ set(x: number, y: number, width: number, height: number): this;
13
+ copy(other: Rect): this;
14
+ clone(): Rect;
15
+ get left(): number;
16
+ set left(val: number);
17
+ get right(): number;
18
+ set right(val: number);
19
+ get top(): number;
20
+ set top(val: number);
21
+ get bottom(): number;
22
+ set bottom(val: number);
23
+ get centerX(): number;
24
+ get centerY(): number;
25
+ get center(): Vector2;
26
+ get size(): Vector2;
27
+ /**
28
+ * Tests whether point (x, y) lies inside this rectangle.
29
+ */
30
+ contains(x: number, y: number): boolean;
31
+ containsPoint(point: Vector2): boolean;
32
+ /**
33
+ * Tests whether another rectangle is entirely enclosed within this rectangle.
34
+ */
35
+ containsRect(other: Rect): boolean;
36
+ /**
37
+ * Tests whether this rectangle intersects with another rectangle (AABB overlap).
38
+ */
39
+ intersects(other: Rect): boolean;
40
+ /**
41
+ * Computes the overlapping intersection rectangle. Returns null if no intersection.
42
+ */
43
+ intersection(other: Rect, out?: Rect): Rect | null;
44
+ /**
45
+ * Computes bounding rectangle enclosing both this and other.
46
+ */
47
+ union(other: Rect, out?: Rect): Rect;
48
+ inflate(dx: number, dy?: number): this;
49
+ offset(dx: number, dy: number): this;
50
+ static fromPoints(p1: Vector2, p2: Vector2): Rect;
51
+ static fromCenter(centerX: number, centerY: number, width: number, height: number): Rect;
52
+ static fromMinMax(minX: number, minY: number, maxX: number, maxY: number): Rect;
53
+ }
54
+ //# sourceMappingURL=Rect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rect.d.ts","sourceRoot":"","sources":["../../src/math/Rect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;GAGG;AACH,qBAAa,IAAI;IACR,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;gBAEV,CAAC,GAAE,MAAU,EAAE,CAAC,GAAE,MAAU,EAAE,KAAK,GAAE,MAAU,EAAE,MAAM,GAAE,MAAU;IAOxE,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ9D,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI;IAIvB,KAAK,IAAI,IAAI;IAQpB,IAAW,IAAI,IAAI,MAAM,CAExB;IAED,IAAW,IAAI,CAAC,GAAG,EAAE,MAAM,EAG1B;IAED,IAAW,KAAK,IAAI,MAAM,CAEzB;IAED,IAAW,KAAK,CAAC,GAAG,EAAE,MAAM,EAE3B;IAED,IAAW,GAAG,IAAI,MAAM,CAEvB;IAED,IAAW,GAAG,CAAC,GAAG,EAAE,MAAM,EAGzB;IAED,IAAW,MAAM,IAAI,MAAM,CAE1B;IAED,IAAW,MAAM,CAAC,GAAG,EAAE,MAAM,EAE5B;IAED,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED,IAAW,IAAI,IAAI,OAAO,CAEzB;IAMD;;OAEG;IACI,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO;IASvC,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAI7C;;OAEG;IACI,YAAY,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO;IASzC;;OAEG;IACI,UAAU,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO;IASvC;;OAEG;IACI,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI;IAYzD;;OAEG;IACI,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI;IAUpC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,GAAE,MAAW,GAAG,IAAI;IAQ1C,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;WAU7B,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,GAAG,IAAI;WAQ1C,UAAU,CACtB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI;WAIO,UAAU,CACtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,IAAI;CAGR"}
@@ -0,0 +1,47 @@
1
+ import { Vector2 } from './Vector2';
2
+ import { Matrix2D } from './Matrix2D';
3
+ /**
4
+ * Hierarchical 2D Transform component for Scene Graph entities,
5
+ * with local TRS, pivot, lazy matrix caching, and parent-child propagation.
6
+ */
7
+ export declare class Transform2D {
8
+ readonly position: Vector2;
9
+ rotation: number;
10
+ readonly scale: Vector2;
11
+ readonly pivot: Vector2;
12
+ parent: Transform2D | null;
13
+ readonly children: Transform2D[];
14
+ readonly localMatrix: Matrix2D;
15
+ readonly worldMatrix: Matrix2D;
16
+ private _isDirty;
17
+ private _isWorldDirty;
18
+ constructor(x?: number, y?: number, rotation?: number, scaleX?: number, scaleY?: number, pivotX?: number, pivotY?: number);
19
+ /**
20
+ * Marks this transform and all its descendants as needing world matrix recalculation.
21
+ */
22
+ markDirty(): this;
23
+ markWorldDirty(): void;
24
+ get isDirty(): boolean;
25
+ /**
26
+ * Updates local transformation matrix if dirty.
27
+ */
28
+ updateLocalMatrix(): Matrix2D;
29
+ /**
30
+ * Updates and returns the world transformation matrix.
31
+ * Lazily computes parent hierarchy when dirty.
32
+ */
33
+ updateWorldMatrix(force?: boolean): Matrix2D;
34
+ addChild(child: Transform2D): this;
35
+ removeChild(child: Transform2D): this;
36
+ setParent(parent: Transform2D | null): this;
37
+ localToWorld(localPoint: Vector2, out?: Vector2): Vector2;
38
+ worldToLocal(worldPoint: Vector2, out?: Vector2): Vector2;
39
+ getWorldPosition(out?: Vector2): Vector2;
40
+ getWorldRotation(): number;
41
+ getWorldScale(out?: Vector2): Vector2;
42
+ setPosition(x: number, y: number): this;
43
+ setRotation(radians: number): this;
44
+ setScale(x: number, y?: number): this;
45
+ setPivot(x: number, y: number): this;
46
+ }
47
+ //# sourceMappingURL=Transform2D.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Transform2D.d.ts","sourceRoot":"","sources":["../../src/math/Transform2D.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC;;;GAGG;AACH,qBAAa,WAAW;IACtB,SAAgB,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACxB,SAAgB,KAAK,EAAE,OAAO,CAAC;IAC/B,SAAgB,KAAK,EAAE,OAAO,CAAC;IAExB,MAAM,EAAE,WAAW,GAAG,IAAI,CAAQ;IACzC,SAAgB,QAAQ,EAAE,WAAW,EAAE,CAAM;IAE7C,SAAgB,WAAW,EAAE,QAAQ,CAAkB;IACvD,SAAgB,WAAW,EAAE,QAAQ,CAAkB;IAEvD,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,aAAa,CAAiB;gBAGpC,CAAC,GAAE,MAAU,EACb,CAAC,GAAE,MAAU,EACb,QAAQ,GAAE,MAAU,EACpB,MAAM,GAAE,MAAU,EAClB,MAAM,GAAE,MAAU,EAClB,MAAM,GAAE,MAAU,EAClB,MAAM,GAAE,MAAU;IAYpB;;OAEG;IACI,SAAS,IAAI,IAAI;IAMjB,cAAc,IAAI,IAAI;IAS7B,IAAW,OAAO,IAAI,OAAO,CAE5B;IAMD;;OAEG;IACI,iBAAiB,IAAI,QAAQ;IAgBpC;;;OAGG;IACI,iBAAiB,CAAC,KAAK,GAAE,OAAe,GAAG,QAAQ;IAsBnD,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAoBlC,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAUrC,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI;IAkB3C,YAAY,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,OAAO;IAKzD,YAAY,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,OAAO;IAMzD,gBAAgB,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,OAAO;IAQxC,gBAAgB,IAAI,MAAM;IAK1B,aAAa,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,OAAO;IAYrC,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAKvC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKlC,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAE,MAAU,GAAG,IAAI;IAKxC,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;CAI5C"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Production-grade 2D Vector with zero-allocation in-place mutation,
3
+ * immutable ergonomics, zero-division guards, and static scratchpads.
4
+ */
5
+ export declare class Vector2 {
6
+ x: number;
7
+ y: number;
8
+ static readonly temp1: Vector2;
9
+ static readonly temp2: Vector2;
10
+ constructor(x?: number, y?: number);
11
+ set(x: number, y: number): this;
12
+ setScalar(scalar: number): this;
13
+ copy(other: Vector2): this;
14
+ addInPlace(v: Vector2): this;
15
+ addVectors(a: Vector2, b: Vector2): this;
16
+ subInPlace(v: Vector2): this;
17
+ subVectors(a: Vector2, b: Vector2): this;
18
+ scaleInPlace(scalar: number): this;
19
+ multiplyInPlace(v: Vector2): this;
20
+ divideInPlace(v: Vector2): this;
21
+ divideScalarInPlace(scalar: number): this;
22
+ negateInPlace(): this;
23
+ /**
24
+ * Normalizes vector to unit length in-place.
25
+ * Guarded against zero/near-zero division: sets to (0,0) if length is negligible.
26
+ */
27
+ normalizeInPlace(): this;
28
+ clampLengthInPlace(min: number, max: number): this;
29
+ rotateInPlace(radians: number): this;
30
+ rotateAroundInPlace(center: Vector2, radians: number): this;
31
+ lerpInPlace(target: Vector2, t: number): this;
32
+ /**
33
+ * Reflects this vector across a given normal vector in-place.
34
+ * Formula: v' = v - 2 * (v . n) * n
35
+ * Guarded: safely handles zero-length normal vectors without producing NaN.
36
+ */
37
+ reflectInPlace(normal: Vector2): this;
38
+ projectInPlace(onto: Vector2): this;
39
+ perpendicularInPlace(clockwise?: boolean): this;
40
+ clone(): Vector2;
41
+ add(v: Vector2): Vector2;
42
+ sub(v: Vector2): Vector2;
43
+ scale(s: number): Vector2;
44
+ multiply(v: Vector2): Vector2;
45
+ divide(scalarOrVec: number | Vector2): Vector2;
46
+ negate(): Vector2;
47
+ normalized(): Vector2;
48
+ rotate(radians: number): Vector2;
49
+ lerp(target: Vector2, t: number): Vector2;
50
+ reflect(normal: Vector2): Vector2;
51
+ project(onto: Vector2): Vector2;
52
+ perpendicular(clockwise?: boolean): Vector2;
53
+ dot(v: Vector2): number;
54
+ /**
55
+ * 2D scalar cross product: a.x * b.y - a.y * b.x
56
+ * Returns signed area of parallelogram; positive if rotation from this to v is counter-clockwise.
57
+ */
58
+ cross(v: Vector2): number;
59
+ lengthSq(): number;
60
+ length(): number;
61
+ distanceTo(v: Vector2): number;
62
+ distanceToSq(v: Vector2): number;
63
+ /** Angle in radians relative to positive X-axis in [-PI, PI] */
64
+ angle(): number;
65
+ /** Signed angle in radians between this vector and other */
66
+ angleTo(other: Vector2): number;
67
+ equals(other: Vector2, epsilon?: number): boolean;
68
+ isZero(epsilon?: number): boolean;
69
+ toString(): string;
70
+ toJSON(): {
71
+ x: number;
72
+ y: number;
73
+ };
74
+ static zero(): Vector2;
75
+ static one(): Vector2;
76
+ /** Up vector in 2D screen coordinates (points up: y = -1) */
77
+ static up(): Vector2;
78
+ /** Down vector in 2D screen coordinates (points down: y = 1) */
79
+ static down(): Vector2;
80
+ static left(): Vector2;
81
+ static right(): Vector2;
82
+ static fromAngle(radians: number, length?: number): Vector2;
83
+ static distance(a: Vector2, b: Vector2): number;
84
+ static distanceSq(a: Vector2, b: Vector2): number;
85
+ static dot(a: Vector2, b: Vector2): number;
86
+ static cross(a: Vector2, b: Vector2): number;
87
+ static lerp(a: Vector2, b: Vector2, t: number, out?: Vector2): Vector2;
88
+ }
89
+ //# sourceMappingURL=Vector2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Vector2.d.ts","sourceRoot":"","sources":["../../src/math/Vector2.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export * from './Vector2';
2
+ export * from './Matrix2D';
3
+ export * from './Transform2D';
4
+ export * from './Rect';
5
+ export * from './Circle';
6
+ export * from './MathUtils';
7
+ export * from './Color';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/math/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { Collider2D, ColliderType, ColliderConfig } from './Collider2D';
2
+ import { Vector2 } from '../math/Vector2';
3
+ import { Rect } from '../math/Rect';
4
+ import { Ray2D, RaycastHit2D } from './Raycast';
5
+ export interface BoxColliderConfig extends ColliderConfig {
6
+ width?: number;
7
+ height?: number;
8
+ size?: Vector2;
9
+ rotation?: number;
10
+ }
11
+ export declare class BoxCollider2D extends Collider2D {
12
+ readonly type = ColliderType.Box;
13
+ readonly size: Vector2;
14
+ readonly halfExtents: Vector2;
15
+ rotation: number;
16
+ constructor(configOrWidth?: BoxColliderConfig | number, height?: number, offsetX?: number, offsetY?: number, rotation?: number);
17
+ computeInertia(mass: number): number;
18
+ get width(): number;
19
+ set width(val: number);
20
+ get height(): number;
21
+ set height(val: number);
22
+ setSize(width: number, height: number): this;
23
+ getWorldRotation(): number;
24
+ getVertices(out?: Vector2[]): Vector2[];
25
+ getNormals(out?: Vector2[]): Vector2[];
26
+ updateBounds(): Rect;
27
+ containsPoint(point: Vector2): boolean;
28
+ intersectsRay(ray: Ray2D, maxDistance?: number): boolean;
29
+ raycast(ray: Ray2D): RaycastHit2D | null;
30
+ intersectsCircle(center: Vector2, radius: number): boolean;
31
+ intersectsBox(center: Vector2, width: number, height: number, rotation?: number): boolean;
32
+ computeMassAndInertia(density?: number): {
33
+ mass: number;
34
+ inertia: number;
35
+ };
36
+ clone(): BoxCollider2D;
37
+ }
38
+ //# sourceMappingURL=BoxCollider2D.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BoxCollider2D.d.ts","sourceRoot":"","sources":["../../src/physics/BoxCollider2D.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAW,MAAM,WAAW,CAAC;AAEzD,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,aAAc,SAAQ,UAAU;IAC3C,SAAgB,IAAI,oBAAoB;IACxC,SAAgB,IAAI,EAAE,OAAO,CAAuB;IACpD,SAAgB,WAAW,EAAE,OAAO,CAAuB;IACpD,QAAQ,EAAE,MAAM,CAAK;gBAG1B,aAAa,CAAC,EAAE,iBAAiB,GAAG,MAAM,EAC1C,MAAM,GAAE,MAAW,EACnB,OAAO,GAAE,MAAU,EACnB,OAAO,GAAE,MAAU,EACnB,QAAQ,GAAE,MAAU;IAmBf,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAO3C,IAAW,KAAK,IAAI,MAAM,CAEzB;IAED,IAAW,KAAK,CAAC,GAAG,EAAE,MAAM,EAE3B;IAED,IAAW,MAAM,IAAI,MAAM,CAE1B;IAED,IAAW,MAAM,CAAC,GAAG,EAAE,MAAM,EAE5B;IAEM,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAUnC,gBAAgB,IAAI,MAAM;IAInC,WAAW,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE;IA0BvC,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE;IAc7B,YAAY,IAAI,IAAI;IAYpB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAkBtC,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,GAAE,MAAwB,GAAG,OAAO;IAazE,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,YAAY,GAAG,IAAI;IAuBxC,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAsB1D,aAAa,CAC3B,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAU,GACnB,OAAO;IA4CM,qBAAqB,CACnC,OAAO,GAAE,MAAqB,GAC7B;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAWpB,KAAK,IAAI,aAAa;CAiBvC"}
@@ -0,0 +1,27 @@
1
+ import { Collider2D, ColliderType, ColliderConfig } from './Collider2D';
2
+ import { Vector2 } from '../math/Vector2';
3
+ import { Rect } from '../math/Rect';
4
+ import { Ray2D, RaycastHit2D } from './Raycast';
5
+ export interface CircleColliderConfig extends ColliderConfig {
6
+ radius: number;
7
+ }
8
+ export declare class CircleCollider2D extends Collider2D {
9
+ readonly type = ColliderType.Circle;
10
+ radius: number;
11
+ constructor(configOrRadius: CircleColliderConfig | number, offsetX?: number, offsetY?: number);
12
+ computeInertia(mass: number): number;
13
+ get worldCenter(): Vector2;
14
+ setRadius(radius: number): this;
15
+ updateBounds(): Rect;
16
+ containsPoint(point: Vector2): boolean;
17
+ intersectsRay(ray: Ray2D, maxDistance?: number): boolean;
18
+ raycast(ray: Ray2D): RaycastHit2D | null;
19
+ intersectsCircle(center: Vector2, radius: number): boolean;
20
+ intersectsBox(center: Vector2, width: number, height: number, rotation?: number): boolean;
21
+ computeMassAndInertia(density?: number): {
22
+ mass: number;
23
+ inertia: number;
24
+ };
25
+ clone(): CircleCollider2D;
26
+ }
27
+ //# sourceMappingURL=CircleCollider2D.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CircleCollider2D.d.ts","sourceRoot":"","sources":["../../src/physics/CircleCollider2D.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAW,MAAM,WAAW,CAAC;AAEzD,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,gBAAiB,SAAQ,UAAU;IAC9C,SAAgB,IAAI,uBAAuB;IACpC,MAAM,EAAE,MAAM,CAAM;gBAGzB,cAAc,EAAE,oBAAoB,GAAG,MAAM,EAC7C,OAAO,GAAE,MAAU,EACnB,OAAO,GAAE,MAAU;IAad,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAM3C,IAAW,WAAW,IAAI,OAAO,CAEhC;IAEM,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAOtB,YAAY,IAAI,IAAI;IAMpB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAOtC,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,GAAE,MAAwB,GAAG,OAAO;IAUzE,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,YAAY,GAAG,IAAI;IAgBxC,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAQ1D,aAAa,CAC3B,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAU,GACnB,OAAO;IAsBM,qBAAqB,CACnC,OAAO,GAAE,MAAqB,GAC7B;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAUpB,KAAK,IAAI,gBAAgB;CAe1C"}
@@ -0,0 +1,79 @@
1
+ import { Vector2 } from '../math/Vector2';
2
+ import { Rect } from '../math/Rect';
3
+ import type { RigidBody2D } from './RigidBody2D';
4
+ import type { ContactManifold } from './ContactSolver';
5
+ import type { Ray2D, RaycastHit2D } from './Raycast';
6
+ export declare enum ColliderType {
7
+ Circle = "circle",
8
+ Box = "box"
9
+ }
10
+ export interface ColliderConfig {
11
+ body?: RigidBody2D | null;
12
+ offset?: Vector2;
13
+ isTrigger?: boolean;
14
+ density?: number;
15
+ friction?: number;
16
+ restitution?: number;
17
+ layer?: number;
18
+ collisionLayer?: number;
19
+ mask?: number;
20
+ collisionMask?: number;
21
+ userData?: any;
22
+ }
23
+ /**
24
+ * Abstract Base Collider representing geometry attached to a RigidBody2D
25
+ * or existing as a static sensor/trigger.
26
+ */
27
+ export declare abstract class Collider2D {
28
+ readonly id: number;
29
+ protected _body: RigidBody2D | null;
30
+ get body(): RigidBody2D | null;
31
+ set body(val: RigidBody2D | null);
32
+ abstract readonly type: ColliderType;
33
+ readonly offset: Vector2;
34
+ isTrigger: boolean;
35
+ density: number;
36
+ friction: number;
37
+ restitution: number;
38
+ layer: number;
39
+ mask: number;
40
+ userData: any;
41
+ abstract computeInertia(mass: number): number;
42
+ updateBodyInertia(): void;
43
+ readonly bounds: Rect;
44
+ _gridMinCx: number;
45
+ _gridMinCy: number;
46
+ _gridMaxCx: number;
47
+ _gridMaxCy: number;
48
+ _queryStamp: number;
49
+ onCollisionEnter?: (other: Collider2D, manifold: ContactManifold) => void;
50
+ onCollisionStay?: (other: Collider2D, manifold: ContactManifold) => void;
51
+ onCollisionExit?: (other: Collider2D) => void;
52
+ onTriggerEnter?: (other: Collider2D) => void;
53
+ onTriggerStay?: (other: Collider2D) => void;
54
+ onTriggerExit?: (other: Collider2D) => void;
55
+ constructor(configOrOffsetX?: ColliderConfig | number, offsetY?: number);
56
+ get collisionLayer(): number;
57
+ set collisionLayer(val: number);
58
+ get collisionMask(): number;
59
+ set collisionMask(val: number);
60
+ setOffset(x: number, y: number): this;
61
+ setMaterial(friction: number, restitution: number, density?: number): this;
62
+ setFilter(layer: number, mask: number): this;
63
+ getWorldPosition(out?: Vector2): Vector2;
64
+ getWorldRotation(): number;
65
+ getAABB(out?: Rect): Rect;
66
+ updateWorldBounds(): Rect;
67
+ abstract updateBounds(): Rect;
68
+ abstract containsPoint(point: Vector2): boolean;
69
+ abstract intersectsRay(ray: Ray2D, maxDistance?: number): boolean;
70
+ abstract raycast(ray: Ray2D): RaycastHit2D | null;
71
+ abstract intersectsCircle(center: Vector2, radius: number): boolean;
72
+ abstract intersectsBox(center: Vector2, width: number, height: number, rotation?: number): boolean;
73
+ abstract computeMassAndInertia(density?: number): {
74
+ mass: number;
75
+ inertia: number;
76
+ };
77
+ abstract clone(): Collider2D;
78
+ }
79
+ //# sourceMappingURL=Collider2D.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collider2D.d.ts","sourceRoot":"","sources":["../../src/physics/Collider2D.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import { RigidBody2D } from './RigidBody2D';
2
+ import { ContactManifold } from './ContactSolver';
3
+ import { Collider2D } from './Collider2D';
4
+ export interface ActiveCollisionPair {
5
+ key: string;
6
+ colliderA: Collider2D;
7
+ colliderB: Collider2D;
8
+ bodyA: RigidBody2D | null;
9
+ bodyB: RigidBody2D | null;
10
+ manifold: ContactManifold;
11
+ isTrigger: boolean;
12
+ }
13
+ export interface CollisionFSMEvents {
14
+ 'collision:enter': {
15
+ colliderA: Collider2D;
16
+ colliderB: Collider2D;
17
+ bodyA: RigidBody2D | null;
18
+ bodyB: RigidBody2D | null;
19
+ manifold: ContactManifold;
20
+ };
21
+ 'collision:stay': {
22
+ colliderA: Collider2D;
23
+ colliderB: Collider2D;
24
+ bodyA: RigidBody2D | null;
25
+ bodyB: RigidBody2D | null;
26
+ manifold: ContactManifold;
27
+ };
28
+ 'collision:exit': {
29
+ colliderA: Collider2D;
30
+ colliderB: Collider2D;
31
+ bodyA: RigidBody2D | null;
32
+ bodyB: RigidBody2D | null;
33
+ };
34
+ 'trigger:enter': {
35
+ colliderA: Collider2D;
36
+ colliderB: Collider2D;
37
+ bodyA: RigidBody2D | null;
38
+ bodyB: RigidBody2D | null;
39
+ };
40
+ 'trigger:stay': {
41
+ colliderA: Collider2D;
42
+ colliderB: Collider2D;
43
+ bodyA: RigidBody2D | null;
44
+ bodyB: RigidBody2D | null;
45
+ };
46
+ 'trigger:exit': {
47
+ colliderA: Collider2D;
48
+ colliderB: Collider2D;
49
+ bodyA: RigidBody2D | null;
50
+ bodyB: RigidBody2D | null;
51
+ };
52
+ }
53
+ export declare function getPairKey(idA: number, idB: number): string;
54
+ export declare class CollisionFSM {
55
+ private _previousCollisions;
56
+ private _currentCollisions;
57
+ private _previousTriggers;
58
+ private _currentTriggers;
59
+ private _emitter;
60
+ constructor(emitter: {
61
+ emit(event: any, payload: any): boolean;
62
+ });
63
+ /**
64
+ * Process all narrowphase manifolds for the current frame/sub-step.
65
+ * Dispatches Enter and Stay events, and returns solid manifolds for ContactSolver.
66
+ */
67
+ processManifolds(rawManifolds: readonly ContactManifold[]): ContactManifold[];
68
+ /**
69
+ * Swaps pair tracking maps at the end of the physics sub-step.
70
+ */
71
+ endStep(): void;
72
+ /**
73
+ * Evicts any pairs referencing a deleted collider or body and dispatches exit events.
74
+ */
75
+ handleColliderRemoved(collider: Collider2D): void;
76
+ private _createInvertedManifold;
77
+ private _dispatchTriggerEnter;
78
+ private _dispatchTriggerStay;
79
+ private _dispatchTriggerExit;
80
+ private _dispatchCollisionEnter;
81
+ private _dispatchCollisionStay;
82
+ private _dispatchCollisionExit;
83
+ }
84
+ //# sourceMappingURL=CollisionFSM.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollisionFSM.d.ts","sourceRoot":"","sources":["../../src/physics/CollisionFSM.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,UAAU,CAAC;IACtB,SAAS,EAAE,UAAU,CAAC;IACtB,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,eAAe,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,EAAE;QACjB,SAAS,EAAE,UAAU,CAAC;QACtB,SAAS,EAAE,UAAU,CAAC;QACtB,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;QAC1B,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;QAC1B,QAAQ,EAAE,eAAe,CAAC;KAC3B,CAAC;IACF,gBAAgB,EAAE;QAChB,SAAS,EAAE,UAAU,CAAC;QACtB,SAAS,EAAE,UAAU,CAAC;QACtB,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;QAC1B,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;QAC1B,QAAQ,EAAE,eAAe,CAAC;KAC3B,CAAC;IACF,gBAAgB,EAAE;QAChB,SAAS,EAAE,UAAU,CAAC;QACtB,SAAS,EAAE,UAAU,CAAC;QACtB,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;QAC1B,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;KAC3B,CAAC;IACF,eAAe,EAAE;QACf,SAAS,EAAE,UAAU,CAAC;QACtB,SAAS,EAAE,UAAU,CAAC;QACtB,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;QAC1B,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;KAC3B,CAAC;IACF,cAAc,EAAE;QACd,SAAS,EAAE,UAAU,CAAC;QACtB,SAAS,EAAE,UAAU,CAAC;QACtB,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;QAC1B,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;KAC3B,CAAC;IACF,cAAc,EAAE;QACd,SAAS,EAAE,UAAU,CAAC;QACtB,SAAS,EAAE,UAAU,CAAC;QACtB,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;QAC1B,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;KAC3B,CAAC;CACH;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,mBAAmB,CAA+C;IAC1E,OAAO,CAAC,kBAAkB,CAA+C;IAEzE,OAAO,CAAC,iBAAiB,CAA+C;IACxE,OAAO,CAAC,gBAAgB,CAA+C;IAEvE,OAAO,CAAC,QAAQ,CAA8C;gBAElD,OAAO,EAAE;QAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAA;KAAE;IAIhE;;;OAGG;IACI,gBAAgB,CAAC,YAAY,EAAE,SAAS,eAAe,EAAE,GAAG,eAAe,EAAE;IA+DpF;;OAEG;IACI,OAAO,IAAI,IAAI;IAYtB;;OAEG;IACI,qBAAqB,CAAC,QAAQ,EAAE,UAAU,GAAG,IAAI;IAexD,OAAO,CAAC,uBAAuB;IAW/B,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,uBAAuB;IAW/B,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,sBAAsB;CAQ/B"}
@@ -0,0 +1,58 @@
1
+ import { Vector2 } from '../math/Vector2';
2
+ import { RigidBody2D } from './RigidBody2D';
3
+ export interface ContactManifold {
4
+ bodyA: RigidBody2D;
5
+ bodyB: RigidBody2D;
6
+ colliderA?: any;
7
+ colliderB?: any;
8
+ collided: boolean;
9
+ /** Unit contact normal pointing from bodyA towards bodyB */
10
+ normal: Vector2;
11
+ /** Penetration depth (scalar >= 0) */
12
+ penetration: number;
13
+ /** World space contact points (1 for Circle, 1 or 2 for Box edge contacts) */
14
+ contactPoints: Vector2[];
15
+ /** Combined Coulomb friction */
16
+ friction?: number;
17
+ /** Combined restitution */
18
+ restitution?: number;
19
+ }
20
+ export interface SolverConfig {
21
+ velocityIterations?: number;
22
+ positionIterations?: number;
23
+ baumgarte?: number;
24
+ penetrationSlop?: number;
25
+ restitutionVelocityThreshold?: number;
26
+ enableWarmStarting?: boolean;
27
+ }
28
+ /**
29
+ * Production-grade Sequential Impulse Contact Solver.
30
+ * Solves normal restitution, Coulomb friction cone, and Baumgarte / position projection.
31
+ */
32
+ export declare class ContactSolver {
33
+ velocityIterations: number;
34
+ positionIterations: number;
35
+ baumgarte: number;
36
+ penetrationSlop: number;
37
+ restitutionVelocityThreshold: number;
38
+ enableWarmStarting: boolean;
39
+ private _constraints;
40
+ constructor(config?: SolverConfig);
41
+ /**
42
+ * Prepares constraints from narrowphase manifolds: computes effective masses,
43
+ * Baumgarte velocity bias, restitution bounce targets, and initial warm starting.
44
+ */
45
+ preStep(manifolds: readonly ContactManifold[], dt: number): void;
46
+ /**
47
+ * Resolves velocity constraints over iterative passes.
48
+ * Alternates between normal non-penetration impulse (using 2x2 block solver for 2-point manifolds)
49
+ * and tangent friction impulse clamped against Coulomb friction cone.
50
+ */
51
+ solveVelocityConstraints(): void;
52
+ /**
53
+ * Position iteration solver: resolves residual geometric penetration directly
54
+ * on body positions/rotations without altering linear/angular velocities.
55
+ */
56
+ solvePositionConstraints(manifolds: readonly ContactManifold[]): boolean;
57
+ }
58
+ //# sourceMappingURL=ContactSolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContactSolver.d.ts","sourceRoot":"","sources":["../../src/physics/ContactSolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAY,MAAM,eAAe,CAAC;AAEtD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,WAAW,CAAC;IACnB,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,4DAA4D;IAC5D,MAAM,EAAE,OAAO,CAAC;IAChB,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,aAAa,EAAE,OAAO,EAAE,CAAC;IACzB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AA2BD;;;GAGG;AACH,qBAAa,aAAa;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,4BAA4B,EAAE,MAAM,CAAC;IACrC,kBAAkB,EAAE,OAAO,CAAC;IAEnC,OAAO,CAAC,YAAY,CAA2B;gBAEnC,MAAM,GAAE,YAAiB;IASrC;;;OAGG;IACI,OAAO,CAAC,SAAS,EAAE,SAAS,eAAe,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAqHvE;;;;OAIG;IACI,wBAAwB,IAAI,IAAI;IA2OvC;;;OAGG;IACI,wBAAwB,CAAC,SAAS,EAAE,SAAS,eAAe,EAAE,GAAG,OAAO;CA4GhF"}