mirror of
https://github.com/JannisX11/blockbench.git
synced 2024-11-21 01:13:37 +08:00
281 lines
7.5 KiB
JavaScript
281 lines
7.5 KiB
JavaScript
(function() {
|
|
$.getScript("js/file_saver.js");
|
|
})()
|
|
|
|
$('.open-in-browser').click((event) => {
|
|
event.preventDefault();
|
|
window.open(event.target.href, '_blank');
|
|
});
|
|
var lastImportEvent;
|
|
|
|
function tryLoadPOSTModel() {
|
|
if ($('#post_model').text() !== '') {
|
|
if ($('#post_textures').text() !== '') {
|
|
Project.dataURLTextures = true
|
|
}
|
|
loadFile($('#post_model').text(), 'model', true)
|
|
$('#post_model').remove()
|
|
if ($('#post_textures').text() !== '') {
|
|
var data = JSON.parse( $('#post_textures').text() )
|
|
for (var key in data) {
|
|
if (data.hasOwnProperty(key)) {
|
|
var tex = getTextureById(key+'');
|
|
if (!tex) return;
|
|
tex.img.src = ''
|
|
tex.iconpath = data[key]
|
|
}
|
|
}
|
|
textures.forEach(function(tex) {
|
|
tex.load()
|
|
})
|
|
}
|
|
return true;
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
|
|
//Loader Open
|
|
function openFile(makeNew) {
|
|
g_makeNew = makeNew
|
|
fileLoaderLoad('.json', false, readFile)
|
|
$('#file_folder').val('')
|
|
}
|
|
function importExtrusion(makeNew) {
|
|
g_makeNew = makeNew
|
|
fileLoaderLoad('.png', true, readExtrusion)
|
|
}
|
|
//Texture
|
|
function openTexture() {
|
|
fileLoaderLoad('.png', true, readTexture)
|
|
}
|
|
function loadBackgroundImage(event) {
|
|
if (event !== undefined) {
|
|
if (event.altKey === true) {
|
|
textPrompt('Background Image Path', 'active_scene.background.image', true)
|
|
return;
|
|
}
|
|
}
|
|
fileLoaderLoad('image/*', false, readBackgroundImage)
|
|
}
|
|
//Main
|
|
function fileLoaderLoad(type, showInputs, importFunction) {
|
|
//Meta
|
|
$('#file_name').val('')
|
|
if (showInputs === true) {
|
|
$('#file_loader_meta').show()
|
|
} else {
|
|
$('#file_loader_meta').hide()
|
|
}
|
|
//Loader
|
|
$('#file_upload').attr('accept', type)
|
|
|
|
//Clear Events
|
|
try {
|
|
$('#web_import_btn')[0].removeEventListener('click', lastImportEvent)
|
|
$('#file_upload')[0].removeEventListener('change', lastImportEvent)
|
|
} catch (err) {}
|
|
//Add Events
|
|
$('#web_import_btn')[0].addEventListener('click', importFunction)
|
|
$('#file_upload')[0].addEventListener('change', function() {
|
|
var path_parts = $(this).val().split('\\')
|
|
$('#file_name').val(path_parts[path_parts.length-1])
|
|
})
|
|
lastImportEvent = importFunction
|
|
|
|
showDialog('file_loader')
|
|
}
|
|
|
|
|
|
//Loader Read
|
|
function readTexture() {
|
|
hideDialog()
|
|
var file = $('#file_upload').get(0).files[0]
|
|
var reader = new FileReader()
|
|
reader.onloadend = function() {
|
|
var path = reader.result
|
|
|
|
var name = $('#file_name').val()
|
|
if (name == undefined) {
|
|
name = 'Texture'
|
|
}
|
|
|
|
var folder = $('#file_folder').val()
|
|
if (folder == "") {
|
|
folder = "blocks"
|
|
}
|
|
|
|
new Texture({folder: folder, name: name}).add().fromDataURL(path).fillParticle()
|
|
|
|
}
|
|
if (file) {
|
|
reader.readAsDataURL(file)
|
|
} else {
|
|
|
|
}
|
|
}
|
|
function readFile() {
|
|
hideDialog()
|
|
var file = $('#file_upload').get(0).files[0]
|
|
var reader = new FileReader()
|
|
reader.onloadend = function() {
|
|
|
|
loadFile(reader.result, 'model', g_makeNew)
|
|
}
|
|
if (file) {
|
|
reader.readAsText(file)
|
|
} else {
|
|
|
|
}
|
|
}
|
|
function reopenTexture(texture) {
|
|
var file = $('.dialog:visible #texture_change').get(0).files[0]
|
|
var reader = new FileReader()
|
|
reader.onloadend = function() {
|
|
|
|
texture.iconpath = reader.result
|
|
var img = new Image()
|
|
try {
|
|
img.src = reader.result
|
|
} catch(err) {
|
|
console.log(err)
|
|
img.src = 'missing.png'
|
|
}
|
|
var tex = new THREE.Texture(img)
|
|
img.tex = tex;
|
|
img.tex.magFilter = THREE.NearestFilter
|
|
img.tex.minFilter = THREE.LinearMipMapLinearFilter
|
|
var thisTexture = texture;
|
|
img.onload = function() {
|
|
this.tex.needsUpdate = true;
|
|
thisTexture.res = img.naturalWidth;
|
|
}
|
|
texture.material = new THREE.MeshBasicMaterial({color: 0xffffff, map: tex, transparent: true});
|
|
texture.reload()
|
|
Canvas.updateAllFaces()
|
|
Blockbench.dispatchEvent( 'change_texture_path', {texture: texture} )
|
|
}
|
|
if (file) {
|
|
reader.readAsDataURL(file)
|
|
}
|
|
}
|
|
function readExtrusion() {
|
|
hideDialog()
|
|
var file = $('#file_upload').get(0).files[0]
|
|
var reader = new FileReader()
|
|
|
|
reader.onloadend = function() {
|
|
if (g_makeNew) {
|
|
if (newProject() == false) return;
|
|
}
|
|
var path = reader.result
|
|
|
|
var name = $('#file_name').val()
|
|
if (name == undefined) {
|
|
name = 'Texture'
|
|
}
|
|
|
|
var folder = $('#file_folder').val()
|
|
if (folder == "") {
|
|
folder = "blocks"
|
|
}
|
|
|
|
new Texture({folder: folder, name: name}).add().fromDataURL(path).fillParticle()
|
|
|
|
showDialog('image_extruder')
|
|
drawExtrusionImage(path)
|
|
|
|
}
|
|
if (file) {
|
|
reader.readAsDataURL(file)
|
|
} else {
|
|
|
|
}
|
|
}
|
|
function readBackgroundImage() {
|
|
hideDialog()
|
|
var file = $('#file_upload').get(0).files[0]
|
|
var reader = new FileReader()
|
|
reader.onloadend = function() {
|
|
var path = reader.result
|
|
active_scene.background.image = path
|
|
enterScene(true)
|
|
}
|
|
if (file) {
|
|
reader.readAsDataURL(file)
|
|
}
|
|
}
|
|
|
|
//Saver
|
|
function saveFileBlock() {
|
|
saveFile()
|
|
}
|
|
function saveFileOptifine() {
|
|
var data = buildOptifineModel()
|
|
var blob = new Blob([data], {type: "text/plain;charset=utf-8"});
|
|
saveAs(blob, 'model.jpm')
|
|
showQuickMessage('Saved Optifine entity model')
|
|
}
|
|
function saveFileEntity() {
|
|
var obj = {}
|
|
var model_name = Project.parent
|
|
if (model_name == '') model_name = 'geometry.unknown'
|
|
obj[model_name] = buildEntityModel({raw: true})
|
|
|
|
var data = autoStringify(obj)
|
|
var blob = new Blob([data], {type: "text/plain;charset=utf-8"});
|
|
saveAs(blob, 'mobs.json')
|
|
showQuickMessage('Saved as bedrock entity model')
|
|
}
|
|
function saveFileObj() {
|
|
scene.remove(three_grid)
|
|
scene.remove(Transformer)
|
|
var exporter = new THREE.OBJExporter();
|
|
var content = exporter.parse( scene, 'model');
|
|
scene.add(three_grid)
|
|
scene.add(Transformer)
|
|
|
|
//OBJECT
|
|
var blob = new Blob([content.obj], {type: "text/plain;charset=utf-8"});
|
|
saveAs(blob, 'model.obj')
|
|
|
|
//MATERIAL
|
|
var blob = new Blob([content.mtl], {type: "text/plain;charset=utf-8"});
|
|
saveAs(blob, 'model.mtl')
|
|
showQuickMessage('Saved as .obj model')
|
|
}
|
|
|
|
function saveFile() {
|
|
var data = buildBlockModel()
|
|
var blob = new Blob([data], {type: "text/plain;charset=utf-8"});
|
|
saveAs(blob, 'model.json')
|
|
}
|
|
|
|
//Misc
|
|
window.onbeforeunload = function() {
|
|
if (Prop.project_saved === false) {
|
|
return true;
|
|
}
|
|
}
|
|
function showSaveDialog(close) {
|
|
if (Prop.project_saved === false && elements.length > 0) {
|
|
var answer = confirm('Your current work will be lost. Are you sure?')
|
|
if (answer == true) {
|
|
if (close) {
|
|
//preventClosing = false
|
|
}
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
} else {
|
|
if (close) {
|
|
preventClosing = false
|
|
app.getCurrentWindow().close()
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
function checkForUpdates() {
|
|
showQuickMessage('Webapp is up-to-date')
|
|
} |