distark-render 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +81 -2
  2. package/dist/modules/adapters/p5Renderer.d.ts +71 -0
  3. package/dist/modules/adapters/p5Renderer.d.ts.map +1 -0
  4. package/dist/modules/adapters/p5Renderer.js +145 -0
  5. package/dist/modules/adapters/p5Renderer.js.map +1 -0
  6. package/dist/modules/adapters/skiaRenderer.d.ts +84 -0
  7. package/dist/modules/adapters/skiaRenderer.d.ts.map +1 -0
  8. package/dist/modules/adapters/skiaRenderer.js +262 -0
  9. package/dist/modules/adapters/skiaRenderer.js.map +1 -0
  10. package/dist/modules/eyeSystem.d.ts +34 -1
  11. package/dist/modules/eyeSystem.d.ts.map +1 -1
  12. package/dist/modules/eyeSystem.js +46 -20
  13. package/dist/modules/eyeSystem.js.map +1 -1
  14. package/dist/modules/imageLoad.d.ts +4 -1
  15. package/dist/modules/imageLoad.d.ts.map +1 -1
  16. package/dist/modules/imageLoad.js +65 -19
  17. package/dist/modules/imageLoad.js.map +1 -1
  18. package/dist/modules/mouthSystem.d.ts +15 -15
  19. package/dist/modules/mouthSystem.d.ts.map +1 -1
  20. package/dist/modules/mouthSystem.js +91 -52
  21. package/dist/modules/mouthSystem.js.map +1 -1
  22. package/dist/modules/renderRig.d.ts +1 -1
  23. package/dist/modules/renderRig.d.ts.map +1 -1
  24. package/dist/modules/renderRig.js +150 -49
  25. package/dist/modules/renderRig.js.map +1 -1
  26. package/dist/tests/test-joint-movement.d.ts +7 -0
  27. package/dist/tests/test-joint-movement.d.ts.map +1 -0
  28. package/dist/tests/test-joint-movement.js +323 -0
  29. package/dist/tests/test-joint-movement.js.map +1 -0
  30. package/dist/tests/test-skia.d.ts +12 -0
  31. package/dist/tests/test-skia.d.ts.map +1 -0
  32. package/dist/tests/test-skia.js +33 -0
  33. package/dist/tests/test-skia.js.map +1 -0
  34. package/dist/tests/test-visual-verification.d.ts +7 -0
  35. package/dist/tests/test-visual-verification.d.ts.map +1 -0
  36. package/dist/tests/test-visual-verification.js +180 -0
  37. package/dist/tests/test-visual-verification.js.map +1 -0
  38. package/dist/types.d.ts +18 -0
  39. package/dist/types.d.ts.map +1 -1
  40. package/package.json +21 -2
  41. package/dist/test-skia.d.ts +0 -15
  42. package/dist/test-skia.d.ts.map +0 -1
  43. package/dist/test-skia.js +0 -179
  44. package/dist/test-skia.js.map +0 -1
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Skia Canvas Command-Line Test
3
+ * Renders a character rig using Skia Canvas and saves to a file
4
+ *
5
+ * Uses the simplified SkiaRenderer adapter for easy rendering
6
+ *
7
+ * Usage:
8
+ * npm run build
9
+ * node dist/test-skia.js [input.json] [output.png] [width] [height]
10
+ */
11
+ import { SkiaRenderer } from '../modules/adapters/skiaRenderer.js';
12
+ import { readFile } from 'fs/promises';
13
+ async function main() {
14
+ // Parse command line args
15
+ const args = process.argv.slice(2);
16
+ const inputFile = args[0] || 'assets/tank.json';
17
+ const outputFile = args[1] || 'output-tank.png';
18
+ const width = parseInt(args[2]) || 1000;
19
+ const height = parseInt(args[3]) || 1000;
20
+ console.log(`šŸ“¦ Loading ${inputFile}...`);
21
+ const rigData = JSON.parse(await readFile(inputFile, 'utf-8'));
22
+ console.log(`šŸŽØ Rendering ${width}x${height}...`);
23
+ // Render using simplified API
24
+ const renderer = new SkiaRenderer();
25
+ await renderer.renderToFile(outputFile, rigData, {
26
+ canvasWidth: width,
27
+ canvasHeight: height,
28
+ showPivots: true
29
+ });
30
+ console.log(`āœ… Saved to ${outputFile}`);
31
+ }
32
+ main().catch(console.error);
33
+ //# sourceMappingURL=test-skia.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-skia.js","sourceRoot":"","sources":["../../tests/test-skia.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,KAAK,UAAU,IAAI;IACf,0BAA0B;IAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,kBAAkB,CAAC;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC;IAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAEzC,OAAO,CAAC,GAAG,CAAC,cAAc,SAAS,KAAK,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAExE,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,IAAI,MAAM,KAAK,CAAC,CAAC;IAElD,8BAA8B;IAC9B,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IACpC,MAAM,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,EAAE;QAC7C,WAAW,EAAE,KAAK;QAClB,YAAY,EAAE,MAAM;QACpB,UAAU,EAAE,IAAI;KACnB,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Visual Verification Test
3
+ * Uses Skia Canvas to render a character and verify eyes and mouth are present
4
+ * through color comparison in expected regions
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=test-visual-verification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-visual-verification.d.ts","sourceRoot":"","sources":["../../tests/test-visual-verification.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,180 @@
1
+ /**
2
+ * Visual Verification Test
3
+ * Uses Skia Canvas to render a character and verify eyes and mouth are present
4
+ * through color comparison in expected regions
5
+ */
6
+ import { SkiaRenderer } from '../modules/adapters/skiaRenderer.js';
7
+ import { readFile } from 'fs/promises';
8
+ /**
9
+ * Sample pixel color at a specific location
10
+ */
11
+ function getPixelColor(imageData, x, y) {
12
+ const index = (Math.floor(y) * imageData.width + Math.floor(x)) * 4;
13
+ return {
14
+ r: imageData.data[index],
15
+ g: imageData.data[index + 1],
16
+ b: imageData.data[index + 2],
17
+ a: imageData.data[index + 3]
18
+ };
19
+ }
20
+ /**
21
+ * Check if a color is significantly different from background
22
+ */
23
+ function isDifferentFromBackground(color, bgColor, threshold = 10) {
24
+ const rDiff = Math.abs(color.r - bgColor.r);
25
+ const gDiff = Math.abs(color.g - bgColor.g);
26
+ const bDiff = Math.abs(color.b - bgColor.b);
27
+ const aDiff = Math.abs(color.a - bgColor.a);
28
+ return (rDiff > threshold || gDiff > threshold || bDiff > threshold || aDiff > threshold);
29
+ }
30
+ /**
31
+ * Sample multiple points in a region and check if content exists
32
+ */
33
+ function hasContentInRegion(imageData, region, bgColor, samplePoints = 9) {
34
+ let pixelsWithContent = 0;
35
+ // Sample points in a grid within the region
36
+ const cols = Math.ceil(Math.sqrt(samplePoints));
37
+ const rows = Math.ceil(samplePoints / cols);
38
+ for (let row = 0; row < rows; row++) {
39
+ for (let col = 0; col < cols; col++) {
40
+ const x = region.x + (region.width * col / (cols - 1 || 1));
41
+ const y = region.y + (region.height * row / (rows - 1 || 1));
42
+ // Skip if out of bounds
43
+ if (x < 0 || x >= imageData.width || y < 0 || y >= imageData.height) {
44
+ continue;
45
+ }
46
+ const color = getPixelColor(imageData, x, y);
47
+ if (isDifferentFromBackground(color, bgColor)) {
48
+ pixelsWithContent++;
49
+ }
50
+ }
51
+ }
52
+ // At least 30% of sampled pixels should have content
53
+ const contentPercentage = pixelsWithContent / samplePoints;
54
+ return contentPercentage >= 0.3;
55
+ }
56
+ /**
57
+ * Calculate test regions based on rig data
58
+ */
59
+ function calculateTestRegions(rigData, canvasWidth, canvasHeight) {
60
+ const regions = [];
61
+ const centerX = canvasWidth / 2;
62
+ const centerY = canvasHeight / 2 + 100;
63
+ // Left Eye Region
64
+ if (rigData.eyes?.leftEyeXCoor !== undefined && rigData.eyes?.leftEyeYCoor !== undefined) {
65
+ const leftEyeWidth = (rigData.eyes.leftEyeImageWidth || 100) * (rigData.eyes.leftEyeWidthRatio || 1);
66
+ const leftEyeHeight = (rigData.eyes.leftEyeImageHeight || 100) * (rigData.eyes.leftEyeHeightRatio || 1);
67
+ regions.push({
68
+ name: 'Left Eye',
69
+ x: centerX + rigData.eyes.leftEyeXCoor - leftEyeWidth / 2,
70
+ y: centerY + rigData.eyes.leftEyeYCoor - leftEyeHeight / 2,
71
+ width: leftEyeWidth,
72
+ height: leftEyeHeight
73
+ });
74
+ }
75
+ // Right Eye Region
76
+ if (rigData.eyes?.rightEyeXCoor !== undefined && rigData.eyes?.rightEyeYCoor !== undefined) {
77
+ const rightEyeWidth = (rigData.eyes.rightEyeImageWidth || 100) * (rigData.eyes.rightEyeWidthRatio || 1);
78
+ const rightEyeHeight = (rigData.eyes.rightEyeImageHeight || 100) * (rigData.eyes.rightEyeHeightRatio || 1);
79
+ regions.push({
80
+ name: 'Right Eye',
81
+ x: centerX + rigData.eyes.rightEyeXCoor - rightEyeWidth / 2,
82
+ y: centerY + rigData.eyes.rightEyeYCoor - rightEyeHeight / 2,
83
+ width: rightEyeWidth,
84
+ height: rightEyeHeight
85
+ });
86
+ }
87
+ // Mouth Region
88
+ if (rigData.mouth?.xCoor !== undefined && rigData.mouth?.yCoor !== undefined) {
89
+ const mouthWidth = (rigData.mouth.width || 60) * (rigData.mouth.size || 1);
90
+ const mouthHeight = (rigData.mouth.height || 40) * (rigData.mouth.size || 1);
91
+ regions.push({
92
+ name: 'Mouth',
93
+ x: centerX + rigData.mouth.xCoor - mouthWidth / 2,
94
+ y: centerY + rigData.mouth.yCoor - mouthHeight / 2,
95
+ width: mouthWidth,
96
+ height: mouthHeight
97
+ });
98
+ }
99
+ return regions;
100
+ }
101
+ /**
102
+ * Main test function
103
+ */
104
+ async function runVisualTest(inputFile) {
105
+ console.log('\n🧪 Visual Verification Test');
106
+ console.log('='.repeat(50));
107
+ console.log(`šŸ“¦ Loading ${inputFile}...`);
108
+ const rigData = JSON.parse(await readFile(inputFile, 'utf-8'));
109
+ const width = 1000;
110
+ const height = 1000;
111
+ console.log(`šŸŽØ Rendering ${width}x${height} canvas...`);
112
+ // Render character
113
+ const renderer = new SkiaRenderer();
114
+ await renderer.loadImages(rigData);
115
+ const canvas = await renderer.createCanvas(width, height);
116
+ // Fill background with light gray
117
+ const ctx = canvas.getContext('2d');
118
+ ctx.fillStyle = '#f0f0f0';
119
+ ctx.fillRect(0, 0, width, height);
120
+ renderer.renderToCanvas(canvas, rigData, {
121
+ canvasWidth: width,
122
+ canvasHeight: height
123
+ }, false);
124
+ // Get image data for analysis
125
+ const imageData = ctx.getImageData(0, 0, width, height);
126
+ // Get background color (sample from top-left corner)
127
+ const bgColor = getPixelColor(imageData, 10, 10);
128
+ console.log(`šŸ“ Background color: rgba(${bgColor.r}, ${bgColor.g}, ${bgColor.b}, ${bgColor.a})`);
129
+ // Calculate test regions
130
+ const regions = calculateTestRegions(rigData, width, height);
131
+ console.log(`\nšŸŽÆ Testing ${regions.length} regions...`);
132
+ let allPassed = true;
133
+ const results = [];
134
+ // Test each region
135
+ for (const region of regions) {
136
+ console.log(`\n Testing ${region.name}:`);
137
+ console.log(` Region: (${Math.round(region.x)}, ${Math.round(region.y)}) ${Math.round(region.width)}x${Math.round(region.height)}`);
138
+ const hasContent = hasContentInRegion(imageData, region, bgColor);
139
+ if (hasContent) {
140
+ console.log(` āœ… PASS - ${region.name} detected`);
141
+ }
142
+ else {
143
+ console.log(` āŒ FAIL - ${region.name} NOT detected`);
144
+ allPassed = false;
145
+ }
146
+ results.push({ region: region.name, passed: hasContent });
147
+ }
148
+ // Summary
149
+ console.log('\n' + '='.repeat(50));
150
+ console.log('šŸ“Š Test Summary:');
151
+ const passed = results.filter(r => r.passed).length;
152
+ const total = results.length;
153
+ console.log(` ${passed}/${total} regions passed`);
154
+ if (allPassed) {
155
+ console.log('\nāœ… All visual tests PASSED\n');
156
+ }
157
+ else {
158
+ console.log('\nāŒ Some visual tests FAILED\n');
159
+ console.log('Failed regions:');
160
+ results.filter(r => !r.passed).forEach(r => {
161
+ console.log(` - ${r.region}`);
162
+ });
163
+ console.log();
164
+ }
165
+ return allPassed;
166
+ }
167
+ // Run test
168
+ async function main() {
169
+ const inputFile = process.argv[2] || 'tank.json';
170
+ try {
171
+ const success = await runVisualTest(inputFile);
172
+ process.exit(success ? 0 : 1);
173
+ }
174
+ catch (error) {
175
+ console.error('āŒ Test failed with error:', error);
176
+ process.exit(1);
177
+ }
178
+ }
179
+ main();
180
+ //# sourceMappingURL=test-visual-verification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-visual-verification.js","sourceRoot":"","sources":["../../tests/test-visual-verification.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -82,6 +82,23 @@ export interface EyeData {
82
82
  rightEyeLidHalfClosedHeight?: number;
