1 |
- {"ast":null,"code":"import { SceneLoader } from \"../Loading/sceneLoader.js\";\nimport { Logger } from \"../Misc/logger.js\";\nimport { FilesInputStore } from \"./filesInputStore.js\";\n/**\n * Class used to help managing file picking and drag-n-drop\n */\nexport class FilesInput {\n /**\n * List of files ready to be loaded\n */\n static get FilesToLoad() {\n return FilesInputStore.FilesToLoad;\n }\n /**\n * Creates a new FilesInput\n * @param engine defines the rendering engine\n * @param scene defines the hosting scene\n * @param sceneLoadedCallback callback called when scene (files provided) is loaded\n * @param progressCallback callback called to track progress\n * @param additionalRenderLoopLogicCallback callback called to add user logic to the rendering loop\n * @param textureLoadingCallback callback called when a texture is loading\n * @param startingProcessingFilesCallback callback called when the system is about to process all files\n * @param onReloadCallback callback called when a reload is requested\n * @param errorCallback callback call if an error occurs\n * @param useAppend defines if the file loaded must be appended (true) or have the scene replaced (false, default behavior)\n */\n constructor(engine, scene, sceneLoadedCallback, progressCallback, additionalRenderLoopLogicCallback, textureLoadingCallback, startingProcessingFilesCallback, onReloadCallback, errorCallback, useAppend = false) {\n this.useAppend = useAppend;\n /**\n * Callback called when a file is processed\n * @returns false to abort the process\n */\n this.onProcessFileCallback = () => {\n return true;\n };\n /**\n * If a loading UI should be displayed while loading a file\n */\n this.displayLoadingUI = true;\n /**\n * Function used when loading the scene file\n * @param sceneFile defines the file to load\n * @param onProgress onProgress callback called while loading the file\n * @returns a promise completing when the load is complete\n */\n this.loadAsync = (sceneFile, onProgress) => this.useAppend ? SceneLoader.AppendAsync(\"file:\", sceneFile, this._currentScene, onProgress) : SceneLoader.LoadAsync(\"file:\", sceneFile, this._engine, onProgress);\n this._engine = engine;\n this._currentScene = scene;\n this._sceneLoadedCallback = sceneLoadedCallback;\n this._progressCallback = progressCallback;\n this._additionalRenderLoopLogicCallback = additionalRenderLoopLogicCallback;\n this._textureLoadingCallback = textureLoadingCallback;\n this._startingProcessingFilesCallback = startingProcessingFilesCallback;\n this._onReloadCallback = onReloadCallback;\n this._errorCallback = errorCallback;\n }\n /**\n * Calls this function to listen to drag'n'drop events on a specific DOM element\n * @param elementToMonitor defines the DOM element to track\n */\n monitorElementForDragNDrop(elementToMonitor) {\n if (elementToMonitor) {\n this._elementToMonitor = elementToMonitor;\n this._dragEnterHandler = e => {\n this._drag(e);\n };\n this._dragOverHandler = e => {\n this._drag(e);\n };\n this._dropHandler = e => {\n this._drop(e);\n };\n this._elementToMonitor.addEventListener(\"dragenter\", this._dragEnterHandler, false);\n this._elementToMonitor.addEventListener(\"dragover\", this._dragOverHandler, false);\n this._elementToMonitor.addEventListener(\"drop\", this._dropHandler, false);\n }\n }\n /** Gets the current list of files to load */\n get filesToLoad() {\n return this._filesToLoad;\n }\n /**\n * Release all associated resources\n */\n dispose() {\n if (!this._elementToMonitor) {\n return;\n }\n this._elementToMonitor.removeEventListener(\"dragenter\", this._dragEnterHandler);\n this._elementToMonitor.removeEventListener(\"dragover\", this._dragOverHandler);\n this._elementToMonitor.removeEventListener(\"drop\", this._dropHandler);\n }\n _renderFunction() {\n if (this._additionalRenderLoopLogicCallback) {\n this._additionalRenderLoopLogicCallback();\n }\n if (this._currentScene) {\n if (this._textureLoadingCallback) {\n const remaining = this._currentScene.getWaitingItemsCount();\n if (remaining > 0) {\n this._textureLoadingCallback(remaining);\n }\n }\n this._currentScene.render();\n }\n }\n _drag(e) {\n e.stopPropagation();\n e.preventDefault();\n }\n _drop(eventDrop) {\n eventDrop.stopPropagation();\n eventDrop.preventDefault();\n this.loadFiles(eventDrop);\n }\n _traverseFolder(folder, files, remaining, callback) {\n const reader = folder.createReader();\n const relativePath = folder.fullPath.replace(/^\\//, \"\").replace(/(.+?)\\/?$/, \"$1/\");\n reader.readEntries(entries => {\n remaining.count += entries.length;\n for (const entry of entries) {\n if (entry.isFile) {\n entry.file(file => {\n file.correctName = relativePath + file.name;\n files.push(file);\n if (--remaining.count === 0) {\n callback();\n }\n });\n } else if (entry.isDirectory) {\n this._traverseFolder(entry, files, remaining, callback);\n }\n }\n if (--remaining.count === 0) {\n callback();\n }\n });\n }\n _processFiles(files) {\n for (let i = 0; i < files.length; i++) {\n const name = files[i].correctName.toLowerCase();\n const extension = name.split(\".\").pop();\n if (!this.onProcessFileCallback(files[i], name, extension, sceneFile => this._sceneFileToLoad = sceneFile)) {\n continue;\n }\n if (SceneLoader.IsPluginForExtensionAvailable(\".\" + extension)) {\n this._sceneFileToLoad = files[i];\n }\n FilesInput.FilesToLoad[name] = files[i];\n }\n }\n /**\n * Load files from a drop event\n * @param event defines the drop event to use as source\n */\n loadFiles(event) {\n // Handling data transfer via drag'n'drop\n if (event && event.dataTransfer && event.dataTransfer.files) {\n this._filesToLoad = event.dataTransfer.files;\n }\n // Handling files from input files\n if (event && event.target && event.target.files) {\n this._filesToLoad = event.target.files;\n }\n if (!this._filesToLoad || this._filesToLoad.length === 0) {\n return;\n }\n if (this._startingProcessingFilesCallback) {\n this._startingProcessingFilesCallback(this._filesToLoad);\n }\n if (this._filesToLoad && this._filesToLoad.length > 0) {\n const files = [];\n const folders = [];\n const items = event.dataTransfer ? event.dataTransfer.items : null;\n for (let i = 0; i < this._filesToLoad.length; i++) {\n const fileToLoad = this._filesToLoad[i];\n const name = fileToLoad.name.toLowerCase();\n let entry;\n fileToLoad.correctName = name;\n if (items) {\n const item = items[i];\n if (item.getAsEntry) {\n entry = item.getAsEntry();\n } else if (item.webkitGetAsEntry) {\n entry = item.webkitGetAsEntry();\n }\n }\n if (!entry) {\n files.push(fileToLoad);\n } else {\n if (entry.isDirectory) {\n folders.push(entry);\n } else {\n files.push(fileToLoad);\n }\n }\n }\n if (folders.length === 0) {\n this._processFiles(files);\n this._processReload();\n } else {\n const remaining = {\n count: folders.length\n };\n for (const folder of folders) {\n this._traverseFolder(folder, files, remaining, () => {\n this._processFiles(files);\n if (remaining.count === 0) {\n this._processReload();\n }\n });\n }\n }\n }\n }\n _processReload() {\n if (this._onReloadCallback) {\n this._onReloadCallback(this._sceneFileToLoad);\n } else {\n this.reload();\n }\n }\n /**\n * Reload the current scene from the loaded files\n */\n reload() {\n // If a scene file has been provided\n if (this._sceneFileToLoad) {\n if (!this.useAppend) {\n if (this._currentScene) {\n if (Logger.errorsCount > 0) {\n Logger.ClearLogCache();\n }\n this._engine.stopRenderLoop();\n }\n }\n SceneLoader.ShowLoadingScreen = false;\n if (this.displayLoadingUI) {\n this._engine.displayLoadingUI();\n }\n this.loadAsync(this._sceneFileToLoad, this._progressCallback).then(scene => {\n // if appending do nothing\n if (!this.useAppend) {\n if (this._currentScene) {\n this._currentScene.dispose();\n }\n this._currentScene = scene;\n // Wait for textures and shaders to be ready\n this._currentScene.executeWhenReady(() => {\n if (this.displayLoadingUI) {\n this._engine.hideLoadingUI();\n }\n this._engine.runRenderLoop(() => {\n this._renderFunction();\n });\n });\n } else {\n if (this.displayLoadingUI) {\n this._engine.hideLoadingUI();\n }\n }\n if (this._sceneLoadedCallback && this._currentScene) {\n this._sceneLoadedCallback(this._sceneFileToLoad, this._currentScene);\n }\n }).catch(error => {\n if (this.displayLoadingUI) {\n this._engine.hideLoadingUI();\n }\n if (this._errorCallback) {\n this._errorCallback(this._sceneFileToLoad, this._currentScene, error.message);\n }\n });\n } else {\n if (this._filesToLoad.length === 1) {\n const name = this._filesToLoad[0].name.toLowerCase();\n const extension = name.split(\".\").pop();\n if (extension) {\n switch (extension.toLowerCase()) {\n case \"dds\":\n case \"env\":\n case \"hdr\":\n {\n return; // Ignore error in that case\n }\n }\n }\n }\n Logger.Error(\"Please provide a valid .babylon file.\");\n }\n }\n}","map":{"version":3,"names":["SceneLoader","Logger","FilesInputStore","FilesInput","FilesToLoad","constructor","engine","scene","sceneLoadedCallback","progressCallback","additionalRenderLoopLogicCallback","textureLoadingCallback","startingProcessingFilesCallback","onReloadCallback","errorCallback","useAppend","onProcessFileCallback","displayLoadingUI","loadAsync","sceneFile","onProgress","AppendAsync","_currentScene","LoadAsync","_engine","_sceneLoadedCallback","_progressCallback","_additionalRenderLoopLogicCallback","_textureLoadingCallback","_startingProcessingFilesCallback","_onReloadCallback","_errorCallback","monitorElementForDragNDrop","elementToMonitor","_elementToMonitor","_dragEnterHandler","e","_drag","_dragOverHandler","_dropHandler","_drop","addEventListener","filesToLoad","_filesToLoad","dispose","removeEventListener","_renderFunction","remaining","getWaitingItemsCount","render","stopPropagation","preventDefault","eventDrop","loadFiles","_traverseFolder","folder","files","callback","reader","createReader","relativePath","fullPath","replace","readEntries","entries","count","length","entry","isFile","file","correctName","name","push","isDirectory","_processFiles","i","toLowerCase","extension","split","pop","_sceneFileToLoad","IsPluginForExtensionAvailable","event","dataTransfer","target","folders","items","fileToLoad","item","getAsEntry","webkitGetAsEntry","_processReload","reload","errorsCount","ClearLogCache","stopRenderLoop","ShowLoadingScreen","then","executeWhenReady","hideLoadingUI","runRenderLoop","catch","error","message","Error"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Misc/filesInput.js"],"sourcesContent":["import { SceneLoader } from \"../Loading/sceneLoader.js\";\nimport { Logger } from \"../Misc/logger.js\";\nimport { FilesInputStore } from \"./filesInputStore.js\";\n/**\n * Class used to help managing file picking and drag-n-drop\n */\nexport class FilesInput {\n /**\n * List of files ready to be loaded\n */\n static get FilesToLoad() {\n return FilesInputStore.FilesToLoad;\n }\n /**\n * Creates a new FilesInput\n * @param engine defines the rendering engine\n * @param scene defines the hosting scene\n * @param sceneLoadedCallback callback called when scene (files provided) is loaded\n * @param progressCallback callback called to track progress\n * @param additionalRenderLoopLogicCallback callback called to add user logic to the rendering loop\n * @param textureLoadingCallback callback called when a texture is loading\n * @param startingProcessingFilesCallback callback called when the system is about to process all files\n * @param onReloadCallback callback called when a reload is requested\n * @param errorCallback callback call if an error occurs\n * @param useAppend defines if the file loaded must be appended (true) or have the scene replaced (false, default behavior)\n */\n constructor(engine, scene, sceneLoadedCallback, progressCallback, additionalRenderLoopLogicCallback, textureLoadingCallback, startingProcessingFilesCallback, onReloadCallback, errorCallback, useAppend = false) {\n this.useAppend = useAppend;\n /**\n * Callback called when a file is processed\n * @returns false to abort the process\n */\n this.onProcessFileCallback = () => {\n return true;\n };\n /**\n * If a loading UI should be displayed while loading a file\n */\n this.displayLoadingUI = true;\n /**\n * Function used when loading the scene file\n * @param sceneFile defines the file to load\n * @param onProgress onProgress callback called while loading the file\n * @returns a promise completing when the load is complete\n */\n this.loadAsync = (sceneFile, onProgress) => this.useAppend ? SceneLoader.AppendAsync(\"file:\", sceneFile, this._currentScene, onProgress) : SceneLoader.LoadAsync(\"file:\", sceneFile, this._engine, onProgress);\n this._engine = engine;\n this._currentScene = scene;\n this._sceneLoadedCallback = sceneLoadedCallback;\n this._progressCallback = progressCallback;\n this._additionalRenderLoopLogicCallback = additionalRenderLoopLogicCallback;\n this._textureLoadingCallback = textureLoadingCallback;\n this._startingProcessingFilesCallback = startingProcessingFilesCallback;\n this._onReloadCallback = onReloadCallback;\n this._errorCallback = errorCallback;\n }\n /**\n * Calls this function to listen to drag'n'drop events on a specific DOM element\n * @param elementToMonitor defines the DOM element to track\n */\n monitorElementForDragNDrop(elementToMonitor) {\n if (elementToMonitor) {\n this._elementToMonitor = elementToMonitor;\n this._dragEnterHandler = (e) => {\n this._drag(e);\n };\n this._dragOverHandler = (e) => {\n this._drag(e);\n };\n this._dropHandler = (e) => {\n this._drop(e);\n };\n this._elementToMonitor.addEventListener(\"dragenter\", this._dragEnterHandler, false);\n this._elementToMonitor.addEventListener(\"dragover\", this._dragOverHandler, false);\n this._elementToMonitor.addEventListener(\"drop\", this._dropHandler, false);\n }\n }\n /** Gets the current list of files to load */\n get filesToLoad() {\n return this._filesToLoad;\n }\n /**\n * Release all associated resources\n */\n dispose() {\n if (!this._elementToMonitor) {\n return;\n }\n this._elementToMonitor.removeEventListener(\"dragenter\", this._dragEnterHandler);\n this._elementToMonitor.removeEventListener(\"dragover\", this._dragOverHandler);\n this._elementToMonitor.removeEventListener(\"drop\", this._dropHandler);\n }\n _renderFunction() {\n if (this._additionalRenderLoopLogicCallback) {\n this._additionalRenderLoopLogicCallback();\n }\n if (this._currentScene) {\n if (this._textureLoadingCallback) {\n const remaining = this._currentScene.getWaitingItemsCount();\n if (remaining > 0) {\n this._textureLoadingCallback(remaining);\n }\n }\n this._currentScene.render();\n }\n }\n _drag(e) {\n e.stopPropagation();\n e.preventDefault();\n }\n _drop(eventDrop) {\n eventDrop.stopPropagation();\n eventDrop.preventDefault();\n this.loadFiles(eventDrop);\n }\n _traverseFolder(folder, files, remaining, callback) {\n const reader = folder.createReader();\n const relativePath = folder.fullPath.replace(/^\\//, \"\").replace(/(.+?)\\/?$/, \"$1/\");\n reader.readEntries((entries) => {\n remaining.count += entries.length;\n for (const entry of entries) {\n if (entry.isFile) {\n entry.file((file) => {\n file.correctName = relativePath + file.name;\n files.push(file);\n if (--remaining.count === 0) {\n callback();\n }\n });\n }\n else if (entry.isDirectory) {\n this._traverseFolder(entry, files, remaining, callback);\n }\n }\n if (--remaining.count === 0) {\n callback();\n }\n });\n }\n _processFiles(files) {\n for (let i = 0; i < files.length; i++) {\n const name = files[i].correctName.toLowerCase();\n const extension = name.split(\".\").pop();\n if (!this.onProcessFileCallback(files[i], name, extension, (sceneFile) => (this._sceneFileToLoad = sceneFile))) {\n continue;\n }\n if (SceneLoader.IsPluginForExtensionAvailable(\".\" + extension)) {\n this._sceneFileToLoad = files[i];\n }\n FilesInput.FilesToLoad[name] = files[i];\n }\n }\n /**\n * Load files from a drop event\n * @param event defines the drop event to use as source\n */\n loadFiles(event) {\n // Handling data transfer via drag'n'drop\n if (event && event.dataTransfer && event.dataTransfer.files) {\n this._filesToLoad = event.dataTransfer.files;\n }\n // Handling files from input files\n if (event && event.target && event.target.files) {\n this._filesToLoad = event.target.files;\n }\n if (!this._filesToLoad || this._filesToLoad.length === 0) {\n return;\n }\n if (this._startingProcessingFilesCallback) {\n this._startingProcessingFilesCallback(this._filesToLoad);\n }\n if (this._filesToLoad && this._filesToLoad.length > 0) {\n const files = [];\n const folders = [];\n const items = event.dataTransfer ? event.dataTransfer.items : null;\n for (let i = 0; i < this._filesToLoad.length; i++) {\n const fileToLoad = this._filesToLoad[i];\n const name = fileToLoad.name.toLowerCase();\n let entry;\n fileToLoad.correctName = name;\n if (items) {\n const item = items[i];\n if (item.getAsEntry) {\n entry = item.getAsEntry();\n }\n else if (item.webkitGetAsEntry) {\n entry = item.webkitGetAsEntry();\n }\n }\n if (!entry) {\n files.push(fileToLoad);\n }\n else {\n if (entry.isDirectory) {\n folders.push(entry);\n }\n else {\n files.push(fileToLoad);\n }\n }\n }\n if (folders.length === 0) {\n this._processFiles(files);\n this._processReload();\n }\n else {\n const remaining = { count: folders.length };\n for (const folder of folders) {\n this._traverseFolder(folder, files, remaining, () => {\n this._processFiles(files);\n if (remaining.count === 0) {\n this._processReload();\n }\n });\n }\n }\n }\n }\n _processReload() {\n if (this._onReloadCallback) {\n this._onReloadCallback(this._sceneFileToLoad);\n }\n else {\n this.reload();\n }\n }\n /**\n * Reload the current scene from the loaded files\n */\n reload() {\n // If a scene file has been provided\n if (this._sceneFileToLoad) {\n if (!this.useAppend) {\n if (this._currentScene) {\n if (Logger.errorsCount > 0) {\n Logger.ClearLogCache();\n }\n this._engine.stopRenderLoop();\n }\n }\n SceneLoader.ShowLoadingScreen = false;\n if (this.displayLoadingUI) {\n this._engine.displayLoadingUI();\n }\n this.loadAsync(this._sceneFileToLoad, this._progressCallback)\n .then((scene) => {\n // if appending do nothing\n if (!this.useAppend) {\n if (this._currentScene) {\n this._currentScene.dispose();\n }\n this._currentScene = scene;\n // Wait for textures and shaders to be ready\n this._currentScene.executeWhenReady(() => {\n if (this.displayLoadingUI) {\n this._engine.hideLoadingUI();\n }\n this._engine.runRenderLoop(() => {\n this._renderFunction();\n });\n });\n }\n else {\n if (this.displayLoadingUI) {\n this._engine.hideLoadingUI();\n }\n }\n if (this._sceneLoadedCallback && this._currentScene) {\n this._sceneLoadedCallback(this._sceneFileToLoad, this._currentScene);\n }\n })\n .catch((error) => {\n if (this.displayLoadingUI) {\n this._engine.hideLoadingUI();\n }\n if (this._errorCallback) {\n this._errorCallback(this._sceneFileToLoad, this._currentScene, error.message);\n }\n });\n }\n else {\n if (this._filesToLoad.length === 1) {\n const name = this._filesToLoad[0].name.toLowerCase();\n const extension = name.split(\".\").pop();\n if (extension) {\n switch (extension.toLowerCase()) {\n case \"dds\":\n case \"env\":\n case \"hdr\": {\n return; // Ignore error in that case\n }\n }\n }\n }\n Logger.Error(\"Please provide a valid .babylon file.\");\n }\n }\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}
|