@guinetik/gcanvas 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 (349) hide show
  1. package/.github/workflows/release.yaml +70 -0
  2. package/.jshintrc +4 -0
  3. package/.vscode/settings.json +22 -0
  4. package/CLAUDE.md +310 -0
  5. package/blackhole.jpg +0 -0
  6. package/demo.png +0 -0
  7. package/demos/CNAME +1 -0
  8. package/demos/animations.html +31 -0
  9. package/demos/basic.html +38 -0
  10. package/demos/baskara.html +31 -0
  11. package/demos/bezier.html +35 -0
  12. package/demos/beziersignature.html +29 -0
  13. package/demos/blackhole.html +28 -0
  14. package/demos/blob.html +35 -0
  15. package/demos/demos.css +289 -0
  16. package/demos/easing.html +28 -0
  17. package/demos/events.html +195 -0
  18. package/demos/fluent.html +647 -0
  19. package/demos/fractals.html +36 -0
  20. package/demos/genart.html +26 -0
  21. package/demos/gendream.html +26 -0
  22. package/demos/group.html +36 -0
  23. package/demos/home.html +587 -0
  24. package/demos/index.html +364 -0
  25. package/demos/isometric.html +34 -0
  26. package/demos/js/animations.js +452 -0
  27. package/demos/js/basic.js +204 -0
  28. package/demos/js/baskara.js +751 -0
  29. package/demos/js/bezier.js +692 -0
  30. package/demos/js/beziersignature.js +241 -0
  31. package/demos/js/blackhole/accretiondisk.obj.js +379 -0
  32. package/demos/js/blackhole/blackhole.obj.js +318 -0
  33. package/demos/js/blackhole/index.js +409 -0
  34. package/demos/js/blackhole/particle.js +56 -0
  35. package/demos/js/blackhole/starfield.obj.js +218 -0
  36. package/demos/js/blob.js +2263 -0
  37. package/demos/js/easing.js +477 -0
  38. package/demos/js/fluent.js +183 -0
  39. package/demos/js/fractals.js +931 -0
  40. package/demos/js/fractalworker.js +93 -0
  41. package/demos/js/genart.js +268 -0
  42. package/demos/js/gendream.js +209 -0
  43. package/demos/js/group.js +140 -0
  44. package/demos/js/info-toggle.js +25 -0
  45. package/demos/js/isometric.js +863 -0
  46. package/demos/js/kerr.js +1556 -0
  47. package/demos/js/lavalamp.js +590 -0
  48. package/demos/js/layout.js +354 -0
  49. package/demos/js/mondrian.js +285 -0
  50. package/demos/js/opacity.js +275 -0
  51. package/demos/js/painter.js +484 -0
  52. package/demos/js/particles-showcase.js +514 -0
  53. package/demos/js/particles.js +299 -0
  54. package/demos/js/patterns.js +397 -0
  55. package/demos/js/penrose/artifact.js +69 -0
  56. package/demos/js/penrose/blackhole.js +121 -0
  57. package/demos/js/penrose/constants.js +73 -0
  58. package/demos/js/penrose/game.js +943 -0
  59. package/demos/js/penrose/lore.js +278 -0
  60. package/demos/js/penrose/penrosescene.js +892 -0
  61. package/demos/js/penrose/ship.js +216 -0
  62. package/demos/js/penrose/sounds.js +211 -0
  63. package/demos/js/penrose/voidparticle.js +55 -0
  64. package/demos/js/penrose/voidscene.js +258 -0
  65. package/demos/js/penrose/voidship.js +144 -0
  66. package/demos/js/penrose/wormhole.js +46 -0
  67. package/demos/js/pipeline.js +555 -0
  68. package/demos/js/scene.js +304 -0
  69. package/demos/js/scenes.js +320 -0
  70. package/demos/js/schrodinger.js +410 -0
  71. package/demos/js/schwarzschild.js +1023 -0
  72. package/demos/js/shapes.js +628 -0
  73. package/demos/js/space/alien.js +171 -0
  74. package/demos/js/space/boom.js +98 -0
  75. package/demos/js/space/boss.js +353 -0
  76. package/demos/js/space/buff.js +73 -0
  77. package/demos/js/space/bullet.js +102 -0
  78. package/demos/js/space/constants.js +85 -0
  79. package/demos/js/space/game.js +1884 -0
  80. package/demos/js/space/hud.js +112 -0
  81. package/demos/js/space/laserbeam.js +179 -0
  82. package/demos/js/space/lightning.js +277 -0
  83. package/demos/js/space/minion.js +192 -0
  84. package/demos/js/space/missile.js +212 -0
  85. package/demos/js/space/player.js +430 -0
  86. package/demos/js/space/powerup.js +90 -0
  87. package/demos/js/space/starfield.js +58 -0
  88. package/demos/js/space/starpower.js +90 -0
  89. package/demos/js/spacetime.js +559 -0
  90. package/demos/js/svgtween.js +204 -0
  91. package/demos/js/tde/accretiondisk.js +418 -0
  92. package/demos/js/tde/blackhole.js +219 -0
  93. package/demos/js/tde/blackholescene.js +209 -0
  94. package/demos/js/tde/config.js +59 -0
  95. package/demos/js/tde/index.js +695 -0
  96. package/demos/js/tde/jets.js +290 -0
  97. package/demos/js/tde/lensedstarfield.js +147 -0
  98. package/demos/js/tde/tdestar.js +317 -0
  99. package/demos/js/tde/tidalstream.js +356 -0
  100. package/demos/js/tde_old/blackhole.obj.js +354 -0
  101. package/demos/js/tde_old/debris.obj.js +791 -0
  102. package/demos/js/tde_old/flare.obj.js +239 -0
  103. package/demos/js/tde_old/index.js +448 -0
  104. package/demos/js/tde_old/star.obj.js +812 -0
  105. package/demos/js/tiles.js +312 -0
  106. package/demos/js/tweendemo.js +79 -0
  107. package/demos/js/visibility.js +102 -0
  108. package/demos/kerr.html +28 -0
  109. package/demos/lavalamp.html +27 -0
  110. package/demos/layouts.html +37 -0
  111. package/demos/logo.svg +4 -0
  112. package/demos/loop.html +84 -0
  113. package/demos/mondrian.html +32 -0
  114. package/demos/og_image.png +0 -0
  115. package/demos/opacity.html +36 -0
  116. package/demos/painter.html +39 -0
  117. package/demos/particles-showcase.html +28 -0
  118. package/demos/particles.html +24 -0
  119. package/demos/patterns.html +33 -0
  120. package/demos/penrose-game.html +31 -0
  121. package/demos/pipeline.html +737 -0
  122. package/demos/scene.html +33 -0
  123. package/demos/scenes.html +96 -0
  124. package/demos/schrodinger.html +27 -0
  125. package/demos/schwarzschild.html +27 -0
  126. package/demos/shapes.html +16 -0
  127. package/demos/space.html +85 -0
  128. package/demos/spacetime.html +27 -0
  129. package/demos/svgtween.html +29 -0
  130. package/demos/tde.html +28 -0
  131. package/demos/tiles.html +28 -0
  132. package/demos/transforms.html +400 -0
  133. package/demos/tween.html +45 -0
  134. package/demos/visibility.html +33 -0
  135. package/disk_example.png +0 -0
  136. package/docs/README.md +222 -0
  137. package/docs/concepts/architecture-overview.md +204 -0
  138. package/docs/concepts/lifecycle.md +255 -0
  139. package/docs/concepts/rendering-pipeline.md +279 -0
  140. package/docs/concepts/tde-zorder.md +106 -0
  141. package/docs/concepts/two-layer-architecture.md +229 -0
  142. package/docs/getting-started/first-game.md +354 -0
  143. package/docs/getting-started/hello-world.md +269 -0
  144. package/docs/getting-started/installation.md +157 -0
  145. package/docs/modules/collision/README.md +453 -0
  146. package/docs/modules/fluent/README.md +1075 -0
  147. package/docs/modules/game/README.md +303 -0
  148. package/docs/modules/isometric-camera.md +210 -0
  149. package/docs/modules/isometric.md +275 -0
  150. package/docs/modules/painter/README.md +328 -0
  151. package/docs/modules/particle/README.md +559 -0
  152. package/docs/modules/shapes/README.md +221 -0
  153. package/docs/modules/shapes/base/euclidian.md +123 -0
  154. package/docs/modules/shapes/base/geometry2d.md +204 -0
  155. package/docs/modules/shapes/base/renderable.md +215 -0
  156. package/docs/modules/shapes/base/shape.md +262 -0
  157. package/docs/modules/shapes/base/transformable.md +243 -0
  158. package/docs/modules/shapes/hierarchy.md +218 -0
  159. package/docs/modules/state/README.md +577 -0
  160. package/docs/modules/util/README.md +99 -0
  161. package/docs/modules/util/camera3d.md +412 -0
  162. package/docs/modules/util/scene3d.md +395 -0
  163. package/index.html +17 -0
  164. package/jsdoc.json +50 -0
  165. package/package.json +55 -0
  166. package/readme.md +599 -0
  167. package/scripts/build-demo.js +69 -0
  168. package/scripts/bundle4llm.js +276 -0
  169. package/scripts/clearconsole.js +48 -0
  170. package/src/collision/collision-system.js +332 -0
  171. package/src/collision/collision.js +303 -0
  172. package/src/collision/index.js +10 -0
  173. package/src/fluent/fluent-game.js +430 -0
  174. package/src/fluent/fluent-go.js +1060 -0
  175. package/src/fluent/fluent-layer.js +152 -0
  176. package/src/fluent/fluent-scene.js +291 -0
  177. package/src/fluent/index.js +98 -0
  178. package/src/fluent/sketch.js +380 -0
  179. package/src/game/game.js +467 -0
  180. package/src/game/index.js +49 -0
  181. package/src/game/objects/go.js +220 -0
  182. package/src/game/objects/imagego.js +30 -0
  183. package/src/game/objects/index.js +54 -0
  184. package/src/game/objects/isometric-scene.js +260 -0
  185. package/src/game/objects/layoutscene.js +549 -0
  186. package/src/game/objects/scene.js +175 -0
  187. package/src/game/objects/scene3d.js +118 -0
  188. package/src/game/objects/text.js +221 -0
  189. package/src/game/objects/wrapper.js +232 -0
  190. package/src/game/pipeline.js +243 -0
  191. package/src/game/ui/button.js +396 -0
  192. package/src/game/ui/cursor.js +93 -0
  193. package/src/game/ui/fps.js +91 -0
  194. package/src/game/ui/index.js +5 -0
  195. package/src/game/ui/togglebutton.js +93 -0
  196. package/src/game/ui/tooltip.js +249 -0
  197. package/src/index.js +25 -0
  198. package/src/io/events.js +20 -0
  199. package/src/io/index.js +86 -0
  200. package/src/io/input.js +70 -0
  201. package/src/io/keys.js +152 -0
  202. package/src/io/mouse.js +61 -0
  203. package/src/io/touch.js +39 -0
  204. package/src/logger/debugtab.js +138 -0
  205. package/src/logger/index.js +3 -0
  206. package/src/logger/loggable.js +47 -0
  207. package/src/logger/logger.js +113 -0
  208. package/src/math/complex.js +37 -0
  209. package/src/math/constants.js +1 -0
  210. package/src/math/fractal.js +1271 -0
  211. package/src/math/gr.js +201 -0
  212. package/src/math/heat.js +202 -0
  213. package/src/math/index.js +12 -0
  214. package/src/math/noise.js +433 -0
  215. package/src/math/orbital.js +191 -0
  216. package/src/math/patterns.js +1339 -0
  217. package/src/math/penrose.js +259 -0
  218. package/src/math/quantum.js +115 -0
  219. package/src/math/random.js +195 -0
  220. package/src/math/tensor.js +1009 -0
  221. package/src/mixins/anchor.js +131 -0
  222. package/src/mixins/draggable.js +72 -0
  223. package/src/mixins/index.js +2 -0
  224. package/src/motion/bezier.js +132 -0
  225. package/src/motion/bounce.js +58 -0
  226. package/src/motion/easing.js +349 -0
  227. package/src/motion/float.js +130 -0
  228. package/src/motion/follow.js +125 -0
  229. package/src/motion/hop.js +52 -0
  230. package/src/motion/index.js +82 -0
  231. package/src/motion/motion.js +1124 -0
  232. package/src/motion/orbit.js +49 -0
  233. package/src/motion/oscillate.js +39 -0
  234. package/src/motion/parabolic.js +141 -0
  235. package/src/motion/patrol.js +147 -0
  236. package/src/motion/pendulum.js +48 -0
  237. package/src/motion/pulse.js +88 -0
  238. package/src/motion/shake.js +83 -0
  239. package/src/motion/spiral.js +144 -0
  240. package/src/motion/spring.js +150 -0
  241. package/src/motion/swing.js +47 -0
  242. package/src/motion/tween.js +92 -0
  243. package/src/motion/tweenetik.js +139 -0
  244. package/src/motion/waypoint.js +210 -0
  245. package/src/painter/index.js +8 -0
  246. package/src/painter/painter.colors.js +331 -0
  247. package/src/painter/painter.effects.js +230 -0
  248. package/src/painter/painter.img.js +229 -0
  249. package/src/painter/painter.js +295 -0
  250. package/src/painter/painter.lines.js +189 -0
  251. package/src/painter/painter.opacity.js +41 -0
  252. package/src/painter/painter.shapes.js +277 -0
  253. package/src/painter/painter.text.js +273 -0
  254. package/src/particle/emitter.js +124 -0
  255. package/src/particle/index.js +11 -0
  256. package/src/particle/particle-system.js +322 -0
  257. package/src/particle/particle.js +71 -0
  258. package/src/particle/updaters.js +170 -0
  259. package/src/shapes/arc.js +43 -0
  260. package/src/shapes/arrow.js +33 -0
  261. package/src/shapes/bezier.js +42 -0
  262. package/src/shapes/circle.js +62 -0
  263. package/src/shapes/clouds.js +56 -0
  264. package/src/shapes/cone.js +219 -0
  265. package/src/shapes/cross.js +70 -0
  266. package/src/shapes/cube.js +244 -0
  267. package/src/shapes/cylinder.js +254 -0
  268. package/src/shapes/diamond.js +48 -0
  269. package/src/shapes/euclidian.js +111 -0
  270. package/src/shapes/figure.js +115 -0
  271. package/src/shapes/geometry.js +220 -0
  272. package/src/shapes/group.js +375 -0
  273. package/src/shapes/heart.js +42 -0
  274. package/src/shapes/hexagon.js +26 -0
  275. package/src/shapes/image.js +192 -0
  276. package/src/shapes/index.js +111 -0
  277. package/src/shapes/line.js +29 -0
  278. package/src/shapes/pattern.js +90 -0
  279. package/src/shapes/pin.js +44 -0
  280. package/src/shapes/poly.js +31 -0
  281. package/src/shapes/prism.js +226 -0
  282. package/src/shapes/rect.js +35 -0
  283. package/src/shapes/renderable.js +333 -0
  284. package/src/shapes/ring.js +26 -0
  285. package/src/shapes/roundrect.js +95 -0
  286. package/src/shapes/shape.js +117 -0
  287. package/src/shapes/slice.js +26 -0
  288. package/src/shapes/sphere.js +314 -0
  289. package/src/shapes/sphere3d.js +537 -0
  290. package/src/shapes/square.js +15 -0
  291. package/src/shapes/star.js +99 -0
  292. package/src/shapes/svg.js +408 -0
  293. package/src/shapes/text.js +553 -0
  294. package/src/shapes/traceable.js +83 -0
  295. package/src/shapes/transform.js +357 -0
  296. package/src/shapes/transformable.js +172 -0
  297. package/src/shapes/triangle.js +26 -0
  298. package/src/sound/index.js +17 -0
  299. package/src/sound/sound.js +473 -0
  300. package/src/sound/synth.analyzer.js +149 -0
  301. package/src/sound/synth.effects.js +207 -0
  302. package/src/sound/synth.envelope.js +59 -0
  303. package/src/sound/synth.js +229 -0
  304. package/src/sound/synth.musical.js +160 -0
  305. package/src/sound/synth.noise.js +85 -0
  306. package/src/sound/synth.oscillators.js +293 -0
  307. package/src/state/index.js +10 -0
  308. package/src/state/state-machine.js +371 -0
  309. package/src/util/camera3d.js +438 -0
  310. package/src/util/index.js +6 -0
  311. package/src/util/isometric-camera.js +235 -0
  312. package/src/util/layout.js +317 -0
  313. package/src/util/position.js +147 -0
  314. package/src/util/tasks.js +47 -0
  315. package/src/util/zindex.js +287 -0
  316. package/src/webgl/index.js +9 -0
  317. package/src/webgl/shaders/sphere-shaders.js +994 -0
  318. package/src/webgl/webgl-renderer.js +388 -0
  319. package/tde.png +0 -0
  320. package/test/math/orbital.test.js +61 -0
  321. package/test/math/tensor.test.js +114 -0
  322. package/test/particle/emitter.test.js +204 -0
  323. package/test/particle/particle-system.test.js +310 -0
  324. package/test/particle/particle.test.js +116 -0
  325. package/test/particle/updaters.test.js +386 -0
  326. package/test/setup.js +120 -0
  327. package/test/shapes/euclidian.test.js +44 -0
  328. package/test/shapes/geometry.test.js +86 -0
  329. package/test/shapes/group.test.js +86 -0
  330. package/test/shapes/rectangle.test.js +64 -0
  331. package/test/shapes/transform.test.js +379 -0
  332. package/test/util/camera3d.test.js +428 -0
  333. package/test/util/scene3d.test.js +352 -0
  334. package/types/collision.d.ts +249 -0
  335. package/types/common.d.ts +155 -0
  336. package/types/game.d.ts +497 -0
  337. package/types/index.d.ts +309 -0
  338. package/types/io.d.ts +188 -0
  339. package/types/logger.d.ts +127 -0
  340. package/types/math.d.ts +268 -0
  341. package/types/mixins.d.ts +92 -0
  342. package/types/motion.d.ts +678 -0
  343. package/types/painter.d.ts +378 -0
  344. package/types/shapes.d.ts +864 -0
  345. package/types/sound.d.ts +672 -0
  346. package/types/state.d.ts +251 -0
  347. package/types/util.d.ts +253 -0
  348. package/vite.config.js +50 -0
  349. package/vitest.config.js +13 -0
