@inglorious/engine 0.2.0 → 0.4.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 (169) hide show
  1. package/README.md +76 -75
  2. package/package.json +14 -25
  3. package/src/{engine/ai → ai}/movement/dynamic/align.js +63 -63
  4. package/src/{engine/ai → ai}/movement/dynamic/arrive.js +42 -42
  5. package/src/{engine/ai → ai}/movement/dynamic/evade.js +38 -38
  6. package/src/{engine/ai → ai}/movement/dynamic/face.js +19 -19
  7. package/src/{engine/ai → ai}/movement/dynamic/flee.js +45 -45
  8. package/src/{engine/ai → ai}/movement/dynamic/look-where-youre-going.js +16 -16
  9. package/src/{engine/ai → ai}/movement/dynamic/match-velocity.js +51 -51
  10. package/src/{engine/ai → ai}/movement/dynamic/pursue.js +38 -38
  11. package/src/{engine/ai → ai}/movement/dynamic/seek.js +44 -44
  12. package/src/{engine/ai → ai}/movement/dynamic/wander.js +31 -31
  13. package/src/{engine/ai → ai}/movement/kinematic/align.js +37 -37
  14. package/src/{engine/ai → ai}/movement/kinematic/arrive.js +42 -42
  15. package/src/{engine/ai → ai}/movement/kinematic/face.js +19 -19
  16. package/src/{engine/ai → ai}/movement/kinematic/flee.js +26 -26
  17. package/src/{engine/ai → ai}/movement/kinematic/seek.js +26 -26
  18. package/src/{engine/ai → ai}/movement/kinematic/seek.test.js +42 -42
  19. package/src/{engine/ai → ai}/movement/kinematic/wander-as-seek.js +31 -31
  20. package/src/{engine/ai → ai}/movement/kinematic/wander.js +27 -27
  21. package/src/{engine/animation → animation}/sprite.js +101 -101
  22. package/src/{engine/animation → animation}/ticker.js +38 -38
  23. package/src/{engine/behaviors → behaviors}/camera.js +68 -68
  24. package/src/{engine/behaviors → behaviors}/controls/dynamic/modern.js +76 -76
  25. package/src/{engine/behaviors → behaviors}/controls/dynamic/shooter.js +84 -84
  26. package/src/{engine/behaviors → behaviors}/controls/dynamic/tank.js +69 -69
  27. package/src/{engine/behaviors → behaviors}/controls/event-handlers.js +17 -17
  28. package/src/{engine/behaviors → behaviors}/controls/kinematic/modern.js +76 -76
  29. package/src/{engine/behaviors → behaviors}/controls/kinematic/shooter.js +82 -82
  30. package/src/{engine/behaviors → behaviors}/controls/kinematic/tank.js +67 -67
  31. package/src/behaviors/debug/collision.js +29 -0
  32. package/src/{engine/behaviors → behaviors}/fps.js +29 -29
  33. package/src/{engine/behaviors → behaviors}/fsm.js +33 -33
  34. package/src/{engine/behaviors → behaviors}/fsm.test.js +49 -49
  35. package/src/{engine/behaviors → behaviors}/game.js +15 -15
  36. package/src/{engine/behaviors → behaviors}/input/controls.js +37 -37
  37. package/src/{engine/behaviors → behaviors}/input/gamepad.js +114 -114
  38. package/src/{engine/behaviors → behaviors}/input/input.js +48 -48
  39. package/src/{engine/behaviors → behaviors}/input/keyboard.js +64 -64
  40. package/src/{engine/behaviors → behaviors}/input/mouse.js +91 -91
  41. package/src/{engine/behaviors → behaviors}/physics/bouncy.js +25 -25
  42. package/src/{engine/behaviors → behaviors}/physics/clamped.js +36 -36
  43. package/src/{engine/behaviors → behaviors}/physics/collidable.js +20 -20
  44. package/src/{engine/behaviors → behaviors}/physics/jumpable.js +145 -145
  45. package/src/{engine/behaviors → behaviors}/ui/button.js +17 -17
  46. package/src/{engine/collision → collision}/detection.js +110 -110
  47. package/src/{engine/core → core}/dev-tools.js +135 -135
  48. package/src/{engine/core → core}/engine.js +119 -119
  49. package/src/{engine/core → core}/loop.js +15 -15
  50. package/src/{engine/core → core}/loops/animation-frame.js +25 -25
  51. package/src/{engine/core → core}/loops/elapsed.js +22 -22
  52. package/src/{engine/core → core}/loops/fixed.js +27 -27
  53. package/src/{engine/core → core}/loops/flash.js +13 -13
  54. package/src/{engine/core → core}/loops/lag.js +26 -26
  55. package/src/main.js +10 -10
  56. package/src/{engine/movement → movement}/dynamic/modern.js +21 -21
  57. package/src/{engine/movement → movement}/dynamic/tank.js +43 -43
  58. package/src/{engine/movement → movement}/kinematic/modern.js +16 -16
  59. package/src/{engine/movement → movement}/kinematic/modern.test.js +27 -27
  60. package/src/{engine/movement → movement}/kinematic/tank.js +27 -27
  61. package/src/{engine/physics → physics}/bounds.js +138 -138
  62. package/src/{engine/physics → physics}/position.js +43 -43
  63. package/src/{engine/physics → physics}/position.test.js +80 -80
  64. package/src/{engine/systems → systems}/sprite-animation.js +27 -27
  65. package/src/engine/behaviors/debug/collision.js +0 -35
  66. package/src/engine/core/api.js +0 -34
  67. package/src/engine/core/select.js +0 -26
  68. package/src/engine/core/store.js +0 -178
  69. package/src/engine/core/store.test.js +0 -110
  70. package/src/renderers/canvas/absolute-position.js +0 -18
  71. package/src/renderers/canvas/camera.js +0 -13
  72. package/src/renderers/canvas/canvas-renderer.js +0 -68
  73. package/src/renderers/canvas/character.js +0 -38
  74. package/src/renderers/canvas/form/button.js +0 -25
  75. package/src/renderers/canvas/fps.js +0 -18
  76. package/src/renderers/canvas/image/hitmask.js +0 -51
  77. package/src/renderers/canvas/image/image.js +0 -34
  78. package/src/renderers/canvas/image/sprite.js +0 -49
  79. package/src/renderers/canvas/image/tilemap.js +0 -66
  80. package/src/renderers/canvas/mouse.js +0 -37
  81. package/src/renderers/canvas/rendering-system.js +0 -79
  82. package/src/renderers/canvas/shapes/circle.js +0 -29
  83. package/src/renderers/canvas/shapes/rectangle.js +0 -27
  84. package/src/renderers/react/game/character/character.module.scss +0 -17
  85. package/src/renderers/react/game/character/index.jsx +0 -20
  86. package/src/renderers/react/game/cursor/cursor.module.scss +0 -47
  87. package/src/renderers/react/game/cursor/index.jsx +0 -20
  88. package/src/renderers/react/game/form/fields/field/field.module.scss +0 -5
  89. package/src/renderers/react/game/form/fields/field/index.jsx +0 -56
  90. package/src/renderers/react/game/form/fields/fields.module.scss +0 -48
  91. package/src/renderers/react/game/form/fields/index.jsx +0 -12
  92. package/src/renderers/react/game/form/form.module.scss +0 -18
  93. package/src/renderers/react/game/form/index.jsx +0 -22
  94. package/src/renderers/react/game/fps/index.jsx +0 -16
  95. package/src/renderers/react/game/game.jsx +0 -72
  96. package/src/renderers/react/game/index.jsx +0 -29
  97. package/src/renderers/react/game/platform/index.jsx +0 -30
  98. package/src/renderers/react/game/platform/platform.module.scss +0 -7
  99. package/src/renderers/react/game/scene/index.jsx +0 -27
  100. package/src/renderers/react/game/scene/scene.module.scss +0 -9
  101. package/src/renderers/react/game/sprite/index.jsx +0 -60
  102. package/src/renderers/react/game/sprite/sprite.module.css +0 -3
  103. package/src/renderers/react/game/stats/index.jsx +0 -22
  104. package/src/renderers/react/hocs/with-absolute-position/index.jsx +0 -20
  105. package/src/renderers/react/hocs/with-absolute-position/with-absolute-position.module.scss +0 -5
  106. package/src/renderers/react/index.jsx +0 -9
  107. package/src/utils/algorithms/decision-tree.js +0 -24
  108. package/src/utils/algorithms/decision-tree.test.js +0 -153
  109. package/src/utils/algorithms/path-finding.js +0 -155
  110. package/src/utils/algorithms/path-finding.test.js +0 -151
  111. package/src/utils/algorithms/types.d.ts +0 -28
  112. package/src/utils/data-structures/array.js +0 -83
  113. package/src/utils/data-structures/array.test.js +0 -173
  114. package/src/utils/data-structures/board.js +0 -159
  115. package/src/utils/data-structures/board.test.js +0 -242
  116. package/src/utils/data-structures/boolean.js +0 -9
  117. package/src/utils/data-structures/heap.js +0 -164
  118. package/src/utils/data-structures/heap.test.js +0 -103
  119. package/src/utils/data-structures/object.js +0 -138
  120. package/src/utils/data-structures/object.test.js +0 -218
  121. package/src/utils/data-structures/objects.js +0 -66
  122. package/src/utils/data-structures/objects.test.js +0 -99
  123. package/src/utils/data-structures/tree.js +0 -36
  124. package/src/utils/data-structures/tree.test.js +0 -33
  125. package/src/utils/data-structures/types.d.ts +0 -4
  126. package/src/utils/functions/functions.js +0 -19
  127. package/src/utils/functions/functions.test.js +0 -23
  128. package/src/utils/math/geometry/circle.js +0 -70
  129. package/src/utils/math/geometry/circle.test.js +0 -97
  130. package/src/utils/math/geometry/hitmask.js +0 -70
  131. package/src/utils/math/geometry/hitmask.test.js +0 -155
  132. package/src/utils/math/geometry/line.js +0 -35
  133. package/src/utils/math/geometry/line.test.js +0 -49
  134. package/src/utils/math/geometry/point.js +0 -78
  135. package/src/utils/math/geometry/point.test.js +0 -81
  136. package/src/utils/math/geometry/rectangle.js +0 -76
  137. package/src/utils/math/geometry/rectangle.test.js +0 -42
  138. package/src/utils/math/geometry/segment.js +0 -80
  139. package/src/utils/math/geometry/segment.test.js +0 -183
  140. package/src/utils/math/geometry/triangle.js +0 -15
  141. package/src/utils/math/geometry/triangle.test.js +0 -11
  142. package/src/utils/math/geometry/types.d.ts +0 -23
  143. package/src/utils/math/linear-algebra/2d.js +0 -28
  144. package/src/utils/math/linear-algebra/2d.test.js +0 -17
  145. package/src/utils/math/linear-algebra/quaternion.js +0 -22
  146. package/src/utils/math/linear-algebra/quaternion.test.js +0 -25
  147. package/src/utils/math/linear-algebra/quaternions.js +0 -20
  148. package/src/utils/math/linear-algebra/quaternions.test.js +0 -29
  149. package/src/utils/math/linear-algebra/types.d.ts +0 -4
  150. package/src/utils/math/linear-algebra/vector.js +0 -327
  151. package/src/utils/math/linear-algebra/vector.test.js +0 -265
  152. package/src/utils/math/linear-algebra/vectors.js +0 -122
  153. package/src/utils/math/linear-algebra/vectors.test.js +0 -65
  154. package/src/utils/math/linear-interpolation.js +0 -9
  155. package/src/utils/math/numbers.js +0 -90
  156. package/src/utils/math/numbers.test.js +0 -137
  157. package/src/utils/math/rng.js +0 -44
  158. package/src/utils/math/rng.test.js +0 -39
  159. package/src/utils/math/statistics.js +0 -43
  160. package/src/utils/math/statistics.test.js +0 -47
  161. package/src/utils/math/trigonometry.js +0 -89
  162. package/src/utils/math/trigonometry.test.js +0 -52
  163. package/src/utils/physics/acceleration.js +0 -61
  164. package/src/utils/physics/friction.js +0 -28
  165. package/src/utils/physics/friction.test.js +0 -42
  166. package/src/utils/physics/gravity.js +0 -69
  167. package/src/utils/physics/gravity.test.js +0 -77
  168. package/src/utils/physics/jump.js +0 -31
  169. package/src/utils/physics/velocity.js +0 -36