83
83
  [key: string]: string | number | undefined;
84
84
  }
85
+ /**
86
+ * Mouth data configuration
87
+ * Contains MD5 hashes for mouth shape images and positioning/sizing information
88
+ */
89
+ export interface MouthData {
90
+ width?: number;
91
+ height?: number;
92
+ size?: number;
93
+ xCoor?: number;
94
+ yCoor?: number;
95
+ mouthWidth?: number;
96
+ mouthHeight?: number;
97
+ mouthSize?: number;
98
+ mouthXCoor?: number;
99
+ mouthYCoor?: number;
100
+ [key: string]: string | number | undefined;
101
+ }
85
102
  /**
86
103
  * Character rig data structure
87
104
  */
@@ -97,6 +114,7 @@ export interface RigData {
97
114
  jointOffset?: Record<string, Position>;
98
115
  zIndexValues?: Record<string, number>;
99
116
  eyes?: EyeData;
117
+ mouth?: MouthData;
100
118
  imagePaths?: Record<string, string>;
101
119
  imageScale?: number;
102
120
  visibility?: Record<string, boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "distark-render",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "Rendering-agnostic character rig system with TypeScript",
5
5
  "type": "module",
6
6
  "main": "./dist/modules/renderRig.js",
@@ -14,9 +14,25 @@
14
14
  "types": "./dist/modules/imageLoad.d.ts",
15
15
  "import": "./dist/modules/imageLoad.js"
16
16
  },