@@ -0,0 +1,309 @@
1
+ /**
2
+ * GCanvas - TypeScript Definitions
3
+ * A minimalist 2D canvas rendering library with shapes, game engine, and animations.
4
+ *
5
+ * @version 0.0.3-alpha
6
+ * @see https://github.com/guinetik/gcanvas
7
+ * @license ISC
8
+ */
9
+
10
+ // ==========================================================================
11
+ // Common Types (re-exported for direct import)
12
+ // ==========================================================================
13
+
14
+ export {
15
+ // Basic types
16
+ Point,
17
+ Bounds,
18
+ EasingFunction,
19
+ EventCallback,
20
+
21
+ // Motion types
22
+ MotionCallbacks,
23
+ MotionState,
24
+ MotionResult,
25
+ MotionPositionResult,
26
+ MotionValueResult,
27
+ SpringResult,
28
+ WaypointResult,
29
+
30
+ // Layout types
31
+ LayoutOptions,
32
+ LayoutResult,
33
+
34
+ // Penrose types
35
+ RGBAColor,
36
+ PenroseTilingOptions
37
+ } from './common';
38
+
39
+ // ==========================================================================
40
+ // Logger Module
41
+ // ==========================================================================
42
+
43
+ export {
44
+ Logger,
45
+ Loggable,
46
+ LoggableOptions,
47
+ DebugTab
48
+ } from './logger';
49
+
50
+ // ==========================================================================
51
+ // Shapes Module
52
+ // ==========================================================================
53
+
54
+ export {
55
+ // Base classes
56
+ Euclidian,
57
+ EuclidianOptions,
58
+ Geometry2d,
59
+ Geometry2dOptions,
60
+ Traceable,
61
+ Renderable,
62
+ RenderableOptions,
63
+ Transformable,
64
+ TransformableOptions,
65
+ Transform,
66
+ TransformProps,
67
+ Shape,
68
+ ShapeOptions,
69
+ Group,
70
+ GroupOptions,
71
+
72
+ // Basic shapes
73
+ Circle,
74
+ Rectangle,
75
+ RoundedRectangle,
76
+ RoundedRectangleOptions,
77
+ Square,
78
+ Arc,
79
+ ArcOptions,
80
+ Line,
81
+ Triangle,
82
+ Star,
83
+ StarOptions,
84
+ Polygon,
85
+ Hexagon,
86
+ Diamond,
87
+ Cross,
88
+ Heart,
89
+ Ring,
90
+ RingOptions,
91
+ Cloud,
92
+ Pin,
93
+ Arrow,
94
+ PieSlice,
95
+ PieSliceOptions,
96
+ BezierShape,
97
+ SVGShape,
98
+ StickFigure,
99
+ PatternRectangle,
100
+ PatternRectangleOptions,
101
+ ImageShape,
102
+ ImageShapeOptions,
103
+
104
+ // 2.5D shapes
105
+ Cube,
106
+ CubeOptions,
107
+ Cylinder,
108
+ Cone,
109
+ Prism,
110
+ Sphere,
111
+
112
+ // Text shapes
113
+ TextShape,
114
+ TextShapeOptions,
115
+ OutlinedText,
116
+ OutlinedTextOptions,
117
+ WrappedText
118
+ } from './shapes';
119
+
120
+ // ==========================================================================
121
+ // Painter Module
122
+ // ==========================================================================
123
+
124
+ export {
125
+ Painter,
126
+ PainterColors,
127
+ PainterEffects,
128
+ PainterImages,
129
+ PainterLines,
130
+ PainterOpacity,
131
+ PainterShapes,
132
+ PainterText
133
+ } from './painter';
134
+
135
+ // ==========================================================================
136
+ // IO Module
137
+ // ==========================================================================
138
+
139
+ export {
140
+ EventEmitter,
141
+ Mouse,
142
+ Keys,
143
+ Touch,
144
+ Input
145
+ } from './io';
146
+
147
+ // ==========================================================================
148
+ // Game Module
149
+ // ==========================================================================
150
+
151
+ export {
152
+ Game,
153
+ Pipeline,
154
+ GameObject,
155
+ GameObjectOptions,
156
+ Scene,
157
+ SceneOptions,
158
+ GameObjectShapeWrapper,
159
+ ShapeGOFactory,
160
+ Text,
161
+ TextGameObjectOptions,
162
+ ImageGo,
163
+
164
+ // Layout scenes
165
+ LayoutScene,
166
+ HorizontalLayout,
167
+ VerticalLayout,
168
+ TileLayout,
169
+ GridLayout,
170
+
171
+ // UI components
172
+ Button,
173
+ ButtonOptions,
174
+ ToggleButton,
175
+ Cursor,
176
+ CursorOptions,
177
+ FPSCounter
178
+ } from './game';
179
+
180
+ // ==========================================================================
181
+ // Motion Module
182
+ // ==========================================================================
183
+
184
+ export {
185
+ Easing,
186
+ Tween,
187
+ Tweenetik,
188
+ TweenetikOptions,
189
+ Motion,
190
+ SpringParams,
191
+ PositionTarget
192
+ } from './motion';
193
+
194
+ // ==========================================================================
195
+ // Math Module
196
+ // ==========================================================================
197
+
198
+ export {
199
+ Random,
200
+ Complex,
201
+ Fractals,
202
+ Patterns,
203
+ Noise,
204
+ generatePenroseTilingPixels
205
+ } from './math';
206
+
207
+ // ==========================================================================
208
+ // Util Module
209
+ // ==========================================================================
210
+
211
+ export {
212
+ ZOrderedCollection,
213
+ ZOrderedCollectionOptions,
214
+ Position,
215
+ TaskManager,
216
+
217
+ // Layout types
218
+ LayoutItem,
219
+ ApplyLayoutOptions,
220
+ LinearLayoutOptions,
221
+ TileLayoutOptions,
222
+ GridLayoutOptions,
223
+
224
+ // Layout functions
225
+ applyLayout,
226
+ horizontalLayout,
227
+ verticalLayout,
228
+ tileLayout,
229
+ gridLayout
230
+ } from './util';
231
+
232
+ // ==========================================================================
233
+ // Mixins Module
234
+ // ==========================================================================
235
+
236
+ export {
237
+ applyDraggable,
238
+ DraggableOptions,
239
+ applyAnchor,
240
+ AnchorOptions
241
+ } from './mixins';
242
+
243
+ // ==========================================================================
244
+ // Sound Module
245
+ // ==========================================================================
246
+
247
+ export {
248
+ // Main classes
249
+ Synth,
250
+ Sound,
251
+
252
+ // Sub-modules
253
+ SynthOscillators,
254
+ SynthEffects,
255
+ SynthEnvelope,
256
+ SynthNoise,
257
+ SynthMusical,
258
+ SynthAnalyzer,
259
+
260
+ // Types
261
+ SynthOptions,
262
+ ToneOptions,
263
+ ContinuousOscillatorController,
264
+ DelayEffect,
265
+ TremoloEffect,
266
+ DroneController,
267
+ EnvelopeOptions,
268
+ EnvelopePresets,
269
+ ScaleName,
270
+ ChordType
271
+ } from './sound';
272
+
273
+ // ==========================================================================
274
+ // Collision Module
275
+ // ==========================================================================
276
+
277
+ export {
278
+ // Main classes
279
+ Collision,
280
+ CollisionSystem,
281
+
282
+ // Types
283
+ CollisionCircle,
284
+ LineSegment,
285
+ SweepResult,
286
+ OverlapResult,
287
+ MTVResult,
288
+ Collidable,
289
+ CollisionPairOptions,
290
+ CollisionCallback
291
+ } from './collision';
292
+
293
+ // ==========================================================================
294
+ // State Module
295
+ // ==========================================================================
296
+
297
+ export {
298
+ // Main class
299
+ StateMachine,
300
+
301
+ // Types
302
+ StateTransition,
303
+ StateEvents,
304
+ StateConfig,
305
+ States,
306
+ StateMachineOptions,
307
+ PhaseConfig,
308
+ SequenceOptions
309
+ } from './state';
package/types/io.d.ts ADDED
@@ -0,0 +1,188 @@
1
+ /**
2
+ * GCanvas IO Module
3
+ * Input handling and event system.
4
+ * @module io
5
+ */
6
+
7
+ import { EventCallback } from './common';
8
+ import type { Game } from './game';
9
+
10
+ // ==========================================================================
11
+ // Event Emitter
12
+ // ==========================================================================
13
+
14
+ /**
15
+ * Core event management system.
16
+ * Provides publish/subscribe pattern for custom events.
17
+ *
18
+ * @example
19
+ * const emitter = new EventEmitter();
20
+ * emitter.on('explosion', (data) => console.log('Boom!', data));
21
+ * emitter.emit('explosion', { x: 100, y: 200 });
22
+ */
23
+ export class EventEmitter {
24
+ /** Map of event types to listener arrays */
25
+ listeners: Record<string, EventCallback[]>;
26
+
27
+ constructor();
28
+
29
+ /**
30
+ * Subscribe to an event.
31
+ * @param type - Event type/name
32
+ * @param callback - Handler function
33
+ */
34
+ on<T = any>(type: string, callback: EventCallback<T>): void;
35
+
36
+ /**
37
+ * Unsubscribe from an event.
38
+ * @param type - Event type/name
39
+ * @param callback - Handler function to remove
40
+ */
41
+ off<T = any>(type: string, callback: EventCallback<T>): void;
42
+
43
+ /**
44
+ * Emit an event to all subscribers.
45
+ * @param type - Event type/name
46
+ * @param payload - Data to pass to handlers
47
+ */
48
+ emit<T = any>(type: string, payload?: T): void;
49
+ }
50
+
51
+ // ==========================================================================
52
+ // Mouse Input
53
+ // ==========================================================================
54
+
55
+ /**
56
+ * Mouse input tracking.
57
+ * Static class that tracks mouse position and button state.
58
+ *
59
+ * @example
60
+ * // After initialization
61
+ * if (Mouse.isDown) {
62
+ * console.log(`Mouse clicked at ${Mouse.x}, ${Mouse.y}`);
63
+ * }
64
+ */
65
+ export class Mouse {
66
+ /** Current mouse X position relative to canvas */
67
+ static x: number;
68
+ /** Current mouse Y position relative to canvas */
69
+ static y: number;
70
+ /** Whether primary mouse button is pressed */
71
+ static isDown: boolean;
72
+
73
+ /**
74
+ * Initialize mouse tracking for a game instance.
75
+ * @param game - Game instance to track mouse on
76
+ */
77
+ static init(game: Game): void;
78
+ }
79
+
80
+ // ==========================================================================
81
+ // Keyboard Input
82
+ // ==========================================================================
83
+
84
+ /**
85
+ * Keyboard input with key mapping.
86
+ * Static class that tracks key states with named constants.
87
+ *
88
+ * @example
89
+ * if (Keys.isDown(Keys.SPACE)) {
90
+ * player.jump();
91
+ * }
92
+ * if (Keys.isDown('a') || Keys.isDown(Keys.LEFT)) {
93
+ * player.moveLeft();
94
+ * }
95
+ */
96
+ export class Keys {
97
+ // Key constants
98
+ /** Left arrow key */
99
+ static readonly LEFT: string;
100
+ /** Right arrow key */
101
+ static readonly RIGHT: string;
102
+ /** Up arrow key */
103
+ static readonly UP: string;
104
+ /** Down arrow key */
105
+ static readonly DOWN: string;
106
+ /** Spacebar */
107
+ static readonly SPACE: string;
108
+ /** Enter key */
109
+ static readonly ENTER: string;
110
+ /** Escape key */
111
+ static readonly ESCAPE: string;
112
+ /** Shift key */
113
+ static readonly SHIFT: string;
114
+ /** Control key */
115
+ static readonly CTRL: string;
116
+ /** Alt key */
117
+ static readonly ALT: string;
118
+
119
+ /**
120
+ * Initialize keyboard tracking for a game instance.
121
+ * @param game - Game instance
122
+ */
123
+ static init(game: Game): void;
124
+
125
+ /**
126
+ * Check if a key is currently pressed.
127
+ * @param key - Key code or Key constant
128
+ * @returns Whether the key is down
129
+ */
130
+ static isDown(key: string): boolean;
131
+ }
132
+
133
+ // ==========================================================================
134
+ // Touch Input
135
+ // ==========================================================================
136
+
137
+ /**
138
+ * Touch input handling for mobile devices.
139
+ * Static class that tracks touch position and state.
140
+ *
141
+ * @example
142
+ * if (Touch.isDown) {
143
+ * console.log(`Touch at ${Touch.x}, ${Touch.y}`);
144
+ * }
145
+ */
146
+ export class Touch {
147
+ /** Current touch X position relative to canvas */
148
+ static x: number;
149
+ /** Current touch Y position relative to canvas */
150
+ static y: number;
151
+ /** Whether screen is being touched */
152
+ static isDown: boolean;
153
+
154
+ /**
155
+ * Initialize touch tracking for a game instance.
156
+ * @param game - Game instance
157
+ */
158
+ static init(game: Game): void;
159
+ }
160
+
161
+ // ==========================================================================
162
+ // Unified Input
163
+ // ==========================================================================
164
+
165
+ /**
166
+ * Unified input system (mouse + touch normalization).
167
+ * Provides a single interface for both mouse and touch input.
168
+ *
169
+ * @example
170
+ * // Works with both mouse and touch
171
+ * if (Input.isDown) {
172
+ * console.log(`Pointer at ${Input.x}, ${Input.y}`);
173
+ * }
174
+ */
175
+ export class Input {
176
+ /** Current pointer X position (mouse or touch) */
177
+ static x: number;
178
+ /** Current pointer Y position (mouse or touch) */
179
+ static y: number;
180
+ /** Whether pointer is active (mouse down or touching) */
181
+ static isDown: boolean;
182
+
183
+ /**
184
+ * Initialize unified input for a game instance.
185
+ * @param game - Game instance
186
+ */
187
+ static init(game: Game): void;
188
+ }
@@ -0,0 +1,127 @@
1
+ /**
2
+ * GCanvas Logger Module
3
+ * Logging utilities and debug visualization.
4
+ * @module logger
5
+ */
6
+
7
+ // ==========================================================================
8
+ // Logger Class
9
+ // ==========================================================================
10
+
11
+ /**
12
+ * Logger class for debugging and console output.
13
+ * Provides named loggers with configurable levels and output.
14
+ */
15
+ export class Logger {
16
+ /** Debug log level */
17
+ static DEBUG: number;
18
+ /** Info log level */
19
+ static INFO: number;
20
+ /** Warning log level */
21
+ static WARN: number;
22
+ /** Error log level */
23
+ static ERROR: number;
24
+
25
+ /**
26
+ * Creates a new Logger instance.
27
+ * @param name - The name/category for this logger
28
+ */
29
+ constructor(name: string);
30
+
31
+ /** Log a debug message */
32
+ log(...args: any[]): void;
33
+ /** Log an info message */
34
+ info(...args: any[]): void;
35
+ /** Log a warning message */
36
+ warn(...args: any[]): void;
37
+ /** Log an error message */
38
+ error(...args: any[]): void;
39
+ /** Start a collapsed console group */
40
+ groupCollapsed(label: string): void;
41
+ /** End a console group */
42
+ groupEnd(): void;
43
+ /** Start a timer with the given label */
44
+ time(label: string): void;
45
+ /** End and log a timer */
46
+ timeEnd(label: string): void;
47
+
48
+ /**
49
+ * Get or create a logger with the given name.
50
+ * @param name - Logger name/category
51
+ */
52
+ static getLogger(name: string): Logger;
53
+ /** Set the global log level */
54
+ static setLevel(level: number): void;
55
+ /** Set the output target (console or custom object) */
56
+ static setOutput(output: Console | object): void;
57
+ /** Enable all loggers */
58
+ static enable(): void;
59
+ /** Disable all loggers */
60
+ static disable(): void;
61
+ /** Enable all loggers (alias) */
62
+ static enableAll(): void;
63
+ /** Disable all loggers (alias) */
64
+ static disableAll(): void;
65
+ /** Enable a specific logger by name */
66
+ static enableFor(name: string): void;
67
+ /** Disable a specific logger by name */
68
+ static disableFor(name: string): void;
69
+ }
70
+
71
+ // ==========================================================================
72
+ // Loggable Base Class
73
+ // ==========================================================================
74
+
75
+ /** Options for Loggable constructor */
76
+ export interface LoggableOptions {
77
+ /** Name for the logger instance */
78
+ name?: string;
79
+ }
80
+
81
+ /**
82
+ * Base class that provides logging capabilities to subclasses.
83
+ * Extend this class to add automatic logging support.
84
+ */
85
+ export class Loggable {
86
+ /** Instance name */
87
+ name: string;
88
+ /** @internal Logger instance */
89
+ protected _logger: Logger;
90
+
91
+ /**
92
+ * Creates a new Loggable instance.
93
+ * @param options - Configuration options
94
+ */
95
+ constructor(options?: LoggableOptions);
96
+
97
+ /** Get the logger instance for this object */
98
+ get logger(): Logger;
99
+
100
+ /**
101
+ * Log a trace message with optional custom text.
102
+ * @param msg - Optional message to include
103
+ */
104
+ trace(msg?: string): void;
105
+
106
+ /**
107
+ * Get or create a logger for this instance.
108
+ * @param options - Logger options
109
+ * @internal
110
+ */
111
+ protected getLogger(options?: LoggableOptions): Logger;
112
+ }
113
+
114
+ // ==========================================================================
115
+ // Debug Tab
116
+ // ==========================================================================
117
+
118
+ /**
119
+ * Debug visualization panel for runtime inspection.
120
+ * Singleton class that provides on-screen debug information.
121
+ */
122
+ export class DebugTab {
123
+ /**
124
+ * Get the singleton DebugTab instance.
125
+ */
126
+ static getInstance(): DebugTab;
127
+ }