@littlecarlito/blorktools 0.50.3 → 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.
Files changed (114) hide show
  1. package/bin/cli.js +69 -0
  2. package/package.json +13 -7
  3. package/src/asset_debugger/axis-indicator/axis-indicator.css +6 -0
  4. package/src/asset_debugger/axis-indicator/axis-indicator.html +20 -0
  5. package/src/asset_debugger/axis-indicator/axis-indicator.js +822 -0
  6. package/src/asset_debugger/debugger-scene/debugger-scene.css +142 -0
  7. package/src/asset_debugger/debugger-scene/debugger-scene.html +80 -0
  8. package/src/asset_debugger/debugger-scene/debugger-scene.js +791 -0
  9. package/src/asset_debugger/header/header.css +73 -0
  10. package/src/asset_debugger/header/header.html +24 -0
  11. package/src/asset_debugger/header/header.js +224 -0
  12. package/src/asset_debugger/index.html +76 -0
  13. package/src/asset_debugger/landing-page/landing-page.css +396 -0
  14. package/src/asset_debugger/landing-page/landing-page.html +81 -0
  15. package/src/asset_debugger/landing-page/landing-page.js +611 -0
  16. package/src/asset_debugger/loading-splash/loading-splash.css +195 -0
  17. package/src/asset_debugger/loading-splash/loading-splash.html +22 -0
  18. package/src/asset_debugger/loading-splash/loading-splash.js +59 -0
  19. package/src/asset_debugger/loading-splash/preview-loading-splash.js +66 -0
  20. package/src/asset_debugger/main.css +14 -0
  21. package/src/asset_debugger/modals/examples-modal/examples-modal.css +41 -0
  22. package/src/asset_debugger/modals/examples-modal/examples-modal.html +18 -0
  23. package/src/asset_debugger/modals/examples-modal/examples-modal.js +111 -0
  24. package/src/asset_debugger/modals/examples-modal/examples.js +125 -0
  25. package/src/asset_debugger/modals/html-editor-modal/html-editor-modal.css +452 -0
  26. package/src/asset_debugger/modals/html-editor-modal/html-editor-modal.html +87 -0
  27. package/src/asset_debugger/modals/html-editor-modal/html-editor-modal.js +675 -0
  28. package/src/asset_debugger/modals/mesh-info-modal/mesh-info-modal.css +219 -0
  29. package/src/asset_debugger/modals/mesh-info-modal/mesh-info-modal.html +20 -0
  30. package/src/asset_debugger/modals/mesh-info-modal/mesh-info-modal.js +548 -0
  31. package/src/asset_debugger/modals/settings-modal/settings-modal.css +103 -0
  32. package/src/asset_debugger/modals/settings-modal/settings-modal.html +158 -0
  33. package/src/asset_debugger/modals/settings-modal/settings-modal.js +475 -0
  34. package/src/asset_debugger/panels/asset-panel/asset-panel.css +263 -0
  35. package/src/asset_debugger/panels/asset-panel/asset-panel.html +123 -0
  36. package/src/asset_debugger/panels/asset-panel/asset-panel.js +136 -0
  37. package/src/asset_debugger/panels/asset-panel/atlas-heading/atlas-heading.css +94 -0
  38. package/src/asset_debugger/panels/asset-panel/atlas-heading/atlas-heading.js +312 -0
  39. package/src/asset_debugger/panels/asset-panel/mesh-heading/mesh-heading.css +129 -0
  40. package/src/asset_debugger/panels/asset-panel/mesh-heading/mesh-heading.js +486 -0
  41. package/src/asset_debugger/panels/asset-panel/rig-heading/rig-heading.css +545 -0
  42. package/src/asset_debugger/panels/asset-panel/rig-heading/rig-heading.js +538 -0
  43. package/src/asset_debugger/panels/asset-panel/uv-heading/uv-heading.css +70 -0
  44. package/src/asset_debugger/panels/asset-panel/uv-heading/uv-heading.js +586 -0
  45. package/src/asset_debugger/panels/world-panel/world-panel.css +364 -0
  46. package/src/asset_debugger/panels/world-panel/world-panel.html +173 -0
  47. package/src/asset_debugger/panels/world-panel/world-panel.js +1891 -0
  48. package/src/asset_debugger/router.js +190 -0
  49. package/src/asset_debugger/util/animation/playback/animation-playback-controller.js +150 -0
  50. package/src/asset_debugger/util/animation/playback/animation-preview-controller.js +316 -0
  51. package/src/asset_debugger/util/animation/playback/css3d-bounce-controller.js +400 -0
  52. package/src/asset_debugger/util/animation/playback/css3d-reversal-controller.js +821 -0
  53. package/src/asset_debugger/util/animation/render/css3d-prerender-controller.js +696 -0
  54. package/src/asset_debugger/util/animation/render/debug-texture-factory.js +0 -0
  55. package/src/asset_debugger/util/animation/render/iframe2texture-render-controller.js +199 -0
  56. package/src/asset_debugger/util/animation/render/image2texture-prerender-controller.js +461 -0
  57. package/src/asset_debugger/util/animation/render/pbr-material-factory.js +82 -0
  58. package/src/asset_debugger/util/common.css +280 -0
  59. package/src/asset_debugger/util/data/animation-classifier.js +323 -0
  60. package/src/asset_debugger/util/data/duplicate-handler.js +20 -0
  61. package/src/asset_debugger/util/data/glb-buffer-manager.js +407 -0
  62. package/src/asset_debugger/util/data/glb-classifier.js +290 -0
  63. package/src/asset_debugger/util/data/html-formatter.js +76 -0
  64. package/src/asset_debugger/util/data/html-linter.js +276 -0
  65. package/src/asset_debugger/util/data/localstorage-manager.js +265 -0
  66. package/src/asset_debugger/util/data/mesh-html-manager.js +295 -0
  67. package/src/asset_debugger/util/data/string-serder.js +303 -0
  68. package/src/asset_debugger/util/data/texture-classifier.js +663 -0
  69. package/src/asset_debugger/util/data/upload/background-file-handler.js +292 -0
  70. package/src/asset_debugger/util/data/upload/dropzone-preview-controller.js +396 -0
  71. package/src/asset_debugger/util/data/upload/file-upload-manager.js +495 -0
  72. package/src/asset_debugger/util/data/upload/glb-file-handler.js +36 -0
  73. package/src/asset_debugger/util/data/upload/glb-preview-controller.js +317 -0
  74. package/src/asset_debugger/util/data/upload/lighting-file-handler.js +194 -0
  75. package/src/asset_debugger/util/data/upload/model-file-manager.js +104 -0
  76. package/src/asset_debugger/util/data/upload/texture-file-handler.js +166 -0
  77. package/src/asset_debugger/util/data/upload/zip-handler.js +686 -0
  78. package/src/asset_debugger/util/loaders/html2canvas-loader.js +107 -0
  79. package/src/asset_debugger/util/rig/bone-kinematics.js +403 -0
  80. package/src/asset_debugger/util/rig/rig-constraint-manager.js +618 -0
  81. package/src/asset_debugger/util/rig/rig-controller.js +612 -0
  82. package/src/asset_debugger/util/rig/rig-factory.js +628 -0
  83. package/src/asset_debugger/util/rig/rig-handle-factory.js +46 -0
  84. package/src/asset_debugger/util/rig/rig-label-factory.js +441 -0
  85. package/src/asset_debugger/util/rig/rig-mouse-handler.js +377 -0
  86. package/src/asset_debugger/util/rig/rig-state-manager.js +175 -0
  87. package/src/asset_debugger/util/rig/rig-tooltip-manager.js +267 -0
  88. package/src/asset_debugger/util/rig/rig-ui-factory.js +700 -0
  89. package/src/asset_debugger/util/scene/background-manager.js +284 -0
  90. package/src/asset_debugger/util/scene/camera-controller.js +243 -0
  91. package/src/asset_debugger/util/scene/css3d-debug-controller.js +406 -0
  92. package/src/asset_debugger/util/scene/css3d-frame-factory.js +113 -0
  93. package/src/asset_debugger/util/scene/css3d-scene-manager.js +529 -0
  94. package/src/asset_debugger/util/scene/glb-controller.js +208 -0
  95. package/src/asset_debugger/util/scene/lighting-manager.js +690 -0
  96. package/src/asset_debugger/util/scene/threejs-model-manager.js +437 -0
  97. package/src/asset_debugger/util/scene/threejs-preview-manager.js +207 -0
  98. package/src/asset_debugger/util/scene/threejs-preview-setup.js +478 -0
  99. package/src/asset_debugger/util/scene/threejs-scene-controller.js +286 -0
  100. package/src/asset_debugger/util/scene/ui-manager.js +107 -0
  101. package/src/asset_debugger/util/state/animation-state.js +128 -0
  102. package/src/asset_debugger/util/state/css3d-state.js +83 -0
  103. package/src/asset_debugger/util/state/glb-preview-state.js +31 -0
  104. package/src/asset_debugger/util/state/log-util.js +197 -0
  105. package/src/asset_debugger/util/state/scene-state.js +452 -0
  106. package/src/asset_debugger/util/state/threejs-state.js +54 -0
  107. package/src/asset_debugger/util/workers/lighting-worker.js +61 -0
  108. package/src/asset_debugger/util/workers/model-worker.js +109 -0
  109. package/src/asset_debugger/util/workers/texture-worker.js +54 -0
  110. package/src/asset_debugger/util/workers/worker-manager.js +212 -0
  111. package/src/asset_debugger/widgets/mesh-info-widget.js +280 -0
  112. package/src/index.html +261 -0
  113. package/src/index.js +8 -0
  114. 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
+ }