2using System.Collections;
3using System.Collections.Generic;
16 private IList<ItemWithStream> _items;
17 private string _modelExtension;
18 private Action<AssetLoaderContext> _onLoad;
19 private Action<AssetLoaderContext> _onMaterialsLoad;
20 private Action<AssetLoaderContext, float> _onProgress;
21 private Action<IContextualizedError> _onError;
22 private Action<bool> _onBeginLoad;
23 private GameObject _wrapperGameObject;
30 var gameObject =
new GameObject(
"AssetLoaderFilePicker");
32 return assetLoaderFilePicker;
45 Action<AssetLoaderContext> onMaterialsLoad, Action<AssetLoaderContext, float> onProgress,
46 Action<bool> onBeginLoad, Action<IContextualizedError> onError, GameObject wrapperGameObject,
50 _onMaterialsLoad = onMaterialsLoad;
51 _onProgress = onProgress;
53 _onBeginLoad = onBeginLoad;
54 _wrapperGameObject = wrapperGameObject;
55 _assetLoaderOptions = assetLoaderOptions;
62#if (UNITY_WSA || UNITY_ANDROID) && !UNITY_EDITOR
63 Dispatcher.InvokeAsync(
new ContextualizedAction(DestroyMe));
71 private void DestroyMe()
76 private void HandleFileLoading()
78 StartCoroutine(DoHandleFileLoading());
81 private IEnumerator DoHandleFileLoading()
83 var hasFiles = _items !=
null && (_items.Count > 0 || _items.Count == 1 && _items[0].HasData);
84 if (_onBeginLoad !=
null) _onBeginLoad(hasFiles);
85 yield
return new WaitForEndOfFrame();
86 yield
return new WaitForEndOfFrame();
93 var modelFileWithStream = FindModelFile();
94 var modelFilename = modelFileWithStream.Name;
95 var modelStream = modelFileWithStream.OpenStream();
96 if (_assetLoaderOptions ==
null) _assetLoaderOptions = AssetLoader.CreateDefaultLoaderOptions();
99 _assetLoaderOptions.FixedAllocations.Add(_assetLoaderOptions.ExternalDataMapper);
100 _assetLoaderOptions.FixedAllocations.Add(_assetLoaderOptions.TextureMapper);
101 _modelExtension = modelFilename !=
null ? FileUtils.GetFileExtension(modelFilename,
false) :
null;
102 if (_modelExtension ==
"zip")
104 if (modelStream !=
null)
105 AssetLoaderZip.LoadModelFromZipStream(modelStream, _onLoad, _onMaterialsLoad, _onProgress, _onError,
106 _wrapperGameObject, _assetLoaderOptions, _items,
null);
108 AssetLoaderZip.LoadModelFromZipFile(modelFilename, _onLoad, _onMaterialsLoad, _onProgress, _onError,
109 _wrapperGameObject, _assetLoaderOptions, _items,
null);
113 if (modelStream !=
null)
114 AssetLoader.LoadModelFromStream(modelStream, modelFilename, _modelExtension, _onLoad,
115 _onMaterialsLoad, _onProgress, _onError, _wrapperGameObject, _assetLoaderOptions, _items);
117 AssetLoader.LoadModelFromFile(modelFilename, _onLoad, _onMaterialsLoad, _onProgress, _onError,
118 _wrapperGameObject, _assetLoaderOptions, _items);
127 var extensionFilters =
new List<ExtensionFilter>();
128 var subExtensions =
new List<string>();
129 foreach (var extension
in extensions)
132 subExtensions.Add(extension);
135 subExtensions.Add(
"zip");
138 extensionFilters.Insert(0,
new ExtensionFilter(
"Accepted Files", subExtensions.ToArray()));
139 return extensionFilters.ToArray();
144 if (_items.Count == 1)
return _items.First();
145 var extensions = Readers.Extensions;
146 foreach (var item
in _items)
148 if (item.Name ==
null)
continue;
149 var extension = FileUtils.GetFileExtension(item.Name,
false);
150 if (extensions.Contains(extension))
return item;
156 private void OnItemsWithStreamSelected(IList<ItemWithStream> itemsWithStream)
158 if (itemsWithStream !=
null)
160 _items = itemsWithStream;
161 Dispatcher.InvokeAsync(
162 new ContextualizedAction(HandleFileLoading));
TriLibCore.AssetLoaderOptions AssetLoaderOptions
Represents an Asset Loader which loads files using a platform-specific file picker.
static AssetLoaderFilePicker Create()
Creates the Asset Loader File Picker Singleton instance.
void LoadModelFromFilePickerAsync(string title, Action< AssetLoaderContext > onLoad, Action< AssetLoaderContext > onMaterialsLoad, Action< AssetLoaderContext, float > onProgress, Action< bool > onBeginLoad, Action< IContextualizedError > onError, GameObject wrapperGameObject, AssetLoaderOptions assetLoaderOptions)
Loads a Model from the OS file picker asynchronously, or synchronously when the OS doesn't support Th...
Represents a class used to load external data from a series of selected files.
Represents a class used to load Textures from a list of selected files.
Represents a platform-specific file with a Stream.
Represents a platform-specific file browser.
static void OpenFilePanelAsync(string title, string directory, string extension, bool multiselect, Action< IList< ItemWithStream > > cb)
Native open file dialog async
Represents a file picker extension filter.
string[] Extensions
Filter extensions.