@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.
- package/dist/gcanvas.es.js +25656 -0
- package/dist/gcanvas.es.min.js +1 -0
- package/dist/gcanvas.umd.js +1 -0
- package/dist/gcanvas.umd.min.js +1 -0
- package/package.json +23 -6
- package/src/game/objects/index.js +1 -0
- package/src/game/objects/spritesheet.js +260 -0
- package/src/game/ui/theme.js +6 -0
- package/src/io/keys.js +9 -1
- package/src/math/boolean.js +481 -0
- package/src/math/index.js +1 -0
- package/.github/workflows/release.yaml +0 -70
- package/.jshintrc +0 -4
- package/.vscode/settings.json +0 -22
- package/CLAUDE.md +0 -310
- package/blackhole.jpg +0 -0
- package/demo.png +0 -0
- package/demos/CNAME +0 -1
- package/demos/animations.html +0 -31
- package/demos/basic.html +0 -38
- package/demos/baskara.html +0 -31
- package/demos/bezier.html +0 -35
- package/demos/beziersignature.html +0 -29
- package/demos/blackhole.html +0 -28
- package/demos/blob.html +0 -35
- package/demos/coordinates.html +0 -698
- package/demos/cube3d.html +0 -23
- package/demos/demos.css +0 -303
- package/demos/dino.html +0 -42
- package/demos/easing.html +0 -28
- package/demos/events.html +0 -195
- package/demos/fluent.html +0 -647
- package/demos/fluid-simple.html +0 -22
- package/demos/fluid.html +0 -37
- package/demos/fractals.html +0 -36
- package/demos/gameobjects.html +0 -626
- package/demos/genart.html +0 -26
- package/demos/gendream.html +0 -26
- package/demos/group.html +0 -36
- package/demos/home.html +0 -587
- package/demos/index.html +0 -376
- package/demos/isometric.html +0 -34
- package/demos/js/animations.js +0 -452
- package/demos/js/basic.js +0 -204
- package/demos/js/baskara.js +0 -751
- package/demos/js/bezier.js +0 -692
- package/demos/js/beziersignature.js +0 -241
- package/demos/js/blackhole/accretiondisk.obj.js +0 -379
- package/demos/js/blackhole/blackhole.obj.js +0 -318
- package/demos/js/blackhole/index.js +0 -409
- package/demos/js/blackhole/particle.js +0 -56
- package/demos/js/blackhole/starfield.obj.js +0 -218
- package/demos/js/blob.js +0 -2276
- package/demos/js/coordinates.js +0 -840
- package/demos/js/cube3d.js +0 -789
- package/demos/js/dino.js +0 -1420
- package/demos/js/easing.js +0 -477
- package/demos/js/fluent.js +0 -183
- package/demos/js/fluid-simple.js +0 -253
- package/demos/js/fluid.js +0 -527
- package/demos/js/fractals.js +0 -931
- package/demos/js/fractalworker.js +0 -93
- package/demos/js/gameobjects.js +0 -176
- package/demos/js/genart.js +0 -268
- package/demos/js/gendream.js +0 -209
- package/demos/js/group.js +0 -140
- package/demos/js/info-toggle.js +0 -25
- package/demos/js/isometric.js +0 -863
- package/demos/js/kerr.js +0 -1556
- package/demos/js/lavalamp.js +0 -590
- package/demos/js/layout.js +0 -354
- package/demos/js/mondrian.js +0 -285
- package/demos/js/opacity.js +0 -275
- package/demos/js/painter.js +0 -484
- package/demos/js/particles-showcase.js +0 -514
- package/demos/js/particles.js +0 -299
- package/demos/js/patterns.js +0 -397
- package/demos/js/penrose/artifact.js +0 -69
- package/demos/js/penrose/blackhole.js +0 -121
- package/demos/js/penrose/constants.js +0 -73
- package/demos/js/penrose/game.js +0 -943
- package/demos/js/penrose/lore.js +0 -278
- package/demos/js/penrose/penrosescene.js +0 -892
- package/demos/js/penrose/ship.js +0 -216
- package/demos/js/penrose/sounds.js +0 -211
- package/demos/js/penrose/voidparticle.js +0 -55
- package/demos/js/penrose/voidscene.js +0 -258
- package/demos/js/penrose/voidship.js +0 -144
- package/demos/js/penrose/wormhole.js +0 -46
- package/demos/js/pipeline.js +0 -555
- package/demos/js/plane3d.js +0 -256
- package/demos/js/platformer.js +0 -1579
- package/demos/js/scene.js +0 -304
- package/demos/js/scenes.js +0 -320
- package/demos/js/schrodinger.js +0 -410
- package/demos/js/schwarzschild.js +0 -1023
- package/demos/js/shapes.js +0 -628
- package/demos/js/space/alien.js +0 -171
- package/demos/js/space/boom.js +0 -98
- package/demos/js/space/boss.js +0 -353
- package/demos/js/space/buff.js +0 -73
- package/demos/js/space/bullet.js +0 -102
- package/demos/js/space/constants.js +0 -85
- package/demos/js/space/game.js +0 -1884
- package/demos/js/space/hud.js +0 -112
- package/demos/js/space/laserbeam.js +0 -179
- package/demos/js/space/lightning.js +0 -277
- package/demos/js/space/minion.js +0 -192
- package/demos/js/space/missile.js +0 -212
- package/demos/js/space/player.js +0 -430
- package/demos/js/space/powerup.js +0 -90
- package/demos/js/space/starfield.js +0 -58
- package/demos/js/space/starpower.js +0 -90
- package/demos/js/spacetime.js +0 -559
- package/demos/js/sphere3d.js +0 -229
- package/demos/js/sprite.js +0 -473
- package/demos/js/svgtween.js +0 -204
- package/demos/js/tde/accretiondisk.js +0 -471
- package/demos/js/tde/blackhole.js +0 -219
- package/demos/js/tde/blackholescene.js +0 -209
- package/demos/js/tde/config.js +0 -59
- package/demos/js/tde/index.js +0 -820
- package/demos/js/tde/jets.js +0 -290
- package/demos/js/tde/lensedstarfield.js +0 -154
- package/demos/js/tde/tdestar.js +0 -297
- package/demos/js/tde/tidalstream.js +0 -372
- package/demos/js/tde_old/blackhole.obj.js +0 -354
- package/demos/js/tde_old/debris.obj.js +0 -791
- package/demos/js/tde_old/flare.obj.js +0 -239
- package/demos/js/tde_old/index.js +0 -448
- package/demos/js/tde_old/star.obj.js +0 -812
- package/demos/js/tiles.js +0 -312
- package/demos/js/tweendemo.js +0 -79
- package/demos/js/visibility.js +0 -102
- package/demos/kerr.html +0 -28
- package/demos/lavalamp.html +0 -27
- package/demos/layouts.html +0 -37
- package/demos/logo.svg +0 -4
- package/demos/loop.html +0 -84
- package/demos/mondrian.html +0 -32
- package/demos/og_image.png +0 -0
- package/demos/opacity.html +0 -36
- package/demos/painter.html +0 -39
- package/demos/particles-showcase.html +0 -28
- package/demos/particles.html +0 -24
- package/demos/patterns.html +0 -33
- package/demos/penrose-game.html +0 -31
- package/demos/pipeline.html +0 -737
- package/demos/plane3d.html +0 -24
- package/demos/platformer.html +0 -43
- package/demos/scene.html +0 -33
- package/demos/scenes.html +0 -96
- package/demos/schrodinger.html +0 -27
- package/demos/schwarzschild.html +0 -27
- package/demos/shapes.html +0 -16
- package/demos/space.html +0 -85
- package/demos/spacetime.html +0 -27
- package/demos/sphere3d.html +0 -24
- package/demos/sprite.html +0 -18
- package/demos/svgtween.html +0 -29
- package/demos/tde.html +0 -28
- package/demos/tiles.html +0 -28
- package/demos/transforms.html +0 -400
- package/demos/tween.html +0 -45
- package/demos/visibility.html +0 -33
- package/docs/README.md +0 -230
- package/docs/api/FluidSystem.md +0 -173
- package/docs/concepts/architecture-overview.md +0 -204
- package/docs/concepts/coordinate-system.md +0 -384
- package/docs/concepts/lifecycle.md +0 -255
- package/docs/concepts/rendering-pipeline.md +0 -279
- package/docs/concepts/shapes-vs-gameobjects.md +0 -187
- package/docs/concepts/tde-zorder.md +0 -106
- package/docs/concepts/two-layer-architecture.md +0 -229
- package/docs/fluid-dynamics.md +0 -99
- package/docs/getting-started/first-game.md +0 -354
- package/docs/getting-started/hello-world.md +0 -269
- package/docs/getting-started/installation.md +0 -175
- package/docs/modules/collision/README.md +0 -453
- package/docs/modules/fluent/README.md +0 -1075
- package/docs/modules/game/README.md +0 -303
- package/docs/modules/isometric-camera.md +0 -210
- package/docs/modules/isometric.md +0 -275
- package/docs/modules/painter/README.md +0 -328
- package/docs/modules/particle/README.md +0 -559
- package/docs/modules/shapes/README.md +0 -221
- package/docs/modules/shapes/base/euclidian.md +0 -123
- package/docs/modules/shapes/base/geometry2d.md +0 -204
- package/docs/modules/shapes/base/renderable.md +0 -215
- package/docs/modules/shapes/base/shape.md +0 -262
- package/docs/modules/shapes/base/transformable.md +0 -243
- package/docs/modules/shapes/hierarchy.md +0 -218
- package/docs/modules/state/README.md +0 -577
- package/docs/modules/util/README.md +0 -99
- package/docs/modules/util/camera3d.md +0 -412
- package/docs/modules/util/scene3d.md +0 -395
- package/index.html +0 -17
- package/jsdoc.json +0 -50
- package/scripts/build-demo.js +0 -69
- package/scripts/bundle4llm.js +0 -276
- package/scripts/clearconsole.js +0 -48
- package/test/math/orbital.test.js +0 -61
- package/test/math/tensor.test.js +0 -114
- package/test/particle/emitter.test.js +0 -204
- package/test/particle/particle-system.test.js +0 -310
- package/test/particle/particle.test.js +0 -116
- package/test/particle/updaters.test.js +0 -386
- package/test/setup.js +0 -120
- package/test/shapes/euclidian.test.js +0 -44
- package/test/shapes/geometry.test.js +0 -86
- package/test/shapes/group.test.js +0 -86
- package/test/shapes/rectangle.test.js +0 -64
- package/test/shapes/transform.test.js +0 -379
- package/test/util/camera3d.test.js +0 -428
- package/test/util/scene3d.test.js +0 -352
- package/vite.config.js +0 -50
- package/vitest.config.js +0 -13
|
@@ -1,218 +0,0 @@
|
|
|
1
|
-
# Shape Hierarchy
|
|
2
|
-
|
|
3
|
-
> Visual diagram and explanation of the shape inheritance chain.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
Every visual element in GCanvas inherits from a chain of base classes. Each layer adds specific functionality, building from simple spatial properties to full rendering capabilities.
|
|
8
|
-
|
|
9
|
-
## Full Hierarchy Diagram
|
|
10
|
-
|
|
11
|
-
```
|
|
12
|
-
┌─────────────────────────────────────────────────────────────────────────┐
|
|
13
|
-
│ SHAPE HIERARCHY │
|
|
14
|
-
├─────────────────────────────────────────────────────────────────────────┤
|
|
15
|
-
│ │
|
|
16
|
-
│ Loggable (from logger module) │
|
|
17
|
-
│ │ │
|
|
18
|
-
│ ▼ │
|
|
19
|
-
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
20
|
-
│ │ Euclidian │ │
|
|
21
|
-
│ │ ├── x, y (center position) │ │
|
|
22
|
-
│ │ ├── width, height (dimensions) │ │
|
|
23
|
-
│ │ ├── debug (enable debug rendering) │ │
|
|
24
|
-
│ │ └── debugColor (debug outline color) │ │
|
|
25
|
-
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
26
|
-
│ │ │
|
|
27
|
-
│ ▼ │
|
|
28
|
-
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
29
|
-
│ │ Geometry2d │ │
|
|
30
|
-
│ │ ├── getBounds() (bounding box with caching) │ │
|
|
31
|
-
│ │ ├── calculateBounds() (override for custom bounds) │ │
|
|
32
|
-
│ │ ├── getLocalPosition() (top-left corner) │ │
|
|
33
|
-
│ │ ├── minX, maxX, minY, maxY (constraints) │ │
|
|
34
|
-
│ │ ├── crisp (pixel-perfect rounding) │ │
|
|
35
|
-
│ │ └── markBoundsDirty() (trigger recalculation) │ │
|
|
36
|
-
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
37
|
-
│ │ │
|
|
38
|
-
│ ▼ │
|
|
39
|
-
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
40
|
-
│ │ Traceable │ │
|
|
41
|
-
│ │ └── drawDebug() (debug visualization) │ │
|
|
42
|
-
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
43
|
-
│ │ │
|
|
44
|
-
│ ▼ │
|
|
45
|
-
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
46
|
-
│ │ Renderable │ │
|
|
47
|
-
│ │ ├── visible (show/hide) │ │
|
|
48
|
-
│ │ ├── opacity (transparency 0-1) │ │
|
|
49
|
-
│ │ ├── active (receive updates) │ │
|
|
50
|
-
│ │ ├── zIndex (stacking order) │ │
|
|
51
|
-
│ │ ├── blendMode (canvas composite operation) │ │
|
|
52
|
-
│ │ ├── shadowColor/Blur/OffsetX/OffsetY │ │
|
|
53
|
-
│ │ ├── render() (main render lifecycle) │ │
|
|
54
|
-
│ │ └── update(dt) (per-frame update) │ │
|
|
55
|
-
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
56
|
-
│ │ │
|
|
57
|
-
│ ▼ │
|
|
58
|
-
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
59
|
-
│ │ Transformable │ │
|
|
60
|
-
│ │ ├── rotation (angle in degrees) │ │
|
|
61
|
-
│ │ ├── scaleX, scaleY (scale factors) │ │
|
|
62
|
-
│ │ ├── applyTransforms() (apply to canvas context) │ │
|
|
63
|
-
│ │ └── calculateBounds() (transformed bounding box) │ │
|
|
64
|
-
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
65
|
-
│ │ │
|
|
66
|
-
│ ▼ │
|
|
67
|
-
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
68
|
-
│ │ Shape │ │
|
|
69
|
-
│ │ ├── color (fill color) │ │
|
|
70
|
-
│ │ ├── stroke (stroke color) │ │
|
|
71
|
-
│ │ ├── lineWidth (stroke width) │ │
|
|
72
|
-
│ │ ├── lineJoin (miter/round/bevel) │ │
|
|
73
|
-
│ │ ├── lineCap (butt/round/square) │ │
|
|
74
|
-
│ │ └── miterLimit (miter length limit) │ │
|
|
75
|
-
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
76
|
-
│ │ │
|
|
77
|
-
│ ├───────────────────────────────────────────────────────────┐ │
|
|
78
|
-
│ │ │ │
|
|
79
|
-
│ ▼ ▼ │
|
|
80
|
-
│ ┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐ │
|
|
81
|
-
│ │ Circle │ │ Rectangle │ │ Star │ │
|
|
82
|
-
│ │ ├── radius │ │ ├── cornerRadius │ │ ├── points │ │
|
|
83
|
-
│ │ └── draw() │ │ └── draw() │ │ ├── innerRadius │ │
|
|
84
|
-
│ └───────────────────┘ └───────────────────┘ │ └── draw() │ │
|
|
85
|
-
│ └───────────────────┘ │
|
|
86
|
-
│ ▼ │
|
|
87
|
-
│ ┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐ │
|
|
88
|
-
│ │ Triangle │ │ Polygon │ │ Line │ │
|
|
89
|
-
│ │ └── draw() │ │ ├── sides │ │ ├── x2, y2 │ │
|
|
90
|
-
│ └───────────────────┘ │ └── draw() │ │ └── draw() │ │
|
|
91
|
-
│ └───────────────────┘ └───────────────────┘ │
|
|
92
|
-
│ │
|
|
93
|
-
│ ... and 30+ more concrete shapes │
|
|
94
|
-
│ │
|
|
95
|
-
├─────────────────────────────────────────────────────────────────────────┤
|
|
96
|
-
│ │
|
|
97
|
-
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
98
|
-
│ │ Group (extends Transformable, not Shape) │ │
|
|
99
|
-
│ │ ├── children (array of shapes) │ │
|
|
100
|
-
│ │ ├── add(shape) (add child) │ │
|
|
101
|
-
│ │ ├── remove(shape) (remove child) │ │
|
|
102
|
-
│ │ └── draw() (render all children) │ │
|
|
103
|
-
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
104
|
-
│ │
|
|
105
|
-
└─────────────────────────────────────────────────────────────────────────┘
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
## Layer Responsibilities
|
|
109
|
-
|
|
110
|
-
| Layer | Responsibility | Key Methods/Properties |
|
|
111
|
-
|-------|---------------|----------------------|
|
|
112
|
-
| **Euclidian** | Spatial existence | `x`, `y`, `width`, `height` |
|
|
113
|
-
| **Geometry2d** | Bounding & constraints | `getBounds()`, `minX/maxX/minY/maxY` |
|
|
114
|
-
| **Traceable** | Debug visualization | `drawDebug()` |
|
|
115
|
-
| **Renderable** | Render lifecycle | `render()`, `visible`, `opacity` |
|
|
116
|
-
| **Transformable** | Canvas transforms | `rotation`, `scaleX`, `scaleY` |
|
|
117
|
-
| **Shape** | Canvas styling | `color`, `stroke`, `lineWidth` |
|
|
118
|
-
|
|
119
|
-
## Why This Hierarchy?
|
|
120
|
-
|
|
121
|
-
### Separation of Concerns
|
|
122
|
-
|
|
123
|
-
Each layer handles one aspect:
|
|
124
|
-
|
|
125
|
-
1. **Euclidian**: "Where am I and how big?"
|
|
126
|
-
2. **Geometry2d**: "What's my bounding box?"
|
|
127
|
-
3. **Traceable**: "How do I debug?"
|
|
128
|
-
4. **Renderable**: "Am I visible? How do I draw?"
|
|
129
|
-
5. **Transformable**: "Am I rotated or scaled?"
|
|
130
|
-
6. **Shape**: "What color am I?"
|
|
131
|
-
|
|
132
|
-
### Extensibility
|
|
133
|
-
|
|
134
|
-
You can extend at any level:
|
|
135
|
-
|
|
136
|
-
```js
|
|
137
|
-
// Custom shape with fill/stroke
|
|
138
|
-
class CustomShape extends Shape {
|
|
139
|
-
draw() {
|
|
140
|
-
super.draw(); // Apply transforms
|
|
141
|
-
// Custom drawing logic
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
// Custom transformable without styling
|
|
146
|
-
class CustomTransformable extends Transformable {
|
|
147
|
-
draw() {
|
|
148
|
-
super.draw(); // Apply transforms
|
|
149
|
-
// Custom logic without fill/stroke
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
### Composition
|
|
155
|
-
|
|
156
|
-
Group allows composing without deep inheritance:
|
|
157
|
-
|
|
158
|
-
```js
|
|
159
|
-
const face = new Group({ x: 400, y: 300 });
|
|
160
|
-
face.add(new Circle(100, { color: '#ffd93d' })); // Face
|
|
161
|
-
face.add(new Circle(15, { x: -30, y: -20, color: '#333' })); // Left eye
|
|
162
|
-
face.add(new Circle(15, { x: 30, y: -20, color: '#333' })); // Right eye
|
|
163
|
-
face.add(new Arc({ y: 30, width: 60, color: '#333' })); // Smile
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
## Render Flow
|
|
167
|
-
|
|
168
|
-
When `shape.draw()` is called:
|
|
169
|
-
|
|
170
|
-
```
|
|
171
|
-
shape.draw()
|
|
172
|
-
│
|
|
173
|
-
├─► Transformable.draw()
|
|
174
|
-
│ └─► applyTransforms()
|
|
175
|
-
│ ├─► Painter.rotate(rotation)
|
|
176
|
-
│ └─► Painter.scale(scaleX, scaleY)
|
|
177
|
-
│
|
|
178
|
-
└─► ConcreteShape.draw() (Circle, Rectangle, etc.)
|
|
179
|
-
└─► Painter.shapes.fillCircle(...)
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
When `shape.render()` is called (full lifecycle):
|
|
183
|
-
|
|
184
|
-
```
|
|
185
|
-
shape.render()
|
|
186
|
-
│
|
|
187
|
-
├─► Check visible && opacity > 0
|
|
188
|
-
│
|
|
189
|
-
├─► Painter.save()
|
|
190
|
-
│
|
|
191
|
-
├─► Set blend mode
|
|
192
|
-
│
|
|
193
|
-
├─► Push opacity
|
|
194
|
-
│
|
|
195
|
-
├─► Translate to (x, y)
|
|
196
|
-
│
|
|
197
|
-
├─► Apply shadows
|
|
198
|
-
│
|
|
199
|
-
├─► shape.draw()
|
|
200
|
-
│ └─► [see above]
|
|
201
|
-
│
|
|
202
|
-
├─► Pop opacity
|
|
203
|
-
│
|
|
204
|
-
└─► Painter.restore()
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
## Related
|
|
208
|
-
|
|
209
|
-
- [Rendering Pipeline](../../concepts/rendering-pipeline.md) - Detailed pipeline explanation
|
|
210
|
-
- [Shapes Module](./README.md) - All available shapes
|
|
211
|
-
|
|
212
|
-
## See Also
|
|
213
|
-
|
|
214
|
-
- [Euclidian](./base/euclidian.md)
|
|
215
|
-
- [Geometry2d](./base/geometry2d.md)
|
|
216
|
-
- [Renderable](./base/renderable.md)
|
|
217
|
-
- [Transformable](./base/transformable.md)
|
|
218
|
-
- [Shape](./base/shape.md)
|