mirror of
https://gitgud.io/AbstractConcept/rimworld-animation-studio.git
synced 2024-08-15 00:43:27 +00:00
90 lines
3.5 KiB
Text
90 lines
3.5 KiB
Text
|
var StandaloneFileBrowserWebGLPlugin = {
|
||
|
// Open file.
|
||
|
// gameObjectNamePtr: Unique GameObject name. Required for calling back unity with SendMessage.
|
||
|
// methodNamePtr: Callback method name on given GameObject.
|
||
|
// filter: Filter files. Example filters:
|
||
|
// Match all image files: "image/*"
|
||
|
// Match all video files: "video/*"
|
||
|
// Match all audio files: "audio/*"
|
||
|
// Custom: ".plist, .xml, .yaml"
|
||
|
// multiselect: Allows multiple file selection
|
||
|
UploadFile: function(gameObjectNamePtr, methodNamePtr, filterPtr, multiselect) {
|
||
|
gameObjectName = Pointer_stringify(gameObjectNamePtr);
|
||
|
methodName = Pointer_stringify(methodNamePtr);
|
||
|
filter = Pointer_stringify(filterPtr);
|
||
|
|
||
|
// Delete if element exist
|
||
|
var fileInput = document.getElementById(gameObjectName)
|
||
|
if (fileInput) {
|
||
|
document.body.removeChild(fileInput);
|
||
|
}
|
||
|
|
||
|
fileInput = document.createElement('input');
|
||
|
fileInput.setAttribute('id', gameObjectName);
|
||
|
fileInput.setAttribute('type', 'file');
|
||
|
fileInput.setAttribute('style','display:none;');
|
||
|
fileInput.setAttribute('style','visibility:hidden;');
|
||
|
if (multiselect) {
|
||
|
fileInput.setAttribute('multiple', '');
|
||
|
}
|
||
|
if (filter) {
|
||
|
fileInput.setAttribute('accept', filter);
|
||
|
}
|
||
|
fileInput.onclick = function (event) {
|
||
|
// File dialog opened
|
||
|
this.value = null;
|
||
|
};
|
||
|
fileInput.onchange = function (event) {
|
||
|
// multiselect works
|
||
|
var urls = [];
|
||
|
for (var i = 0; i < event.target.files.length; i++) {
|
||
|
urls.push(URL.createObjectURL(event.target.files[i]));
|
||
|
}
|
||
|
// File selected
|
||
|
SendMessage(gameObjectName, methodName, urls.join());
|
||
|
|
||
|
// Remove after file selected
|
||
|
document.body.removeChild(fileInput);
|
||
|
}
|
||
|
document.body.appendChild(fileInput);
|
||
|
|
||
|
document.onmouseup = function() {
|
||
|
fileInput.click();
|
||
|
document.onmouseup = null;
|
||
|
}
|
||
|
},
|
||
|
|
||
|
// Save file
|
||
|
// DownloadFile method does not open SaveFileDialog like standalone builds, its just allows user to download file
|
||
|
// gameObjectNamePtr: Unique GameObject name. Required for calling back unity with SendMessage.
|
||
|
// methodNamePtr: Callback method name on given GameObject.
|
||
|
// filenamePtr: Filename with extension
|
||
|
// byteArray: byte[]
|
||
|
// byteArraySize: byte[].Length
|
||
|
DownloadFile: function(gameObjectNamePtr, methodNamePtr, filenamePtr, byteArray, byteArraySize) {
|
||
|
gameObjectName = Pointer_stringify(gameObjectNamePtr);
|
||
|
methodName = Pointer_stringify(methodNamePtr);
|
||
|
filename = Pointer_stringify(filenamePtr);
|
||
|
|
||
|
var bytes = new Uint8Array(byteArraySize);
|
||
|
for (var i = 0; i < byteArraySize; i++) {
|
||
|
bytes[i] = HEAPU8[byteArray + i];
|
||
|
}
|
||
|
|
||
|
var downloader = window.document.createElement('a');
|
||
|
downloader.setAttribute('id', gameObjectName);
|
||
|
downloader.href = window.URL.createObjectURL(new Blob([bytes], { type: 'application/octet-stream' }));
|
||
|
downloader.download = filename;
|
||
|
document.body.appendChild(downloader);
|
||
|
|
||
|
document.onmouseup = function() {
|
||
|
downloader.click();
|
||
|
document.body.removeChild(downloader);
|
||
|
document.onmouseup = null;
|
||
|
|
||
|
SendMessage(gameObjectName, methodName);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
mergeInto(LibraryManager.library, StandaloneFileBrowserWebGLPlugin);
|