@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,269 +0,0 @@
|
|
|
1
|
-
# Hello World
|
|
2
|
-
|
|
3
|
-
> Draw your first shape with GCanvas.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
This guide shows the simplest way to draw a shape on canvas using GCanvas. We'll start with the Shape Layer (no game loop) and progress to a simple animation.
|
|
8
|
-
|
|
9
|
-
## Basic Setup
|
|
10
|
-
|
|
11
|
-
Create an HTML file with a canvas:
|
|
12
|
-
|
|
13
|
-
```html
|
|
14
|
-
<!DOCTYPE html>
|
|
15
|
-
<html>
|
|
16
|
-
<head>
|
|
17
|
-
<title>GCanvas Hello World</title>
|
|
18
|
-
<style>
|
|
19
|
-
body { margin: 0; background: #000; }
|
|
20
|
-
canvas { display: block; }
|
|
21
|
-
</style>
|
|
22
|
-
</head>
|
|
23
|
-
<body>
|
|
24
|
-
<canvas id="canvas" width="800" height="600"></canvas>
|
|
25
|
-
<script type="module">
|
|
26
|
-
// Your code here
|
|
27
|
-
</script>
|
|
28
|
-
</body>
|
|
29
|
-
</html>
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
## Step 1: Draw a Circle
|
|
33
|
-
|
|
34
|
-
```js
|
|
35
|
-
import { Circle, Painter } from './dist/gcanvas.es.min.js';
|
|
36
|
-
|
|
37
|
-
// Get canvas and initialize Painter
|
|
38
|
-
const canvas = document.getElementById('canvas');
|
|
39
|
-
Painter.init(canvas.getContext('2d'));
|
|
40
|
-
|
|
41
|
-
// Create a circle
|
|
42
|
-
const circle = new Circle(50, {
|
|
43
|
-
x: 400,
|
|
44
|
-
y: 300,
|
|
45
|
-
color: 'red'
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
// Draw it
|
|
49
|
-
circle.draw();
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
**Result:** A red circle with radius 50, centered at (400, 300).
|
|
53
|
-
|
|
54
|
-
## Step 2: Add More Shapes
|
|
55
|
-
|
|
56
|
-
```js
|
|
57
|
-
import { Circle, Rectangle, Star, Painter } from './dist/gcanvas.es.min.js';
|
|
58
|
-
|
|
59
|
-
const canvas = document.getElementById('canvas');
|
|
60
|
-
Painter.init(canvas.getContext('2d'));
|
|
61
|
-
|
|
62
|
-
// Circle
|
|
63
|
-
const circle = new Circle(50, {
|
|
64
|
-
x: 200,
|
|
65
|
-
y: 300,
|
|
66
|
-
color: '#ff6b6b'
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
// Rectangle
|
|
70
|
-
const rect = new Rectangle({
|
|
71
|
-
x: 400,
|
|
72
|
-
y: 300,
|
|
73
|
-
width: 120,
|
|
74
|
-
height: 80,
|
|
75
|
-
color: '#4ecdc4',
|
|
76
|
-
stroke: '#fff',
|
|
77
|
-
lineWidth: 2
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
// Star
|
|
81
|
-
const star = new Star(40, 5, {
|
|
82
|
-
x: 600,
|
|
83
|
-
y: 300,
|
|
84
|
-
color: '#ffe66d',
|
|
85
|
-
rotation: Math.PI / 10
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
// Draw all shapes
|
|
89
|
-
circle.draw();
|
|
90
|
-
rect.draw();
|
|
91
|
-
star.draw();
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
## Step 3: Group Shapes Together
|
|
95
|
-
|
|
96
|
-
```js
|
|
97
|
-
import { Circle, Rectangle, TextShape, Group, Painter } from './dist/gcanvas.es.min.js';
|
|
98
|
-
|
|
99
|
-
const canvas = document.getElementById('canvas');
|
|
100
|
-
Painter.init(canvas.getContext('2d'));
|
|
101
|
-
|
|
102
|
-
// Create a group
|
|
103
|
-
const group = new Group({ x: 400, y: 300 });
|
|
104
|
-
|
|
105
|
-
// Add shapes to the group (positions relative to group)
|
|
106
|
-
group.add(new Rectangle({
|
|
107
|
-
width: 200,
|
|
108
|
-
height: 80,
|
|
109
|
-
color: '#333',
|
|
110
|
-
stroke: '#0f0',
|
|
111
|
-
lineWidth: 2
|
|
112
|
-
}));
|
|
113
|
-
|
|
114
|
-
group.add(new TextShape('Hello World!', {
|
|
115
|
-
font: '24px monospace',
|
|
116
|
-
color: '#0f0',
|
|
117
|
-
align: 'center',
|
|
118
|
-
baseline: 'middle'
|
|
119
|
-
}));
|
|
120
|
-
|
|
121
|
-
// Draw the group
|
|
122
|
-
group.draw();
|
|
123
|
-
|
|
124
|
-
// Rotate the entire group
|
|
125
|
-
group.rotation = Math.PI / 12; // 15 degrees
|
|
126
|
-
Painter.clear();
|
|
127
|
-
group.draw();
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
## Step 4: Simple Animation
|
|
131
|
-
|
|
132
|
-
Add a render loop for animation:
|
|
133
|
-
|
|
134
|
-
```js
|
|
135
|
-
import { Circle, Painter } from './dist/gcanvas.es.min.js';
|
|
136
|
-
|
|
137
|
-
const canvas = document.getElementById('canvas');
|
|
138
|
-
const ctx = canvas.getContext('2d');
|
|
139
|
-
Painter.init(ctx);
|
|
140
|
-
|
|
141
|
-
// Create a circle
|
|
142
|
-
const circle = new Circle(50, {
|
|
143
|
-
x: 400,
|
|
144
|
-
y: 300,
|
|
145
|
-
color: '#4ecdc4'
|
|
146
|
-
});
|
|
147
|
-
|
|
148
|
-
// Animation variables
|
|
149
|
-
let time = 0;
|
|
150
|
-
|
|
151
|
-
function animate() {
|
|
152
|
-
// Clear canvas
|
|
153
|
-
Painter.clear();
|
|
154
|
-
|
|
155
|
-
// Update circle position (oscillate)
|
|
156
|
-
time += 0.02;
|
|
157
|
-
circle.x = 400 + Math.sin(time) * 200;
|
|
158
|
-
circle.y = 300 + Math.cos(time * 0.5) * 100;
|
|
159
|
-
|
|
160
|
-
// Pulse the opacity
|
|
161
|
-
circle.opacity = 0.5 + Math.sin(time * 2) * 0.5;
|
|
162
|
-
|
|
163
|
-
// Draw
|
|
164
|
-
circle.draw();
|
|
165
|
-
|
|
166
|
-
// Next frame
|
|
167
|
-
requestAnimationFrame(animate);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
// Start animation
|
|
171
|
-
animate();
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
## Complete Example
|
|
175
|
-
|
|
176
|
-
Here's a complete example with multiple animated shapes:
|
|
177
|
-
|
|
178
|
-
```html
|
|
179
|
-
<!DOCTYPE html>
|
|
180
|
-
<html>
|
|
181
|
-
<head>
|
|
182
|
-
<title>GCanvas Hello World</title>
|
|
183
|
-
<style>
|
|
184
|
-
body { margin: 0; background: #1a1a2e; overflow: hidden; }
|
|
185
|
-
canvas { display: block; }
|
|
186
|
-
</style>
|
|
187
|
-
</head>
|
|
188
|
-
<body>
|
|
189
|
-
<canvas id="canvas"></canvas>
|
|
190
|
-
<script type="module">
|
|
191
|
-
import { Circle, Rectangle, Star, Group, Painter } from './dist/gcanvas.es.min.js';
|
|
192
|
-
|
|
193
|
-
// Setup
|
|
194
|
-
const canvas = document.getElementById('canvas');
|
|
195
|
-
canvas.width = window.innerWidth;
|
|
196
|
-
canvas.height = window.innerHeight;
|
|
197
|
-
Painter.init(canvas.getContext('2d'));
|
|
198
|
-
|
|
199
|
-
const centerX = canvas.width / 2;
|
|
200
|
-
const centerY = canvas.height / 2;
|
|
201
|
-
|
|
202
|
-
// Create shapes
|
|
203
|
-
const circle = new Circle(60, { color: '#ff6b6b' });
|
|
204
|
-
const rect = new Rectangle({ width: 100, height: 60, color: '#4ecdc4' });
|
|
205
|
-
const star = new Star(40, 5, { color: '#ffe66d' });
|
|
206
|
-
|
|
207
|
-
let time = 0;
|
|
208
|
-
|
|
209
|
-
function animate() {
|
|
210
|
-
Painter.clear();
|
|
211
|
-
time += 0.016;
|
|
212
|
-
|
|
213
|
-
// Orbit the shapes around center
|
|
214
|
-
const radius = 150;
|
|
215
|
-
|
|
216
|
-
circle.x = centerX + Math.cos(time) * radius;
|
|
217
|
-
circle.y = centerY + Math.sin(time) * radius;
|
|
218
|
-
|
|
219
|
-
rect.x = centerX + Math.cos(time + Math.PI * 0.66) * radius;
|
|
220
|
-
rect.y = centerY + Math.sin(time + Math.PI * 0.66) * radius;
|
|
221
|
-
rect.rotation = time;
|
|
222
|
-
|
|
223
|
-
star.x = centerX + Math.cos(time + Math.PI * 1.33) * radius;
|
|
224
|
-
star.y = centerY + Math.sin(time + Math.PI * 1.33) * radius;
|
|
225
|
-
star.rotation = -time * 2;
|
|
226
|
-
|
|
227
|
-
// Draw
|
|
228
|
-
circle.draw();
|
|
229
|
-
rect.draw();
|
|
230
|
-
star.draw();
|
|
231
|
-
|
|
232
|
-
requestAnimationFrame(animate);
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
animate();
|
|
236
|
-
|
|
237
|
-
// Handle resize
|
|
238
|
-
window.addEventListener('resize', () => {
|
|
239
|
-
canvas.width = window.innerWidth;
|
|
240
|
-
canvas.height = window.innerHeight;
|
|
241
|
-
});
|
|
242
|
-
</script>
|
|
243
|
-
</body>
|
|
244
|
-
</html>
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
## Key Concepts
|
|
248
|
-
|
|
249
|
-
| Concept | Description |
|
|
250
|
-
|---------|-------------|
|
|
251
|
-
| `Painter.init(ctx)` | Initialize the drawing system with canvas context |
|
|
252
|
-
| `Painter.clear()` | Clear the entire canvas |
|
|
253
|
-
| `shape.draw()` | Draw a shape at its current position |
|
|
254
|
-
| `shape.x`, `shape.y` | Position (center of shape) |
|
|
255
|
-
| `shape.rotation` | Rotation in radians |
|
|
256
|
-
| `shape.opacity` | Transparency (0 to 1) |
|
|
257
|
-
| `Group` | Container for multiple shapes |
|
|
258
|
-
|
|
259
|
-
## Next Steps
|
|
260
|
-
|
|
261
|
-
- [First Game](./first-game.md) - Add interactivity with the Game layer
|
|
262
|
-
- [Rendering Pipeline](../concepts/rendering-pipeline.md) - Understand the shape hierarchy
|
|
263
|
-
- [Shapes Module](../modules/shapes/README.md) - Explore all available shapes
|
|
264
|
-
|
|
265
|
-
## Related
|
|
266
|
-
|
|
267
|
-
- [Installation](./installation.md)
|
|
268
|
-
- [Two-Layer Architecture](../concepts/two-layer-architecture.md)
|
|
269
|
-
- [Shapes Module](../modules/shapes/README.md)
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
# Installation
|
|
2
|
-
|
|
3
|
-
> How to set up GCanvas in your project.
|
|
4
|
-
|
|
5
|
-
## Prerequisites
|
|
6
|
-
|
|
7
|
-
- Node.js 18+ (for development)
|
|
8
|
-
- Modern browser with ES6 support
|
|
9
|
-
|
|
10
|
-
## Option 1: Clone Repository
|
|
11
|
-
|
|
12
|
-
The recommended way to get started:
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
git clone https://github.com/guinetik/gcanvas.git
|
|
16
|
-
cd gcanvas
|
|
17
|
-
npm install
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
### Run Development Server
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
npm run dev
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
This starts Vite's dev server with hot reload. Open `http://localhost:5173` to see the demos.
|
|
27
|
-
|
|
28
|
-
### Build the Library
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
npm run build
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
Outputs to `dist/`:
|
|
35
|
-
- `gcanvas.es.js` - ES Module
|
|
36
|
-
- `gcanvas.es.min.js` - ES Module (minified)
|
|
37
|
-
- `gcanvas.umd.js` - UMD bundle
|
|
38
|
-
- `gcanvas.umd.min.js` - UMD bundle (minified)
|
|
39
|
-
|
|
40
|
-
## Option 2: NPM
|
|
41
|
-
|
|
42
|
-
```bash
|
|
43
|
-
npm install @guinetik/gcanvas
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
Then import in your project:
|
|
47
|
-
|
|
48
|
-
```js
|
|
49
|
-
import { Game, Circle, Rectangle } from '@guinetik/gcanvas';
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## Option 3: Direct Script Include
|
|
53
|
-
|
|
54
|
-
### ES Module
|
|
55
|
-
|
|
56
|
-
```html
|
|
57
|
-
<script type="module">
|
|
58
|
-
import { Circle, Painter } from './dist/gcanvas.es.min.js';
|
|
59
|
-
|
|
60
|
-
const canvas = document.getElementById('canvas');
|
|
61
|
-
Painter.init(canvas.getContext('2d'));
|
|
62
|
-
|
|
63
|
-
const circle = new Circle(50, { x: 100, y: 100, color: 'red' });
|
|
64
|
-
circle.draw();
|
|
65
|
-
</script>
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### UMD Bundle
|
|
69
|
-
|
|
70
|
-
```html
|
|
71
|
-
<script src="./dist/gcanvas.umd.min.js"></script>
|
|
72
|
-
<script>
|
|
73
|
-
const { Circle, Painter } = GCanvas;
|
|
74
|
-
|
|
75
|
-
const canvas = document.getElementById('canvas');
|
|
76
|
-
Painter.init(canvas.getContext('2d'));
|
|
77
|
-
|
|
78
|
-
const circle = new GCanvas.Circle(50, { x: 100, y: 100, color: 'red' });
|
|
79
|
-
circle.draw();
|
|
80
|
-
</script>
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
## Project Structure
|
|
84
|
-
|
|
85
|
-
```
|
|
86
|
-
gcanvas/
|
|
87
|
-
├── src/ # Source code
|
|
88
|
-
│ ├── shapes/ # Shape classes
|
|
89
|
-
│ ├── game/ # Game loop, objects
|
|
90
|
-
│ ├── painter/ # Canvas abstraction
|
|
91
|
-
│ ├── motion/ # Animation
|
|
92
|
-
│ ├── io/ # Input handling
|
|
93
|
-
│ └── index.js # Main entry point
|
|
94
|
-
├── demos/ # Demo applications
|
|
95
|
-
├── dist/ # Built library
|
|
96
|
-
└── docs/ # Documentation
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
## NPM Scripts
|
|
100
|
-
|
|
101
|
-
| Script | Description |
|
|
102
|
-
|--------|-------------|
|
|
103
|
-
| `npm run dev` | Start development server |
|
|
104
|
-
| `npm run build` | Build library |
|
|
105
|
-
| `npm run build:demo` | Build demos for deployment |
|
|
106
|
-
| `npm run docs` | Generate JSDoc documentation |
|
|
107
|
-
| `npm run test` | Run tests |
|
|
108
|
-
|
|
109
|
-
## TypeScript Support
|
|
110
|
-
|
|
111
|
-
GCanvas includes full TypeScript definitions. After installing, you get complete type support:
|
|
112
|
-
|
|
113
|
-
```typescript
|
|
114
|
-
import { Game, Circle, Camera3D, ParticleSystem } from '@guinetik/gcanvas';
|
|
115
|
-
|
|
116
|
-
// Full IntelliSense and type checking
|
|
117
|
-
const game = new Game(document.getElementById('canvas') as HTMLCanvasElement);
|
|
118
|
-
const circle = new Circle(50, { x: 100, y: 100, fill: 'red' });
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
The types require ES2015+ target in your `tsconfig.json`:
|
|
122
|
-
|
|
123
|
-
```json
|
|
124
|
-
{
|
|
125
|
-
"compilerOptions": {
|
|
126
|
-
"lib": ["es2015", "dom"]
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
## Browser Support
|
|
132
|
-
|
|
133
|
-
GCanvas works in all modern browsers:
|
|
134
|
-
|
|
135
|
-
- Chrome 60+
|
|
136
|
-
- Firefox 55+
|
|
137
|
-
- Safari 11+
|
|
138
|
-
- Edge 79+
|
|
139
|
-
|
|
140
|
-
## Next Steps
|
|
141
|
-
|
|
142
|
-
- [Hello World](./hello-world.md) - Draw your first shape
|
|
143
|
-
- [First Game](./first-game.md) - Create an interactive game
|
|
144
|
-
- [Architecture Overview](../concepts/architecture-overview.md) - Understand the design
|
|
145
|
-
|
|
146
|
-
## Troubleshooting
|
|
147
|
-
|
|
148
|
-
### Canvas not found
|
|
149
|
-
|
|
150
|
-
Make sure your canvas element has an ID and the script runs after DOM is ready:
|
|
151
|
-
|
|
152
|
-
```html
|
|
153
|
-
<canvas id="game"></canvas>
|
|
154
|
-
<script type="module">
|
|
155
|
-
// Script runs after DOM is parsed when using type="module"
|
|
156
|
-
const canvas = document.getElementById('game');
|
|
157
|
-
</script>
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
### Module not found
|
|
161
|
-
|
|
162
|
-
When using ES modules, ensure paths are correct:
|
|
163
|
-
|
|
164
|
-
```js
|
|
165
|
-
// Relative path from your script
|
|
166
|
-
import { Circle } from './dist/gcanvas.es.min.js';
|
|
167
|
-
|
|
168
|
-
// Or absolute path
|
|
169
|
-
import { Circle } from '/dist/gcanvas.es.min.js';
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
## Related
|
|
173
|
-
|
|
174
|
-
- [Hello World](./hello-world.md)
|
|
175
|
-
- [Architecture Overview](../concepts/architecture-overview.md)
|