17
+ "./eyeSystem": {
18
+ "types": "./dist/modules/eyeSystem.d.ts",
19
+ "import": "./dist/modules/eyeSystem.js"
20
+ },
21
+ "./mouthSystem": {
22
+ "types": "./dist/modules/mouthSystem.d.ts",
23
+ "import": "./dist/modules/mouthSystem.js"
24
+ },
17
25
  "./types": {
18
26
  "types": "./dist/types.d.ts",
19
27
  "import": "./dist/types.js"
28
+ },
29
+ "./p5": {
30
+ "types": "./dist/modules/adapters/p5Renderer.d.ts",
31
+ "import": "./dist/modules/adapters/p5Renderer.js"
32
+ },
33
+ "./skia": {
34
+ "types": "./dist/modules/adapters/skiaRenderer.d.ts",
35
+ "import": "./dist/modules/adapters/skiaRenderer.js"
20
36
  }
21
37
  },
22
38
  "files": [
@@ -30,7 +46,10 @@
30
46
  "dev": "tsc --watch & http-server -p 8080",
31
47
  "clean": "rm -rf dist",
32
48
  "serve": "http-server -p 8080",
33
- "test-skia": "npm run build && node dist/test-skia.js tank.json output-tank.png 1000 1000",
49
+ "test": "npm run build && node dist/tests/test-visual-verification.js && node dist/tests/test-joint-movement.js",
50
+ "test-skia": "npm run build && node dist/tests/test-skia.js",
51
+ "test-visual": "npm run build && node dist/tests/test-visual-verification.js",
52
+ "test-joints": "npm run build && node dist/tests/test-joint-movement.js",
34
53
  "prepublishOnly": "npm run clean && npm run build"
35
54
  },
