@guinetik/gcanvas 1.0.0 → 1.0.2

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 (102) hide show
  1. package/demos/coordinates.html +698 -0
  2. package/demos/cube3d.html +23 -0
  3. package/demos/demos.css +17 -3
  4. package/demos/dino.html +42 -0
  5. package/demos/fluid-simple.html +22 -0
  6. package/demos/fluid.html +37 -0
  7. package/demos/gameobjects.html +626 -0
  8. package/demos/index.html +19 -7
  9. package/demos/js/blob.js +18 -5
  10. package/demos/js/coordinates.js +840 -0
  11. package/demos/js/cube3d.js +789 -0
  12. package/demos/js/dino.js +1420 -0
  13. package/demos/js/fluid-simple.js +253 -0
  14. package/demos/js/fluid.js +527 -0
  15. package/demos/js/gameobjects.js +176 -0
  16. package/demos/js/plane3d.js +256 -0
  17. package/demos/js/platformer.js +1579 -0
  18. package/demos/js/sphere3d.js +229 -0
  19. package/demos/js/sprite.js +473 -0
  20. package/demos/js/tde/accretiondisk.js +65 -12
  21. package/demos/js/tde/blackholescene.js +2 -2
  22. package/demos/js/tde/config.js +2 -2
  23. package/demos/js/tde/index.js +152 -27
  24. package/demos/js/tde/lensedstarfield.js +32 -25
  25. package/demos/js/tde/tdestar.js +78 -98
  26. package/demos/js/tde/tidalstream.js +24 -8
  27. package/demos/plane3d.html +24 -0
  28. package/demos/platformer.html +43 -0
  29. package/demos/sphere3d.html +24 -0
  30. package/demos/sprite.html +18 -0
  31. package/docs/README.md +230 -222
  32. package/docs/api/FluidSystem.md +173 -0
  33. package/docs/concepts/architecture-overview.md +204 -204
  34. package/docs/concepts/coordinate-system.md +384 -0
  35. package/docs/concepts/rendering-pipeline.md +279 -279
  36. package/docs/concepts/shapes-vs-gameobjects.md +187 -0
  37. package/docs/concepts/two-layer-architecture.md +229 -229
  38. package/docs/fluid-dynamics.md +99 -0
  39. package/docs/getting-started/first-game.md +354 -354
  40. package/docs/getting-started/installation.md +175 -157
  41. package/docs/modules/collision/README.md +2 -2
  42. package/docs/modules/fluent/README.md +6 -6
  43. package/docs/modules/game/README.md +303 -303
  44. package/docs/modules/isometric-camera.md +2 -2
  45. package/docs/modules/isometric.md +1 -1
  46. package/docs/modules/painter/README.md +328 -328
  47. package/docs/modules/particle/README.md +3 -3
  48. package/docs/modules/shapes/README.md +221 -221
  49. package/docs/modules/shapes/base/euclidian.md +123 -123
  50. package/docs/modules/shapes/base/shape.md +262 -262
  51. package/docs/modules/shapes/base/transformable.md +243 -243
  52. package/docs/modules/state/README.md +2 -2
  53. package/docs/modules/util/README.md +1 -1
  54. package/docs/modules/util/camera3d.md +3 -3
  55. package/docs/modules/util/scene3d.md +1 -1
  56. package/package.json +3 -1
  57. package/readme.md +19 -5
  58. package/src/collision/collision.js +75 -0
  59. package/src/game/game.js +11 -5
  60. package/src/game/index.js +2 -1
  61. package/src/game/objects/index.js +3 -0
  62. package/src/game/objects/platformer-scene.js +411 -0
  63. package/src/game/objects/scene.js +14 -0
  64. package/src/game/objects/sprite.js +529 -0
  65. package/src/game/pipeline.js +20 -16
  66. package/src/game/systems/FluidSystem.js +835 -0
  67. package/src/game/systems/index.js +11 -0
  68. package/src/game/ui/button.js +39 -18
  69. package/src/game/ui/cursor.js +14 -0
  70. package/src/game/ui/fps.js +12 -4
  71. package/src/game/ui/index.js +2 -0
  72. package/src/game/ui/stepper.js +549 -0
  73. package/src/game/ui/theme.js +123 -0
  74. package/src/game/ui/togglebutton.js +9 -3
  75. package/src/game/ui/tooltip.js +11 -4
  76. package/src/io/input.js +75 -45
  77. package/src/io/mouse.js +44 -19
  78. package/src/io/touch.js +35 -12
  79. package/src/math/fluid.js +507 -0
  80. package/src/math/index.js +2 -0
  81. package/src/mixins/anchor.js +17 -7
  82. package/src/motion/tweenetik.js +16 -0
  83. package/src/shapes/cube3d.js +599 -0
  84. package/src/shapes/index.js +3 -0
  85. package/src/shapes/plane3d.js +687 -0
  86. package/src/shapes/sphere3d.js +75 -6
  87. package/src/util/camera2d.js +315 -0
  88. package/src/util/camera3d.js +218 -12
  89. package/src/util/index.js +1 -0
  90. package/src/webgl/shaders/plane-shaders.js +332 -0
  91. package/src/webgl/shaders/sphere-shaders.js +4 -2
  92. package/types/fluent.d.ts +361 -0
  93. package/types/game.d.ts +303 -0
  94. package/types/index.d.ts +144 -5
  95. package/types/math.d.ts +361 -0
  96. package/types/motion.d.ts +271 -0
  97. package/types/particle.d.ts +373 -0
  98. package/types/shapes.d.ts +107 -9
  99. package/types/util.d.ts +353 -0
  100. package/types/webgl.d.ts +109 -0
  101. package/disk_example.png +0 -0
  102. package/tde.png +0 -0
