@guinetik/gcanvas 1.0.2 → 1.0.4

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 (217) hide show
  1. package/dist/gcanvas.es.js +25656 -0
  2. package/dist/gcanvas.es.min.js +1 -0
  3. package/dist/gcanvas.umd.js +1 -0
  4. package/dist/gcanvas.umd.min.js +1 -0
  5. package/package.json +23 -6
  6. package/src/game/objects/index.js +1 -0
  7. package/src/game/objects/spritesheet.js +260 -0
  8. package/src/game/ui/theme.js +6 -0
  9. package/src/io/keys.js +9 -1
  10. package/src/math/boolean.js +481 -0
  11. package/src/math/index.js +1 -0
  12. package/.github/workflows/release.yaml +0 -70
  13. package/.jshintrc +0 -4
  14. package/.vscode/settings.json +0 -22
  15. package/CLAUDE.md +0 -310
  16. package/blackhole.jpg +0 -0
  17. package/demo.png +0 -0
  18. package/demos/CNAME +0 -1
  19. package/demos/animations.html +0 -31
  20. package/demos/basic.html +0 -38
  21. package/demos/baskara.html +0 -31
  22. package/demos/bezier.html +0 -35
  23. package/demos/beziersignature.html +0 -29
  24. package/demos/blackhole.html +0 -28
  25. package/demos/blob.html +0 -35
  26. package/demos/coordinates.html +0 -698
  27. package/demos/cube3d.html +0 -23
  28. package/demos/demos.css +0 -303
  29. package/demos/dino.html +0 -42
  30. package/demos/easing.html +0 -28
  31. package/demos/events.html +0 -195
  32. package/demos/fluent.html +0 -647
  33. package/demos/fluid-simple.html +0 -22
  34. package/demos/fluid.html +0 -37
  35. package/demos/fractals.html +0 -36
  36. package/demos/gameobjects.html +0 -626
  37. package/demos/genart.html +0 -26
  38. package/demos/gendream.html +0 -26
  39. package/demos/group.html +0 -36
  40. package/demos/home.html +0 -587
  41. package/demos/index.html +0 -376
  42. package/demos/isometric.html +0 -34
  43. package/demos/js/animations.js +0 -452
  44. package/demos/js/basic.js +0 -204
  45. package/demos/js/baskara.js +0 -751
  46. package/demos/js/bezier.js +0 -692
  47. package/demos/js/beziersignature.js +0 -241
  48. package/demos/js/blackhole/accretiondisk.obj.js +0 -379
  49. package/demos/js/blackhole/blackhole.obj.js +0 -318
  50. package/demos/js/blackhole/index.js +0 -409
  51. package/demos/js/blackhole/particle.js +0 -56
  52. package/demos/js/blackhole/starfield.obj.js +0 -218
  53. package/demos/js/blob.js +0 -2276
  54. package/demos/js/coordinates.js +0 -840
  55. package/demos/js/cube3d.js +0 -789
  56. package/demos/js/dino.js +0 -1420
  57. package/demos/js/easing.js +0 -477
  58. package/demos/js/fluent.js +0 -183
  59. package/demos/js/fluid-simple.js +0 -253
  60. package/demos/js/fluid.js +0 -527
  61. package/demos/js/fractals.js +0 -931
  62. package/demos/js/fractalworker.js +0 -93
  63. package/demos/js/gameobjects.js +0 -176
  64. package/demos/js/genart.js +0 -268
  65. package/demos/js/gendream.js +0 -209
  66. package/demos/js/group.js +0 -140
  67. package/demos/js/info-toggle.js +0 -25
  68. package/demos/js/isometric.js +0 -863
  69. package/demos/js/kerr.js +0 -1556
  70. package/demos/js/lavalamp.js +0 -590
  71. package/demos/js/layout.js +0 -354
  72. package/demos/js/mondrian.js +0 -285
  73. package/demos/js/opacity.js +0 -275
  74. package/demos/js/painter.js +0 -484
  75. package/demos/js/particles-showcase.js +0 -514
  76. package/demos/js/particles.js +0 -299
  77. package/demos/js/patterns.js +0 -397
  78. package/demos/js/penrose/artifact.js +0 -69
  79. package/demos/js/penrose/blackhole.js +0 -121
  80. package/demos/js/penrose/constants.js +0 -73
  81. package/demos/js/penrose/game.js +0 -943
  82. package/demos/js/penrose/lore.js +0 -278
  83. package/demos/js/penrose/penrosescene.js +0 -892
  84. package/demos/js/penrose/ship.js +0 -216
  85. package/demos/js/penrose/sounds.js +0 -211
  86. package/demos/js/penrose/voidparticle.js +0 -55
  87. package/demos/js/penrose/voidscene.js +0 -258
  88. package/demos/js/penrose/voidship.js +0 -144
  89. package/demos/js/penrose/wormhole.js +0 -46
  90. package/demos/js/pipeline.js +0 -555
  91. package/demos/js/plane3d.js +0 -256
  92. package/demos/js/platformer.js +0 -1579
  93. package/demos/js/scene.js +0 -304
  94. package/demos/js/scenes.js +0 -320
  95. package/demos/js/schrodinger.js +0 -410
  96. package/demos/js/schwarzschild.js +0 -1023
  97. package/demos/js/shapes.js +0 -628
  98. package/demos/js/space/alien.js +0 -171
  99. package/demos/js/space/boom.js +0 -98
  100. package/demos/js/space/boss.js +0 -353
  101. package/demos/js/space/buff.js +0 -73
  102. package/demos/js/space/bullet.js +0 -102
  103. package/demos/js/space/constants.js +0 -85
  104. package/demos/js/space/game.js +0 -1884
  105. package/demos/js/space/hud.js +0 -112
  106. package/demos/js/space/laserbeam.js +0 -179
  107. package/demos/js/space/lightning.js +0 -277
  108. package/demos/js/space/minion.js +0 -192
  109. package/demos/js/space/missile.js +0 -212
  110. package/demos/js/space/player.js +0 -430
  111. package/demos/js/space/powerup.js +0 -90
  112. package/demos/js/space/starfield.js +0 -58
  113. package/demos/js/space/starpower.js +0 -90
  114. package/demos/js/spacetime.js +0 -559
  115. package/demos/js/sphere3d.js +0 -229
  116. package/demos/js/sprite.js +0 -473
  117. package/demos/js/svgtween.js +0 -204
  118. package/demos/js/tde/accretiondisk.js +0 -471
  119. package/demos/js/tde/blackhole.js +0 -219
  120. package/demos/js/tde/blackholescene.js +0 -209
  121. package/demos/js/tde/config.js +0 -59
  122. package/demos/js/tde/index.js +0 -820
  123. package/demos/js/tde/jets.js +0 -290
  124. package/demos/js/tde/lensedstarfield.js +0 -154
  125. package/demos/js/tde/tdestar.js +0 -297
  126. package/demos/js/tde/tidalstream.js +0 -372
  127. package/demos/js/tde_old/blackhole.obj.js +0 -354
  128. package/demos/js/tde_old/debris.obj.js +0 -791
  129. package/demos/js/tde_old/flare.obj.js +0 -239
  130. package/demos/js/tde_old/index.js +0 -448
  131. package/demos/js/tde_old/star.obj.js +0 -812
  132. package/demos/js/tiles.js +0 -312
  133. package/demos/js/tweendemo.js +0 -79
  134. package/demos/js/visibility.js +0 -102
  135. package/demos/kerr.html +0 -28
  136. package/demos/lavalamp.html +0 -27
  137. package/demos/layouts.html +0 -37
  138. package/demos/logo.svg +0 -4
  139. package/demos/loop.html +0 -84
  140. package/demos/mondrian.html +0 -32
  141. package/demos/og_image.png +0 -0
  142. package/demos/opacity.html +0 -36
  143. package/demos/painter.html +0 -39
  144. package/demos/particles-showcase.html +0 -28
  145. package/demos/particles.html +0 -24
  146. package/demos/patterns.html +0 -33
  147. package/demos/penrose-game.html +0 -31
  148. package/demos/pipeline.html +0 -737
  149. package/demos/plane3d.html +0 -24
  150. package/demos/platformer.html +0 -43
  151. package/demos/scene.html +0 -33
  152. package/demos/scenes.html +0 -96
  153. package/demos/schrodinger.html +0 -27
  154. package/demos/schwarzschild.html +0 -27
  155. package/demos/shapes.html +0 -16
  156. package/demos/space.html +0 -85
  157. package/demos/spacetime.html +0 -27
  158. package/demos/sphere3d.html +0 -24
  159. package/demos/sprite.html +0 -18
  160. package/demos/svgtween.html +0 -29
  161. package/demos/tde.html +0 -28
  162. package/demos/tiles.html +0 -28
  163. package/demos/transforms.html +0 -400
  164. package/demos/tween.html +0 -45
  165. package/demos/visibility.html +0 -33
  166. package/docs/README.md +0 -230
  167. package/docs/api/FluidSystem.md +0 -173
  168. package/docs/concepts/architecture-overview.md +0 -204
  169. package/docs/concepts/coordinate-system.md +0 -384
  170. package/docs/concepts/lifecycle.md +0 -255
  171. package/docs/concepts/rendering-pipeline.md +0 -279
  172. package/docs/concepts/shapes-vs-gameobjects.md +0 -187
  173. package/docs/concepts/tde-zorder.md +0 -106
  174. package/docs/concepts/two-layer-architecture.md +0 -229
  175. package/docs/fluid-dynamics.md +0 -99
  176. package/docs/getting-started/first-game.md +0 -354
  177. package/docs/getting-started/hello-world.md +0 -269
  178. package/docs/getting-started/installation.md +0 -175
  179. package/docs/modules/collision/README.md +0 -453
  180. package/docs/modules/fluent/README.md +0 -1075
  181. package/docs/modules/game/README.md +0 -303
  182. package/docs/modules/isometric-camera.md +0 -210
  183. package/docs/modules/isometric.md +0 -275
  184. package/docs/modules/painter/README.md +0 -328
  185. package/docs/modules/particle/README.md +0 -559
  186. package/docs/modules/shapes/README.md +0 -221
  187. package/docs/modules/shapes/base/euclidian.md +0 -123
  188. package/docs/modules/shapes/base/geometry2d.md +0 -204
  189. package/docs/modules/shapes/base/renderable.md +0 -215
  190. package/docs/modules/shapes/base/shape.md +0 -262
  191. package/docs/modules/shapes/base/transformable.md +0 -243
  192. package/docs/modules/shapes/hierarchy.md +0 -218
  193. package/docs/modules/state/README.md +0 -577
  194. package/docs/modules/util/README.md +0 -99
  195. package/docs/modules/util/camera3d.md +0 -412
  196. package/docs/modules/util/scene3d.md +0 -395
  197. package/index.html +0 -17
  198. package/jsdoc.json +0 -50
  199. package/scripts/build-demo.js +0 -69
  200. package/scripts/bundle4llm.js +0 -276
  201. package/scripts/clearconsole.js +0 -48
  202. package/test/math/orbital.test.js +0 -61
  203. package/test/math/tensor.test.js +0 -114
  204. package/test/particle/emitter.test.js +0 -204
  205. package/test/particle/particle-system.test.js +0 -310
  206. package/test/particle/particle.test.js +0 -116
  207. package/test/particle/updaters.test.js +0 -386
  208. package/test/setup.js +0 -120
  209. package/test/shapes/euclidian.test.js +0 -44
  210. package/test/shapes/geometry.test.js +0 -86
  211. package/test/shapes/group.test.js +0 -86
  212. package/test/shapes/rectangle.test.js +0 -64
  213. package/test/shapes/transform.test.js +0 -379
  214. package/test/util/camera3d.test.js +0 -428
  215. package/test/util/scene3d.test.js +0 -352
  216. package/vite.config.js +0 -50
  217. package/vitest.config.js +0 -13
