@littlecarlito/blorktools 0.50.4 → 0.51.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.
- package/bin/cli.js +69 -0
- package/package.json +13 -7
- package/src/asset_debugger/axis-indicator/axis-indicator.css +6 -0
- package/src/asset_debugger/axis-indicator/axis-indicator.html +20 -0
- package/src/asset_debugger/axis-indicator/axis-indicator.js +822 -0
- package/src/asset_debugger/debugger-scene/debugger-scene.css +142 -0
- package/src/asset_debugger/debugger-scene/debugger-scene.html +80 -0
- package/src/asset_debugger/debugger-scene/debugger-scene.js +791 -0
- package/src/asset_debugger/header/header.css +73 -0
- package/src/asset_debugger/header/header.html +24 -0
- package/src/asset_debugger/header/header.js +224 -0
- package/src/asset_debugger/index.html +76 -0
- package/src/asset_debugger/landing-page/landing-page.css +396 -0
- package/src/asset_debugger/landing-page/landing-page.html +81 -0
- package/src/asset_debugger/landing-page/landing-page.js +611 -0
- package/src/asset_debugger/loading-splash/loading-splash.css +195 -0
- package/src/asset_debugger/loading-splash/loading-splash.html +22 -0
- package/src/asset_debugger/loading-splash/loading-splash.js +59 -0
- package/src/asset_debugger/loading-splash/preview-loading-splash.js +66 -0
- package/src/asset_debugger/main.css +14 -0
- package/src/asset_debugger/modals/examples-modal/examples-modal.css +41 -0
- package/src/asset_debugger/modals/examples-modal/examples-modal.html +18 -0
- package/src/asset_debugger/modals/examples-modal/examples-modal.js +111 -0
- package/src/asset_debugger/modals/examples-modal/examples.js +125 -0
- package/src/asset_debugger/modals/html-editor-modal/html-editor-modal.css +452 -0
- package/src/asset_debugger/modals/html-editor-modal/html-editor-modal.html +87 -0
- package/src/asset_debugger/modals/html-editor-modal/html-editor-modal.js +675 -0
- package/src/asset_debugger/modals/mesh-info-modal/mesh-info-modal.css +219 -0
- package/src/asset_debugger/modals/mesh-info-modal/mesh-info-modal.html +20 -0
- package/src/asset_debugger/modals/mesh-info-modal/mesh-info-modal.js +548 -0
- package/src/asset_debugger/modals/settings-modal/settings-modal.css +103 -0
- package/src/asset_debugger/modals/settings-modal/settings-modal.html +158 -0
- package/src/asset_debugger/modals/settings-modal/settings-modal.js +475 -0
- package/src/asset_debugger/panels/asset-panel/asset-panel.css +263 -0
- package/src/asset_debugger/panels/asset-panel/asset-panel.html +123 -0
- package/src/asset_debugger/panels/asset-panel/asset-panel.js +136 -0
- package/src/asset_debugger/panels/asset-panel/atlas-heading/atlas-heading.css +94 -0
- package/src/asset_debugger/panels/asset-panel/atlas-heading/atlas-heading.js +312 -0
- package/src/asset_debugger/panels/asset-panel/mesh-heading/mesh-heading.css +129 -0
- package/src/asset_debugger/panels/asset-panel/mesh-heading/mesh-heading.js +486 -0
- package/src/asset_debugger/panels/asset-panel/rig-heading/rig-heading.css +545 -0
- package/src/asset_debugger/panels/asset-panel/rig-heading/rig-heading.js +538 -0
- package/src/asset_debugger/panels/asset-panel/uv-heading/uv-heading.css +70 -0
- package/src/asset_debugger/panels/asset-panel/uv-heading/uv-heading.js +586 -0
- package/src/asset_debugger/panels/world-panel/world-panel.css +364 -0
- package/src/asset_debugger/panels/world-panel/world-panel.html +173 -0
- package/src/asset_debugger/panels/world-panel/world-panel.js +1891 -0
- package/src/asset_debugger/router.js +190 -0
- package/src/asset_debugger/util/animation/playback/animation-playback-controller.js +150 -0
- package/src/asset_debugger/util/animation/playback/animation-preview-controller.js +316 -0
- package/src/asset_debugger/util/animation/playback/css3d-bounce-controller.js +400 -0
- package/src/asset_debugger/util/animation/playback/css3d-reversal-controller.js +821 -0
- package/src/asset_debugger/util/animation/render/css3d-prerender-controller.js +696 -0
- package/src/asset_debugger/util/animation/render/debug-texture-factory.js +0 -0
- package/src/asset_debugger/util/animation/render/iframe2texture-render-controller.js +199 -0
- package/src/asset_debugger/util/animation/render/image2texture-prerender-controller.js +461 -0
- package/src/asset_debugger/util/animation/render/pbr-material-factory.js +82 -0
- package/src/asset_debugger/util/common.css +280 -0
- package/src/asset_debugger/util/data/animation-classifier.js +323 -0
- package/src/asset_debugger/util/data/duplicate-handler.js +20 -0
- package/src/asset_debugger/util/data/glb-buffer-manager.js +407 -0
- package/src/asset_debugger/util/data/glb-classifier.js +290 -0
- package/src/asset_debugger/util/data/html-formatter.js +76 -0
- package/src/asset_debugger/util/data/html-linter.js +276 -0
- package/src/asset_debugger/util/data/localstorage-manager.js +265 -0
- package/src/asset_debugger/util/data/mesh-html-manager.js +295 -0
- package/src/asset_debugger/util/data/string-serder.js +303 -0
- package/src/asset_debugger/util/data/texture-classifier.js +663 -0
- package/src/asset_debugger/util/data/upload/background-file-handler.js +292 -0
- package/src/asset_debugger/util/data/upload/dropzone-preview-controller.js +396 -0
- package/src/asset_debugger/util/data/upload/file-upload-manager.js +495 -0
- package/src/asset_debugger/util/data/upload/glb-file-handler.js +36 -0
- package/src/asset_debugger/util/data/upload/glb-preview-controller.js +317 -0
- package/src/asset_debugger/util/data/upload/lighting-file-handler.js +194 -0
- package/src/asset_debugger/util/data/upload/model-file-manager.js +104 -0
- package/src/asset_debugger/util/data/upload/texture-file-handler.js +166 -0
- package/src/asset_debugger/util/data/upload/zip-handler.js +686 -0
- package/src/asset_debugger/util/loaders/html2canvas-loader.js +107 -0
- package/src/asset_debugger/util/rig/bone-kinematics.js +403 -0
- package/src/asset_debugger/util/rig/rig-constraint-manager.js +618 -0
- package/src/asset_debugger/util/rig/rig-controller.js +612 -0
- package/src/asset_debugger/util/rig/rig-factory.js +628 -0
- package/src/asset_debugger/util/rig/rig-handle-factory.js +46 -0
- package/src/asset_debugger/util/rig/rig-label-factory.js +441 -0
- package/src/asset_debugger/util/rig/rig-mouse-handler.js +377 -0
- package/src/asset_debugger/util/rig/rig-state-manager.js +175 -0
- package/src/asset_debugger/util/rig/rig-tooltip-manager.js +267 -0
- package/src/asset_debugger/util/rig/rig-ui-factory.js +700 -0
- package/src/asset_debugger/util/scene/background-manager.js +284 -0
- package/src/asset_debugger/util/scene/camera-controller.js +243 -0
- package/src/asset_debugger/util/scene/css3d-debug-controller.js +406 -0
- package/src/asset_debugger/util/scene/css3d-frame-factory.js +113 -0
- package/src/asset_debugger/util/scene/css3d-scene-manager.js +529 -0
- package/src/asset_debugger/util/scene/glb-controller.js +208 -0
- package/src/asset_debugger/util/scene/lighting-manager.js +690 -0
- package/src/asset_debugger/util/scene/threejs-model-manager.js +437 -0
- package/src/asset_debugger/util/scene/threejs-preview-manager.js +207 -0
- package/src/asset_debugger/util/scene/threejs-preview-setup.js +478 -0
- package/src/asset_debugger/util/scene/threejs-scene-controller.js +286 -0
- package/src/asset_debugger/util/scene/ui-manager.js +107 -0
- package/src/asset_debugger/util/state/animation-state.js +128 -0
- package/src/asset_debugger/util/state/css3d-state.js +83 -0
- package/src/asset_debugger/util/state/glb-preview-state.js +31 -0
- package/src/asset_debugger/util/state/log-util.js +197 -0
- package/src/asset_debugger/util/state/scene-state.js +452 -0
- package/src/asset_debugger/util/state/threejs-state.js +54 -0
- package/src/asset_debugger/util/workers/lighting-worker.js +61 -0
- package/src/asset_debugger/util/workers/model-worker.js +109 -0
- package/src/asset_debugger/util/workers/texture-worker.js +54 -0
- package/src/asset_debugger/util/workers/worker-manager.js +212 -0
- package/src/asset_debugger/widgets/mesh-info-widget.js +280 -0
- package/src/index.html +261 -0
- package/src/index.js +8 -0
- package/vite.config.js +66 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import { getState, updateState } from '../../state/scene-state';
|
|
3
|
+
import { processTextureFile } from '../../workers/worker-manager';
|
|
4
|
+
import { hidePreviewLoading, showPreviewLoading } from '../../../loading-splash/preview-loading-splash';
|
|
5
|
+
import { formatFileSize } from './file-upload-manager';
|
|
6
|
+
import { createClearButton } from '../../../landing-page/landing-page';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Handle texture file upload
|
|
10
|
+
* @param {File} file - The uploaded file
|
|
11
|
+
* @param {string} textureType - The type of texture ('baseColor', 'orm', 'normal')
|
|
12
|
+
* @param {HTMLElement} infoElement - Element to display file info
|
|
13
|
+
* @param {HTMLElement} previewElement - Element to display file preview
|
|
14
|
+
* @param {HTMLElement} dropzone - The dropzone element
|
|
15
|
+
*/
|
|
16
|
+
export function handleTextureUpload(file, textureType, infoElement, previewElement, dropzone) {
|
|
17
|
+
// Store the file in the state
|
|
18
|
+
const state = getState();
|
|
19
|
+
state.textureFiles[textureType] = file;
|
|
20
|
+
updateState('textureFiles', state.textureFiles);
|
|
21
|
+
|
|
22
|
+
// Check if dropzone is defined before using it
|
|
23
|
+
if (!dropzone) {
|
|
24
|
+
console.error(`Error: dropzone is undefined in handleTextureUpload for ${textureType}`);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Store original h3 title
|
|
29
|
+
const originalTitle = dropzone.querySelector('h3').textContent;
|
|
30
|
+
|
|
31
|
+
// Mark dropzone as having a file
|
|
32
|
+
dropzone.classList.add('has-file');
|
|
33
|
+
|
|
34
|
+
// Clear the entire dropzone content
|
|
35
|
+
dropzone.innerHTML = '';
|
|
36
|
+
|
|
37
|
+
// Add back just the title as a header
|
|
38
|
+
const titleElement = document.createElement('h3');
|
|
39
|
+
titleElement.textContent = originalTitle;
|
|
40
|
+
dropzone.appendChild(titleElement);
|
|
41
|
+
|
|
42
|
+
// Add the clear button using the shared function with the specific texture type
|
|
43
|
+
dropzone.appendChild(createClearButton(dropzone, textureType, originalTitle));
|
|
44
|
+
|
|
45
|
+
// Add file info
|
|
46
|
+
infoElement = document.createElement('p');
|
|
47
|
+
infoElement.className = 'file-info';
|
|
48
|
+
infoElement.textContent = `${file.name} (${formatFileSize(file.size)})`;
|
|
49
|
+
dropzone.appendChild(infoElement);
|
|
50
|
+
|
|
51
|
+
// Create a container for the preview that will hold both the image and the loading indicator
|
|
52
|
+
const containerDiv = document.createElement('div');
|
|
53
|
+
containerDiv.className = 'texture-preview-container';
|
|
54
|
+
|
|
55
|
+
// Add event listener to prevent click events from reaching the dropzone
|
|
56
|
+
containerDiv.addEventListener('click', (e) => {
|
|
57
|
+
e.stopPropagation();
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
// Add event listener to prevent mousedown events to avoid accidental drag interactions
|
|
61
|
+
containerDiv.addEventListener('mousedown', (e) => {
|
|
62
|
+
e.stopPropagation();
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
// Add the container directly to the dropzone
|
|
66
|
+
dropzone.appendChild(containerDiv);
|
|
67
|
+
|
|
68
|
+
// Show loading state directly on the container
|
|
69
|
+
showPreviewLoading(containerDiv);
|
|
70
|
+
|
|
71
|
+
// Process the texture file in a web worker
|
|
72
|
+
processTextureFile(file, textureType)
|
|
73
|
+
.then(result => {
|
|
74
|
+
// Create preview image using the data URL returned by the worker
|
|
75
|
+
const img = document.createElement('img');
|
|
76
|
+
img.src = result.previewDataUrl;
|
|
77
|
+
img.className = 'texture-preview-img hidden';
|
|
78
|
+
containerDiv.appendChild(img);
|
|
79
|
+
|
|
80
|
+
// Load texture first, then update the preview
|
|
81
|
+
return loadTextureFromFile(file, textureType)
|
|
82
|
+
.then(() => {
|
|
83
|
+
// Now that texture is loaded, show the image
|
|
84
|
+
img.classList.remove('hidden');
|
|
85
|
+
img.classList.add('visible');
|
|
86
|
+
|
|
87
|
+
// Hide loading indicator
|
|
88
|
+
hidePreviewLoading(containerDiv);
|
|
89
|
+
|
|
90
|
+
// Update atlas visualization if we're on that tab
|
|
91
|
+
const atlasTab = document.getElementById('atlas-tab');
|
|
92
|
+
if (atlasTab && atlasTab.classList.contains('active')) {
|
|
93
|
+
updateAtlasVisualization();
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
})
|
|
97
|
+
.catch(error => {
|
|
98
|
+
console.error(`Error processing ${textureType} texture:`, error);
|
|
99
|
+
alert(`Error processing ${textureType} texture: ${error.message}`);
|
|
100
|
+
|
|
101
|
+
// On error, make sure textureObjects entry is null
|
|
102
|
+
const state = getState();
|
|
103
|
+
if (state.textureObjects) {
|
|
104
|
+
state.textureObjects[textureType] = null;
|
|
105
|
+
updateState('textureObjects', state.textureObjects);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Fall back to direct loading if worker fails
|
|
109
|
+
const reader = new FileReader();
|
|
110
|
+
reader.onload = e => {
|
|
111
|
+
const img = document.createElement('img');
|
|
112
|
+
img.src = e.target.result;
|
|
113
|
+
img.className = 'texture-preview-img visible';
|
|
114
|
+
containerDiv.appendChild(img);
|
|
115
|
+
|
|
116
|
+
// Hide loading indicator
|
|
117
|
+
hidePreviewLoading(containerDiv);
|
|
118
|
+
};
|
|
119
|
+
reader.readAsDataURL(file);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Load texture from file object
|
|
125
|
+
* @param {File} file - The file object containing the texture
|
|
126
|
+
* @param {string} textureType - The type of texture (baseColor, orm, normal)
|
|
127
|
+
* @returns {Promise<THREE.Texture>} Promise resolving to the loaded texture
|
|
128
|
+
*/
|
|
129
|
+
export function loadTextureFromFile(file, textureType) {
|
|
130
|
+
return new Promise((resolve, reject) => {
|
|
131
|
+
const reader = new FileReader();
|
|
132
|
+
|
|
133
|
+
reader.onload = (e) => {
|
|
134
|
+
try {
|
|
135
|
+
const texture = new THREE.TextureLoader().load(e.target.result, (texture) => {
|
|
136
|
+
// Set texture parameters based on type
|
|
137
|
+
if (textureType === 'baseColor') {
|
|
138
|
+
texture.encoding = THREE.sRGBEncoding;
|
|
139
|
+
} else {
|
|
140
|
+
texture.encoding = THREE.LinearEncoding;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Common texture settings for all types
|
|
144
|
+
texture.wrapS = THREE.RepeatWrapping;
|
|
145
|
+
texture.wrapT = THREE.RepeatWrapping;
|
|
146
|
+
texture.flipY = false; // Don't flip Y for GLB compatibility
|
|
147
|
+
|
|
148
|
+
// Store the texture in state
|
|
149
|
+
const state = getState();
|
|
150
|
+
state.textureObjects[textureType] = texture;
|
|
151
|
+
updateState('textureObjects', state.textureObjects);
|
|
152
|
+
|
|
153
|
+
resolve(texture);
|
|
154
|
+
});
|
|
155
|
+
} catch (err) {
|
|
156
|
+
reject(err);
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
reader.onerror = (err) => {
|
|
161
|
+
reject(err);
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
reader.readAsDataURL(file);
|
|
165
|
+
});
|
|
166
|
+
}
|