@@ -1,123 +1,123 @@
1
- # Euclidian
2
-
3
- > The root class defining spatial properties for all visual objects.
4
-
5
- **Module:** [shapes](../README.md) | **Extends:** `Loggable` | **Source:** `src/shapes/euclidian.js`
6
-
7
- ## Overview
8
-
9
- Euclidian is the foundation of all drawable objects in GCanvas. It defines the fundamental spatial contract: a 2D position and size. Before something becomes a shape, a renderable, or a transformable object, it first **exists in space**.
10
-
11
- This class is abstract and intended to be subclassed.
12
-
13
- ## Constructor
14
-
15
- ```js
16
- new Euclidian(options)
17
- ```
18
-
19
- ### Parameters
20
-
21
- | Parameter | Type | Default | Description |
22
- |-----------|------|---------|-------------|
23
- | `options` | `Object` | `{}` | Configuration options |
24
-
25
- ### Options
26
-
27
- | Option | Type | Default | Description |
28
- |--------|------|---------|-------------|
29
- | `x` | `number` | `0` | X position (center-based) |
30
- | `y` | `number` | `0` | Y position (center-based) |
31
- | `width` | `number` | `0` | Width in pixels |
32
- | `height` | `number` | `0` | Height in pixels |
33
- | `debug` | `boolean` | `false` | Enable debug visualization |
34
- | `debugColor` | `string` | `"#0f0"` | Debug outline color |
35
-
36
- ## Properties
37
-
38
- | Property | Type | Description |
39
- |----------|------|-------------|
40
- | `x` | `number` | X center position in canvas space |
41
- | `y` | `number` | Y center position in canvas space |
42
- | `width` | `number` | Width of the object (always ≥ 0) |
43
- | `height` | `number` | Height of the object (always ≥ 0) |
44
- | `debug` | `boolean` | Whether debug overlay is enabled |
45
- | `debugColor` | `string` | Color of the debug box outline |
46
-
47
- ## Coordinate System
48
-
49
- GCanvas uses a **center-based** coordinate system:
50
-
51
- ```
52
- ┌────────────────────────────────┐
53
- │ │
54
- │ (x, y) │
55
- │ ●───────────────┐ │
56
- │ │ │ │
57
- │ │ width │ │
58
- │ │ │ │
59
- │ └───────────────┘ │
60
- │ height │
61
- │ │
62
- └────────────────────────────────┘
63
- ```
64
-
65
- The `(x, y)` point is the **center** of the object, not the top-left corner.
66
-
67
- ## Example
68
-
69
- ```js
70
- import { Euclidian } from 'gcanvas';
71
-
72
- // Euclidian is abstract, but shows the basic spatial contract
73
- const spatial = {
74
- x: 100, // Center at x=100
75
- y: 100, // Center at y=100
76
- width: 50, // 50 pixels wide
77
- height: 30 // 30 pixels tall
78
- };
79
-
80
- // Top-left corner would be at (75, 85)
81
- // x - width/2 = 100 - 25 = 75
82
- // y - height/2 = 100 - 15 = 85
83
- ```
84
-
85
- ## Property Validation
86
-
87
- All properties are validated on set:
88
-
89
- ```js
90
- shape.x = 100; // Valid
91
- shape.x = null; // Throws Error: "Invalid property value: x null"
92
- shape.x = undefined; // Throws Error: "Invalid property value: x undefined"
93
- ```
94
-
95
- Width and height are clamped to be non-negative:
96
-
97
- ```js
98
- shape.width = -10; // Sets width to 0
99
- shape.height = -5; // Sets height to 0
100
- ```
101
-
102
- ## Inheritance
103
-
104
- ```
105
- Loggable
106
- └── Euclidian <── You are here
107
- └── Geometry2d
108
- └── Traceable
109
- └── Renderable
110
- └── Transformable
111
- └── Shape
112
- ```
113
-
114
- ## Related
115
-
116
- - [Geometry2d](./geometry2d.md) - Adds bounding boxes and constraints
117
- - [Shape Hierarchy](../hierarchy.md) - Full inheritance diagram
118
- - [Rendering Pipeline](../../../concepts/rendering-pipeline.md) - How shapes render
119
-
120
- ## See Also
121
-
122
- - [Shapes Module](../README.md)
123
- - [Renderable](./renderable.md)
1
+ # Euclidian
2
+
3
+ > The root class defining spatial properties for all visual objects.
4
+
5
+ **Module:** [shapes](../README.md) | **Extends:** `Loggable` | **Source:** `src/shapes/euclidian.js`
6
+
7
+ ## Overview
8
+
9
+ Euclidian is the foundation of all drawable objects in GCanvas. It defines the fundamental spatial contract: a 2D position and size. Before something becomes a shape, a renderable, or a transformable object, it first **exists in space**.
10
+
11
+ This class is abstract and intended to be subclassed.
12
+
13
+ ## Constructor
14
+
15
+ ```js
16
+ new Euclidian(options)
17
+ ```
18
+
19
+ ### Parameters
20
+
21
+ | Parameter | Type | Default | Description |
22
+ |-----------|------|---------|-------------|
23
+ | `options` | `Object` | `{}` | Configuration options |
24
+
25
+ ### Options
26
+
27
+ | Option | Type | Default | Description |
28
+ |--------|------|---------|-------------|
29
+ | `x` | `number` | `0` | X position (center-based) |
30
+ | `y` | `number` | `0` | Y position (center-based) |
31
+ | `width` | `number` | `0` | Width in pixels |
32
+ | `height` | `number` | `0` | Height in pixels |
33
+ | `debug` | `boolean` | `false` | Enable debug visualization |
34
+ | `debugColor` | `string` | `"#0f0"` | Debug outline color |
35
+
36
+ ## Properties
37
+
38
+ | Property | Type | Description |
39
+ |----------|------|-------------|
40
+ | `x` | `number` | X center position in canvas space |
41
+ | `y` | `number` | Y center position in canvas space |
42
+ | `width` | `number` | Width of the object (always ≥ 0) |
43
+ | `height` | `number` | Height of the object (always ≥ 0) |
44
+ | `debug` | `boolean` | Whether debug overlay is enabled |
45
+ | `debugColor` | `string` | Color of the debug box outline |
46
+
47
+ ## Coordinate System
48
+
49
+ GCanvas uses a **center-based** coordinate system:
50
+
51
+ ```
52
+ ┌────────────────────────────────┐
53
+ │ │
54
+ │ (x, y) │
55
+ │ ●───────────────┐ │
56
+ │ │ │ │
57
+ │ │ width │ │
58
+ │ │ │ │
59
+ │ └───────────────┘ │
60
+ │ height │
61
+ │ │
62
+ └────────────────────────────────┘
63
+ ```
64
+
65
+ The `(x, y)` point is the **center** of the object, not the top-left corner.
66
+
67
+ ## Example
68
+
69
+ ```js
70
+ import { Euclidian } from '@guinetik/gcanvas';
71
+
72
+ // Euclidian is abstract, but shows the basic spatial contract
73
+ const spatial = {
74
+ x: 100, // Center at x=100
75
+ y: 100, // Center at y=100
76
+ width: 50, // 50 pixels wide
77
+ height: 30 // 30 pixels tall
78
+ };
79
+
80
+ // Top-left corner would be at (75, 85)
81
+ // x - width/2 = 100 - 25 = 75
82
+ // y - height/2 = 100 - 15 = 85
83
+ ```
84
+
85
+ ## Property Validation
86
+
87
+ All properties are validated on set:
88
+
89
+ ```js
90
+ shape.x = 100; // Valid
91
+ shape.x = null; // Throws Error: "Invalid property value: x null"
92
+ shape.x = undefined; // Throws Error: "Invalid property value: x undefined"
93
+ ```
94
+
95
+ Width and height are clamped to be non-negative:
96
+
97
+ ```js
98
+ shape.width = -10; // Sets width to 0
99
+ shape.height = -5; // Sets height to 0
100
+ ```
101
+
102
+ ## Inheritance
103
+
104
+ ```
105
+ Loggable
106
+ └── Euclidian <── You are here
107
+ └── Geometry2d
108
+ └── Traceable
109
+ └── Renderable
110
+ └── Transformable
111
+ └── Shape
112
+ ```
113
+
114
+ ## Related
115
+
116
+ - [Geometry2d](./geometry2d.md) - Adds bounding boxes and constraints
117
+ - [Shape Hierarchy](../hierarchy.md) - Full inheritance diagram
118
+ - [Rendering Pipeline](../../../concepts/rendering-pipeline.md) - How shapes render
119
+
120
+ ## See Also
121
+
122
+ - [Shapes Module](../README.md)
123
+ - [Renderable](./renderable.md)