package/CLAUDE.md DELETED
@@ -1,310 +0,0 @@
1
- # AGENTS.md - GCanvas Development Guidelines
2
-
3
- ## Project Overview
4
-
5
- GCanvas is a zero-dependency HTML5 Canvas library for 2D graphics, games, and generative art. It provides a declarative API built on shapes, game objects, and a rendering pipeline.
6
-
7
- **Repository:** https://github.com/guinetik/gcanvas
8
-
9
- ## Project Structure
10
-
11
- ```
12
- gcanvas/
13
- ├── src/ # Library source code
14
- │ ├── index.js # Main exports
15
- │ ├── shapes/ # Shape primitives (Circle, Rect, Text, etc.)
16
- │ ├── game/ # Game loop, pipeline, GameObjects
17
- │ │ ├── objects/ # GameObject wrappers (Text, Scene, ImageGo)
18
- │ │ ├── ui/ # UI components (Button, FPS counter)
19
- │ │ └── pipeline.js # Rendering pipeline
20
- │ ├── painter/ # Low-level canvas drawing utilities
21
- │ ├── motion/ # Animation & tweening (Tween, easing functions)
22
- │ ├── math/ # Math utilities (Complex, noise, fractals)
23
- │ ├── mixins/ # Composable behaviors (anchor, draggable)
24
- │ ├── util/ # Utilities (layout, position, Camera3D)
25
- │ ├── io/ # Input handling (keyboard, mouse, touch)
26
- │ ├── collision/ # Collision detection
27
- │ ├── state/ # State management
28
- │ └── sound/ # Audio utilities
29
- ├── demos/ # Demo applications
30
- │ ├── js/ # Demo JavaScript files
31
- │ ├── *.html # Demo HTML entry points
32
- │ └── demos.css # Shared demo styles
33
- ├── tests/ # Vitest test files
34
- └── dist/ # Built library (UMD & ES modules)
35
- ```
36
-
37
- ## Coding Guidelines
38
-
39
- ### 1. No Magic Numbers
40
-
41
- **Always use a CONFIG object** at the top of files for configurable values.
42
-
43
- ```javascript
44
- // BAD - magic numbers scattered in code
45
- this.camera = new Camera3D({ perspective: 800 });
46
- for (let i = 0; i < 300; i++) { ... }
47
- const radius = 80;
48
-
49
- // GOOD - centralized configuration
50
- const CONFIG = {
51
- perspective: 800,
52
- numPoints: 300,
53
- helixRadius: 80,
54
-
55
- // Group related values
56
- physics: {
57
- gravity: 0.0001,
58
- damping: 0.99,
59
- },
60
-
61
- // Document units where helpful
62
- timeScale: 1.0, // seconds
63
- gridSpacing: 30, // pixels
64
- };
65
- ```
66
-
67
- ### 2. Prefer Shapes and GameObjects Over Direct Canvas
68
-
69
- The library provides abstractions - use them instead of raw canvas operations.
70
-
71
- ```javascript
72
- // BAD - direct canvas drawing
73
- ctx.beginPath();
74
- ctx.arc(x, y, 50, 0, Math.PI * 2);
75
- ctx.fillStyle = "red";
76
- ctx.fill();
77
-
78
- // GOOD - use Shape classes
79
- import { Circle } from "../../src/index.js";
80
- const circle = new Circle(x, y, 50, { fill: "red" });
81
- circle.render(ctx);
82
-
83
- // GOOD - use GameObjects for managed entities
84
- import { Game, Scene, Text } from "../../src/index.js";
85
- const label = new Text(this, "Hello", { color: "#fff", font: "16px monospace" });
86
- this.pipeline.add(label);
87
- ```
88
-
89
- ### 3. Use Painter.useCtx for Low-Level Operations
90
-
91
- When you must access the canvas context directly, wrap it with `Painter.useCtx`:
92
-
93
- ```javascript
94
- import { Painter } from "../../src/index.js";
95
-
96
- // BAD - direct ctx manipulation
97
- ctx.save();
98
- ctx.strokeStyle = "rgba(255,255,255,0.5)";
99
- ctx.lineWidth = 2;
100
- ctx.moveTo(x1, y1);
101
- ctx.lineTo(x2, y2);
102
- ctx.stroke();
103
- ctx.restore();
104
-
105
- // GOOD - Painter.useCtx handles save/restore automatically
106
- Painter.useCtx((ctx) => {
107
- ctx.strokeStyle = "rgba(255,255,255,0.5)";
108
- ctx.lineWidth = 2;
109
- ctx.moveTo(x1, y1);
110
- ctx.lineTo(x2, y2);
111
- ctx.stroke();
112
- });
113
- ```
114
-
115
- ### 4. Use Layout Utilities for Positioning
116
-
117
- Don't manually calculate positions for multiple items:
118
-
119
- ```javascript
120
- import { verticalLayout, applyLayout, applyAnchor, Position, Scene, Text } from "../../src/index.js";
121
-
122
- // BAD - manual offset calculations
123
- this.title = new Text(this, "Title", { y: 20 });
124
- this.subtitle = new Text(this, "Subtitle", { y: 45 });
125
- this.info = new Text(this, "Info", { y: 70 });
126
-
127
- // GOOD - use layout utilities
128
- const panel = new Scene(this, { x: 0, y: 0 });
129
- applyAnchor(panel, { anchor: Position.TOP_CENTER, anchorOffsetY: 100 });
130
-
131
- const items = [
132
- new Text(this, "Title", { font: "bold 16px monospace" }),
133
- new Text(this, "Subtitle", { font: "14px monospace" }),
134
- new Text(this, "Info", { font: "12px monospace" }),
135
- ];
136
-
137
- const layout = verticalLayout(items, { spacing: 20, align: "center" });
138
- applyLayout(items, layout.positions);
139
- items.forEach(item => panel.add(item));
140
- ```
141
-
142
- ### 5. Extend Game Class for Demos
143
-
144
- All demos should extend the `Game` class:
145
-
146
- ```javascript
147
- import { Game, Painter } from "../../src/index.js";
148
-
149
- const CONFIG = {
150
- // Configuration values
151
- };
152
-
153
- class MyDemo extends Game {
154
- constructor(canvas) {
155
- super(canvas);
156
- this.backgroundColor = "#000";
157
- this.enableFluidSize(); // Responsive canvas
158
- }
159
-
160
- init() {
161
- super.init();
162
- // Initialize shapes, game objects, state
163
- this.pipeline.add(myGameObject);
164
- }
165
-
166
- update(dt) {
167
- super.update(dt);
168
- // Update logic (dt is delta time in seconds)
169
- }
170
-
171
- render() {
172
- super.render(); // Clears canvas, renders pipeline
173
- // Additional rendering if needed
174
- }
175
- }
176
-
177
- window.addEventListener("load", () => {
178
- const canvas = document.getElementById("game");
179
- const demo = new MyDemo(canvas);
180
- demo.start();
181
- });
182
- ```
183
-
184
- ## Key APIs Reference
185
-
186
- ### Shapes
187
- - `Circle`, `Rect`, `Square`, `Triangle`, `Hexagon`, `Star`
188
- - `Line`, `Arc`, `BezierShape`, `SVGShape`
189
- - `Text` (shape), `ImageShape`, `Pattern`
190
- - 3D shapes: `Cube`, `Sphere`, `Cylinder`, `Cone`, `Prism`
191
-
192
- ### GameObjects (in `src/game/objects/`)
193
- - `Text` - Managed text with automatic updates
194
- - `Scene` - Container for grouping objects
195
- - `ImageGo` - Managed image display
196
- - `LayoutScene` - Scene with layout helpers
197
-
198
- ### Motion & Animation
199
- - `Tween` - Animate properties over time
200
- - `TweenEnetik` - Advanced tweening
201
- - Motion behaviors: `Orbit`, `Oscillate`, `Bounce`, `Spring`, etc.
202
-
203
- ### Utilities
204
- - `Camera3D` - Pseudo-3D projection with mouse controls
205
- - `verticalLayout`, `horizontalLayout`, `gridLayout` - Layout helpers
206
- - `applyAnchor` - Position anchoring mixin
207
- - `Position` - Position constants (TOP_CENTER, BOTTOM_LEFT, etc.)
208
-
209
- ### Math
210
- - `Complex` - Complex number operations
211
- - `Noise` - Perlin/simplex noise
212
- - `Random` - Seeded random utilities
213
- - Fractal generators
214
-
215
- ### Input
216
- - `Keys` - Keyboard input
217
- - `Input` - Mouse/pointer input
218
- - `Touch` - Touch input handling
219
-
220
- ## Demo File Structure
221
-
222
- ```
223
- demos/
224
- ├── mydemo.html # HTML entry point
225
- └── js/
226
- └── mydemo.js # Demo implementation
227
- ```
228
-
229
- ### HTML Template
230
-
231
- ```html
232
- <!DOCTYPE html>
233
- <html lang="en">
234
- <head>
235
- <meta charset="UTF-8" />
236
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
237
- <title>Demo Name</title>
238
- <link rel="stylesheet" href="demos.css" />
239
- <script src="./js/info-toggle.js"></script>
240
- </head>
241
- <body>
242
- <div id="info">
243
- <strong>Demo Title</strong> — Brief description.<br/>
244
- <span style="color:#CCC">
245
- <li>Feature 1</li>
246
- <li>Feature 2</li>
247
- <li>Controls info</li>
248
- </span>
249
- </div>
250
- <canvas id="game"></canvas>
251
- <script type="module" src="./js/mydemo.js"></script>
252
- </body>
253
- </html>
254
- ```
255
-
256
- ### Adding to Navigation
257
-
258
- Update `demos/index.html` to add your demo to the appropriate section:
259
-
260
- ```html
261
- <h2>Section Name</h2>
262
- <a href="mydemo.html" target="demo-frame">My Demo</a>
263
- ```
264
-
265
- ## Development Commands
266
-
267
- ```bash
268
- npm run dev # Start Vite dev server
269
- npm run build # Build library to dist/
270
- npm run test # Run tests
271
- npm run test:watch # Run tests in watch mode
272
- npm run docs # Generate JSDoc documentation
273
- ```
274
-
275
- ## Testing
276
-
277
- Tests use Vitest and are located in `tests/`. Run with:
278
-
279
- ```bash
280
- npm test
281
- ```
282
-
283
- ## Common Patterns
284
-
285
- ### Responsive Canvas
286
- ```javascript
287
- this.enableFluidSize(); // Auto-resize to window
288
- ```
289
-
290
- ### Mouse/Touch Interaction
291
- ```javascript
292
- this.canvas.addEventListener("click", () => this.handleClick());
293
- this.canvas.addEventListener("touchstart", (e) => this.handleTouch(e));
294
- ```
295
-
296
- ### Color Utilities
297
- ```javascript
298
- import { Painter } from "../../src/index.js";
299
- const rgb = Painter.colors.hslToRgb(hue, saturation, lightness);
300
- const hex = Painter.colors.rgbToHex(r, g, b);
301
- ```
302
-
303
- ### Animation Loop Access
304
- ```javascript
305
- update(dt) {
306
- super.update(dt);
307
- this.time += dt; // dt is in seconds
308
- // Animation logic
309
- }
310
- ```
package/blackhole.jpg DELETED
Binary file
package/demo.png DELETED
Binary file
package/demos/CNAME DELETED
@@ -1 +0,0 @@
1
- gcanvas.guinetik.com
@@ -1,31 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
-
4
- <head>
5
- <meta charset="UTF-8" />
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>Tween</title>
8
- <link rel="stylesheet" href="demos.css" />
9
- <script src="./js/info-toggle.js"></script>
10
- </head>
11
-
12
- <body>
13
- <div id="info">
14
- <strong>Motion Demo</strong> - Showcases reusable animations. Each animation is implemented through a tween system that handles interpolation between values over time. The demo uses a tile-based layout to organize the animations in a grid, with each animation contained in its own box. Under the hood, the system manages animation timing through a central update loop, applying mathematical transformations to the shapes' positions based on normalized time values (0-1) that loop continuously.
15
- </div>
16
- <canvas id="game"></canvas>
17
- <script type="module">
18
- import { MyGame } from './js/animations.js';
19
-
20
- window.addEventListener("load", () => {
21
- const canvas = document.getElementById("game");
22
- const game = new MyGame(canvas);
23
- // game.setFPS(1);
24
- // game.enableLogging(true);
25
- game.start();
26
- // setTimeout(game.stop.bind(game), 2000);
27
- });
28
- </script>
29
- </body>
30
-
31
- </html>
package/demos/basic.html DELETED
@@ -1,38 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
-
4
- <head>
5
- <meta charset="UTF-8" />
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>Basic Game Template</title>
8
- <link rel="stylesheet" href="demos.css" />
9
- <script src="./js/info-toggle.js"></script>
10
- </head>
11
-
12
- <body>
13
- <div id="info">
14
- <strong>Basic Template</strong> — A minimal demo to kickstart new games. <br>
15
- A <strong>Game</strong> manages the canvas, lifecycle, input, and rendering loop. <br>
16
- A <strong>GameObject</strong> is any interactive or drawable entity (e.g. shape, text, button, particle). <br>
17
- A <strong>Scene</strong> is a container that groups GameObjects and controls update & render order. <br>
18
- The <strong>Pipeline</strong> is the main ordered list of GameObjects (or Scenes) that the game runs every frame.
19
- <br>
20
- This template sets up one game scene and one UI scene, with a "Hello World" box in the center and an FPS counter in
21
- the corner.
22
- </div>
23
- <canvas id="game"></canvas>
24
-
25
- <script type="module">
26
- import { DemoGame } from "./js/basic.js";
27
- window.addEventListener("load", () => {
28
- const canvas = document.getElementById("game");
29
- const game = new DemoGame(canvas);
30
- //game.enableLogging();
31
- game.enablePauseOnBlur(true);
32
- game.setFPS(60);
33
- game.start();
34
- });
35
- </script>
36
- </body>
37
-
38
- </html>
@@ -1,31 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
-
4
- <head>
5
- <meta charset="UTF-8" />
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>Root Dance - Bhaskara Formula</title>
8
- <link rel="stylesheet" href="demos.css" />
9
- <script src="./js/info-toggle.js"></script>
10
- </head>
11
-
12
- <body>
13
- <div id="info">
14
- <strong>Bhaskara Dance</strong> - Visualizing the quadratic formula (Bhaskara).
15
- Particles represent the roots of ax² + bx + c = 0. Watch them dance
16
- as coefficients animate, merge when the discriminant hits zero, and spiral
17
- into the complex plane when roots become imaginary.
18
- </div>
19
- <canvas id="game"></canvas>
20
- <script type="module">
21
- import { MyGame } from './js/baskara.js';
22
-
23
- window.addEventListener("load", () => {
24
- const canvas = document.getElementById("game");
25
- const game = MyGame(canvas);
26
- game.start();
27
- });
28
- </script>
29
- </body>
30
-
31
- </html>
package/demos/bezier.html DELETED
@@ -1,35 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
-
4
- <head>
5
- <meta charset="UTF-8" />
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>Basic Game Template</title>
8
- <link rel="stylesheet" href="demos.css" />
9
- <script src="./js/info-toggle.js"></script>
10
- </head>
11
-
12
- <body>
13
- <div id="info">
14
- <strong>Bezier Curve Editor</strong> — Create and modify Bezier curves with interactive control points. <br>
15
- The demo shows the separation between <strong>Shapes</strong> (visual definitions) and
16
- <strong>GameObjects</strong> (interactive entities). <br>
17
- <strong>BezierShape</strong> defines curve paths using commands like "M" (move), "L" (line), "Q" (quadratic),
18
- and "C" (cubic). <br>
19
- <strong>Control Points</strong> are wrapped with ShapeGOFactory to make them interactive, while guide lines show
20
- relationships between points. <br>
21
- Switch between <strong>Add Points</strong> mode to place new control points and <strong>Edit Points</strong>
22
- mode to drag and adjust the curve shape.
23
- </div>
24
- <canvas id="game"></canvas>
25
- <script type="module" src="./js/bezier.js"></script>
26
- <script type="module">
27
- window.addEventListener("load", () => {
28
- const canvas = document.getElementById("game");
29
- const game = new BezierDemoGame(canvas);
30
- game.start();
31
- });
32
- </script>
33
- </body>
34
-
35
- </html>
@@ -1,29 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
-
4
- <head>
5
- <meta charset="UTF-8" />
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>Bezier Signature</title>
8
- <link rel="stylesheet" href="demos.css" />
9
- <script src="./js/info-toggle.js"></script>
10
- </head>
11
-
12
- <body>
13
- <div id="info">
14
- <strong>Bezier Signature</strong> — A <code>BezierShape</code> receives an array of path commands and draws them as a
15
- bezier curve. This can be done all frames at once or they can be iterated over time, like a signature animation.
16
- </div>
17
- <canvas id="game"></canvas>
18
- <script type="module">
19
- import { MyGame } from './js/beziersignature.js';
20
-
21
- window.addEventListener("load", () => {
22
- const canvas = document.getElementById("game");
23
- const game = new MyGame(canvas);
24
- game.start();
25
- });
26
- </script>
27
- </body>
28
-
29
- </html>
@@ -1,28 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
-
4
- <head>
5
- <meta charset="UTF-8" />
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>Black Hole - Cinematic Visualization</title>
8
- <link rel="stylesheet" href="demos.css" />
9
- <script src="./js/info-toggle.js"></script>
10
- </head>
11
-
12
- <body>
13
- <div id="info">
14
- <strong>Black Hole</strong> — Cinematic accretion disk visualization.<br/>
15
- <span style="color:#CCC">
16
- <li><code>Gravitational Lensing</code> — Light bends around the hole.</li>
17
- <li><code>Accretion Disk</code> — 2500 particles with heat gradient.</li>
18
- <li><code>Doppler Beaming</code> — Approaching side brighter.</li>
19
- <li><code>Hawking Radiation</code> — Rare cyan quantum escapes.</li>
20
- <li><code>Drag</code> — Orbit the camera around.</li>
21
- <li><code>Auto-rotate</code> — Slow orbit when idle.</li>
22
- </span>
23
- </div>
24
- <canvas id="game"></canvas>
25
- <script type="module" src="./js/blackhole/index.js"></script>
26
- </body>
27
-
28
- </html>
package/demos/blob.html DELETED
@@ -1,35 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
-
4
- <head>
5
- <meta charset="UTF-8" />
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>Blob Feeder</title>
8
- <link rel="stylesheet" href="demos.css" />
9
- <script src="./js/info-toggle.js"></script>
10
- </head>
11
-
12
- <body>
13
- <div id="info">
14
- <strong>Blob Feeder</strong> — A Tamagotchi-style micro-game where you keep your blob alive by collecting food!<br>
15
- <span style="color:#CCC">
16
- <li>Guide the blob with your mouse/touch to collect shapes</li>
17
- <li>Each level = one musical scale (do-re-mi), longer scales as you progress</li>
18
- <li>Pick up items quickly for speed bonuses (up to 2x points)</li>
19
- <li>Don't let your blob go hungry - it will shrink and lose points!</li>
20
- <li>Watch the blob's face - it shows mood based on hunger and energy</li>
21
- </span>
22
- </div>
23
- <canvas id="game"></canvas>
24
- <script type="module">
25
- import { BezierBlobGame } from './js/blob.js';
26
-
27
- window.addEventListener("load", () => {
28
- const canvas = document.getElementById("game");
29
- const game = new BezierBlobGame(canvas);
30
- game.start();
31
- });
32
- </script>
33
- </body>
34
-
35
- </html>