@@ -1,28 +0,0 @@
1
- /**
2
- * @typedef {import('@inglorious/utils/math/linear-algebra/types').Vector3} Vector3
3
- */
4
-
5
- import {
6
- magnitude,
7
- setMagnitude,
8
- zero,
9
- } from "@inglorious/utils/math/linear-algebra/vector.js"
10
-
11
- const DEFAULT_DT = 1 // Default time delta for the applyFriction function.
12
- const NO_FRICTION = 0 // No friction constant.
13
-
14
- /**
15
- * Applies friction to a given velocity vector.
16
- *
17
- * @param {Object} params - The parameters for the function.
18
- * @param {Vector3} params.velocity - The velocity vector. Defaults to a zero vector.
19
- * @param {number} params.friction - The friction coefficient. Defaults to 0.
20
- * @param {number} dt - The time delta for the calculation. Defaults to 1.
21
- * @returns {Vector3} - The updated velocity vector after applying friction.
22
- */
23
- export function applyFriction(params, dt = DEFAULT_DT) {
24
- let { velocity = zero(), friction = NO_FRICTION } = params
25
- const length = magnitude(velocity)
26
-
27
- return length ? setMagnitude(velocity, length - friction * dt) : velocity
28
- }
@@ -1,42 +0,0 @@
1
- import { expect, test } from "vitest"
2
-
3
- import { zero } from "../math/linear-algebra/vector.js"
4
- import { applyFriction } from "./friction.js"
5
-
6
- test("it should apply friction to some velocity", () => {
7
- const velocity = [8, 0, 6]
8
- const friction = 5
9
- const expectedResult = [4, 0, 3]
10
-
11
- expect(applyFriction({ velocity, friction })).toStrictEqual(expectedResult)
12
- })
13
-
14
- test("it should stop movement when friction is equal to velocity", () => {
15
- const velocity = [8, 0, 6]
16
- const friction = 5
17
- const dt = 2
18
-
19
- expect(applyFriction({ velocity, friction }, dt)).toStrictEqual(zero())
20
- })
21
-
22
- test("it should apply no friction on no velocity", () => {
23
- const velocity = zero()
24
- const friction = 5
25
-
26
- expect(applyFriction({ velocity, friction })).toBe(velocity)
27
- })
28
-
29
- test("it should apply no friction if no friction is passed", () => {
30
- const velocity = [8, 0, 6]
31
- const friction = 0
32
-
33
- expect(applyFriction({ velocity, friction })).toStrictEqual(velocity)
34
- })
35
-
36
- test("it should apply no friction if no time passed", () => {
37
- const velocity = [8, 0, 6]
38
- const friction = 5
39
- const dt = 0
40
-
41
- expect(applyFriction({ velocity, friction }, dt)).toStrictEqual(velocity)
42
- })
@@ -1,69 +0,0 @@
1
- /**
2
- * @typedef {import('@inglorious/utils/math/linear-algebra/types').Vector3} Vector3
3
- */
4
-
5
- /* eslint-disable no-magic-numbers */
6
-
7
- import { zero } from "@inglorious/utils/math/linear-algebra/vector.js"
8
-
9
- const DEFAULT_DT = 1 // Default delta time for the applyGravity function.
10
- const DEFAULT_JUMP = 0 // Default maximum jump height.
11
- const DEFAULT_LEAP = 0 // Default maximum leap distance.
12
- const DEFAULT_SPEED = 0 // Default maximum speed.
13
- const NO_VELOCITY = 0 // No initial velocity.
14
-
15
- /**
16
- * Applies gravity to an object based on its current velocity and position.
17
- *
18
- * @see https://youtu.be/hG9SzQxaCm8
19
- *
20
- * Projectile equations:
21
- * 1. a(t) = g
22
- * 2. v(t) = g*t + v_0
23
- * 3. y(t) = 1/2*g*t^2 + v_0*t + y_0
24
- *
25
- * Known values:
26
- * 1. y_0 = 0
27
- * 2. v(t_h) = 0 -> 2. 0 = g*t_h + v_0 -> v_0 = -g*t_h
28
- * 3. y_h = h -> 3. h = 1/2*g*t_h^2 (-g*t_h)*t_h = -1/2*g*t_h^2 -> g = -2*h/t_h^2
29
- * 4. v_0 = -g*t_h = (-2*h/t_h^2)*t_h = 2*h/t_h
30
- *
31
- * Transforming time into space:
32
- * 1. t_h = x_h/v_x
33
- * 2. v0 = 2*h/t_h = 2*h*v_x/x_h
34
- * 3. g = -2*h/t_h^2 = -2*h*v_x^2/x_h^2
35
- *
36
- * Euler's Integration:
37
- * 1. v += a * dt
38
- * 2. p += v * dt + 1/2 * a * dt * dt
39
- *
40
- * @param {Object} params - Parameters for gravity calculation.
41
- * @param {number} params.maxJump - Maximum jump height. Defaults to 0.
42
- * @param {number} params.maxLeap - Maximum leap distance. Defaults to 0.
43
- * @param {number} params.maxSpeed - Maximum speed. Defaults to 0.
44
- * @param {number} params.vy - Current vertical velocity. Defaults to 0.
45
- * @param {Vector3} params.position - Current position vector. Defaults to a zero vector.
46
- * @param {number} dt - Time delta for the calculation. Defaults to 1.
47
- * @returns {Object} Updated acceleration, velocity, and position.
48
- * @throws {Error} If maxLeap is not provided.
49
- */
50
- export function applyGravity(params, dt = DEFAULT_DT) {
51
- let {
52
- maxJump = DEFAULT_JUMP,
53
- maxLeap = DEFAULT_LEAP,
54
- maxSpeed = DEFAULT_SPEED,
55
- vy = NO_VELOCITY,
56
- position = zero(),
57
- } = params
58
-
59
- if (!maxLeap) {
60
- throw new Error("Missing maxLeap")
61
- }
62
-
63
- const ay = (-2 * maxJump * maxSpeed ** 2) / maxLeap ** 2
64
- vy += ay * dt
65
- const [x, y, z] = position
66
- const py = y + vy * dt + 0.5 * ay * dt * dt
67
-
68
- return { ay, vy, position: [x, py, z] }
69
- }
@@ -1,77 +0,0 @@
1
- import { expect, test } from "vitest"
2
-
3
- import { applyGravity } from "./gravity.js"
4
-
5
- test("it should apply gravity based on input parameters", () => {
6
- const params = {
7
- maxJump: 10,
8
- maxLeap: 10,
9
- maxSpeed: 10,
10
- vy: 10,
11
- position: [0, 10, 0],
12
- }
13
-
14
- expect(applyGravity(params)).toStrictEqual({
15
- ay: -20,
16
- vy: -10,
17
- position: [0, -10, 0],
18
- })
19
- })
20
-
21
- test("it should compute no gravity when max jump height is not set", () => {
22
- const params = {
23
- maxLeap: 10,
24
- maxSpeed: 10,
25
- vy: 10,
26
- position: [0, 10, 0],
27
- }
28
-
29
- expect(applyGravity(params)).toStrictEqual({
30
- ay: -0,
31
- vy: 10,
32
- position: [0, 20, 0],
33
- })
34
- })
35
-
36
- test("it should compute no gravity when max movement speed is not set", () => {
37
- const params = {
38
- maxJump: 10,
39
- maxLeap: 10,
40
- vy: 10,
41
- position: [0, 10, 0],
42
- }
43
-
44
- expect(applyGravity(params)).toStrictEqual({
45
- ay: -0,
46
- vy: 10,
47
- position: [0, 20, 0],
48
- })
49
- })
50
-
51
- test("it should apply no gravity when no time has passed", () => {
52
- const params = {
53
- maxJump: 10,
54
- maxLeap: 10,
55
- maxSpeed: 10,
56
- vy: 10,
57
- position: [0, 10, 0],
58
- }
59
- const dt = 0
60
-
61
- expect(applyGravity(params, dt)).toStrictEqual({
62
- ay: -20,
63
- vy: 10,
64
- position: [0, 10, 0],
65
- })
66
- })
67
-
68
- test("it should throw an error when max leap distance is not set", () => {
69
- const params = {
70
- maxJump: 10,
71
- maxSpeed: 10,
72
- vy: 10,
73
- position: [0, 10, 0],
74
- }
75
-
76
- expect(() => applyGravity(params)).toThrow()
77
- })
@@ -1,31 +0,0 @@
1
- /**
2
- * @typedef {import('@inglorious/utils/math/linear-algebra/types').Vector3} Vector3
3
- */
4
-
5
- /* eslint-disable no-magic-numbers */
6
-
7
- const DEFAULT_MAX_JUMP = 0 // Default maximum jump height.
8
- const DEFAULT_MAX_LEAP = 0 // Default maximum leap distance.
9
- const DEFAULT_MAX_SPEED = 0 // Default maximum speed.
10
-
11
- /**
12
- * Calculates the vertical velocity (vy) of a jump
13
- * based on the provided parameters.
14
- *
15
- * @param {Object} params - Parameters for the jump calculation.
16
- * @param {number} params.maxJump - Maximum jump height. Defaults to 0.
17
- * @param {number} params.maxLeap - Maximum leap distance. Defaults to 0.
18
- * @param {number} params.maxSpeed - Maximum speed. Defaults to 0.
19
- * @returns {number} The computed vertical velocity (vy).
20
- */
21
- export function jump(params) {
22
- let {
23
- maxJump = DEFAULT_MAX_JUMP,
24
- maxLeap = DEFAULT_MAX_LEAP,
25
- maxSpeed = DEFAULT_MAX_SPEED,
26
- } = params
27
-
28
- const vy = (2 * maxJump * maxSpeed) / maxLeap
29
-
30
- return vy
31
- }
@@ -1,36 +0,0 @@
1
- /**
2
- * @typedef {import('@inglorious/utils/math/linear-algebra/types').Vector3} Vector3
3
- */
4
-
5
- import {
6
- clamp,
7
- multiply,
8
- zero,
9
- } from "@inglorious/utils/math/linear-algebra/vector.js"
10
- import { sum } from "@inglorious/utils/math/linear-algebra/vectors.js"
11
-
12
- const DEFAULT_DT = 1 // Default time delta for the applyVelocity function.
13
- const DEFAULT_MAX_SPEED = 0 // Default maximum speed for velocity clamping.
14
-
15
- /**
16
- * Applies velocity to a position based on the given parameters and options.
17
- *
18
- * @param {Object} params - The parameters for velocity application.
19
- * @param {number} [params.maxSpeed] - The maximum speed for clamping the velocity. Defaults to 0.
20
- * @param {Vector3} [params.velocity] - The current velocity vector. Defaults to a zero vector.
21
- * @param {Vector3} [params.position] - The current position vector. Defaults to a zero vector.
22
- * @param {number} [dt=0] - The time delta for the calculation. Defaults to 0.
23
- * @returns {Object} The updated velocity and position.
24
- */
25
- export function applyVelocity(params, dt = DEFAULT_DT) {
26
- let {
27
- maxSpeed = DEFAULT_MAX_SPEED,
28
- velocity = zero(),
29
- position = zero(),
30
- } = params
31
-
32
- velocity = clamp(velocity, -maxSpeed, maxSpeed)
33
-
34
- position = sum(position, multiply(velocity, dt))
35
- return { velocity, position }
36
- }