mirror of
https://github.com/JannisX11/blockbench.git
synced 2025-03-19 17:01:55 +08:00
v3.0.2
This commit is contained in:
parent
5c5765f154
commit
abdf97db96
css
index.htmljs
animations.jsblockbench.jsdesktop.js
interface
io
outliner
painter.jsplugin_loader.jspreview
transform.jsundo.jsweb.jslang
main.jspackage.json@ -1,7 +1,7 @@
|
||||
/*Defaults*/
|
||||
div.tool.wide {
|
||||
width: 72px;
|
||||
padding-top: 0px;
|
||||
padding: 1px 0;
|
||||
}
|
||||
.hidden, .tooltip_shift, .custom_select ul, .mobile_only, .m_disp {
|
||||
display: none;
|
||||
@ -81,6 +81,9 @@
|
||||
height: 40px;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
input.medium_width {
|
||||
width: 64px;
|
||||
}
|
||||
|
||||
/*General*/
|
||||
canvas.preview {
|
||||
@ -457,7 +460,7 @@
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
background-color: var(--color-ui);
|
||||
overflow-y: auto;
|
||||
overflow-y: scroll;
|
||||
image-rendering: auto;
|
||||
}
|
||||
#start_screen > content > section {
|
||||
|
@ -327,6 +327,9 @@
|
||||
background: var(--color-accent);
|
||||
color: var(--color-text_acc);
|
||||
}
|
||||
#display_sliders p {
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
/*Outliner*/
|
||||
#cubes_list {
|
||||
|
@ -430,9 +430,9 @@
|
||||
opacity: 0.6;
|
||||
}
|
||||
div.nslide {
|
||||
height: 30px;
|
||||
height: 28px;
|
||||
width: 100%;
|
||||
padding: 4px;
|
||||
padding: 3px;
|
||||
padding-left: 6px;
|
||||
cursor: e-resize;
|
||||
overflow: hidden;
|
||||
@ -477,4 +477,7 @@
|
||||
}
|
||||
input:checked + label.toggle_panel {
|
||||
background-color: var(--color-selected);
|
||||
}
|
||||
}
|
||||
.y_scrollable {
|
||||
overflow-y: scroll;
|
||||
}
|
||||
|
253
index.html
253
index.html
@ -26,7 +26,7 @@
|
||||
<script>
|
||||
if (typeof module === 'object') {window.module = module; module = undefined;}//jQuery Fix
|
||||
const isApp = typeof require !== 'undefined';
|
||||
const appVersion = '3.0.1';
|
||||
const appVersion = '3.0.2';
|
||||
</script>
|
||||
<script src="lib/vue.min.js"></script>
|
||||
<script src="lib/vue_sortable.js"></script>
|
||||
@ -338,11 +338,11 @@
|
||||
<label class="tl">data.origin</label>
|
||||
<div class="dialog_bar">
|
||||
<label for="scaling_origin_x" class="inline_label tl">X</label>
|
||||
<input type="number" id="scaling_origin_x" class="dark_bordered mediun_width" oninput="scaleAll()">
|
||||
<input type="number" id="scaling_origin_x" class="dark_bordered medium_width" oninput="scaleAll()">
|
||||
<label for="scaling_origin_y" class="inline_label tl">Y</label>
|
||||
<input type="number" id="scaling_origin_y" class="dark_bordered mediun_width" oninput="scaleAll()">
|
||||
<input type="number" id="scaling_origin_y" class="dark_bordered medium_width" oninput="scaleAll()">
|
||||
<label for="scaling_origin_z" class="inline_label tl">Z</label>
|
||||
<input type="number" id="scaling_origin_z" class="dark_bordered mediun_width" oninput="scaleAll()">
|
||||
<input type="number" id="scaling_origin_z" class="dark_bordered medium_width" oninput="scaleAll()">
|
||||
</div>
|
||||
|
||||
<label class="tl">dialog.scale.scale</label>
|
||||
@ -530,122 +530,124 @@
|
||||
<div id="layout_settings" class="hidden tab_content">
|
||||
<h2 class="tl i_b">dialog.settings.layout</h2>
|
||||
<div class="bar next_to_title" id="layout_title_bar"></div>
|
||||
<div id="color_wrapper">
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_ui" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_ui" style="background-color: var(--color-ui)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.ui</h4>
|
||||
<p class="tl">layout.color.ui.desc</p>
|
||||
<div class="y_scrollable" id="layout_list">
|
||||
<div id="color_wrapper">
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_ui" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_ui" style="background-color: var(--color-ui)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.ui</h4>
|
||||
<p class="tl">layout.color.ui.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_bright_ui" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_bright_ui" style="background-color: var(--color-bright_ui)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.bright_ui</h4>
|
||||
<p class="tl">layout.color.bright_ui.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_back" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_back" style="background-color: var(--color-back)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.back</h4>
|
||||
<p class="tl">layout.color.back.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_dark" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_dark" style="background-color: var(--color-dark)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.dark</h4>
|
||||
<p class="tl">layout.color.dark.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
<!--Button-->
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_button" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_button" style="background-color: var(--color-button)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.button</h4>
|
||||
<p class="tl">layout.color.button.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_selected" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_selected" style="background-color: var(--color-selected)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.selected</h4>
|
||||
<p class="tl">layout.color.selected.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_border" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_border" style="background-color: var(--color-border)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.border</h4>
|
||||
<p class="tl">layout.color.border.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_accent" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_accent" style="background-color: var(--color-accent)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.accent</h4>
|
||||
<p class="tl">layout.color.accent.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_text" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_text" style="background-color: var(--color-text)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.text</h4>
|
||||
<p class="tl">layout.color.text.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_light" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_light" style="background-color: var(--color-light)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.light</h4>
|
||||
<p class="tl">layout.color.light.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_text_acc" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_text_acc" style="background-color: var(--color-text_acc)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.accent_text</h4>
|
||||
<p class="tl">layout.color.accent_text.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_grid" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_grid" style="background-color: var(--color-grid)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.grid</h4>
|
||||
<p class="tl">layout.color.grid.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_wireframe" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_wireframe" style="background-color: var(--color-wireframe)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.wireframe</h4>
|
||||
<p class="tl">layout.color.wireframe.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_bright_ui" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_bright_ui" style="background-color: var(--color-bright_ui)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.bright_ui</h4>
|
||||
<p class="tl">layout.color.bright_ui.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_back" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_back" style="background-color: var(--color-back)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.back</h4>
|
||||
<p class="tl">layout.color.back.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_dark" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_dark" style="background-color: var(--color-dark)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.dark</h4>
|
||||
<p class="tl">layout.color.dark.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
<!--Button-->
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_button" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_button" style="background-color: var(--color-button)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.button</h4>
|
||||
<p class="tl">layout.color.button.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_selected" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_selected" style="background-color: var(--color-selected)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.selected</h4>
|
||||
<p class="tl">layout.color.selected.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_border" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_border" style="background-color: var(--color-border)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.border</h4>
|
||||
<p class="tl">layout.color.border.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_accent" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_accent" style="background-color: var(--color-accent)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.accent</h4>
|
||||
<p class="tl">layout.color.accent.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_text" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_text" style="background-color: var(--color-text)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.text</h4>
|
||||
<p class="tl">layout.color.text.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_light" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_light" style="background-color: var(--color-light)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.light</h4>
|
||||
<p class="tl">layout.color.light.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_text_acc" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_text_acc" style="background-color: var(--color-text_acc)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.accent_text</h4>
|
||||
<p class="tl">layout.color.accent_text.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_grid" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_grid" style="background-color: var(--color-grid)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.grid</h4>
|
||||
<p class="tl">layout.color.grid.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_wireframe" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_wireframe" style="background-color: var(--color-wireframe)" class="color_input"></label>
|
||||
<div class="desc">
|
||||
<h4 class="tl">layout.color.wireframe</h4>
|
||||
<p class="tl">layout.color.wireframe.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="dialog_bar">
|
||||
<label class="name_space_left tl" for="layout_font_main">layout.font.main</label>
|
||||
<input type="text" class="half dark_bordered" id="layout_font_main" oninput="changeUIFont('main')">
|
||||
</div>
|
||||
<div class="dialog_bar">
|
||||
<label class="name_space_left tl" for="layout_font_main">layout.font.main</label>
|
||||
<input type="text" class="half dark_bordered" id="layout_font_main" oninput="changeUIFont('main')">
|
||||
</div>
|
||||
|
||||
<div class="dialog_bar">
|
||||
<label class="name_space_left tl" for="layout_font_headline">layout.font.headline</label>
|
||||
<input type="text" class="half dark_bordered" id="layout_font_headline" oninput="changeUIFont('headline')">
|
||||
<div class="dialog_bar">
|
||||
<label class="name_space_left tl" for="layout_font_headline">layout.font.headline</label>
|
||||
<input type="text" class="half dark_bordered" id="layout_font_headline" oninput="changeUIFont('headline')">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@ -944,22 +946,29 @@
|
||||
</div>
|
||||
</div>
|
||||
<div id="right_bar" class="sidebar">
|
||||
<!--div id="options" class="panel selection_only">
|
||||
<p class="tl">panel.options.angle</p>
|
||||
<div class="toolbar_wrapper rotation"></div>
|
||||
<p class="tl">data.origin</p>
|
||||
<div class="toolbar_wrapper origin"></div>
|
||||
</div-->
|
||||
<div id="element" class="panel selection_only">
|
||||
<p class="tl">panel.element.position</p>
|
||||
<div class="toolbar_wrapper element_position"></div>
|
||||
<p class="tl">panel.element.size</p>
|
||||
<div class="toolbar_wrapper element_size"></div>
|
||||
<p class="tl">panel.element.origin</p>
|
||||
<div class="toolbar_wrapper element_origin"></div>
|
||||
<p class="tl">panel.element.rotation</p>
|
||||
<div class="toolbar_wrapper element_rotation"></div>
|
||||
</div>
|
||||
|
||||
<div id="color" class="panel">
|
||||
<div id="main_colorpicker_preview"><div></div></div>
|
||||
<input id="main_colorpicker">
|
||||
</div>
|
||||
|
||||
<div id="outliner" class="panel grow">
|
||||
<div class="toolbar_wrapper outliner"></div>
|
||||
<ul id="cubes_list" class="list">
|
||||
<vue-tree :option="option"></vue-tree>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="chat" class="panel grow">
|
||||
<div class="bar next_to_title" id="chat_title_bar"></div>
|
||||
<ul id="chat_history" v-if="expanded">
|
||||
|
@ -961,7 +961,7 @@ const Timeline = {
|
||||
if (time == undefined || isNaN(time)) {
|
||||
time = Timeline.second;
|
||||
}
|
||||
var fps = settings.animation_snap.value;
|
||||
var fps = Math.clamp(settings.animation_snap.value, 1, 120);
|
||||
return Math.clamp(Math.round(time*fps)/fps, 0);
|
||||
},
|
||||
setup() {
|
||||
@ -1068,7 +1068,7 @@ const Timeline = {
|
||||
$('#timeline_inner .keyframe:not(.ui-draggable)').draggable({
|
||||
axis: 'x',
|
||||
distance: 4,
|
||||
helper: false,
|
||||
helper: () => $('<div></div>'),
|
||||
start: function(event, ui) {
|
||||
Undo.initEdit({keyframes: Timeline.keyframes, keep_saved: true})
|
||||
var id = $(ui.helper).attr('id')
|
||||
@ -1148,7 +1148,7 @@ const Timeline = {
|
||||
else {step = 0.05}
|
||||
|
||||
if (step < 1) {
|
||||
var FPS = 1/settings.animation_snap.value;
|
||||
var FPS = 1/Math.clamp(settings.animation_snap.value, 1, 120);
|
||||
step = Math.round(step/FPS) * FPS
|
||||
step = 1/Math.round(1/step)
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ const Pressing = {
|
||||
alt: false,
|
||||
}
|
||||
var main_uv;
|
||||
const Prop = {
|
||||
var Prop = {
|
||||
active_panel : 'preview',
|
||||
wireframe : false,
|
||||
file_path : '',
|
||||
@ -221,10 +221,14 @@ function updateSelection() {
|
||||
main_uv.loadData()
|
||||
$('.selection_only').css('visibility', 'visible')
|
||||
} else {
|
||||
$('.selection_only').css('visibility', 'hidden')
|
||||
}
|
||||
if (Group.selected && Format.bone_rig) {
|
||||
$('.selection_only#options').css('visibility', 'visible')
|
||||
if (Format.bone_rig && Group.selected) {
|
||||
$('.selection_only').css('visibility', 'visible')
|
||||
} else {
|
||||
$('.selection_only').css('visibility', 'hidden')
|
||||
if (Locator.selected.length) {
|
||||
$('.selection_only#element').css('visibility', 'visible')
|
||||
}
|
||||
}
|
||||
}
|
||||
if (Modes.animate) {
|
||||
if (Animator.selected && Group.selected) {
|
||||
@ -441,7 +445,7 @@ setInterval(function() {
|
||||
}, 1e3*30)
|
||||
//Misc
|
||||
const TickUpdates = {
|
||||
Run: function() {
|
||||
Run() {
|
||||
if (TickUpdates.outliner) {
|
||||
delete TickUpdates.outliner;
|
||||
loadOutlinerDraggable()
|
||||
@ -465,7 +469,7 @@ const TickUpdates = {
|
||||
}
|
||||
}
|
||||
const Screencam = {
|
||||
fullScreen: function(options, cb) {
|
||||
fullScreen(options, cb) {
|
||||
setTimeout(function() {
|
||||
currentwindow.capturePage(function(screenshot) {
|
||||
var dataUrl = screenshot.toDataURL()
|
||||
@ -483,7 +487,7 @@ const Screencam = {
|
||||
})
|
||||
}, 40)
|
||||
},
|
||||
returnScreenshot: function(dataUrl, cb) {
|
||||
returnScreenshot(dataUrl, cb) {
|
||||
if (cb) {
|
||||
cb(dataUrl)
|
||||
} else if (isApp) {
|
||||
@ -524,10 +528,10 @@ const Screencam = {
|
||||
}).show()
|
||||
}
|
||||
},
|
||||
cleanCanvas: function(options, cb) {
|
||||
cleanCanvas(options, cb) {
|
||||
quad_previews.current.screenshot(options, cb)
|
||||
},
|
||||
createGif: function(options, cb) {
|
||||
createGif(options, cb) {
|
||||
/*
|
||||
var images = [];
|
||||
var preview = quad_previews.current;
|
||||
@ -615,7 +619,7 @@ const Screencam = {
|
||||
}
|
||||
const Clipbench = {
|
||||
elements: [],
|
||||
copy: function(event, cut) {
|
||||
copy(event, cut) {
|
||||
var p = Prop.active_panel
|
||||
var text = window.getSelection()+'';
|
||||
if (text) {
|
||||
@ -651,7 +655,7 @@ const Clipbench = {
|
||||
}
|
||||
}
|
||||
},
|
||||
paste: function(event) {
|
||||
paste(event) {
|
||||
var p = Prop.active_panel
|
||||
if (open_dialog == 'uv_dialog') {
|
||||
uv_dialog.paste(event)
|
||||
@ -749,7 +753,7 @@ const Clipbench = {
|
||||
Undo.finishEdit('paste', {outliner: true, elements: selected, selection: true});
|
||||
}
|
||||
},
|
||||
setTexture: function(texture) {
|
||||
setTexture(texture) {
|
||||
//Sets the raw image of the texture
|
||||
if (!isApp) return;
|
||||
|
||||
@ -760,7 +764,7 @@ const Clipbench = {
|
||||
}
|
||||
clipboard.writeImage(img)
|
||||
},
|
||||
setGroup: function(group) {
|
||||
setGroup(group) {
|
||||
if (!group) {
|
||||
Clipbench.group = undefined
|
||||
return;
|
||||
@ -770,7 +774,7 @@ const Clipbench = {
|
||||
clipboard.writeHTML(JSON.stringify({type: 'group', content: Clipbench.group}))
|
||||
}
|
||||
},
|
||||
setElements: function(arr) {
|
||||
setElements(arr) {
|
||||
if (!arr) {
|
||||
Clipbench.elements = []
|
||||
return;
|
||||
@ -782,7 +786,7 @@ const Clipbench = {
|
||||
clipboard.writeHTML(JSON.stringify({type: 'elements', content: Clipbench.elements}))
|
||||
}
|
||||
},
|
||||
setKeyframes: function(keyframes) {
|
||||
setKeyframes(keyframes) {
|
||||
Clipbench.keyframes = []
|
||||
if (!keyframes || keyframes.length === 0) {
|
||||
return;
|
||||
@ -808,7 +812,7 @@ const Clipbench = {
|
||||
clipboard.writeHTML(JSON.stringify({type: 'keyframes', content: Clipbench.keyframes}))
|
||||
}
|
||||
},
|
||||
setText: function(text) {
|
||||
setText(text) {
|
||||
if (isApp) {
|
||||
clipboard.writeText(text)
|
||||
} else {
|
||||
|
@ -359,7 +359,7 @@ function showSaveDialog(close) {
|
||||
unsaved_textures++;
|
||||
}
|
||||
})
|
||||
if ((window.Prop && Prop.project_saved === false && elements.length > 0) || unsaved_textures) {
|
||||
if ((window.Prop && Prop.project_saved === false && (elements.length > 0 || Group.all.length > 0)) || unsaved_textures) {
|
||||
var answer = electron.dialog.showMessageBox(currentwindow, {
|
||||
type: 'question',
|
||||
buttons: [tl('dialog.save'), tl('dialog.discard'), tl('dialog.cancel')],
|
||||
|
@ -358,6 +358,7 @@ class NumSlider extends Widget {
|
||||
if (typeof scope.onBefore === 'function') {
|
||||
scope.onBefore()
|
||||
}
|
||||
scope.sliding = true;
|
||||
scope.pre = 0;
|
||||
scope.left = ui.position.left
|
||||
scope.last_value = scope.value
|
||||
@ -366,6 +367,7 @@ class NumSlider extends Widget {
|
||||
scope.slide(event, ui)
|
||||
},
|
||||
stop: function() {
|
||||
delete scope.sliding;
|
||||
if (typeof scope.onAfter === 'function') {
|
||||
scope.onAfter(scope.value - scope.last_value)
|
||||
}
|
||||
@ -520,8 +522,12 @@ class NumSlider extends Widget {
|
||||
if (!BARS.condition(this.condition)) return;
|
||||
var number = this.get();
|
||||
this.setValue(number)
|
||||
if (isNaN(number)) number = '';
|
||||
$('#nslide_head #nslide_offset').text(this.name+': '+this.value)
|
||||
if (isNaN(number)) {
|
||||
this.jq_outer.find('.nslide:not(.editing)').text('')
|
||||
}
|
||||
if (this.sliding) {
|
||||
$('#nslide_head #nslide_offset').text(this.name+': '+this.value)
|
||||
}
|
||||
}
|
||||
}
|
||||
class BarSlider extends Widget {
|
||||
@ -953,7 +959,7 @@ const BARS = {
|
||||
category: 'tools',
|
||||
selectFace: true,
|
||||
transformerMode: 'translate',
|
||||
toolbar: 'move',
|
||||
toolbar: Blockbench.isMobile ? 'element_position' : 'main_tools',
|
||||
alt_tool: 'resize_tool',
|
||||
modes: ['edit', 'display', 'animate'],
|
||||
keybind: new Keybind({key: 86}),
|
||||
@ -964,7 +970,7 @@ const BARS = {
|
||||
category: 'tools',
|
||||
selectFace: true,
|
||||
transformerMode: 'scale',
|
||||
toolbar: 'resize',
|
||||
toolbar: Blockbench.isMobile ? 'element_size' : 'main_tools',
|
||||
alt_tool: 'move_tool',
|
||||
modes: ['edit', 'display', 'animate'],
|
||||
keybind: new Keybind({key: 83}),
|
||||
@ -975,7 +981,7 @@ const BARS = {
|
||||
category: 'tools',
|
||||
selectFace: true,
|
||||
transformerMode: 'rotate',
|
||||
toolbar: 'rotate',
|
||||
toolbar: Blockbench.isMobile ? 'element_rotation' : 'main_tools',
|
||||
alt_tool: 'pivot_tool',
|
||||
modes: ['edit', 'display', 'animate'],
|
||||
keybind: new Keybind({key: 82}),
|
||||
@ -985,7 +991,7 @@ const BARS = {
|
||||
icon: 'gps_fixed',
|
||||
category: 'tools',
|
||||
transformerMode: 'translate',
|
||||
toolbar: 'pivot',
|
||||
toolbar: Blockbench.isMobile ? 'element_origin' : 'main_tools',
|
||||
alt_tool: 'rotate_tool',
|
||||
modes: ['edit'],
|
||||
keybind: new Keybind({key: 80}),
|
||||
@ -1365,27 +1371,51 @@ const BARS = {
|
||||
vertical: Blockbench.isMobile,
|
||||
default_place: true
|
||||
})
|
||||
Toolbars.rotation = new Toolbar({
|
||||
id: 'rotation',
|
||||
|
||||
|
||||
Toolbars.element_position = new Toolbar({
|
||||
id: 'element_position',
|
||||
children: [
|
||||
'slider_rotation_x',
|
||||
'slider_rotation_y',
|
||||
'slider_rotation_z',
|
||||
'rescale_toggle',
|
||||
'bone_reset_toggle'
|
||||
'slider_pos_x',
|
||||
'slider_pos_y',
|
||||
'slider_pos_z',
|
||||
'local_move'
|
||||
],
|
||||
default_place: true
|
||||
default_place: !Blockbench.isMobile
|
||||
})
|
||||
Toolbars.origin = new Toolbar({
|
||||
id: 'origin',
|
||||
Toolbars.element_size = new Toolbar({
|
||||
id: 'element_size',
|
||||
children: [
|
||||
'slider_size_x',
|
||||
'slider_size_y',
|
||||
'slider_size_z',
|
||||
'scale'
|
||||
],
|
||||
default_place: !Blockbench.isMobile
|
||||
})
|
||||
Toolbars.element_origin = new Toolbar({
|
||||
id: 'element_origin',
|
||||
children: [
|
||||
'slider_origin_x',
|
||||
'slider_origin_y',
|
||||
'slider_origin_z',
|
||||
'origin_to_geometry'
|
||||
],
|
||||
default_place: true
|
||||
default_place: !Blockbench.isMobile
|
||||
})
|
||||
Toolbars.element_rotation = new Toolbar({
|
||||
id: 'element_rotation',
|
||||
children: [
|
||||
'slider_rotation_x',
|
||||
'slider_rotation_y',
|
||||
'slider_rotation_z',
|
||||
'rescale_toggle'
|
||||
],
|
||||
default_place: !Blockbench.isMobile
|
||||
})
|
||||
|
||||
|
||||
|
||||
Toolbars.display = new Toolbar({
|
||||
id: 'display',
|
||||
children: [
|
||||
@ -1470,42 +1500,9 @@ const BARS = {
|
||||
default_place: true
|
||||
})
|
||||
//Tools
|
||||
Toolbars.move = new Toolbar({
|
||||
id: 'move',
|
||||
Toolbars.main_tools = new Toolbar({
|
||||
id: 'main_tools',
|
||||
children: [
|
||||
'slider_pos_x',
|
||||
'slider_pos_y',
|
||||
'slider_pos_z',
|
||||
'_',
|
||||
'local_move'
|
||||
]
|
||||
})
|
||||
Toolbars.resize = new Toolbar({
|
||||
id: 'resize',
|
||||
children: [
|
||||
'slider_size_x',
|
||||
'slider_size_y',
|
||||
'slider_size_z',
|
||||
'_',
|
||||
'slider_inflate'
|
||||
]
|
||||
})
|
||||
Toolbars.rotate = new Toolbar({
|
||||
id: 'rotate',
|
||||
children: [
|
||||
'slider_rotation_x',
|
||||
'slider_rotation_y',
|
||||
'slider_rotation_z',
|
||||
'rescale_toggle'
|
||||
]
|
||||
})
|
||||
Toolbars.pivot = new Toolbar({
|
||||
id: 'pivot',
|
||||
children: [
|
||||
'slider_origin_x',
|
||||
'slider_origin_y',
|
||||
'slider_origin_z',
|
||||
'origin_to_geometry'
|
||||
]
|
||||
})
|
||||
Toolbars.brush = new Toolbar({
|
||||
|
@ -204,7 +204,7 @@ function Dialog(settings) {
|
||||
jq_dialog.draggable({
|
||||
handle: ".dialog_handle"
|
||||
})
|
||||
var x = ($(window).width()-540)/2
|
||||
var x = Math.clamp(($(window).width()-540)/2, 0, 2000)
|
||||
jq_dialog.css('left', x+'px')
|
||||
jq_dialog.css('position', 'absolute')
|
||||
}
|
||||
|
@ -322,12 +322,14 @@ function setupInterface() {
|
||||
'save_textures'
|
||||
])
|
||||
})
|
||||
Interface.Panels.options = new Panel({
|
||||
id: 'options',
|
||||
condition: () => Modes.id === 'edit',
|
||||
Interface.Panels.element = new Panel({
|
||||
id: 'element',
|
||||
condition: () => Modes.edit,
|
||||
toolbars: {
|
||||
rotation: Toolbars.rotation,
|
||||
origin: Toolbars.origin,
|
||||
element_position: Toolbars.element_position,
|
||||
element_size: Toolbars.element_size,
|
||||
element_origin: Toolbars.element_origin,
|
||||
element_rotation: Toolbars.element_rotation,
|
||||
}
|
||||
})
|
||||
Interface.Panels.color = new Panel({
|
||||
@ -659,8 +661,8 @@ function showDialog(dialog) {
|
||||
handle: ".dialog_handle",
|
||||
containment: 'body'
|
||||
})
|
||||
var x = ($(window).width()-obj.width()) / 2;
|
||||
var top = ($(window).height() - obj.height()) / 2;
|
||||
var x = ($(window).width()-obj.outerWidth()) / 2;
|
||||
var top = ($(window).height() - obj.outerHeight()) / 2;
|
||||
obj.css('left', x+'px')
|
||||
obj.css('top', 'px')
|
||||
obj.css('max-height', ($(window).height()-128)+'px')
|
||||
@ -685,6 +687,7 @@ function setSettingsTab(tab) {
|
||||
//Settings
|
||||
$('#settingslist').css('max-height', ($(window).height() - 420) +'px')
|
||||
} else if (tab === 'layout_settings') {
|
||||
$('#layout_list').css('max-height', ($(window).height() - 420) +'px')
|
||||
$('#layout_font_main').val(app_colors.main.font)
|
||||
$('#layout_font_headline').val(app_colors.headline.font)
|
||||
}
|
||||
@ -934,7 +937,18 @@ var documentReady = new Promise((resolve, reject) => {
|
||||
}
|
||||
|
||||
|
||||
//DIscord
|
||||
//Electron
|
||||
if (isApp && !compareVersions(process.versions.electron, '4.0.0')) {
|
||||
addStartScreenSection({
|
||||
graphic: {type: 'icon', icon: 'fas.fa-atom'},
|
||||
text: [
|
||||
{type: 'h1', text: 'Electron Update Recommended'},
|
||||
{text: 'Your Blockbench is using an old version of Electron. Install the latest version to get the best performance and newest features. Just run the latest Blockbench installer. This only takes a minute and will not affect your custom settings.'},
|
||||
{text: '[Blockbench Downloads](https://blockbench.net/downloads/)'}
|
||||
]
|
||||
})
|
||||
}
|
||||
//Discord
|
||||
if (startup_count < 6) {
|
||||
addStartScreenSection({
|
||||
color: '#7289da',
|
||||
|
@ -353,7 +353,6 @@ const MenuBar = {
|
||||
for (var key in Formats) {
|
||||
(function() {
|
||||
var format = Formats[key];
|
||||
if (!format.allow_new) return;
|
||||
arr.push({
|
||||
id: format.id,
|
||||
name: format.name,
|
||||
@ -441,6 +440,7 @@ const MenuBar = {
|
||||
'_',
|
||||
'add_cube',
|
||||
'add_group',
|
||||
'add_locator',
|
||||
'duplicate',
|
||||
'delete',
|
||||
'_',
|
||||
|
@ -216,7 +216,7 @@ BARS.defineActions(function() {
|
||||
id: 'save_project',
|
||||
icon: 'save',
|
||||
category: 'file',
|
||||
keybind: new Keybind({key: 83, ctrl: true}),
|
||||
keybind: new Keybind({key: 83, ctrl: true, alt: true}),
|
||||
click: function () {
|
||||
saveTextures()
|
||||
if (isApp && ModelMeta.save_path) {
|
||||
@ -226,16 +226,25 @@ BARS.defineActions(function() {
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
if (BarItems.save_project.keybind.key == 83 && BarItems.save_project.keybind.ctrl && !BarItems.save_project.keybind.alt && !BarItems.save_project.keybind.shift) {
|
||||
//Blockbench 3.0.2 update
|
||||
BarItems.save_project.keybind.set({key: 83, ctrl: true, alt: true}).save(true)
|
||||
}
|
||||
new Action({
|
||||
id: 'save_project_as',
|
||||
icon: 'save',
|
||||
category: 'file',
|
||||
keybind: new Keybind({key: 83, ctrl: true, shift: true}),
|
||||
keybind: new Keybind({key: 83, ctrl: true, alt: true, shift: true}),
|
||||
click: function () {
|
||||
saveTextures()
|
||||
codec.export()
|
||||
}
|
||||
})
|
||||
if (BarItems.save_project_as.keybind.key == 83 && BarItems.save_project_as.keybind.ctrl && !BarItems.save_project_as.keybind.alt && BarItems.save_project_as.keybind.shift) {
|
||||
//Blockbench 3.0.2 update
|
||||
BarItems.save_project_as.keybind.set({key: 83, ctrl: true, alt: true, shift: true}).save(true)
|
||||
}
|
||||
})
|
||||
|
||||
})()
|
||||
|
@ -142,7 +142,7 @@ function parseGeometry(data) {
|
||||
if (b.cubes) {
|
||||
b.cubes.forEach(function(s) {
|
||||
var base_cube = new Cube({
|
||||
name: b.name,
|
||||
name: s.name || b.name,
|
||||
autouv: 0,
|
||||
color: bi%8,
|
||||
rotation: s.rotation,
|
||||
@ -312,7 +312,7 @@ var codec = new Codec('bedrock', {
|
||||
if (obj.export) {
|
||||
if (obj instanceof Cube) {
|
||||
var cube = {
|
||||
name: obj.name != g.name ? undefined : obj.name,
|
||||
name: obj.name == g.name ? undefined : obj.name,
|
||||
origin: obj.from.slice(),
|
||||
size: obj.size(),
|
||||
inflate: obj.inflate||undefined,
|
||||
|
@ -402,7 +402,7 @@ var codec = new Codec('bedrock_old', {
|
||||
name: this.fileName(),
|
||||
startpath: this.startPath(),
|
||||
content: this.compile({raw: isApp}),
|
||||
custom_writer: isApp ? (a, b) => scope.overwrite(a, b) : null,
|
||||
custom_writer: isApp ? (a, path) => scope.overwrite(a, path, () => scope.afterSave(path)) : null,
|
||||
})
|
||||
},
|
||||
|
||||
@ -466,8 +466,8 @@ var codec = new Codec('bedrock_old', {
|
||||
}
|
||||
}
|
||||
}
|
||||
obj[model_name] = content
|
||||
content = autoStringify(obj)
|
||||
obj[model_name] = this.compile({raw: true});
|
||||
content = autoStringify(obj);
|
||||
|
||||
Blockbench.writeFile(path, {content}, cb);
|
||||
}
|
||||
|
86
js/io/io.js
86
js/io/io.js
@ -67,6 +67,17 @@ class ModelFormat {
|
||||
}
|
||||
main_uv.setGrid()
|
||||
buildGrid()
|
||||
if (Format.bone_rig) {
|
||||
scene.position.set(0, 0, 0);
|
||||
} else {
|
||||
scene.position.set(-8, -8, -8);
|
||||
}
|
||||
/*
|
||||
var center = Format.bone_rig ? -8 : 0;
|
||||
previews.forEach(preview => {
|
||||
preview.controls.target.set(center, -3, center);
|
||||
preview.camOrtho.position.add(preview.controls.target);
|
||||
})*/
|
||||
BARS.updateConditions()
|
||||
Canvas.updateRenderSides()
|
||||
return this;
|
||||
@ -283,12 +294,6 @@ class Codec {
|
||||
Blockbench.showQuickMessage(tl('message.save_file', [name]));
|
||||
}
|
||||
}
|
||||
new ModelFormat({
|
||||
id: 'free',
|
||||
icon: 'icon-format_free',
|
||||
rotate_cubes: true,
|
||||
optional_box_uv: true,
|
||||
})
|
||||
|
||||
//New
|
||||
function resetProject() {
|
||||
@ -799,6 +804,12 @@ function autoParseJSON(data, feedback) {
|
||||
|
||||
|
||||
BARS.defineActions(function() {
|
||||
new ModelFormat({
|
||||
id: 'free',
|
||||
icon: 'icon-format_free',
|
||||
rotate_cubes: true,
|
||||
optional_box_uv: true,
|
||||
})
|
||||
//Project
|
||||
new Action({
|
||||
id: 'project_window',
|
||||
@ -880,6 +891,7 @@ BARS.defineActions(function() {
|
||||
id: 'convert_project',
|
||||
icon: 'fas.fa-file-import',
|
||||
category: 'file',
|
||||
condition: () => (!EditSession.active || EditSession.hosting),
|
||||
click: function () {
|
||||
|
||||
var options = {};
|
||||
@ -932,6 +944,7 @@ BARS.defineActions(function() {
|
||||
id: 'add_model',
|
||||
icon: 'assessment',
|
||||
category: 'file',
|
||||
condition: _ => (Format.id == 'java_block' || Format.id == 'free'),
|
||||
click: function () {
|
||||
Blockbench.import({
|
||||
extensions: ['json'],
|
||||
@ -949,6 +962,7 @@ BARS.defineActions(function() {
|
||||
id: 'extrude_texture',
|
||||
icon: 'eject',
|
||||
category: 'file',
|
||||
condition: _ => !Project.box_uv,
|
||||
click: function () {
|
||||
Blockbench.import({
|
||||
extensions: ['png'],
|
||||
@ -967,7 +981,7 @@ BARS.defineActions(function() {
|
||||
id: 'export_over',
|
||||
icon: 'save',
|
||||
category: 'file',
|
||||
keybind: new Keybind({key: 69, ctrl: true}),
|
||||
keybind: new Keybind({key: 83, ctrl: true}),
|
||||
click: function () {
|
||||
if (isApp) {
|
||||
saveTextures()
|
||||
@ -992,33 +1006,39 @@ BARS.defineActions(function() {
|
||||
}
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'export_asset_archive',
|
||||
icon: 'archive',
|
||||
category: 'file',
|
||||
condition: _ => !isApp && Format && Format.codec,
|
||||
click: function() {
|
||||
var archive = new JSZip();
|
||||
var content = Format.codec.compile()
|
||||
archive.file((Project.name||'model')+'.json', content)
|
||||
textures.forEach(tex => {
|
||||
if (tex.mode === 'bitmap') {
|
||||
archive.file(pathToName(tex.name) + '.png', tex.source.replace('data:image/png;base64,', ''), {base64: true});
|
||||
}
|
||||
})
|
||||
archive.generateAsync({type: 'blob'}).then(content => {
|
||||
Blockbench.export({
|
||||
type: 'Zip Archive',
|
||||
extensions: ['zip'],
|
||||
name: 'assets',
|
||||
startpath: ModelMeta.export_path,
|
||||
content: content,
|
||||
savetype: 'zip'
|
||||
if (BarItems.export_over.keybind.key == 69 && BarItems.export_over.keybind.ctrl) {
|
||||
//Blockbench 3.0.2 update
|
||||
BarItems.export_over.keybind.set({key: 83, ctrl: true}).save(true)
|
||||
}
|
||||
if (!isApp) {
|
||||
new Action({
|
||||
id: 'export_asset_archive',
|
||||
icon: 'archive',
|
||||
category: 'file',
|
||||
condition: _ => Format && Format.codec,
|
||||
click: function() {
|
||||
var archive = new JSZip();
|
||||
var content = Format.codec.compile()
|
||||
archive.file((Project.name||'model')+'.json', content)
|
||||
textures.forEach(tex => {
|
||||
if (tex.mode === 'bitmap') {
|
||||
archive.file(pathToName(tex.name) + '.png', tex.source.replace('data:image/png;base64,', ''), {base64: true});
|
||||
}
|
||||
})
|
||||
Prop.project_saved = true;
|
||||
})
|
||||
}
|
||||
})
|
||||
archive.generateAsync({type: 'blob'}).then(content => {
|
||||
Blockbench.export({
|
||||
type: 'Zip Archive',
|
||||
extensions: ['zip'],
|
||||
name: 'assets',
|
||||
startpath: ModelMeta.export_path,
|
||||
content: content,
|
||||
savetype: 'zip'
|
||||
})
|
||||
Prop.project_saved = true;
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
new Action({
|
||||
id: 'upload_sketchfab',
|
||||
icon: 'icon-sketchfab',
|
||||
|
@ -29,6 +29,7 @@ var codec = new Codec('obj', {
|
||||
compile(options) {
|
||||
if (!options) options = 0;
|
||||
|
||||
var old_scene_position = new THREE.Vector3().copy(scene.position);
|
||||
scene.position.set(0,0,0)
|
||||
|
||||
var output = '# Made in Blockbench '+appVersion+'\n';
|
||||
@ -146,7 +147,7 @@ var codec = new Codec('obj', {
|
||||
}
|
||||
} else {
|
||||
console.warn( 'THREE.OBJExporter.parseMesh(): geometry type unsupported', mesh );
|
||||
// TODO: Support only BufferGeometry and use use setFromObject()
|
||||
// TODO: Support only BufferGeometry and use setFromObject()
|
||||
}
|
||||
|
||||
// update index
|
||||
@ -176,7 +177,7 @@ var codec = new Codec('obj', {
|
||||
}
|
||||
mtlOutput += 'newmtl none'
|
||||
|
||||
scene.position.set(-8,-8,-8)
|
||||
scene.position.copy(old_scene_position)
|
||||
|
||||
_obj_export = {
|
||||
obj: output,
|
||||
@ -186,6 +187,7 @@ var codec = new Codec('obj', {
|
||||
return options.all_files ? _obj_export : output;
|
||||
},
|
||||
write(content, path) {
|
||||
var scope = this;
|
||||
|
||||
var mtl_path = path.replace(/\.obj$/, '.mtl')
|
||||
content = this.compile({mtl_name: pathToName(mtl_path, true)})
|
||||
|
@ -502,11 +502,6 @@ class Cube extends NonGroup {
|
||||
|
||||
pos.add(m.getWorldPosition(new THREE.Vector3()))
|
||||
|
||||
if (Format.bone_rig) {
|
||||
pos.x += 8
|
||||
pos.y += 8
|
||||
pos.z += 8
|
||||
}
|
||||
return pos;
|
||||
}
|
||||
setColor(index) {
|
||||
|
@ -62,6 +62,9 @@ class Group extends OutlinerElement {
|
||||
}
|
||||
init() {
|
||||
super.init();
|
||||
if (typeof this.parent !== 'object') {
|
||||
this.addTo();
|
||||
}
|
||||
return this;
|
||||
}
|
||||
select(event) {
|
||||
@ -304,6 +307,7 @@ class Group extends OutlinerElement {
|
||||
base_group.children.push(child.getSaveCopy());
|
||||
}
|
||||
delete base_group.parent;
|
||||
return base_group;
|
||||
}
|
||||
getChildlessCopy() {
|
||||
var base_group = new Group();
|
||||
|
@ -80,7 +80,7 @@ BARS.defineActions(function() {
|
||||
click: function () {
|
||||
var elements = []
|
||||
Undo.initEdit({elements, outliner: true});
|
||||
elements.push(new Locator().init().select());
|
||||
elements.push(new Locator().addTo(Group.selected||selected[0]).init().select());
|
||||
Undo.finishEdit('add locator');
|
||||
}
|
||||
})
|
||||
|
@ -16,7 +16,7 @@ const Outliner = {
|
||||
return;
|
||||
}
|
||||
Undo.initEdit({elements: obj.forSelected(), outliner: true, selection: true})
|
||||
obj.forSelected(function(cube) {
|
||||
obj.forSelected().slice().forEach(cube => {
|
||||
cube.remove()
|
||||
})
|
||||
updateSelection()
|
||||
|
@ -622,8 +622,8 @@ const Painter = {
|
||||
let obj = cubes[i]
|
||||
if (obj.visibility === true) {
|
||||
var template = new cubeTempl(obj)
|
||||
if (options.double_use && Project.box_uv) {
|
||||
var double_key = [...obj.uv_offset, ...obj.size(undefined, true)].join('_')
|
||||
if (options.double_use && Project.box_uv && textures.length) {
|
||||
var double_key = [...obj.uv_offset, ...obj.size(undefined, true), ].join('_')
|
||||
if (doubles[double_key]) {
|
||||
doubles[double_key].push(template)
|
||||
doubles[double_key][0].duplicates = doubles[double_key];
|
||||
|
@ -113,11 +113,7 @@ class Plugin {
|
||||
}
|
||||
loadFromFile(file, first) {
|
||||
var scope = this;
|
||||
var path = file.path
|
||||
Plugins.registered[this.id] = this;
|
||||
localStorage.setItem('plugin_dev_path', file.path)
|
||||
onInstall = undefined
|
||||
|
||||
if (!isApp && !first) return this;
|
||||
if (first) {
|
||||
if (isApp) {
|
||||
if (!confirm(tl('message.load_plugin_app'))) return;
|
||||
@ -125,18 +121,43 @@ class Plugin {
|
||||
if (!confirm(tl('message.load_plugin_web'))) return;
|
||||
}
|
||||
}
|
||||
$.getScript(file.path, function() {
|
||||
scope.id = (plugin_data && plugin_data.id)||pathToName(file.path)
|
||||
|
||||
scope.id = pathToName(file.path)
|
||||
Plugins.registered[this.id] = this;
|
||||
localStorage.setItem('plugin_dev_path', file.path)
|
||||
Plugins.all.safePush(this)
|
||||
|
||||
scope.fromFile = true
|
||||
if (isApp) {
|
||||
$.getScript(file.path, function() {
|
||||
if (window.plugin_data) {
|
||||
scope.id = (plugin_data && plugin_data.id)||pathToName(file.path)
|
||||
scope.extend(plugin_data)
|
||||
scope.bindGlobalData()
|
||||
}
|
||||
scope.installed = true
|
||||
scope.path = file.path
|
||||
Plugins.installed.safePush(scope.path)
|
||||
saveInstalledPlugins()
|
||||
Plugins.sort()
|
||||
})
|
||||
} else {
|
||||
try {
|
||||
eval(file.content);
|
||||
} catch (err) {
|
||||
throw err;
|
||||
return;
|
||||
}
|
||||
if (!Plugins.registered && window.plugin_data) {
|
||||
scope.id = (plugin_data && plugin_data.id)||scope.id
|
||||
scope.extend(plugin_data)
|
||||
scope.bindGlobalData()
|
||||
}
|
||||
scope.installed = true
|
||||
scope.fromFile = true
|
||||
scope.path = file.path
|
||||
scope.extend(plugin_data)
|
||||
scope.bindGlobalData()
|
||||
Plugins.installed.safePush(scope.path)
|
||||
saveInstalledPlugins()
|
||||
Plugins.sort()
|
||||
})
|
||||
Plugins.all.safePush(this)
|
||||
}
|
||||
return this;
|
||||
}
|
||||
uninstall() {
|
||||
@ -278,7 +299,7 @@ function loadInstalledPlugins() {
|
||||
if (id.substr(-3) !== '.js') {
|
||||
//downloaded public plugin
|
||||
var plugin = new Plugin(id).install(false, function() {
|
||||
this.extend(plugin_data)
|
||||
this.extend(window.plugin_data)
|
||||
Plugins.sort()
|
||||
})
|
||||
}
|
||||
|
@ -35,7 +35,7 @@ class Preview {
|
||||
this.camOrtho = new THREE.OrthographicCamera(-600, 600, -400, 400, 1, 100)
|
||||
this.camOrtho.backgroundHandle = [{n: false, a: 'x'}, {n: false, a: 'y'}]
|
||||
this.camOrtho.axis = null
|
||||
this.camOrtho.zoom = 0.6
|
||||
this.camOrtho.zoom = 0.5
|
||||
this.camPers.preview = this.camOrtho.preview = this;
|
||||
for (var i = 4; i <= 6; i++) {
|
||||
this.camPers.layers.enable(i);
|
||||
@ -462,7 +462,7 @@ class Preview {
|
||||
if ((event.shiftKey || event.ctrlKey) && scope.selection.old_selected.indexOf(cube) >= 0) {
|
||||
var isSelected = true
|
||||
} else {
|
||||
if (cube instanceof Cube && cube.mesh) {
|
||||
if (cube instanceof Cube && cube.visibility && cube.mesh) {
|
||||
var mesh = cube.mesh
|
||||
var from = new THREE.Vector3().copy(mesh.geometry.vertices[6]).applyMatrix4(mesh.matrixWorld)
|
||||
var to = new THREE.Vector3().copy(mesh.geometry.vertices[0]).applyMatrix4(mesh.matrixWorld)
|
||||
@ -815,7 +815,6 @@ function initCanvas() {
|
||||
display_area.name = 'display_area'
|
||||
display_scene.name = 'display_scene'
|
||||
|
||||
scene.position.set(-8,-8,-8)
|
||||
|
||||
scene.add(Vertexsnap.vertexes)
|
||||
Vertexsnap.vertexes.name = 'vertex_handles'
|
||||
@ -1242,6 +1241,7 @@ BARS.defineActions(function() {
|
||||
description: 'menu.preview.perspective.normal',
|
||||
icon: 'videocam',
|
||||
category: 'view',
|
||||
condition: _ => !Modes.display,
|
||||
keybind: new Keybind({key: 101}),
|
||||
click: function () {
|
||||
quad_previews.current.setNormalCamera()
|
||||
@ -1255,6 +1255,7 @@ BARS.defineActions(function() {
|
||||
icon: 'videocam',
|
||||
color: 'y',
|
||||
category: 'view',
|
||||
condition: _ => !Modes.display,
|
||||
keybind: new Keybind({key: 104}),
|
||||
click: function () {
|
||||
quad_previews.current.setOrthographicCamera(0)
|
||||
@ -1267,6 +1268,7 @@ BARS.defineActions(function() {
|
||||
icon: 'videocam',
|
||||
color: 'y',
|
||||
category: 'view',
|
||||
condition: _ => !Modes.display,
|
||||
keybind: new Keybind({key: 98}),
|
||||
click: function () {
|
||||
quad_previews.current.setOrthographicCamera(1)
|
||||
@ -1279,6 +1281,7 @@ BARS.defineActions(function() {
|
||||
icon: 'videocam',
|
||||
color: 'z',
|
||||
category: 'view',
|
||||
condition: _ => !Modes.display,
|
||||
keybind: new Keybind({key: 100}),
|
||||
click: function () {
|
||||
quad_previews.current.setOrthographicCamera(2)
|
||||
@ -1291,6 +1294,7 @@ BARS.defineActions(function() {
|
||||
icon: 'videocam',
|
||||
color: 'z',
|
||||
category: 'view',
|
||||
condition: _ => !Modes.display,
|
||||
keybind: new Keybind({key: 102}),
|
||||
click: function () {
|
||||
quad_previews.current.setOrthographicCamera(3)
|
||||
@ -1303,6 +1307,7 @@ BARS.defineActions(function() {
|
||||
icon: 'videocam',
|
||||
color: 'x',
|
||||
category: 'view',
|
||||
condition: _ => !Modes.display,
|
||||
keybind: new Keybind({key: 103}),
|
||||
click: function () {
|
||||
quad_previews.current.setOrthographicCamera(4)
|
||||
@ -1315,6 +1320,7 @@ BARS.defineActions(function() {
|
||||
icon: 'videocam',
|
||||
color: 'x',
|
||||
category: 'view',
|
||||
condition: _ => !Modes.display,
|
||||
keybind: new Keybind({key: 105}),
|
||||
click: function () {
|
||||
quad_previews.current.setOrthographicCamera(5)
|
||||
|
@ -622,8 +622,6 @@
|
||||
var previousValue = 0;
|
||||
var tempScale = 1;
|
||||
|
||||
var worldOffset = new THREE.Vector3(8, 8, 8)
|
||||
|
||||
var parentRotationMatrix = new THREE.Matrix4();
|
||||
|
||||
var worldPosition = new THREE.Vector3();
|
||||
@ -833,7 +831,7 @@
|
||||
//Center
|
||||
if (Toolbox.selected.id === 'rotate_tool' || Toolbox.selected.id === 'pivot_tool') {
|
||||
rotation_object.mesh.getWorldPosition(this.position)
|
||||
Transformer.position.add(worldOffset);
|
||||
Transformer.position.sub(scene.position);
|
||||
} else {
|
||||
var center = getSelectionCenter()
|
||||
Transformer.position.fromArray(center)
|
||||
@ -861,9 +859,6 @@
|
||||
|
||||
this.attach(Group.selected);
|
||||
Group.selected.mesh.getWorldPosition(this.position);
|
||||
this.position.x += 8;
|
||||
this.position.y += 8;
|
||||
this.position.z += 8;
|
||||
if (Toolbox.selected.transformerMode == 'rotate') {
|
||||
this.rotation.set(0, 0, 0);
|
||||
}
|
||||
|
@ -230,7 +230,9 @@ const Vertexsnap = {
|
||||
var mesh = new THREE.Mesh(new THREE.BoxGeometry(1, 1, 1), material)
|
||||
var pos = mesh.position.copy(v)
|
||||
pos.applyMatrix4(cube.mesh.matrixWorld)
|
||||
pos.addScalar(8)
|
||||
if (!Format.bone_rig) {
|
||||
pos.addScalar(8)
|
||||
}
|
||||
mesh.rotation.copy(cube.mesh.rotation)
|
||||
mesh.cube = cube
|
||||
mesh.isVertex = true
|
||||
@ -392,7 +394,7 @@ function scaleAll(save, size) {
|
||||
parseFloat($('#scaling_origin_y').val())||0,
|
||||
parseFloat($('#scaling_origin_z').val())||0,
|
||||
]
|
||||
var clip = false
|
||||
var overflow = [];
|
||||
selected.forEach(function(obj) {
|
||||
obj.autouv = 0;
|
||||
origin.forEach(function(ogn, i) {
|
||||
@ -400,13 +402,13 @@ function scaleAll(save, size) {
|
||||
|
||||
if (obj.from) {
|
||||
obj.from[i] = (obj.before.from[i] - ogn) * size;
|
||||
if (obj.from[i] + ogn > 32 || obj.from[i] + ogn < -16) clip = true;
|
||||
if (obj.from[i] + ogn > 32 || obj.from[i] + ogn < -16) overflow.push(obj);
|
||||
obj.from[i] = limitToBox(obj.from[i] + ogn);
|
||||
}
|
||||
|
||||
if (obj.to) {
|
||||
obj.to[i] = (obj.before.to[i] - ogn) * size;
|
||||
if (obj.to[i] + ogn > 32 || obj.to[i] + ogn < -16) clip = true;
|
||||
if (obj.to[i] + ogn > 32 || obj.to[i] + ogn < -16) overflow.push(obj);
|
||||
obj.to[i] = limitToBox(obj.to[i] + ogn);
|
||||
}
|
||||
|
||||
@ -440,7 +442,8 @@ function scaleAll(save, size) {
|
||||
}
|
||||
}, Group)
|
||||
}
|
||||
if (clip && Format.canvas_limit) {
|
||||
if (overflow.length && Format.canvas_limit) {
|
||||
scaleAll.overflow = overflow;
|
||||
$('#scaling_clipping_warning').text('Model clipping: Your model is too large for the canvas')
|
||||
$('#scale_overflow_btn').css('display', 'inline-block')
|
||||
} else {
|
||||
@ -485,21 +488,9 @@ function cancelScaleAll() {
|
||||
hideDialog()
|
||||
}
|
||||
function scaleAllSelectOverflow() {
|
||||
var overflow = [];
|
||||
selected.forEach(function(obj) {
|
||||
var clip = false
|
||||
obj.from.forEach(function(ogn, i) {
|
||||
|
||||
if (obj.from && (obj.from[i] > 32 || obj.from[i] < -16)) clip = true
|
||||
if (obj.to && (obj.to[i] > 32 || obj.to[i] < -16)) clip = true
|
||||
})
|
||||
if (clip) {
|
||||
overflow.push(obj)
|
||||
}
|
||||
})
|
||||
cancelScaleAll()
|
||||
selected.length = 0;
|
||||
overflow.forEach(obj => {
|
||||
scaleAll.overflow.forEach(obj => {
|
||||
obj.selectLow()
|
||||
})
|
||||
updateSelection();
|
||||
@ -870,7 +861,7 @@ BARS.defineActions(function() {
|
||||
}
|
||||
new NumSlider({
|
||||
id: 'slider_origin_x',
|
||||
condition: () => () => (Modes.edit && getRotationObject()),
|
||||
condition: () => (Modes.edit && getRotationObject()),
|
||||
get: function() {
|
||||
if (Format.bone_rig && Group.selected) {
|
||||
return Group.selected.origin[0];
|
||||
@ -891,7 +882,7 @@ BARS.defineActions(function() {
|
||||
})
|
||||
new NumSlider({
|
||||
id: 'slider_origin_y',
|
||||
condition: () => () => (Modes.edit && getRotationObject()),
|
||||
condition: () => (Modes.edit && getRotationObject()),
|
||||
get: function() {
|
||||
if (Format.bone_rig && Group.selected) {
|
||||
return Group.selected.origin[1];
|
||||
@ -912,7 +903,7 @@ BARS.defineActions(function() {
|
||||
})
|
||||
new NumSlider({
|
||||
id: 'slider_origin_z',
|
||||
condition: () => () => (Modes.edit && getRotationObject()),
|
||||
condition: () => (Modes.edit && getRotationObject()),
|
||||
get: function() {
|
||||
if (Format.bone_rig && Group.selected) {
|
||||
return Group.selected.origin[2];
|
||||
|
@ -17,6 +17,9 @@ var Undo = {
|
||||
}
|
||||
- This still causes issues, for example with different texture selections
|
||||
*/
|
||||
if (aspects.textures && aspects.textures.length == 0 && Format.single_texture && textures.length == 1) {
|
||||
aspects.textures[0] = textures[0];
|
||||
}
|
||||
Undo.current_save = new Undo.save(aspects)
|
||||
return Undo.current_save;
|
||||
},
|
||||
|
@ -71,6 +71,7 @@ BARS.defineActions(function() {
|
||||
$(n).removeClass('sel')
|
||||
})
|
||||
updateInterfacePanels()
|
||||
resizeWindow()
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
@ -89,6 +90,7 @@ BARS.defineActions(function() {
|
||||
$(n).removeClass('sel')
|
||||
})
|
||||
updateInterfacePanels()
|
||||
resizeWindow()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
10
lang/de.json
10
lang/de.json
@ -563,8 +563,6 @@
|
||||
"panel.display": "Anzeigeeinstellungen",
|
||||
"panel.textures": "Texturen",
|
||||
"panel.outliner": "Outliner",
|
||||
"panel.options": "Drehung",
|
||||
"panel.options.angle": "Winkel",
|
||||
"uv_editor.title": "UV Bearbeiten",
|
||||
"uv_editor.all_faces": "Alle",
|
||||
"uv_editor.no_faces": "Keine",
|
||||
@ -862,7 +860,6 @@
|
||||
"action.edit_session.desc": "Mit einer Session verbinden, um mit anderen zusammenzuarbeiten",
|
||||
"action.reset_keyframe": "Keyframe zurücksetzen",
|
||||
"action.reset_keyframe.desc": "Alle Werte der ausgewählten Keyframes zurücksetzen",
|
||||
"panel.options.origin": "Angelpunkt",
|
||||
"dialog.edit_session.title": "Zusammenarbeiten",
|
||||
"edit_session.username": "Name",
|
||||
"edit_session.token": "Schlüssel",
|
||||
@ -962,5 +959,10 @@
|
||||
"action.import_optifine_part": "OptiFine Part Importieren",
|
||||
"action.import_optifine_part.desc": "Importiere ein Part Modell als Teil eines OptiFine Entity Modells",
|
||||
"data.locator": "Locator",
|
||||
"mode.start.no_recents": "Keine zuletzt verwendeten Modelle"
|
||||
"mode.start.no_recents": "Keine zuletzt verwendeten Modelle",
|
||||
"panel.element": "Element",
|
||||
"panel.element.position": "Position",
|
||||
"panel.element.size": "Größe",
|
||||
"panel.element.origin": "Angelpunkt",
|
||||
"panel.element.rotation": "Rotation"
|
||||
}
|
10
lang/en.json
10
lang/en.json
@ -439,7 +439,7 @@
|
||||
"settings.negative_size": "Negative Size",
|
||||
"settings.negative_size.desc": "Allow the resize tool to use negative sizes",
|
||||
"settings.animation_snap": "Animation Snap",
|
||||
"settings.animation_snap.desc": "Snap interval for keyframes in the animation timeline",
|
||||
"settings.animation_snap.desc": "Snap interval for keyframes in the animation timeline in steps per second",
|
||||
|
||||
"settings.dialog_unsaved_textures": "Unsaved Textures",
|
||||
"settings.dialog_unsaved_textures.desc": "Show \"Unsaved Textures\" dialog",
|
||||
@ -970,9 +970,11 @@
|
||||
"panel.variable_placeholders": "Variable Placeholders",
|
||||
"panel.variable_placeholders.info": "List the variables you want to preview via name=value",
|
||||
|
||||
"panel.options": "Rotation",
|
||||
"panel.options.angle": "Angle",
|
||||
"panel.options.origin": "Origin",
|
||||
"panel.element": "Element",
|
||||
"panel.element.position": "Position",
|
||||
"panel.element.size": "Size",
|
||||
"panel.element.origin": "Pivot Point",
|
||||
"panel.element.rotation": "Rotation",
|
||||
|
||||
"uv_editor.title": "UV Editor",
|
||||
"uv_editor.all_faces": "All",
|
||||
|
12
lang/es.json
12
lang/es.json
@ -563,8 +563,6 @@
|
||||
"panel.display": "Visualización",
|
||||
"panel.textures": "Texturas",
|
||||
"panel.outliner": "Esquema",
|
||||
"panel.options": "Rotación",
|
||||
"panel.options.angle": "Ángulo",
|
||||
"uv_editor.title": "Editor de UV",
|
||||
"uv_editor.all_faces": "Todo",
|
||||
"uv_editor.no_faces": "Ninguno",
|
||||
@ -862,7 +860,6 @@
|
||||
"action.edit_session.desc": "Conectarse a una sesión de edición para colaborar con otros usuarios",
|
||||
"action.reset_keyframe": "Resetear Frames Clave",
|
||||
"action.reset_keyframe.desc": "Resetea todos los valores de los frames clave seleccionados",
|
||||
"panel.options.origin": "Origen",
|
||||
"dialog.edit_session.title": "Editar Sesión",
|
||||
"edit_session.username": "Nombre de Usuario",
|
||||
"edit_session.token": "Token",
|
||||
@ -958,9 +955,14 @@
|
||||
"display.reference.crossbow": "Ballesta",
|
||||
"dialog.settings.search_results": "Search Results",
|
||||
"settings.animation_snap": "Animation Snap",
|
||||
"settings.animation_snap.desc": "Snap interval for keyframes in the animation timeline",
|
||||
"settings.animation_snap.desc": "Snap interval for keyframes in the animation timeline in steps per second",
|
||||
"action.import_optifine_part": "Import OptiFine Part",
|
||||
"action.import_optifine_part.desc": "Import an entity part model for OptiFine",
|
||||
"data.locator": "Locator",
|
||||
"mode.start.no_recents": "No recently opened models"
|
||||
"mode.start.no_recents": "No recently opened models",
|
||||
"panel.element": "Element",
|
||||
"panel.element.position": "Position",
|
||||
"panel.element.size": "Size",
|
||||
"panel.element.origin": "Pivot Point",
|
||||
"panel.element.rotation": "Rotation"
|
||||
}
|
12
lang/fr.json
12
lang/fr.json
@ -563,8 +563,6 @@
|
||||
"panel.display": "Afficher",
|
||||
"panel.textures": "Textures",
|
||||
"panel.outliner": "Liste des blocs",
|
||||
"panel.options": "Rotation",
|
||||
"panel.options.angle": "Angle",
|
||||
"uv_editor.title": "Éditeur UV",
|
||||
"uv_editor.all_faces": "Toutes",
|
||||
"uv_editor.no_faces": "Aucun",
|
||||
@ -862,7 +860,6 @@
|
||||
"action.edit_session.desc": "Connectez-vous à une session pour collaborer avec d'autres utilisateurs.",
|
||||
"action.reset_keyframe": "Réinitialiser l'image clé",
|
||||
"action.reset_keyframe.desc": "Réinitialiser toutes les valeurs des images clés sélectionnées",
|
||||
"panel.options.origin": "Origine",
|
||||
"dialog.edit_session.title": "Editer la session",
|
||||
"edit_session.username": "Nom d'utilisateur",
|
||||
"edit_session.token": "Jeton",
|
||||
@ -958,9 +955,14 @@
|
||||
"display.reference.crossbow": "Arbalète",
|
||||
"dialog.settings.search_results": "Search Results",
|
||||
"settings.animation_snap": "Animation Snap",
|
||||
"settings.animation_snap.desc": "Snap interval for keyframes in the animation timeline",
|
||||
"settings.animation_snap.desc": "Snap interval for keyframes in the animation timeline in steps per second",
|
||||
"action.import_optifine_part": "Import OptiFine Part",
|
||||
"action.import_optifine_part.desc": "Import an entity part model for OptiFine",
|
||||
"data.locator": "Locator",
|
||||
"mode.start.no_recents": "No recently opened models"
|
||||
"mode.start.no_recents": "No recently opened models",
|
||||
"panel.element": "Element",
|
||||
"panel.element.position": "Position",
|
||||
"panel.element.size": "Size",
|
||||
"panel.element.origin": "Pivot Point",
|
||||
"panel.element.rotation": "Rotation"
|
||||
}
|
10
lang/it.json
10
lang/it.json
@ -563,8 +563,6 @@
|
||||
"panel.display": "Display",
|
||||
"panel.textures": "Texture",
|
||||
"panel.outliner": "Outliner",
|
||||
"panel.options": "Rotazione",
|
||||
"panel.options.angle": "Angolo",
|
||||
"uv_editor.title": "Editor UV",
|
||||
"uv_editor.all_faces": "Tutte",
|
||||
"uv_editor.no_faces": "Nulla",
|
||||
@ -862,7 +860,6 @@
|
||||
"action.edit_session.desc": "Connettersi ad una sessione modifiche per collaborare con altri utenti",
|
||||
"action.reset_keyframe": "Ripristina Fotogramma",
|
||||
"action.reset_keyframe.desc": "Ripristina tutti i valori dei fotogrammi selezionati",
|
||||
"panel.options.origin": "Origine",
|
||||
"dialog.edit_session.title": "Sessione Modifiche",
|
||||
"edit_session.username": "Username",
|
||||
"edit_session.token": "Chiave",
|
||||
@ -962,5 +959,10 @@
|
||||
"action.import_optifine_part": "Importare parte OptiFine",
|
||||
"action.import_optifine_part.desc": "Importare una parte di un modello per OptiFine",
|
||||
"data.locator": "Locator",
|
||||
"mode.start.no_recents": "No recently opened models"
|
||||
"mode.start.no_recents": "No recently opened models",
|
||||
"panel.element": "Element",
|
||||
"panel.element.position": "Position",
|
||||
"panel.element.size": "Size",
|
||||
"panel.element.origin": "Pivot Point",
|
||||
"panel.element.rotation": "Rotation"
|
||||
}
|
116
lang/ja.json
116
lang/ja.json
@ -1,7 +1,7 @@
|
||||
{
|
||||
"dialog.ok": "OK",
|
||||
"dialog.cancel": "キャンセル",
|
||||
"dialog.confirm": "確認",
|
||||
"dialog.confirm": "完了",
|
||||
"dialog.close": "閉じる",
|
||||
"dialog.import": "インポート",
|
||||
"dialog.save": "保存",
|
||||
@ -331,13 +331,13 @@
|
||||
"action.uv_slider_size_y.desc": "選択したすべてのキューブのUVを垂直方向に拡張",
|
||||
"action.vertex_snap_mode": "Snap Mode",
|
||||
"action.vertex_snap_mode.desc": "頂点スナップが、選択された位置に移動するか、サイズを変更するかを選択する",
|
||||
"action.move_tool": "Move",
|
||||
"action.move_tool": "移動",
|
||||
"action.move_tool.desc": "要素を選択して移動するツール",
|
||||
"action.resize_tool": "Resize",
|
||||
"action.resize_tool": "サイズ",
|
||||
"action.resize_tool.desc": "要素を選択してサイズを変更するツール",
|
||||
"action.brush_tool": "Paint Brush",
|
||||
"action.brush_tool.desc": "テクスチャまたはUVエディタにペイントする",
|
||||
"action.vertex_snap_tool": "Snap",
|
||||
"action.vertex_snap_tool": "スナップ",
|
||||
"action.vertex_snap_tool.desc": "2つのブロックの頂点を接続する",
|
||||
"action.swap_tools": "Swap Tools",
|
||||
"action.swap_tools.desc": "移動ツールとサイズ変更ツールを切り替える",
|
||||
@ -469,15 +469,15 @@
|
||||
"action.reset_interface.desc": "GUIのサイズをリセット",
|
||||
"action.toggle_wireframe": "ワイヤーフレームを固定",
|
||||
"action.toggle_wireframe.desc": "ワイヤフレーム表示を切り替えます",
|
||||
"action.screenshot_model": "Screenshot Model",
|
||||
"action.screenshot_model": "モデル",
|
||||
"action.screenshot_model.desc": "現在の角度からモデルのスクリーンショットを撮る",
|
||||
"action.screenshot_app": "Screenshot App",
|
||||
"action.screenshot_app": "全体",
|
||||
"action.screenshot_app.desc": "アプリケーション全体のスクリーンショットを撮る",
|
||||
"action.toggle_quad_view": "クワッドビューを固定",
|
||||
"action.toggle_quad_view.desc": "4ビューポートモードを切り替える",
|
||||
"action.import_texture": "Import Texture",
|
||||
"action.import_texture": "インポート",
|
||||
"action.import_texture.desc": "ファイルシステムから1つ、または複数のテクスチャをインポートする",
|
||||
"action.create_texture": "Create Texture",
|
||||
"action.create_texture": "作成",
|
||||
"action.create_texture.desc": "テクスチャまたはテンプレートテクスチャを作成する",
|
||||
"action.save_textures": "Save Textures",
|
||||
"action.save_textures.desc": "すべてのテクスチャを保存する",
|
||||
@ -563,8 +563,6 @@
|
||||
"panel.display": "表示",
|
||||
"panel.textures": "Textures",
|
||||
"panel.outliner": "Outliner",
|
||||
"panel.options": "Rotation",
|
||||
"panel.options.angle": "Angle",
|
||||
"uv_editor.title": "UV Editor",
|
||||
"uv_editor.all_faces": "All",
|
||||
"uv_editor.no_faces": "None",
|
||||
@ -590,7 +588,7 @@
|
||||
"display.slot.gui": "GUI",
|
||||
"display.rotation": "回転",
|
||||
"display.translation": "位置",
|
||||
"display.scale": "スケール",
|
||||
"display.scale": "大きさ",
|
||||
"display.slot": "スロット",
|
||||
"display.reference": "参照モデル",
|
||||
"display.presetname": "名前",
|
||||
@ -669,8 +667,8 @@
|
||||
"action.face_tint.desc": "現在の面の色合いオプションを有効にします",
|
||||
"action.uv_shift": "Shift UV",
|
||||
"action.uv_shift.desc": "すべてのUVを固定値でシフトする",
|
||||
"menu.toolbar.edit": "Customize",
|
||||
"menu.toolbar.reset": "Reset",
|
||||
"menu.toolbar.edit": "カスタマイズ",
|
||||
"menu.toolbar.reset": "リセット",
|
||||
"uv_editor.rotated": "回転済み",
|
||||
"uv_editor.auto_cull": "Cullfaceを手動にする",
|
||||
"uv_editor.copied": "コピー",
|
||||
@ -757,10 +755,10 @@
|
||||
"panel.variable_placeholders": "可変プレースホルダ",
|
||||
"panel.variable_placeholders.info": "プレビューする変数を 名前 = 値で表示する",
|
||||
"status_bar.vertex_distance": "間隔:%0",
|
||||
"dialog.create_gif.title": "レコードGIF",
|
||||
"dialog.create_gif.title": "GIF",
|
||||
"dialog.create_gif.length": "長さ(秒)",
|
||||
"dialog.create_gif.fps": "FPS",
|
||||
"dialog.create_gif.compression": "圧縮量",
|
||||
"dialog.create_gif.compression": "圧縮率",
|
||||
"dialog.create_gif.play": "アニメーションを再生",
|
||||
"category.animation": "アニメーション",
|
||||
"action.record_model_gif": "Record GIF",
|
||||
@ -862,7 +860,6 @@
|
||||
"action.edit_session.desc": "他のクリエイターとセッションを通して共同作業が出来ます",
|
||||
"action.reset_keyframe": "Reset Keyframe",
|
||||
"action.reset_keyframe.desc": "キー設定をすべてリセットします",
|
||||
"panel.options.origin": "原点",
|
||||
"dialog.edit_session.title": "セッションを編集",
|
||||
"edit_session.username": "ユーザーネーム",
|
||||
"edit_session.token": "Token",
|
||||
@ -886,71 +883,71 @@
|
||||
"edit_session.welcome": "セッションへようこそ!%0さん",
|
||||
"dialog.yes": "Yes",
|
||||
"dialog.no": "No",
|
||||
"generic.remove": "Remove",
|
||||
"generic.remove": "削除",
|
||||
"generic.download": "ダウンロード",
|
||||
"generic.search": "検索",
|
||||
"dates.today": "今日",
|
||||
"dates.yesterday": "昨日",
|
||||
"dates.this_week": "今週",
|
||||
"dates.weeks_ago": "%0週間前",
|
||||
"mode.start": "スタート",
|
||||
"mode.start": "Start",
|
||||
"mode.start.new": "New",
|
||||
"mode.start.recent": "Recent",
|
||||
"format.free": "Free Model",
|
||||
"format.free.desc": "Model without restrictions for Unity etc.",
|
||||
"format.java_block": "Java Block/Item",
|
||||
"format.java_block.desc": "Block model for Java Edition. Size and rotations are limited.",
|
||||
"format.free.desc": "スタンダードモデリング",
|
||||
"format.java_block": "Java block/item",
|
||||
"format.java_block.desc": "Java Editionモデリング (サイズと回転は限られています)",
|
||||
"format.bedrock": "Bedrock Model",
|
||||
"format.bedrock.desc": "Model for Bedrock Edition",
|
||||
"format.bedrock_old": "Bedrock Legacy Model",
|
||||
"format.bedrock_old.desc": "Pre-1.12 Bedrock Edition entity model",
|
||||
"format.bedrock.desc": "統合版 モデリング",
|
||||
"format.bedrock_old": "統合版デフォルトモデル",
|
||||
"format.bedrock_old.desc": "統合版-1.12 エンティティモデル",
|
||||
"format.modded_entity": "Modded Entity",
|
||||
"format.modded_entity.desc": "Entity model for mods. Can be exported as .java class files.",
|
||||
"format.modded_entity.desc": "エンティティモデリング",
|
||||
"format.optifine_entity": "OptiFine Entity",
|
||||
"format.optifine_entity.desc": "Custom entity model for OptiFine",
|
||||
"keys.mouse": "Mouse Button %0",
|
||||
"message.cleared_blank_faces.title": "Blank Faces",
|
||||
"message.cleared_blank_faces.message": "Blockbench has found %0 cubes without any texture. Do you want to remove those elements?",
|
||||
"message.wireframe.enabled": "Wireframe view enabled",
|
||||
"message.wireframe.disabled": "Wireframe view disabled",
|
||||
"dialog.project.box_uv": "Box UV",
|
||||
"dialog.convert_project.title": "Convert Project",
|
||||
"dialog.convert_project.format": "Format",
|
||||
"dialog.convert_project.text": "Are you sure you want to convert this project? You cannot undo this step.",
|
||||
"dialog.create_texture.double_use": "Keep Multi Texture Occupancy",
|
||||
"dialog.model_stats.title": "Model Stats",
|
||||
"dialog.model_stats.cubes": "Cubes",
|
||||
"dialog.model_stats.locators": "Locators",
|
||||
"dialog.model_stats.groups": "Groups",
|
||||
"dialog.model_stats.vertices": "Vertices",
|
||||
"dialog.model_stats.faces": "Faces",
|
||||
"settings.username": "Username",
|
||||
"settings.username.desc": "Username for edit sessions",
|
||||
"settings.painting_grid": "Painting Grid",
|
||||
"settings.painting_grid.desc": "Show grid on textured cubes in paint mode",
|
||||
"action.slider_brush_min_opacity": "Minimum Opacity",
|
||||
"action.slider_brush_min_opacity.desc": "Minimum opacity of the noise brush in percent",
|
||||
"format.optifine_entity.desc": "OptiFine カスタムエンティティモデリング",
|
||||
"keys.mouse": "マウス %0",
|
||||
"message.cleared_blank_faces.title": "空白の面",
|
||||
"message.cleared_blank_faces.message": "%0個のテクスチャがない面を発見しました。それらをすべて削除しますか?",
|
||||
"message.wireframe.enabled": "ワイヤーフレームを有効にしました",
|
||||
"message.wireframe.disabled": "ワイヤーフレームを無効にしました",
|
||||
"dialog.project.box_uv": "ボックスUV",
|
||||
"dialog.convert_project.title": "プロジェクトを変換",
|
||||
"dialog.convert_project.format": "フォーマット",
|
||||
"dialog.convert_project.text": "このプロジェクトを変換しますか?この動作は戻せません",
|
||||
"dialog.create_texture.double_use": "マルチテクスチャをキープする",
|
||||
"dialog.model_stats.title": "モデルステータス",
|
||||
"dialog.model_stats.cubes": "キューブ",
|
||||
"dialog.model_stats.locators": "ロケーター",
|
||||
"dialog.model_stats.groups": "グループ",
|
||||
"dialog.model_stats.vertices": "頂点",
|
||||
"dialog.model_stats.faces": "面",
|
||||
"settings.username": "ニックネーム",
|
||||
"settings.username.desc": "セッション用のニックネームを編集",
|
||||
"settings.painting_grid": "ペイントグリット",
|
||||
"settings.painting_grid.desc": "キューブ上にグリットを表示する",
|
||||
"action.slider_brush_min_opacity": "最小不透明度",
|
||||
"action.slider_brush_min_opacity.desc": "ブラシの最小不透明度",
|
||||
"action.convert_project": "Convert Project",
|
||||
"action.convert_project.desc": "Converts the current project to a project for another model format",
|
||||
"action.close_project": "Close Project",
|
||||
"action.close_project": "プロジェクトを閉じる",
|
||||
"action.close_project.desc": "Closes the currently open project",
|
||||
"action.export_bedrock": "Export Bedrock Geometry",
|
||||
"action.export_bedrock.desc": "Export the model as a bedrock edition geometry file.",
|
||||
"action.save_project": "Save Project",
|
||||
"action.save_project": "プロジェクトを保存",
|
||||
"action.save_project.desc": "Saves the current model as a project file",
|
||||
"action.save_project_as": "Save Project As",
|
||||
"action.save_project_as": "すべてのプロジェクトを保存",
|
||||
"action.save_project_as.desc": "Saves the current model as a project file at a new location",
|
||||
"action.export_over": "Overwrite Model",
|
||||
"action.export_over": "上書き保存",
|
||||
"action.export_over.desc": "Saves the model, textures and animations by overwriting the files",
|
||||
"action.add_locator": "ロケータ-を追加",
|
||||
"action.add_locator.desc": "Adds a new locator to control positions of particles, leashes etc",
|
||||
"action.sidebar_left": "Textures and UV",
|
||||
"action.sidebar_left.desc": "Open the interface for UV and textures",
|
||||
"action.sidebar_right": "Elements",
|
||||
"action.sidebar_right": "エレメント",
|
||||
"action.sidebar_right.desc": "Open the interface to edit elements",
|
||||
"action.uv_turn_mapping": "Turn Mapping",
|
||||
"action.uv_turn_mapping.desc": "Turn the UV mapping around 90 degrees",
|
||||
"action.remove_blank_faces": "Remove Blank Faces",
|
||||
"action.remove_blank_faces": "空白の面を削除",
|
||||
"action.remove_blank_faces.desc": "Deletes all untextured faces of the selection",
|
||||
"menu.uv.select": "Select Cubes",
|
||||
"web.download_app": "Download App",
|
||||
@ -958,9 +955,14 @@
|
||||
"display.reference.crossbow": "クロスボウ",
|
||||
"dialog.settings.search_results": "Search Results",
|
||||
"settings.animation_snap": "Animation Snap",
|
||||
"settings.animation_snap.desc": "Snap interval for keyframes in the animation timeline",
|
||||
"settings.animation_snap.desc": "Snap interval for keyframes in the animation timeline in steps per second",
|
||||
"action.import_optifine_part": "Import OptiFine Part",
|
||||
"action.import_optifine_part.desc": "Import an entity part model for OptiFine",
|
||||
"data.locator": "Locator",
|
||||
"mode.start.no_recents": "No recently opened models"
|
||||
"data.locator": "ロケーター",
|
||||
"mode.start.no_recents": "最近開いたモデルはありません",
|
||||
"panel.element": "Element",
|
||||
"panel.element.position": "Position",
|
||||
"panel.element.size": "Size",
|
||||
"panel.element.origin": "Pivot Point",
|
||||
"panel.element.rotation": "Rotation"
|
||||
}
|
12
lang/nl.json
12
lang/nl.json
@ -563,8 +563,6 @@
|
||||
"panel.display": "Toning",
|
||||
"panel.textures": "Afbeeldingen",
|
||||
"panel.outliner": "Outliner",
|
||||
"panel.options": "Rotatie",
|
||||
"panel.options.angle": "Hoek",
|
||||
"uv_editor.title": "UV Editor",
|
||||
"uv_editor.all_faces": "Alle",
|
||||
"uv_editor.no_faces": "Geen",
|
||||
@ -862,7 +860,6 @@
|
||||
"action.edit_session.desc": "Connect to an edit session to collaborate with other users",
|
||||
"action.reset_keyframe": "Reset Keyframe",
|
||||
"action.reset_keyframe.desc": "Reset all values of the selected keyframes",
|
||||
"panel.options.origin": "Origin",
|
||||
"dialog.edit_session.title": "Edit Session",
|
||||
"edit_session.username": "Username",
|
||||
"edit_session.token": "Token",
|
||||
@ -958,9 +955,14 @@
|
||||
"display.reference.crossbow": "Crossbow",
|
||||
"dialog.settings.search_results": "Search Results",
|
||||
"settings.animation_snap": "Animation Snap",
|
||||
"settings.animation_snap.desc": "Snap interval for keyframes in the animation timeline",
|
||||
"settings.animation_snap.desc": "Snap interval for keyframes in the animation timeline in steps per second",
|
||||
"action.import_optifine_part": "Import OptiFine Part",
|
||||
"action.import_optifine_part.desc": "Import an entity part model for OptiFine",
|
||||
"data.locator": "Locator",
|
||||
"mode.start.no_recents": "No recently opened models"
|
||||
"mode.start.no_recents": "No recently opened models",
|
||||
"panel.element": "Element",
|
||||
"panel.element.position": "Position",
|
||||
"panel.element.size": "Size",
|
||||
"panel.element.origin": "Pivot Point",
|
||||
"panel.element.rotation": "Rotation"
|
||||
}
|
12
lang/pl.json
12
lang/pl.json
@ -563,8 +563,6 @@
|
||||
"panel.display": "Wyświetlanie",
|
||||
"panel.textures": "Tekstury",
|
||||
"panel.outliner": "Outliner",
|
||||
"panel.options": "Rotacja",
|
||||
"panel.options.angle": "Kąt",
|
||||
"uv_editor.title": "Edytor UV",
|
||||
"uv_editor.all_faces": "Wszystkie",
|
||||
"uv_editor.no_faces": "Żadne",
|
||||
@ -862,7 +860,6 @@
|
||||
"action.edit_session.desc": "Connect to an edit session to collaborate with other users",
|
||||
"action.reset_keyframe": "Reset Keyframe",
|
||||
"action.reset_keyframe.desc": "Reset all values of the selected keyframes",
|
||||
"panel.options.origin": "Origin",
|
||||
"dialog.edit_session.title": "Edit Session",
|
||||
"edit_session.username": "Username",
|
||||
"edit_session.token": "Token",
|
||||
@ -958,9 +955,14 @@
|
||||
"display.reference.crossbow": "Crossbow",
|
||||
"dialog.settings.search_results": "Search Results",
|
||||
"settings.animation_snap": "Animation Snap",
|
||||
"settings.animation_snap.desc": "Snap interval for keyframes in the animation timeline",
|
||||
"settings.animation_snap.desc": "Snap interval for keyframes in the animation timeline in steps per second",
|
||||
"action.import_optifine_part": "Import OptiFine Part",
|
||||
"action.import_optifine_part.desc": "Import an entity part model for OptiFine",
|
||||
"data.locator": "Locator",
|
||||
"mode.start.no_recents": "No recently opened models"
|
||||
"mode.start.no_recents": "No recently opened models",
|
||||
"panel.element": "Element",
|
||||
"panel.element.position": "Position",
|
||||
"panel.element.size": "Size",
|
||||
"panel.element.origin": "Pivot Point",
|
||||
"panel.element.rotation": "Rotation"
|
||||
}
|
12
lang/pt.json
12
lang/pt.json
@ -563,8 +563,6 @@
|
||||
"panel.display": "Padrão",
|
||||
"panel.textures": "Texturas",
|
||||
"panel.outliner": "Organizador",
|
||||
"panel.options": "Rotação",
|
||||
"panel.options.angle": "Ângulo",
|
||||
"uv_editor.title": "Editor de UV",
|
||||
"uv_editor.all_faces": "Todas",
|
||||
"uv_editor.no_faces": "Nenhum",
|
||||
@ -862,7 +860,6 @@
|
||||
"action.edit_session.desc": "Conectar a uma sessão de edição para colaborar com outros usuários",
|
||||
"action.reset_keyframe": "Redefinir Quadro",
|
||||
"action.reset_keyframe.desc": "Redefinir todos os valores dos quadros selecionados",
|
||||
"panel.options.origin": "Origem",
|
||||
"dialog.edit_session.title": "Sessão de Edição",
|
||||
"edit_session.username": "Nome de usuário",
|
||||
"edit_session.token": "Token",
|
||||
@ -958,9 +955,14 @@
|
||||
"display.reference.crossbow": "Crossbow",
|
||||
"dialog.settings.search_results": "Search Results",
|
||||
"settings.animation_snap": "Animation Snap",
|
||||
"settings.animation_snap.desc": "Snap interval for keyframes in the animation timeline",
|
||||
"settings.animation_snap.desc": "Snap interval for keyframes in the animation timeline in steps per second",
|
||||
"action.import_optifine_part": "Import OptiFine Part",
|
||||
"action.import_optifine_part.desc": "Import an entity part model for OptiFine",
|
||||
"data.locator": "Locator",
|
||||
"mode.start.no_recents": "No recently opened models"
|
||||
"mode.start.no_recents": "No recently opened models",
|
||||
"panel.element": "Element",
|
||||
"panel.element.position": "Position",
|
||||
"panel.element.size": "Size",
|
||||
"panel.element.origin": "Pivot Point",
|
||||
"panel.element.rotation": "Rotation"
|
||||
}
|
10
lang/ru.json
10
lang/ru.json
@ -563,8 +563,6 @@
|
||||
"panel.display": "Отображение",
|
||||
"panel.textures": "Текстуры",
|
||||
"panel.outliner": "Элементы",
|
||||
"panel.options": "Поворот",
|
||||
"panel.options.angle": "Угол",
|
||||
"uv_editor.title": "Редактор UV",
|
||||
"uv_editor.all_faces": "Все",
|
||||
"uv_editor.no_faces": "Нет",
|
||||
@ -862,7 +860,6 @@
|
||||
"action.edit_session.desc": "Присоединиться к сеансу редактирования для коллаборации с другими пользователями",
|
||||
"action.reset_keyframe": "Сбросить кадр",
|
||||
"action.reset_keyframe.desc": "Сбросить все значения выбранных кадров",
|
||||
"panel.options.origin": "Центр поворота",
|
||||
"dialog.edit_session.title": "Сеанс Редактирования",
|
||||
"edit_session.username": "Имя пользователя",
|
||||
"edit_session.token": "Ключ",
|
||||
@ -962,5 +959,10 @@
|
||||
"action.import_optifine_part": "Импортировать часть OptiFine",
|
||||
"action.import_optifine_part.desc": "Импортировать часть модели сущности OptiFine",
|
||||
"data.locator": "Locator",
|
||||
"mode.start.no_recents": "No recently opened models"
|
||||
"mode.start.no_recents": "No recently opened models",
|
||||
"panel.element": "Element",
|
||||
"panel.element.position": "Position",
|
||||
"panel.element.size": "Size",
|
||||
"panel.element.origin": "Pivot Point",
|
||||
"panel.element.rotation": "Rotation"
|
||||
}
|
12
lang/sv.json
12
lang/sv.json
@ -563,8 +563,6 @@
|
||||
"panel.display": "Visa",
|
||||
"panel.textures": "Texturer",
|
||||
"panel.outliner": "Konturen",
|
||||
"panel.options": "Rotation",
|
||||
"panel.options.angle": "Vinkel",
|
||||
"uv_editor.title": "UV redigerare",
|
||||
"uv_editor.all_faces": "Alla",
|
||||
"uv_editor.no_faces": "Ingen",
|
||||
@ -862,7 +860,6 @@
|
||||
"action.edit_session.desc": "Anslut till en redigeringssession för att samarbeta med andra användare",
|
||||
"action.reset_keyframe": "Återställ keyframe",
|
||||
"action.reset_keyframe.desc": "Återställ alla värden för de valda keyframes",
|
||||
"panel.options.origin": "Ursprung",
|
||||
"dialog.edit_session.title": "Redigera session",
|
||||
"edit_session.username": "Användarnamn",
|
||||
"edit_session.token": "Token",
|
||||
@ -958,9 +955,14 @@
|
||||
"display.reference.crossbow": "Crossbow",
|
||||
"dialog.settings.search_results": "Search Results",
|
||||
"settings.animation_snap": "Animation Snap",
|
||||
"settings.animation_snap.desc": "Snap interval for keyframes in the animation timeline",
|
||||
"settings.animation_snap.desc": "Snap interval for keyframes in the animation timeline in steps per second",
|
||||
"action.import_optifine_part": "Import OptiFine Part",
|
||||
"action.import_optifine_part.desc": "Import an entity part model for OptiFine",
|
||||
"data.locator": "Locator",
|
||||
"mode.start.no_recents": "No recently opened models"
|
||||
"mode.start.no_recents": "No recently opened models",
|
||||
"panel.element": "Element",
|
||||
"panel.element.position": "Position",
|
||||
"panel.element.size": "Size",
|
||||
"panel.element.origin": "Pivot Point",
|
||||
"panel.element.rotation": "Rotation"
|
||||
}
|
50
lang/zh.json
50
lang/zh.json
@ -1,24 +1,24 @@
|
||||
{
|
||||
"dialog.ok": "确定",
|
||||
"dialog.cancel": "取消",
|
||||
"dialog.confirm": "确认",
|
||||
"dialog.close": "关闭",
|
||||
"dialog.import": "导入",
|
||||
"dialog.save": "保存",
|
||||
"dialog.discard": "弃置",
|
||||
"dialog.dontshowagain": "不再显示此提示",
|
||||
"data.cube": "立方体",
|
||||
"data.group": "组",
|
||||
"data.texture": "贴图",
|
||||
"data.plugin": "插件",
|
||||
"data.preview": "预览",
|
||||
"data.toolbar": "工具栏",
|
||||
"data.image": "图像",
|
||||
"keys.ctrl": "Ctrl",
|
||||
"dialog.ok": "OK",
|
||||
"dialog.cancel": "Cancel",
|
||||
"dialog.confirm": "Confirm",
|
||||
"dialog.close": "Close",
|
||||
"dialog.import": "Import",
|
||||
"dialog.save": "Save",
|
||||
"dialog.discard": "Discard",
|
||||
"dialog.dontshowagain": "Don't Show Again",
|
||||
"data.cube": "Cube",
|
||||
"data.group": "Group",
|
||||
"data.texture": "Texture",
|
||||
"data.plugin": "Plugin",
|
||||
"data.preview": "Preview",
|
||||
"data.toolbar": "Toolbar",
|
||||
"data.image": "Image",
|
||||
"keys.ctrl": "Control",
|
||||
"keys.shift": "Shift",
|
||||
"keys.alt": "Alt",
|
||||
"keys.meta": "CMD命令行",
|
||||
"keys.delete": "删除",
|
||||
"keys.meta": "Cmd",
|
||||
"keys.delete": "Delete",
|
||||
"keys.space": "空格",
|
||||
"keys.leftclick": "鼠标左键",
|
||||
"keys.middleclick": "鼠标滚轮",
|
||||
@ -563,8 +563,6 @@
|
||||
"panel.display": "显示",
|
||||
"panel.textures": "贴图",
|
||||
"panel.outliner": "大纲",
|
||||
"panel.options": "旋转",
|
||||
"panel.options.angle": "角度",
|
||||
"uv_editor.title": "UV 编辑器",
|
||||
"uv_editor.all_faces": "全部",
|
||||
"uv_editor.no_faces": "无",
|
||||
@ -862,7 +860,6 @@
|
||||
"action.edit_session.desc": "连接到编辑会话来与其他用户协作",
|
||||
"action.reset_keyframe": "重置关键帧",
|
||||
"action.reset_keyframe.desc": "重置所选关键帧的所有值",
|
||||
"panel.options.origin": "旋转原点",
|
||||
"dialog.edit_session.title": "编辑会话",
|
||||
"edit_session.username": "用户名",
|
||||
"edit_session.token": "密码",
|
||||
@ -913,7 +910,7 @@
|
||||
"message.cleared_blank_faces.message": "Blockbench 发现 %0 立方体没有任何材质,你想要移除这些元素么?",
|
||||
"message.wireframe.enabled": "线框视图已启用",
|
||||
"message.wireframe.disabled": "线框视图已禁用",
|
||||
"dialog.project.box_uv": "Box UV",
|
||||
"dialog.project.box_uv": "盒子UV",
|
||||
"dialog.convert_project.title": "转换工程",
|
||||
"dialog.convert_project.format": "格式",
|
||||
"dialog.convert_project.text": "你确定想要转换此工程么?此步骤无法撤销。",
|
||||
@ -961,6 +958,11 @@
|
||||
"settings.animation_snap.desc": "动画时间轴中关键帧的捕捉间隔",
|
||||
"action.import_optifine_part": "导入 OptiFine 部件",
|
||||
"action.import_optifine_part.desc": "为 OptiFine 导入一个实体部件模型",
|
||||
"data.locator": "Locator",
|
||||
"mode.start.no_recents": "No recently opened models"
|
||||
"data.locator": "定位器",
|
||||
"mode.start.no_recents": "最近未打开过模型文件",
|
||||
"panel.element": "Element",
|
||||
"panel.element.position": "Position",
|
||||
"panel.element.size": "Size",
|
||||
"panel.element.origin": "Pivot Point",
|
||||
"panel.element.rotation": "Rotation"
|
||||
}
|
5
main.js
5
main.js
@ -61,11 +61,8 @@ function createWindow(second_instance) {
|
||||
win.setMenu(null);
|
||||
}
|
||||
|
||||
win.show()
|
||||
win.maximize()
|
||||
win.webContents.on('dom-ready', () => {
|
||||
//win.maximize()
|
||||
})
|
||||
win.show()
|
||||
|
||||
win.loadURL(url.format({
|
||||
pathname: index_path,
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "Blockbench",
|
||||
"description": "Minecraft Block Model Editor",
|
||||
"version": "3.0.1",
|
||||
"description": "Model editing and animation software",
|
||||
"version": "3.0.2",
|
||||
"license": "MIT",
|
||||
"author": {
|
||||
"name": "JannisX11",
|
||||
@ -80,6 +80,6 @@
|
||||
"devDependencies": {
|
||||
"async": "^2.4.1",
|
||||
"electron": "5.0.6",
|
||||
"electron-builder": "^20.44.4"
|
||||
"electron-builder": "^21.1.1"
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user