36
55
  "keywords": [
@@ -1,15 +0,0 @@
1
- /**
2
- * Skia Canvas Command-Line Test
3
- * Renders a character rig using Skia Canvas and saves to a file
4
- *
5
- * Architecture:
6
- * - Uses ImageLoader from modules/imageLoad.ts (extended for Node.js compatibility)
7
- * - Uses CharacterRigRenderer from modules/renderRig.ts (computes all transforms)
8
- * - SkiaImageLoader adapts browser ImageLoader to work with Skia Canvas's Image type
9
- * - CharacterRigRenderer.computeCharacterRigData() handles all rig calculations
10
- * - Rendering logic draws the computed render objects to Skia Canvas
11
- *
12
- * Usage: npm run test-skia
13
- */
14
- export {};
15
- //# sourceMappingURL=test-skia.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-skia.d.ts","sourceRoot":"","sources":["../test-skia.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
package/dist/test-skia.js DELETED
@@ -1,179 +0,0 @@
1
- /**
2
- * Skia Canvas Command-Line Test
3
- * Renders a character rig using Skia Canvas and saves to a file
4
- *
5
- * Architecture:
6
- * - Uses ImageLoader from modules/imageLoad.ts (extended for Node.js compatibility)
7
- * - Uses CharacterRigRenderer from modules/renderRig.ts (computes all transforms)
8
- * - SkiaImageLoader adapts browser ImageLoader to work with Skia Canvas's Image type
9
- * - CharacterRigRenderer.computeCharacterRigData() handles all rig calculations
10
- * - Rendering logic draws the computed render objects to Skia Canvas
11
- *
12
- * Usage: npm run test-skia
13
- */
14
- import { Canvas, loadImage as skiaLoadImage } from 'skia-canvas';
15
- import { readFile } from 'fs/promises';
16
- import { CharacterRigRenderer } from './modules/renderRig.js';
17
- import { ImageLoader } from './modules/imageLoad.js';
18
- /**
19
- * Skia Canvas adapter for ImageLoader
20
- * Extends the browser-based ImageLoader to work with Skia Canvas in Node.js
21
- *
22
- * Key differences from browser version:
23
- * - Uses skia-canvas's loadImage() instead of browser's Image()
24
- * - Returns Skia Canvas Image type instead of HTMLImageElement
25
- * - Otherwise maintains the same API and caching behavior
26
- */
27
- class SkiaImageLoader extends ImageLoader {
28
- /**
29
- * Override loadImage to use Skia Canvas's loadImage instead of browser Image
30
- */
31
- async loadImageAsync(key, imageData) {
32
- const imageUrl = this.resolveImageSource(imageData);
33
- if (!imageUrl) {
34
- console.warn(`Could not resolve image source for ${key}: ${imageData}`);
35
- return null;
36
- }
37
- // Check cache first
38
- const cached = this.getCachedImage(key);
39
- if (cached) {
40
- console.log(`āœ“ Using cached image for ${key}`);
41
- return cached;
42
- }
43
- try {
44
- console.log(`šŸ“„ Loading image for ${key} from: ${imageUrl.substring(0, 80)}...`);
45
- const img = await skiaLoadImage(imageUrl);
46
- console.log(`āœ“ Successfully loaded image for ${key} (${img.width}x${img.height})`);
47
- // Cache it
48
- this.cacheImage(key, img);
49
- return img;
50
- }
51
- catch (error) {
52
- console.error(`āœ— Failed to load image for ${key}`);
53
- console.error(` URL: ${imageUrl}`);
54
- console.error(` Error:`, error);
55
- return null;
56
- }
57
- }
58
- /**
59
- * Load all images for a character rig using Skia Canvas
60
- */
61
- async loadAllRigImagesSkia(rigData) {
62
- const imagesToLoad = [];
63
- // Collect all image paths from imagePaths
64
- if (rigData.imagePaths) {
65
- for (const [key, hash] of Object.entries(rigData.imagePaths)) {
66
- if (hash && typeof hash === 'string' && !hash.includes('[MEDIA_REMOVED]')) {
67
- imagesToLoad.push({ key: `imagePaths.${key}`, hash });
68
- }
69
- }
70
- }
71
- // Collect all eye images
72
- if (rigData.eyes) {
73
- for (const [key, value] of Object.entries(rigData.eyes)) {
74
- if (typeof value === 'string' && !value.includes('[MEDIA_REMOVED]') &&
75
- (key.includes('Image') || key.includes('Iris') || key.includes('Lid'))) {
76
- imagesToLoad.push({ key: `eyes.${key}`, hash: value });
77
- }
78
- }
79
- }
80
- console.log(`šŸ“¦ Loading ${imagesToLoad.length} images for character rig...`);
81
- const loadedImages = {};
82
- let loaded = 0;
83
- let failed = 0;
84
- // Load all images in parallel
85
- await Promise.all(imagesToLoad.map(async ({ key, hash }) => {
86
- const img = await this.loadImageAsync(key, hash);
87
- if (img) {
88
- loadedImages[key] = img;
89
- loaded++;
90
- }
91
- else {
92
- failed++;
93
- }
94
- }));
95
- console.log(`āœ“ Loaded ${loaded}/${imagesToLoad.length} images (${failed} failed)`);
96
- return loadedImages;
97
- }
98
- }
99
- /**
100
- * Main test function
101
- */
102
- async function main() {
103
- try {
104
- console.log('šŸš€ Skia Canvas Test - Character Rig Renderer\n');
105
- // Parse command line arguments
106
- const args = process.argv.slice(2);
107
- const inputFile = args[0] || 'tank.json';
108
- const outputFile = args[1] || 'output.png';
109
- const width = parseInt(args[2]) || 1000;
110
- const height = parseInt(args[3]) || 1000;
111
- // Load rig data
112
- console.log('šŸ“„ Loading rig data...');
113
- const rigDataRaw = await readFile(inputFile, 'utf-8');
114
- const rigData = JSON.parse(rigDataRaw);
115
- console.log(`āœ“ Loaded rig data for: ${rigData.name || rigData.id}\n`);
116
- // Create image loader and load all images
117
- const imageLoader = new SkiaImageLoader();
118
- const loadedImages = await imageLoader.loadAllRigImagesSkia(rigData);
119
- console.log('');
120
- // Create Skia Canvas
121
- console.log('šŸŽØ Creating canvas...');
122
- const canvas = new Canvas(width, height);
123
- console.log(`āœ“ Canvas created (${width}x${height})\n`);
124
- // Create renderer with the image loader
125
- const renderer = new CharacterRigRenderer(imageLoader);
126
- // Render the character using the renderer's render method
127
- console.log('šŸ–Œļø Rendering character...');
128
- const ctx = canvas.getContext('2d');
129
- // Clear canvas
130
- ctx.clearRect(0, 0, canvas.width, canvas.height);
131
- ctx.fillStyle = '#f0f0f0';
132
- ctx.fillRect(0, 0, canvas.width, canvas.height);
133
- // Compute rig data
134
- const rigRenderData = renderer.computeCharacterRigData(rigData, {
135
- canvasWidth: canvas.width,
136
- canvasHeight: canvas.height,
137
- cameraOffset: { x: 0, y: 0 },
138
- loadedImages: loadedImages
139
- });
140
- // Render all objects
141
- rigRenderData.objects.forEach(obj => {
142
- if (!obj.imageData)
143
- return;
144
- ctx.save();
145
- ctx.translate(obj.x, obj.y);
146
- ctx.rotate(obj.rotation);
147
- ctx.scale(obj.scaleX, obj.scaleY);
148
- const drawX = -obj.width * obj.anchorX;
149
- const drawY = -obj.height * obj.anchorY;
150
- ctx.drawImage(obj.imageData, drawX, drawY, obj.width, obj.height);
151
- ctx.restore();
152
- });
153
- // Draw pivot points
154
- rigRenderData.pivotPoints.forEach(pivot => {
155
- ctx.save();
156
- ctx.fillStyle = 'rgba(0, 150, 255, 0.9)';
157
- ctx.strokeStyle = '#000';
158
- ctx.lineWidth = 1;
159
- ctx.beginPath();
160
- ctx.arc(pivot.x, pivot.y, 4, 0, Math.PI * 2);
161
- ctx.fill();
162
- ctx.stroke();
163
- ctx.restore();
164
- });
165
- console.log('āœ“ Character rendered\n');
166
- // Save to file
167
- console.log(`šŸ’¾ Saving to ${outputFile}...`);
168
- await canvas.saveAs(outputFile);
169
- console.log(`āœ“ Saved successfully!\n`);
170
- console.log('šŸŽ‰ Done! Your character has been rendered to:', outputFile);
171
- }
172
- catch (error) {
173
- console.error('\nāŒ Error:', error);
174
- process.exit(1);
175
- }
176
- }
177
- // Run the test
178
- main();
179
- //# sourceMappingURL=test-skia.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-skia.js","sourceRoot":"","sources":["../test-skia.ts"],"names":[],"mappings":"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"}