( loadedFiles: LoadedFiles, sourceId: string, file: File )
| 41 | * the renderer disposes the previous SplatMesh when splatFile changes. |
| 42 | */ |
| 43 | export function applyActiveSplatFile( |
| 44 | loadedFiles: LoadedFiles, |
| 45 | sourceId: string, |
| 46 | file: File |
| 47 | ): LoadedFiles { |
| 48 | const previousActiveFile = loadedFiles.splatFile; |
| 49 | const sources = (loadedFiles.splatFileSources ?? []).map((source) => { |
| 50 | if (source.id === sourceId) { |
| 51 | return { ...source, file }; |
| 52 | } |
| 53 | if (source.file && source.file === previousActiveFile && source.url) { |
| 54 | return { ...source, file: undefined }; |
| 55 | } |
| 56 | return source; |
| 57 | }); |
| 58 | const splatFiles = sources |
| 59 | .map((source) => source.file) |
| 60 | .filter((candidate): candidate is File => Boolean(candidate)); |
| 61 | |
| 62 | return { ...loadedFiles, splatFileSources: sources, splatFile: file, splatFiles }; |
| 63 | } |
| 64 | |
| 65 | function joinSplatUrl(baseUrl: string, path: string): string { |
| 66 | const encoded = encodeUrlPath(path); |
no outgoing calls
no test coverage detected