@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,208 @@
|
|
|
1
|
+
import { processGLBFile } from '../data/upload/glb-file-handler.js';
|
|
2
|
+
import { getState, updateState } from '../state/scene-state.js';
|
|
3
|
+
|
|
4
|
+
let currentGlbBuffer = null;
|
|
5
|
+
let bufferUpdateListeners = [];
|
|
6
|
+
let initialized = false;
|
|
7
|
+
|
|
8
|
+
export function initModelIntegration() {
|
|
9
|
+
console.log('Initializing model-HTML integration');
|
|
10
|
+
|
|
11
|
+
const state = getState();
|
|
12
|
+
if (!state.currentGlb) {
|
|
13
|
+
updateState('currentGlb', {
|
|
14
|
+
arrayBuffer: null,
|
|
15
|
+
fileName: null,
|
|
16
|
+
fileSize: null
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
setupModelObserver();
|
|
21
|
+
initialized = true;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function setupModelObserver() {
|
|
25
|
+
let previousModelFile = null;
|
|
26
|
+
|
|
27
|
+
setInterval(() => {
|
|
28
|
+
const state = getState();
|
|
29
|
+
|
|
30
|
+
if (state.modelFile !== previousModelFile && state.modelFile) {
|
|
31
|
+
previousModelFile = state.modelFile;
|
|
32
|
+
console.log('Model file changed, processing for HTML editor integration');
|
|
33
|
+
processModelFileForHtmlEditor(state.modelFile);
|
|
34
|
+
}
|
|
35
|
+
}, 1000);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export async function processModelFileForHtmlEditor(file) {
|
|
39
|
+
try {
|
|
40
|
+
const result = await processGLBFile(file);
|
|
41
|
+
|
|
42
|
+
if (!result || !result.arrayBuffer) {
|
|
43
|
+
console.error('processGLBModel failed to return a valid buffer');
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
console.debug(`processModelFileForHtmlEditor: processed buffer size ${result.arrayBuffer.byteLength} bytes`);
|
|
48
|
+
|
|
49
|
+
const clonedBuffer = result.arrayBuffer.slice(0);
|
|
50
|
+
|
|
51
|
+
const state = getState();
|
|
52
|
+
updateState('currentGlb', {
|
|
53
|
+
arrayBuffer: clonedBuffer,
|
|
54
|
+
fileName: result.fileName,
|
|
55
|
+
fileSize: result.fileSize
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
setCurrentGlbBuffer(clonedBuffer);
|
|
59
|
+
|
|
60
|
+
console.log('Model processed for HTML editor integration:', result.fileName);
|
|
61
|
+
return clonedBuffer;
|
|
62
|
+
} catch (error) {
|
|
63
|
+
console.error('Error processing model file for HTML editor:', error);
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export function onGlbBufferUpdate(callback) {
|
|
69
|
+
if (typeof callback !== 'function') return () => {};
|
|
70
|
+
|
|
71
|
+
bufferUpdateListeners.push(callback);
|
|
72
|
+
|
|
73
|
+
return () => {
|
|
74
|
+
const index = bufferUpdateListeners.indexOf(callback);
|
|
75
|
+
if (index >= 0) {
|
|
76
|
+
bufferUpdateListeners.splice(index, 1);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function notifyBufferUpdate(glbBuffer) {
|
|
82
|
+
setCurrentGlbBuffer(glbBuffer);
|
|
83
|
+
|
|
84
|
+
for (const listener of bufferUpdateListeners) {
|
|
85
|
+
try {
|
|
86
|
+
listener(glbBuffer);
|
|
87
|
+
} catch (error) {
|
|
88
|
+
console.error('Error in buffer update listener:', error);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const event = new CustomEvent('glb-buffer-changed', { detail: { buffer: glbBuffer } });
|
|
93
|
+
window.dispatchEvent(event);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export async function updateGlbFile(updatedGlb, returnBuffer = false) {
|
|
97
|
+
try {
|
|
98
|
+
console.log(`Updating GLB file with buffer size: ${updatedGlb ? updatedGlb.byteLength : 0} bytes`);
|
|
99
|
+
|
|
100
|
+
if (!updatedGlb || updatedGlb.byteLength === 0) {
|
|
101
|
+
console.error('Cannot update GLB: Invalid buffer provided');
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const dataView = new DataView(updatedGlb);
|
|
106
|
+
const magic = dataView.getUint32(0, true);
|
|
107
|
+
const expectedMagic = 0x46546C67;
|
|
108
|
+
|
|
109
|
+
if (magic !== expectedMagic) {
|
|
110
|
+
console.error(`Invalid GLB file: Incorrect magic bytes`);
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const clonedBuffer = updatedGlb.slice(0);
|
|
115
|
+
notifyBufferUpdate(clonedBuffer);
|
|
116
|
+
|
|
117
|
+
const state = getState();
|
|
118
|
+
if (state && state.currentGlb) {
|
|
119
|
+
updateState('currentGlb', {
|
|
120
|
+
...state.currentGlb,
|
|
121
|
+
arrayBuffer: clonedBuffer
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
if (typeof window.updateDownloadLink === 'function') {
|
|
125
|
+
window.updateDownloadLink(clonedBuffer);
|
|
126
|
+
}
|
|
127
|
+
} else {
|
|
128
|
+
console.warn('No currentGlb in state to update');
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return returnBuffer ? clonedBuffer : true;
|
|
132
|
+
} catch (error) {
|
|
133
|
+
console.error('Error updating GLB file:', error);
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export async function downloadUpdatedGlb() {
|
|
139
|
+
const glbBuffer = getCurrentGlbBuffer();
|
|
140
|
+
if (!glbBuffer) {
|
|
141
|
+
alert('No GLB file loaded to download.');
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
const state = getState();
|
|
146
|
+
let fileName = 'model_' + getCurrentTimestamp() + '.glb';
|
|
147
|
+
|
|
148
|
+
if (state.currentGlb && state.currentGlb.fileName) {
|
|
149
|
+
const originalName = state.currentGlb.fileName;
|
|
150
|
+
const nameParts = originalName.split('.');
|
|
151
|
+
if (nameParts.length > 1) {
|
|
152
|
+
const extension = nameParts.pop();
|
|
153
|
+
fileName = nameParts.join('.') + '_' + getCurrentTimestamp() + '.' + extension;
|
|
154
|
+
} else {
|
|
155
|
+
fileName = originalName + '_' + getCurrentTimestamp() + '.glb';
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
const blob = new Blob([glbBuffer], { type: 'model/gltf-binary' });
|
|
160
|
+
const url = URL.createObjectURL(blob);
|
|
161
|
+
|
|
162
|
+
const link = document.createElement('a');
|
|
163
|
+
link.href = url;
|
|
164
|
+
link.download = fileName;
|
|
165
|
+
link.style.display = 'none';
|
|
166
|
+
|
|
167
|
+
document.body.appendChild(link);
|
|
168
|
+
link.click();
|
|
169
|
+
|
|
170
|
+
setTimeout(() => {
|
|
171
|
+
document.body.removeChild(link);
|
|
172
|
+
URL.revokeObjectURL(url);
|
|
173
|
+
}, 100);
|
|
174
|
+
|
|
175
|
+
console.log(`Downloaded GLB as ${fileName}`);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
function getCurrentTimestamp() {
|
|
179
|
+
return new Date().toISOString().replace(/[:.]/g, '-').slice(0, -5);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
export function getMeshByIndex(meshIndex) {
|
|
183
|
+
const state = getState();
|
|
184
|
+
if (!state || !state.meshes || meshIndex >= state.meshes.length) {
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
return state.meshes[meshIndex];
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
export function setCurrentGlbBuffer(glbBuffer) {
|
|
193
|
+
currentGlbBuffer = glbBuffer;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
export function getCurrentGlbBuffer() {
|
|
197
|
+
if (currentGlbBuffer) {
|
|
198
|
+
return currentGlbBuffer;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
const state = getState();
|
|
202
|
+
if (state && state.currentGlb && state.currentGlb.arrayBuffer) {
|
|
203
|
+
currentGlbBuffer = state.currentGlb.arrayBuffer;
|
|
204
|
+
return currentGlbBuffer;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
return null;
|
|
208
|
+
}
|