@naniteninja/trait-visual 1.0.8 → 1.0.10
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/fesm2022/naniteninja-trait-visual.mjs +32 -14
- package/fesm2022/naniteninja-trait-visual.mjs.map +1 -1
- package/index.d.ts +703 -3
- package/package.json +3 -3
- package/lib/data/bundled-textures.generated.d.ts +0 -3
- package/lib/data/nodes.data.d.ts +0 -15
- package/lib/data/shader.d.ts +0 -2
- package/lib/data/shaders/customPaths.glsl.d.ts +0 -1
- package/lib/data/shaders/dyingStarPhase.glsl.d.ts +0 -1
- package/lib/data/shaders/galaxyPhase.glsl.d.ts +0 -1
- package/lib/data/shaders/nebulaPhase.glsl.d.ts +0 -1
- package/lib/objects/Blackhole.d.ts +0 -45
- package/lib/objects/Cluster.d.ts +0 -18
- package/lib/objects/GalaxyStars.d.ts +0 -1
- package/lib/services/black-hole-particle-field.d.ts +0 -98
- package/lib/services/galaxyPointCloud.d.ts +0 -10
- package/lib/services/node-actions.d.ts +0 -5
- package/lib/services/stellar-dust-field.d.ts +0 -102
- package/lib/trait-visual-canvas/trait-visual-canvas.component.d.ts +0 -220
- package/lib/types/app.types.d.ts +0 -224
- package/lib/types/canvas-config.d.ts +0 -181
- package/lib/types/dust-field.types.d.ts +0 -61
- package/lib/types/glow.types.d.ts +0 -18
- package/lib/types/node-info.type.d.ts +0 -17
- package/lib/types/particle-field.types.d.ts +0 -55
- package/lib/utils/createShaderMaterial.d.ts +0 -8
- package/lib/utils/createUniforms.d.ts +0 -2
- package/lib/utils/debug-counters.d.ts +0 -6
- package/lib/utils/debug-ingest.constants.d.ts +0 -2
- package/lib/utils/debug-ingest.d.ts +0 -12
- package/lib/utils/galaxyGeometryForPhase.d.ts +0 -1
- package/lib/utils/window.util.d.ts +0 -7
- package/public-api.d.ts +0 -6
|
@@ -3362,8 +3362,11 @@ class TraitVisualCanvasComponent {
|
|
|
3362
3362
|
}
|
|
3363
3363
|
initGalaxyCloud() {
|
|
3364
3364
|
const base = this.assetsBaseUrl || this.cfg.assetsBaseUrl || '';
|
|
3365
|
-
//
|
|
3366
|
-
//
|
|
3365
|
+
// When an explicit assetsBaseUrl is provided, try URL-based loading first
|
|
3366
|
+
// and fall back to bundled textures on failure.
|
|
3367
|
+
// When no assetsBaseUrl is set (empty string), skip the network request
|
|
3368
|
+
// entirely to avoid 404 console errors in consuming apps.
|
|
3369
|
+
const hasExplicitBase = !!(this.assetsBaseUrl || this.cfg.assetsBaseUrl);
|
|
3367
3370
|
const scaleUrl = `${base}/scale-texture.png`;
|
|
3368
3371
|
const colorUrl = `${base}/color-tiles.png`;
|
|
3369
3372
|
const aniUrl = `${base}/ani-tiles.exr`;
|
|
@@ -3404,13 +3407,23 @@ class TraitVisualCanvasComponent {
|
|
|
3404
3407
|
};
|
|
3405
3408
|
const loader = new THREE.TextureLoader();
|
|
3406
3409
|
// scale-texture.png → scaleTex uniform (with bundled fallback)
|
|
3407
|
-
|
|
3410
|
+
if (hasExplicitBase) {
|
|
3411
|
+
loader.load(scaleUrl, (tex) => applyTex(tex, 'scaleTex'), undefined, () => {
|
|
3412
|
+
loader.load(BUNDLED_SCALE_TEXTURE_URL, (tex) => applyTex(tex, 'scaleTex'));
|
|
3413
|
+
});
|
|
3414
|
+
}
|
|
3415
|
+
else {
|
|
3408
3416
|
loader.load(BUNDLED_SCALE_TEXTURE_URL, (tex) => applyTex(tex, 'scaleTex'));
|
|
3409
|
-
}
|
|
3417
|
+
}
|
|
3410
3418
|
// color-tiles.png → color uniform (with bundled fallback)
|
|
3411
|
-
|
|
3419
|
+
if (hasExplicitBase) {
|
|
3420
|
+
loader.load(colorUrl, (tex) => applyTex(tex, 'color'), undefined, () => {
|
|
3421
|
+
loader.load(BUNDLED_COLOR_TILES_URL, (tex) => applyTex(tex, 'color'));
|
|
3422
|
+
});
|
|
3423
|
+
}
|
|
3424
|
+
else {
|
|
3412
3425
|
loader.load(BUNDLED_COLOR_TILES_URL, (tex) => applyTex(tex, 'color'));
|
|
3413
|
-
}
|
|
3426
|
+
}
|
|
3414
3427
|
// ani-tiles.exr → posTex uniform
|
|
3415
3428
|
// Uses manual fetch + EXRLoader.parse() to avoid Vite pre-bundling issues
|
|
3416
3429
|
// with EXRLoader.load() (FileLoader response-type handling).
|
|
@@ -3457,11 +3470,16 @@ class TraitVisualCanvasComponent {
|
|
|
3457
3470
|
buf[i] = raw.charCodeAt(i);
|
|
3458
3471
|
parseExrBuffer(buf.buffer);
|
|
3459
3472
|
};
|
|
3460
|
-
|
|
3461
|
-
|
|
3462
|
-
|
|
3463
|
-
|
|
3464
|
-
|
|
3473
|
+
if (hasExplicitBase) {
|
|
3474
|
+
fetch(aniUrl)
|
|
3475
|
+
.then(r => { if (!r.ok)
|
|
3476
|
+
throw new Error(`HTTP ${r.status}`); return r.arrayBuffer(); })
|
|
3477
|
+
.then(buf => parseExrBuffer(buf))
|
|
3478
|
+
.catch(() => loadBundledExr());
|
|
3479
|
+
}
|
|
3480
|
+
else {
|
|
3481
|
+
loadBundledExr();
|
|
3482
|
+
}
|
|
3465
3483
|
this.lastAppliedGalaxyParticleCount = this.galaxyParticleCount;
|
|
3466
3484
|
}
|
|
3467
3485
|
/** Rebuild the galaxy point cloud (e.g. when galaxyParticleCount changes). Preserves material + textures. */
|
|
@@ -4333,10 +4351,10 @@ class TraitVisualCanvasComponent {
|
|
|
4333
4351
|
preferences: bh.preferences.slice(),
|
|
4334
4352
|
};
|
|
4335
4353
|
}
|
|
4336
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
4337
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
4354
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TraitVisualCanvasComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
4355
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: TraitVisualCanvasComponent, isStandalone: true, selector: "tv-trait-visual-canvas", inputs: { config: "config", assetsBaseUrl: "assetsBaseUrl", verboseWebGLLog: "verboseWebGLLog", command: "command" }, outputs: { nodeSelected: "nodeSelected", rightClick: "rightClick", frameRendered: "frameRendered", perfStats: "perfStats", cameraLockChanged: "cameraLockChanged", nodeDataChanged: "nodeDataChanged" }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["rendererCanvas"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"trait-visual-canvas-host\">\r\n <canvas #rendererCanvas></canvas>\r\n @if (webGLUnavailable) {\r\n <div class=\"webgl-unavailable\" role=\"alert\">\r\n <p class=\"webgl-unavailable-title\">3D display is unavailable</p>\r\n <p class=\"webgl-unavailable-message\">{{ webGLErrorMessage || 'Your browser or device could not start or keep the 3D display.' }}</p>\r\n <ul class=\"webgl-unavailable-suggestions\">\r\n <li><strong>Close other tabs or apps</strong> that use 3D or heavy graphics (games, maps, video tools, or other simulations) to free up your device.</li>\r\n <li><strong>Use a device with a more capable graphics card</strong>, or try viewing this simulation on a desktop or laptop for better compatibility.</li>\r\n <li>Try a <strong>different browser</strong> (for example, Chrome, Firefox, or Edge).</li>\r\n <li><strong>Update your computer's graphics drivers.</strong></li>\r\n <li><strong>Refresh this page</strong> after closing other apps.</li>\r\n </ul>\r\n <button class=\"webgl-retry-button\" (click)=\"retryWebGL()\" i18n>Retry 3D Display</button>\r\n </div>\r\n }\r\n</div>\r\n", styles: [":host{display:block;width:100%;height:100%}.trait-visual-canvas-host{width:100%;height:100%;position:relative}.trait-visual-canvas-host canvas{display:block;width:100%;height:100%}.trait-visual-canvas-host .webgl-unavailable{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:1.5rem;background:#000000d9;color:#ccc}.trait-visual-canvas-host .webgl-unavailable .webgl-unavailable-title{margin:0 0 .5rem;font-weight:600;color:#fff}.trait-visual-canvas-host .webgl-unavailable .webgl-unavailable-message{margin:0 0 1rem;font-size:.9rem;text-align:center;max-width:28rem}.trait-visual-canvas-host .webgl-unavailable .webgl-unavailable-suggestions{margin:0;padding-left:1.25rem;font-size:.85rem;text-align:left;max-width:28rem;line-height:1.4}.trait-visual-canvas-host .webgl-unavailable .webgl-unavailable-suggestions li{margin-bottom:.5rem}.trait-visual-canvas-host .webgl-unavailable .webgl-retry-button{margin-top:1rem;padding:.5rem 1.5rem;font-size:.95rem;font-weight:500;color:#fff;background:#4a6cf7;border:none;border-radius:4px;cursor:pointer;transition:background .15s}.trait-visual-canvas-host .webgl-unavailable .webgl-retry-button:hover{background:#3b5de7}\n"] });
|
|
4338
4356
|
}
|
|
4339
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
4357
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TraitVisualCanvasComponent, decorators: [{
|
|
4340
4358
|
type: Component,
|
|
4341
4359
|
args: [{ selector: 'tv-trait-visual-canvas', standalone: true, template: "<div class=\"trait-visual-canvas-host\">\r\n <canvas #rendererCanvas></canvas>\r\n @if (webGLUnavailable) {\r\n <div class=\"webgl-unavailable\" role=\"alert\">\r\n <p class=\"webgl-unavailable-title\">3D display is unavailable</p>\r\n <p class=\"webgl-unavailable-message\">{{ webGLErrorMessage || 'Your browser or device could not start or keep the 3D display.' }}</p>\r\n <ul class=\"webgl-unavailable-suggestions\">\r\n <li><strong>Close other tabs or apps</strong> that use 3D or heavy graphics (games, maps, video tools, or other simulations) to free up your device.</li>\r\n <li><strong>Use a device with a more capable graphics card</strong>, or try viewing this simulation on a desktop or laptop for better compatibility.</li>\r\n <li>Try a <strong>different browser</strong> (for example, Chrome, Firefox, or Edge).</li>\r\n <li><strong>Update your computer's graphics drivers.</strong></li>\r\n <li><strong>Refresh this page</strong> after closing other apps.</li>\r\n </ul>\r\n <button class=\"webgl-retry-button\" (click)=\"retryWebGL()\" i18n>Retry 3D Display</button>\r\n </div>\r\n }\r\n</div>\r\n", styles: [":host{display:block;width:100%;height:100%}.trait-visual-canvas-host{width:100%;height:100%;position:relative}.trait-visual-canvas-host canvas{display:block;width:100%;height:100%}.trait-visual-canvas-host .webgl-unavailable{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:1.5rem;background:#000000d9;color:#ccc}.trait-visual-canvas-host .webgl-unavailable .webgl-unavailable-title{margin:0 0 .5rem;font-weight:600;color:#fff}.trait-visual-canvas-host .webgl-unavailable .webgl-unavailable-message{margin:0 0 1rem;font-size:.9rem;text-align:center;max-width:28rem}.trait-visual-canvas-host .webgl-unavailable .webgl-unavailable-suggestions{margin:0;padding-left:1.25rem;font-size:.85rem;text-align:left;max-width:28rem;line-height:1.4}.trait-visual-canvas-host .webgl-unavailable .webgl-unavailable-suggestions li{margin-bottom:.5rem}.trait-visual-canvas-host .webgl-unavailable .webgl-retry-button{margin-top:1rem;padding:.5rem 1.5rem;font-size:.95rem;font-weight:500;color:#fff;background:#4a6cf7;border:none;border-radius:4px;cursor:pointer;transition:background .15s}.trait-visual-canvas-host .webgl-unavailable .webgl-retry-button:hover{background:#3b5de7}\n"] }]
|
|
4342
4360
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }], propDecorators: { config: [{
|