mirror of
https://github.com/JannisX11/blockbench.git
synced 2025-03-19 17:01:55 +08:00
v2.1.0
This commit is contained in:
parent
5cdcf1a4eb
commit
2581ce6f34
Binary file not shown.
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 8.0 KiB |
Binary file not shown.
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 7.6 KiB |
@ -89,7 +89,7 @@ License: MIT
|
||||
height: 30px;
|
||||
width: 12px;
|
||||
margin-top: -6px;
|
||||
background-color: var(--color-back);
|
||||
background-color: var(--color-ui);
|
||||
border: 1px solid var(--color-border);
|
||||
}
|
||||
.sp-alpha-inner:hover .sp-alpha-handle {
|
||||
@ -258,7 +258,7 @@ License: MIT
|
||||
left: -3px;
|
||||
right: -3px;
|
||||
background: white;
|
||||
background-color: var(--color-back);
|
||||
background-color: var(--color-ui);
|
||||
border: 1px solid var(--color-border);
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
137
css/style.css
137
css/style.css
@ -180,9 +180,13 @@
|
||||
font-size: 40pt;
|
||||
float: left;
|
||||
padding-right: 8px;
|
||||
min-width: 61px;
|
||||
max-height: 54px;
|
||||
max-width: 62px;
|
||||
}
|
||||
.dialog img.message_box_icon {
|
||||
min-width: auto;
|
||||
}
|
||||
|
||||
/*Vars*/
|
||||
body {
|
||||
@ -360,6 +364,21 @@
|
||||
border: none;
|
||||
font-weight: lighter;
|
||||
}
|
||||
textarea {
|
||||
width: 100%;
|
||||
height: -webkit-fill-available;
|
||||
padding: 4px;
|
||||
border: 1px solid var(--color-border);
|
||||
background: var(--color-back);
|
||||
color: var(--color-text);
|
||||
cursor: default;
|
||||
resize: none;
|
||||
outline: none;
|
||||
}
|
||||
.code {
|
||||
font-family: consolas, monospace;
|
||||
font-size: 16px;
|
||||
}
|
||||
input[type="number"]::-webkit-outer-spin-button, input[type="number"]::-webkit-inner-spin-button, {
|
||||
-webkit-appeareance: none;
|
||||
}
|
||||
@ -563,11 +582,21 @@
|
||||
grid-area: header;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
z-index: 10;
|
||||
}
|
||||
header > * {
|
||||
display: inline-block;
|
||||
}
|
||||
#loading_error_message {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
background-color: var(--color-dark);
|
||||
border: 2px solid var(--color-accent);
|
||||
text-align: center;
|
||||
padding-top: 160px;
|
||||
position: absolute;
|
||||
z-index: 250;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
background-color: var(--color-ui);;
|
||||
border: 1px solid var(--color-border);
|
||||
@ -741,6 +770,9 @@
|
||||
margin: 4px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.text_button:hover {
|
||||
color: var(--color-light);
|
||||
}
|
||||
|
||||
select.tool {
|
||||
-webkit-appearance: none;
|
||||
@ -1146,7 +1178,7 @@
|
||||
border: 1px solid transparent;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.animation:hover .animation_name {
|
||||
.animation:hover {
|
||||
color: var(--color-light);
|
||||
}
|
||||
.animation.selected {
|
||||
@ -1160,6 +1192,9 @@
|
||||
.animation > * {
|
||||
float: left;
|
||||
}
|
||||
.animation > .animation_name {
|
||||
width: calc(100% - 28px);
|
||||
}
|
||||
|
||||
/*Timeline*/
|
||||
#timeline {
|
||||
@ -1168,7 +1203,7 @@
|
||||
body.animation_mode #timeline {
|
||||
display: block;
|
||||
height: 130px;
|
||||
background-color: var(--color-ui);
|
||||
background-color: var(--color-dark);
|
||||
border-top: 1px solid var(--color-border);
|
||||
}
|
||||
body.animation_mode #preview .single_canvas_wrapper {
|
||||
@ -1180,13 +1215,109 @@
|
||||
position: relative;
|
||||
background-color: var(--color-back);
|
||||
height: 129px;
|
||||
border-left: 1px solid var(--color-border);
|
||||
}
|
||||
#timeline_inner #timeline_marker {
|
||||
position: absolute;
|
||||
pointer-events: none;
|
||||
height: 29px;
|
||||
width: 20px;
|
||||
top: 0;
|
||||
margin-left: -9px;
|
||||
border: 2px solid var(--color-accent);
|
||||
border-top-width: 6px;
|
||||
background-color: rgba(0, 0, 0, 0.2);
|
||||
z-index: 3;
|
||||
}
|
||||
#timeline_inner #timeline_marker:before {
|
||||
content: "";
|
||||
display: block;
|
||||
margin-left: 7px;
|
||||
margin-top: 23px;
|
||||
height: 200px;
|
||||
width: 2px;
|
||||
background-color: var(--color-accent);
|
||||
}
|
||||
#timeline_inner .keyframe {
|
||||
position: absolute;
|
||||
margin-left: -11px;
|
||||
z-index: 3;
|
||||
}
|
||||
#timeline_inner .keyframe.selected {
|
||||
color: var(--color-accent);
|
||||
}
|
||||
#timeline_head {
|
||||
float: left;
|
||||
width: 120px;
|
||||
background-color: var(--color-ui);
|
||||
}
|
||||
#timeline_head > * {
|
||||
height: 30px;
|
||||
width: 100%;
|
||||
border-bottom: 1px solid var(--color-border);
|
||||
}
|
||||
#timeline_head > #timeline_corner {
|
||||
font-family: consolas, monospace;
|
||||
background-color: var(--color-back);
|
||||
padding: 3px;
|
||||
padding-left: 8px;
|
||||
}
|
||||
#timeline_head > .channel_head {
|
||||
height: 31px;
|
||||
padding: 4px;
|
||||
text-align: right;
|
||||
}
|
||||
#timeline_head > .channel_head span {
|
||||
width: 86px;
|
||||
float: right;
|
||||
margin-top: -2px;
|
||||
overflow: hidden;
|
||||
}
|
||||
#timeline_head > .channel_head .text_button {
|
||||
width: 26px;
|
||||
font-size: 16pt;
|
||||
float: right;
|
||||
}
|
||||
#timeline_time {
|
||||
height: 30px;
|
||||
position: relative;
|
||||
background-color: var(--color-ui);
|
||||
border-bottom: 1px solid var(--color-border);
|
||||
margin-left: 8px;
|
||||
}
|
||||
div#timeline_time:before, div#timeline_time:after {
|
||||
content: "";
|
||||
background-color: var(--color-button);
|
||||
width: 100%;
|
||||
height: 2px;
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 60px;
|
||||
z-index: 0;
|
||||
border-bottom: 1px solid var(--color-border);
|
||||
}
|
||||
div#timeline_time:after {
|
||||
top: 90px;
|
||||
}
|
||||
.timeline_timecode {
|
||||
border-left: 2px solid var(--color-border);
|
||||
padding-left: 4px;
|
||||
padding-top: 2px;
|
||||
position: absolute;
|
||||
pointer-events: none;
|
||||
}
|
||||
.timeline_timecode:first-child:before {
|
||||
content: "";
|
||||
width: 8px;
|
||||
margin-left: -14px;
|
||||
z-index: 1;
|
||||
top: -28px;
|
||||
height: 125px;
|
||||
position: absolute;
|
||||
background-color: var(--color-ui);
|
||||
margin-top: 28px;
|
||||
border-right: 1px solid var(--color-border);
|
||||
}
|
||||
/*Keyframe Panel*/
|
||||
.panel#keyframe .tabs_small label {
|
||||
font-size: 1em;
|
||||
|
114
index.html
114
index.html
@ -13,6 +13,7 @@
|
||||
<style type="text/css" id="bbstyle"></style>
|
||||
</head>
|
||||
<body spellcheck="false">
|
||||
<div id="loading_error_message" style="display: none;">An error occurred while loading Blockbench</div>
|
||||
<script>
|
||||
if (typeof module === 'object') {window.module = module; module = undefined;}//jQuery Fix
|
||||
var isApp = typeof require !== 'undefined'
|
||||
@ -62,6 +63,7 @@
|
||||
<script src="js/painter.js"></script>
|
||||
<script src="js/display.js"></script>
|
||||
<script src="js/animations.js"></script>
|
||||
<script src="js/molang.js"></script>
|
||||
<script src="js/plugin_loader.js"></script>
|
||||
<script>if (window.module) module = window.module;</script>
|
||||
|
||||
@ -69,6 +71,7 @@
|
||||
<div id="post_textures" class="web_only post_data" hidden></div>
|
||||
<div style="display: none;"></div>
|
||||
|
||||
|
||||
<div id="blackout" onclick="$('.dialog#'+open_dialog).find('.cancel_btn:not([disabled])').click()"></div>
|
||||
|
||||
<div class="dialog draggable" id="welcome_screen">
|
||||
@ -505,6 +508,22 @@
|
||||
<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>
|
||||
</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>
|
||||
@ -521,14 +540,6 @@
|
||||
<p class="tl">layout.color.dark.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
<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>
|
||||
<!--Button-->
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_button" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
@ -562,14 +573,6 @@
|
||||
<p class="tl">layout.color.accent.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_text" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_text" style="background-color: var(--color-text)" class="color_input"></label>
|
||||
@ -595,11 +598,19 @@
|
||||
</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>
|
||||
<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.bright_ui</h4>
|
||||
<p class="tl">layout.color.bright_ui.desc</p>
|
||||
<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>
|
||||
@ -805,35 +816,33 @@
|
||||
@contextmenu.prevent.stop="animation.showContextMenu($event)"
|
||||
>
|
||||
<i class="material-icons">movie</i>
|
||||
<div class="animation_name">{{ animation.name }}</div>
|
||||
<input class="animation_name" v-model="animation.name" disabled="true">
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="keyframe" class="panel">
|
||||
<div class="toolbar_wrapper keyframe"></div>
|
||||
<p class="tl" id="keyframe_type_label"></p>
|
||||
<div class="bar" id="keyframe_bar_x">
|
||||
<label>X</label>
|
||||
<input type="text" id="keyframe_x" class="dark_bordered" axis="x" oninput="updateKeyframeValue(this)">
|
||||
<input type="text" id="keyframe_x" class="dark_bordered code" axis="x" oninput="updateKeyframeValue(this)">
|
||||
</div>
|
||||
<div class="bar" id="keyframe_bar_y">
|
||||
<label>Y</label>
|
||||
<input type="text" id="keyframe_y" class="dark_bordered" axis="y" oninput="updateKeyframeValue(this)">
|
||||
<input type="text" id="keyframe_y" class="dark_bordered code" axis="y" oninput="updateKeyframeValue(this)">
|
||||
</div>
|
||||
<div class="bar" id="keyframe_bar_z">
|
||||
<label>Z</label>
|
||||
<input type="text" id="keyframe_z" class="dark_bordered" axis="z" oninput="updateKeyframeValue(this)">
|
||||
<input type="text" id="keyframe_z" class="dark_bordered code" axis="z" oninput="updateKeyframeValue(this)">
|
||||
</div>
|
||||
<div class="bar" id="keyframe_bar_w">
|
||||
<label>W</label>
|
||||
<input type="text" id="keyframe_w" class="dark_bordered" axis="w" oninput="updateKeyframeValue(this)">
|
||||
<input type="text" id="keyframe_w" class="dark_bordered code" axis="w" oninput="updateKeyframeValue(this)">
|
||||
</div>
|
||||
<!--
|
||||
Rotation / Quaterion / Position / Scale
|
||||
X
|
||||
Y
|
||||
Z
|
||||
W
|
||||
-->
|
||||
</div>
|
||||
<div id="variable_placeholders" class="panel grow">
|
||||
<p class="tl">panel.variable_placeholders.info</p>
|
||||
<textarea id="var_placeholder_area" class="code" style="flex-grow: 1;" onkeyup="Animator.preview()"></textarea>
|
||||
</div>
|
||||
<div id="textures" class="panel grow">
|
||||
<div class="toolbar_wrapper texturelist"></div>
|
||||
@ -879,15 +888,40 @@
|
||||
<div id="preview">
|
||||
</div>
|
||||
<div id="timeline">
|
||||
<div id="timeline_inner">
|
||||
<div id="timeline_head">
|
||||
<div id="timeline_corner"></div>
|
||||
<div class="channel_head">
|
||||
<div class="text_button" onclick="Timeline.addKeyframe('rotation')"><i class="material-icons">add</i></div>
|
||||
<span class="tl">timeline.rotation</span>
|
||||
</div>
|
||||
<div class="channel_head">
|
||||
<div class="text_button" onclick="Timeline.addKeyframe('position')"><i class="material-icons">add</i></div>
|
||||
<span class="tl">timeline.position</span>
|
||||
</div>
|
||||
<div class="channel_head">
|
||||
<div class="text_button" onclick="Timeline.addKeyframe('scale')"><i class="material-icons">add</i></div>
|
||||
<span class="tl">timeline.scale</span>
|
||||
</div>
|
||||
</div>
|
||||
<div id="timeline_inner" @contextmenu.prevent="Timeline.showMenu(event)" v-on:click.stop="Timeline.unselect(event)">
|
||||
<div id="timeline_time" v-bind:style="{width: (size*length)+'px'}">
|
||||
<div v-for="t in timecodes" class="timeline_timecode" v-bind:style="{left: (t.time * size) + 'px'}">
|
||||
{{ t.text }}
|
||||
</div>
|
||||
</div>
|
||||
<div id="timeline_marker"
|
||||
v-bind:style="{left: (8 + marker * size) + 'px'}"
|
||||
></div>
|
||||
<div
|
||||
v-for="keyframe in keyframes"
|
||||
v-bind:style="{left: keyframe.time * size + 'px', top: keyframe.channel_index*32 + 'px'}"
|
||||
v-bind:style="{left: (8 + keyframe.time * size) + 'px', top: (34+keyframe.channel_index*31) + 'px'}"
|
||||
class="keyframe"
|
||||
v-bind:class="[keyframe.channel, keyframe.selected?'selected':'']"
|
||||
v-bind:id="keyframe.uuid"
|
||||
v-on:mousedown.stop="keyframe.select($event)"
|
||||
@contextmenu.prevent.stop="keyframe.showContextMenu($event)"
|
||||
v-on:click.stop="keyframe.select($event)"
|
||||
v-on:dblclick="keyframe.callMarker()"
|
||||
:title="tl('timeline.'+keyframe.channel)"
|
||||
@contextmenu.prevent="keyframe.showContextMenu($event)"
|
||||
>
|
||||
<i class="material-icons">stop</i>
|
||||
</div>
|
||||
@ -916,5 +950,13 @@
|
||||
animate()
|
||||
initializeApp()
|
||||
</script>
|
||||
<script>
|
||||
if (!Blockbench || !Blockbench.setup_successful) {
|
||||
document.getElementById('loading_error_message').style.display = 'block'
|
||||
if (typeof require !== undefined) {
|
||||
require('electron').remote.getCurrentWindow().webContents.openDevTools()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
114
index.php
114
index.php
@ -13,6 +13,7 @@
|
||||
<style type="text/css" id="bbstyle"></style>
|
||||
</head>
|
||||
<body spellcheck="false">
|
||||
<div id="loading_error_message" style="display: none;">An error occurred while loading Blockbench</div>
|
||||
<script>
|
||||
if (typeof module === 'object') {window.module = module; module = undefined;}//jQuery Fix
|
||||
var isApp = typeof require !== 'undefined'
|
||||
@ -62,6 +63,7 @@
|
||||
<script src="js/painter.js"></script>
|
||||
<script src="js/display.js"></script>
|
||||
<script src="js/animations.js"></script>
|
||||
<script src="js/molang.js"></script>
|
||||
<script src="js/plugin_loader.js"></script>
|
||||
<script>if (window.module) module = window.module;</script>
|
||||
|
||||
@ -83,6 +85,7 @@
|
||||
?></div>
|
||||
<div style="display: none;"></div>
|
||||
|
||||
|
||||
<div id="blackout" onclick="$('.dialog#'+open_dialog).find('.cancel_btn:not([disabled])').click()"></div>
|
||||
|
||||
<div class="dialog draggable" id="welcome_screen">
|
||||
@ -519,6 +522,22 @@
|
||||
<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>
|
||||
</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>
|
||||
@ -535,14 +554,6 @@
|
||||
<p class="tl">layout.color.dark.desc</p>
|
||||
</div>
|
||||
</div>
|
||||
<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>
|
||||
<!--Button-->
|
||||
<div class="color_field">
|
||||
<input type="color" class="color_input" id="color_button" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
@ -576,14 +587,6 @@
|
||||
<p class="tl">layout.color.accent.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_text" oninput="changeUIColor(event)" onclick="initUIColor(event)">
|
||||
<label for="color_text" style="background-color: var(--color-text)" class="color_input"></label>
|
||||
@ -609,11 +612,19 @@
|
||||
</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>
|
||||
<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.bright_ui</h4>
|
||||
<p class="tl">layout.color.bright_ui.desc</p>
|
||||
<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>
|
||||
@ -819,35 +830,33 @@
|
||||
@contextmenu.prevent.stop="animation.showContextMenu($event)"
|
||||
>
|
||||
<i class="material-icons">movie</i>
|
||||
<div class="animation_name">{{ animation.name }}</div>
|
||||
<input class="animation_name" v-model="animation.name" disabled="true">
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="keyframe" class="panel">
|
||||
<div class="toolbar_wrapper keyframe"></div>
|
||||
<p class="tl" id="keyframe_type_label"></p>
|
||||
<div class="bar" id="keyframe_bar_x">
|
||||
<label>X</label>
|
||||
<input type="text" id="keyframe_x" class="dark_bordered" axis="x" oninput="updateKeyframeValue(this)">
|
||||
<input type="text" id="keyframe_x" class="dark_bordered code" axis="x" oninput="updateKeyframeValue(this)">
|
||||
</div>
|
||||
<div class="bar" id="keyframe_bar_y">
|
||||
<label>Y</label>
|
||||
<input type="text" id="keyframe_y" class="dark_bordered" axis="y" oninput="updateKeyframeValue(this)">
|
||||
<input type="text" id="keyframe_y" class="dark_bordered code" axis="y" oninput="updateKeyframeValue(this)">
|
||||
</div>
|
||||
<div class="bar" id="keyframe_bar_z">
|
||||
<label>Z</label>
|
||||
<input type="text" id="keyframe_z" class="dark_bordered" axis="z" oninput="updateKeyframeValue(this)">
|
||||
<input type="text" id="keyframe_z" class="dark_bordered code" axis="z" oninput="updateKeyframeValue(this)">
|
||||
</div>
|
||||
<div class="bar" id="keyframe_bar_w">
|
||||
<label>W</label>
|
||||
<input type="text" id="keyframe_w" class="dark_bordered" axis="w" oninput="updateKeyframeValue(this)">
|
||||
<input type="text" id="keyframe_w" class="dark_bordered code" axis="w" oninput="updateKeyframeValue(this)">
|
||||
</div>
|
||||
<!--
|
||||
Rotation / Quaterion / Position / Scale
|
||||
X
|
||||
Y
|
||||
Z
|
||||
W
|
||||
-->
|
||||
</div>
|
||||
<div id="variable_placeholders" class="panel grow">
|
||||
<p class="tl">panel.variable_placeholders.info</p>
|
||||
<textarea id="var_placeholder_area" class="code" style="flex-grow: 1;" onkeyup="Animator.preview()"></textarea>
|
||||
</div>
|
||||
<div id="textures" class="panel grow">
|
||||
<div class="toolbar_wrapper texturelist"></div>
|
||||
@ -893,15 +902,40 @@
|
||||
<div id="preview">
|
||||
</div>
|
||||
<div id="timeline">
|
||||
<div id="timeline_inner">
|
||||
<div id="timeline_head">
|
||||
<div id="timeline_corner"></div>
|
||||
<div class="channel_head">
|
||||
<div class="text_button" onclick="Timeline.addKeyframe('rotation')"><i class="material-icons">add</i></div>
|
||||
<span class="tl">timeline.rotation</span>
|
||||
</div>
|
||||
<div class="channel_head">
|
||||
<div class="text_button" onclick="Timeline.addKeyframe('position')"><i class="material-icons">add</i></div>
|
||||
<span class="tl">timeline.position</span>
|
||||
</div>
|
||||
<div class="channel_head">
|
||||
<div class="text_button" onclick="Timeline.addKeyframe('scale')"><i class="material-icons">add</i></div>
|
||||
<span class="tl">timeline.scale</span>
|
||||
</div>
|
||||
</div>
|
||||
<div id="timeline_inner" @contextmenu.prevent="Timeline.showMenu(event)" v-on:click.stop="Timeline.unselect(event)">
|
||||
<div id="timeline_time" v-bind:style="{width: (size*length)+'px'}">
|
||||
<div v-for="t in timecodes" class="timeline_timecode" v-bind:style="{left: (t.time * size) + 'px'}">
|
||||
{{ t.text }}
|
||||
</div>
|
||||
</div>
|
||||
<div id="timeline_marker"
|
||||
v-bind:style="{left: (8 + marker * size) + 'px'}"
|
||||
></div>
|
||||
<div
|
||||
v-for="keyframe in keyframes"
|
||||
v-bind:style="{left: keyframe.time * size + 'px', top: keyframe.channel_index*32 + 'px'}"
|
||||
v-bind:style="{left: (8 + keyframe.time * size) + 'px', top: (34+keyframe.channel_index*31) + 'px'}"
|
||||
class="keyframe"
|
||||
v-bind:class="[keyframe.channel, keyframe.selected?'selected':'']"
|
||||
v-bind:id="keyframe.uuid"
|
||||
v-on:mousedown.stop="keyframe.select($event)"
|
||||
@contextmenu.prevent.stop="keyframe.showContextMenu($event)"
|
||||
v-on:click.stop="keyframe.select($event)"
|
||||
v-on:dblclick="keyframe.callMarker()"
|
||||
:title="tl('timeline.'+keyframe.channel)"
|
||||
@contextmenu.prevent="keyframe.showContextMenu($event)"
|
||||
>
|
||||
<i class="material-icons">stop</i>
|
||||
</div>
|
||||
@ -930,5 +964,13 @@
|
||||
animate()
|
||||
initializeApp()
|
||||
</script>
|
||||
<script>
|
||||
if (!Blockbench || !Blockbench.setup_successful) {
|
||||
document.getElementById('loading_error_message').style.display = 'block'
|
||||
if (typeof require !== undefined) {
|
||||
require('electron').remote.getCurrentWindow().webContents.openDevTools()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
@ -1,5 +1,6 @@
|
||||
/**
|
||||
* @author arodic / https://github.com/arodic
|
||||
* original author: arodic / https://github.com/arodic
|
||||
* modified for Blockbench by jannisx11
|
||||
*/
|
||||
|
||||
( function () {
|
||||
@ -556,6 +557,9 @@
|
||||
scope.dispatchEvent(changeEvent);
|
||||
};
|
||||
|
||||
this.cancel = function () {
|
||||
};
|
||||
|
||||
this.updateVisibleAxes = function () {
|
||||
scope.children[ _mode === 'translate' ? 0 : 1 ].children[0].children.forEach(function(s, i) {
|
||||
if (!scope.camera.axis) {
|
||||
@ -769,6 +773,8 @@
|
||||
})
|
||||
Undo.initEdit({cubes: selected})
|
||||
} else if (Toolbox.selected.id === 'move_tool') {
|
||||
|
||||
previousValue = undefined
|
||||
Undo.initEdit({cubes: selected})
|
||||
}
|
||||
|
||||
@ -782,7 +788,6 @@
|
||||
|
||||
oldPositionArray.push(new THREE.Vector3());
|
||||
oldScaleArray.push(new THREE.Vector3());
|
||||
//parentRotationArray.push(s.rotation);
|
||||
oldOriginPosition = new THREE.Vector3()
|
||||
oldOriginPosition.copy(scope.position)
|
||||
|
||||
@ -791,7 +796,6 @@
|
||||
oldScaleArray[ oldScaleArray.length-1 ].copy( s.scale );
|
||||
|
||||
parentScale.setFromMatrixScale( tempMatrix.getInverse( s.parent.matrixWorld ) );
|
||||
|
||||
})
|
||||
|
||||
offset.copy( planeIntersect.point );
|
||||
@ -842,7 +846,7 @@
|
||||
|
||||
var axisNumber = getAxisNumber(axis)
|
||||
var snap_factor = canvasGridSize(event.shiftKey, event.ctrlKey)
|
||||
point[axis] = Math.round( point[axis] / snap_factor ) * snap_factor * (useBedrockFlipFix(axis) ? -1 : 1)
|
||||
point[axis] = Math.round( point[axis] / snap_factor ) * snap_factor// * (useBedrockFlipFix(axis) ? -1 : 1)
|
||||
|
||||
|
||||
if (previousValue !== point[axis]) {
|
||||
@ -866,73 +870,43 @@
|
||||
scope.hasChanged = true
|
||||
}
|
||||
|
||||
} else {
|
||||
} else if (Toolbox.selected.id === 'move_tool') {
|
||||
|
||||
|
||||
//Translate
|
||||
var axis = scope.axis.toLowerCase()
|
||||
|
||||
if ( scope.axis !== "X") point.x = 0;
|
||||
if ( scope.axis !== "Y") point.y = 0;
|
||||
if ( scope.axis !== "Z") point.z = 0;
|
||||
|
||||
var axisNumber = getAxisNumber(axis)
|
||||
var snap_factor = canvasGridSize(event.shiftKey, event.ctrlKey)
|
||||
point[axis] = Math.round( point[axis] / snap_factor ) * snap_factor * (useBedrockFlipFix(axis) ? -1 : 1)
|
||||
point[axis] = Math.round( point[axis] / snap_factor ) * snap_factor// * (useBedrockFlipFix(axis) ? -1 : 1)
|
||||
|
||||
if (previousValue === undefined) {
|
||||
previousValue = point[axis]
|
||||
|
||||
if (previousValue !== point[axis]) {
|
||||
|
||||
var axis = getAxisNumber(axis)
|
||||
|
||||
var rotatedPoint = new THREE.Vector3();
|
||||
rotatedPoint.copy(point)
|
||||
if (Blockbench.globalMovement === false && !Blockbench.entity_mode) {
|
||||
var rotation = new THREE.Quaternion()
|
||||
scope.objects[0].getWorldQuaternion(rotation)
|
||||
rotatedPoint.applyQuaternion(rotation)
|
||||
}
|
||||
|
||||
centerTransformer(rotatedPoint)
|
||||
previousValue = point.getComponent(axis)
|
||||
|
||||
var difference = scope.position.distanceTo(oldOriginPosition)
|
||||
var shiftVec = new THREE.Vector3().copy(oldOriginPosition)
|
||||
shiftVec.sub(scope.position).negate().removeEuler(Transformer.rotation)
|
||||
if (shiftVec[scope.axis.toLowerCase()] < 0) {
|
||||
difference *= -1
|
||||
}
|
||||
|
||||
var nslide_number = trimFloatNumber( limitNumber( selected[0].from[axis] + difference ) )
|
||||
BarItems['slider_pos_'+scope.axis.toLowerCase()].setValue(nslide_number)
|
||||
scope.hasChanged = true
|
||||
} else if (previousValue !== point[axis]) {
|
||||
var difference = point[axis] - previousValue
|
||||
|
||||
var overlapping = false
|
||||
if (settings.restricted_canvas.value && !Blockbench.entity_mode) {
|
||||
selected.forEach(function(obj) {
|
||||
overlapping = overlapping || (
|
||||
obj.to[axis] + difference > 32 ||
|
||||
obj.to[axis] + difference < -16 ||
|
||||
obj.from[axis] + difference > 32 ||
|
||||
obj.from[axis] + difference < -16
|
||||
obj.to[axisNumber] + difference > 32 ||
|
||||
obj.to[axisNumber] + difference < -16 ||
|
||||
obj.from[axisNumber] + difference > 32 ||
|
||||
obj.from[axisNumber] + difference < -16
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
if (!overlapping) {
|
||||
scope.last_valid_position.copy(scope.position)
|
||||
scope.objects.forEach(function(s, i) {
|
||||
s.position.copy( oldPositionArray[i] );
|
||||
if (Blockbench.entity_mode && Blockbench.globalMovement) {
|
||||
var cube_offset = new THREE.Vector3().copy(rotatedPoint)
|
||||
var rotation = new THREE.Quaternion()
|
||||
s.getWorldQuaternion(rotation)
|
||||
cube_offset.applyQuaternion(rotation.inverse())
|
||||
s.position.add( cube_offset );
|
||||
} else {
|
||||
s.position.add( rotatedPoint );
|
||||
}
|
||||
|
||||
selected.forEach(function(obj, i) {
|
||||
var mesh = scope.objects[i]
|
||||
var valx = obj.from[axisNumber]
|
||||
valx += difference
|
||||
moveCube(obj, valx, axisNumber)
|
||||
})
|
||||
Canvas.updatePositions(true)
|
||||
centerTransformer()
|
||||
}
|
||||
previousValue = point[axis]
|
||||
scope.hasChanged = true
|
||||
}
|
||||
}
|
||||
scope.dispatchEvent( changeEvent );
|
||||
@ -965,25 +939,10 @@
|
||||
|
||||
} else if (scope.axis !== null) {
|
||||
|
||||
var axis = scope.axis.toLowerCase()
|
||||
var difference = scope.last_valid_position.distanceTo(oldOriginPosition)
|
||||
|
||||
oldOriginPosition.sub(scope.last_valid_position).negate()
|
||||
if (Blockbench.globalMovement) {
|
||||
oldOriginPosition.removeEuler(Transformer.rotation)
|
||||
}
|
||||
|
||||
if (oldOriginPosition[axis] < 0) {
|
||||
difference *= -1
|
||||
}
|
||||
|
||||
selected.forEach(function(obj) {
|
||||
var valx = obj.from[getAxisNumber(axis)]
|
||||
valx += difference
|
||||
moveCube(obj, valx, getAxisNumber(axis))
|
||||
})
|
||||
|
||||
Canvas.updatePositions()
|
||||
selected.forEach(function(obj) {
|
||||
delete obj.oldPosition
|
||||
})
|
||||
if (scope.hasChanged) {
|
||||
Undo.finishEdit('move')
|
||||
}
|
||||
|
1444
js/actions.js
1444
js/actions.js
File diff suppressed because it is too large
Load Diff
845
js/animations.js
845
js/animations.js
File diff suppressed because it is too large
Load Diff
16
js/api.js
16
js/api.js
@ -81,6 +81,11 @@ class API {
|
||||
}, time ? time : 1000)
|
||||
}
|
||||
showStatusMessage(message, time) {
|
||||
Blockbench.setStatusBarText(tl(message))
|
||||
setTimeout(function() {
|
||||
Blockbench.setStatusBarText()
|
||||
}, time ? time : 600)
|
||||
/*
|
||||
var status_message = $('#status_message')
|
||||
var status_name = $('#status_name')
|
||||
|
||||
@ -92,7 +97,14 @@ class API {
|
||||
setTimeout(function() {
|
||||
status_message.hide(100)
|
||||
status_name.show(100)
|
||||
}, time ? time : 600)
|
||||
}, time ? time : 600)*/
|
||||
}
|
||||
setStatusBarText(text) {
|
||||
if (text) {
|
||||
Prop.file_name = text
|
||||
} else {
|
||||
Prop.file_name = Prop.file_name_alt||''
|
||||
}
|
||||
}
|
||||
showMessage(message, location) {
|
||||
if (location === 'status_bar') {
|
||||
@ -173,7 +185,7 @@ class API {
|
||||
}
|
||||
textPrompt(title, value, callback) {
|
||||
showDialog('text_input')
|
||||
$('#text_input h2').text(title)
|
||||
$('#text_input h2').text(tl(title))
|
||||
$('#text_input input#text_input_field').val(value).select()
|
||||
$('#text_input button.confirm_btn').off()
|
||||
$('#text_input button.confirm_btn').click(function() {
|
||||
|
193
js/blockbench.js
193
js/blockbench.js
@ -1,4 +1,4 @@
|
||||
const appVersion = '2.0.2'
|
||||
const appVersion = '2.1.0'
|
||||
var osfs = '/'
|
||||
var File, i;
|
||||
const elements = [];
|
||||
@ -135,8 +135,7 @@ function initializeApp() {
|
||||
|
||||
setupInterface()
|
||||
setupDragHandlers()
|
||||
//saveSettings()
|
||||
//Undo.add('Blank')
|
||||
Blockbench.setup_successful = true
|
||||
}
|
||||
function setupVue() {
|
||||
outliner = new Vue({
|
||||
@ -176,61 +175,6 @@ function setupVue() {
|
||||
})
|
||||
texturelist._data.elements = textures
|
||||
|
||||
|
||||
/*
|
||||
var keybindlist = new Vue({
|
||||
el: 'ul#keybindlist',
|
||||
data: {keybinds},
|
||||
methods: {
|
||||
prepareInput: function(key) {
|
||||
$('div:focus').on('keyup mousedown', function(event) {
|
||||
event.preventDefault()
|
||||
key.code = event.which
|
||||
key.ctrl = event.ctrlKey
|
||||
key.shift = event.shiftKey
|
||||
key.alt = event.altKey
|
||||
keys = []
|
||||
if (key.ctrl) keys.push('Ctrl')
|
||||
if (key.shift) keys.push('Shift')
|
||||
if (key.alt) keys.push('Alt')
|
||||
if (key.code === 1) {
|
||||
keys.push('Left-Click')
|
||||
} else if (key.code === 2) {
|
||||
keys.push('Mousewheel')
|
||||
} else if (key.code === 3) {
|
||||
keys.push('Right-Click')
|
||||
|
||||
} else if (key.code >= 96 && key.code <= 105) {
|
||||
keys.push('NUMPAD '+event.key)
|
||||
} else if (event.key === ' ') {
|
||||
keys.push('SPACE')
|
||||
} else {
|
||||
keys.push(event.key.toUpperCase())
|
||||
}
|
||||
key.char = keys.join(' + ')
|
||||
|
||||
$(this).blur()
|
||||
$(this).off('keyup mousedown')
|
||||
localStorage.setItem('keybinds', JSON.stringify(omitKeys(keybinds, ['name'], true)))
|
||||
})
|
||||
.on('keydown keypress keyup click click dblclick mouseup', function(event) {
|
||||
event.preventDefault()
|
||||
})
|
||||
},
|
||||
resetKey: function(key) {
|
||||
var obj = keybindSetup(true)
|
||||
for (var keystring in keybinds) {
|
||||
if (keybinds.hasOwnProperty(keystring) && keybinds[keystring] === key) {
|
||||
keybinds[keystring] = obj[keystring]
|
||||
break;
|
||||
}
|
||||
}
|
||||
localStorage.setItem('keybinds', JSON.stringify(omitKeys(keybinds, ['name'], true)))
|
||||
}
|
||||
}
|
||||
})
|
||||
keybindlist._data.elements = keybinds
|
||||
*/
|
||||
setupKeybindings()
|
||||
|
||||
var structure = {}
|
||||
@ -259,7 +203,6 @@ function setupVue() {
|
||||
for (var ct in structure) {
|
||||
structure[ct].open = false
|
||||
}
|
||||
|
||||
}
|
||||
category.open = !category.open
|
||||
}
|
||||
@ -284,8 +227,11 @@ function setupVue() {
|
||||
Timeline.vue = new Vue({
|
||||
el: '#timeline_inner',
|
||||
data: {
|
||||
size: 40,
|
||||
keyframes: []
|
||||
size: 150,
|
||||
length: 10,
|
||||
timecodes: [],
|
||||
keyframes: [],
|
||||
marker: Timeline.second
|
||||
}
|
||||
})
|
||||
|
||||
@ -346,7 +292,9 @@ function updateNslideValues() {
|
||||
//Selections
|
||||
function updateSelection() {
|
||||
//Clear
|
||||
scene.remove(rot_origin)
|
||||
if (rot_origin.parent) {
|
||||
rot_origin.parent.remove(rot_origin)
|
||||
}
|
||||
Transformer.detach()
|
||||
Transformer.hoverAxis = null;
|
||||
|
||||
@ -385,18 +333,43 @@ function updateSelection() {
|
||||
if (selected_group) {
|
||||
$('.selection_only#options').css('visibility', 'visible')
|
||||
if (settings.origin_size.value > 0) {
|
||||
setOriginHelper(selected_group)
|
||||
selected_group.getMesh().add(rot_origin)
|
||||
}
|
||||
} else {
|
||||
$('.selection_only#options').css('visibility', 'hidden')
|
||||
}
|
||||
if (Animator.state && Animator.selected && selected_group) {
|
||||
Animator.selected.getCurrentBoneAnimator().select()
|
||||
if (Animator.open && Animator.selected && selected_group) {
|
||||
Animator.selected.getBoneAnimator().select()
|
||||
}
|
||||
if (Animator.open) {
|
||||
updateKeyframeSelection()
|
||||
}
|
||||
} else {
|
||||
//Origin Helper
|
||||
if (selected.length === 1 && settings.origin_size.value > 0) {
|
||||
setOriginHelper(selected[0])
|
||||
if (selected.length === 1 && selected[0].visibility) {
|
||||
selected[0].getMesh().add(rot_origin)
|
||||
} else if (selected.length > 0) {
|
||||
var origin = null;
|
||||
var first_visible = null;
|
||||
var i = 0;
|
||||
while (i < selected.length) {
|
||||
if (selected[i].visibility) {
|
||||
|
||||
if (first_visible === null) {
|
||||
first_visible = selected[i]
|
||||
}
|
||||
if (origin === null) {
|
||||
origin = selected[i].origin
|
||||
} else if (!origin.equals(selected[i].origin)) {
|
||||
origin = false;
|
||||
i = Infinity;
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
if (first_visible && typeof origin === 'object') {
|
||||
first_visible.getMesh().add(rot_origin)
|
||||
}
|
||||
}
|
||||
}
|
||||
Transformer.update()
|
||||
@ -477,7 +450,7 @@ var Screencam = {
|
||||
currentwindow.capturePage(function(screenshot) {
|
||||
var dataUrl = screenshot.toDataURL()
|
||||
dataUrl = dataUrl.replace('data:image/png;base64,','')
|
||||
Jimp.read(Buffer.from(dataUrl, 'base64'), function() {}).then(function(image) {
|
||||
Jimp.read(Buffer.from(dataUrl, 'base64')).then(function(image) {
|
||||
|
||||
if (options && options.width && options.height) {
|
||||
image.contain(options.width, options.height)
|
||||
@ -537,6 +510,10 @@ var Clipbench = {
|
||||
uv_dialog.copy(event)
|
||||
} else if (display_mode) {
|
||||
copyDisplaySlot()
|
||||
} else if (Animator.open) {
|
||||
if (Timeline.selected.length) {
|
||||
Clipbench.setKeyframes(Timeline.selected)
|
||||
}
|
||||
} else if (p == 'uv' || p == 'preview') {
|
||||
main_uv.copy(event)
|
||||
} else if (p == 'textures' && isApp) {
|
||||
@ -562,6 +539,33 @@ var Clipbench = {
|
||||
uv_dialog.paste(event)
|
||||
} else if (display_mode) {
|
||||
pasteDisplaySlot()
|
||||
} else if (Animator.open) {
|
||||
//
|
||||
if (isApp) {
|
||||
var raw = clipboard.readHTML()
|
||||
try {
|
||||
var data = JSON.parse(raw)
|
||||
if (data.type === 'keyframes' && data.content) {
|
||||
Clipbench.keyframes = data.content
|
||||
}
|
||||
} catch (err) {}
|
||||
}
|
||||
if (Clipbench.keyframes && Clipbench.keyframes.length) {
|
||||
|
||||
|
||||
if (!Animator.selected) return;
|
||||
var bone = Animator.selected.getBoneAnimator()
|
||||
if (bone) {
|
||||
Clipbench.keyframes.forEach(function(data) {
|
||||
var base_kf = new Keyframe(data)
|
||||
base_kf.time = Timeline.second + data.time_offset
|
||||
bone.pushKeyframe(base_kf)
|
||||
})
|
||||
Vue.nextTick(Timeline.update)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} else if (p == 'uv' || p == 'preview') {
|
||||
main_uv.paste(event)
|
||||
} else if (p == 'textures' && isApp) {
|
||||
@ -645,6 +649,32 @@ var Clipbench = {
|
||||
if (isApp) {
|
||||
clipboard.writeHTML(JSON.stringify({type: 'cubes', content: Clipbench.cubes}))
|
||||
}
|
||||
},
|
||||
setKeyframes: function(keyframes) {
|
||||
Clipbench.keyframes = []
|
||||
if (!keyframes || keyframes.length === 0) {
|
||||
return;
|
||||
}
|
||||
var first = keyframes[0];
|
||||
keyframes.forEach(function(kf) {
|
||||
if (kf.time < first.time) {
|
||||
first = kf
|
||||
}
|
||||
})
|
||||
keyframes.forEach(function(kf) {
|
||||
Clipbench.keyframes.push({
|
||||
channel: kf.channel,
|
||||
x: kf.x,
|
||||
y: kf.y,
|
||||
z: kf.z,
|
||||
w: kf.w,
|
||||
isQuaternion: kf.isQuaternion,
|
||||
time_offset: kf.time - first.time,
|
||||
})
|
||||
})
|
||||
if (isApp) {
|
||||
clipboard.writeHTML(JSON.stringify({type: 'keyframes', content: Clipbench.keyframes}))
|
||||
}
|
||||
}
|
||||
}
|
||||
TextureAnimator = {
|
||||
@ -771,20 +801,26 @@ var Vertexsnap = {
|
||||
})
|
||||
}
|
||||
let data = Canvas.raycast()
|
||||
if (!data || !data.vertex) return;
|
||||
if (!data || !data.vertex) {
|
||||
Blockbench.setStatusBarText()
|
||||
return;
|
||||
}
|
||||
var vertex = data.vertex
|
||||
vertex.material.color.g = 1
|
||||
Vertexsnap.hovering = true
|
||||
|
||||
if (Vertexsnap.step1 === false) {
|
||||
var color = '0x'+app_colors.accent.hex.replace('#', '')
|
||||
//Line
|
||||
var geometry = new THREE.Geometry();
|
||||
geometry.vertices.push(Vertexsnap.vertex_pos);
|
||||
geometry.vertices.push(vertex.position);
|
||||
var line = new THREE.Line(geometry, new THREE.LineBasicMaterial({ color: parseInt(color) }));
|
||||
var line = new THREE.Line(geometry, Vertexsnap.lineMaterial);
|
||||
line.renderOrder = 900
|
||||
line.material.depthTest = false
|
||||
Vertexsnap.vertexes.add(line)
|
||||
//Measure
|
||||
var diff = new THREE.Vector3().copy(Vertexsnap.vertex_pos)
|
||||
diff.sub(vertex.position)
|
||||
Blockbench.setStatusBarText(tl('status_bar.vertex_distance', [trimFloatNumber(diff.length())] ))
|
||||
}
|
||||
},
|
||||
select: function() {
|
||||
@ -795,6 +831,8 @@ var Vertexsnap = {
|
||||
if (selected.length) {
|
||||
$('#preview').css('cursor', (Vertexsnap.step1 ? 'copy' : 'alias'))
|
||||
}
|
||||
Vertexsnap.lineMaterial = Canvas.outlineMaterial.clone()
|
||||
Vertexsnap.lineMaterial.depthTest = false
|
||||
},
|
||||
canvasClick: function(data) {
|
||||
if (!data.vertex) return;
|
||||
@ -810,6 +848,7 @@ var Vertexsnap = {
|
||||
Vertexsnap.snap(data)
|
||||
$('#preview').css('cursor', (Vertexsnap.step1 ? 'copy' : 'alias'))
|
||||
}
|
||||
Blockbench.setStatusBarText()
|
||||
},
|
||||
snap: function(data) {
|
||||
Undo.initEdit({cubes: Vertexsnap.cubes})
|
||||
@ -833,7 +872,9 @@ var Vertexsnap = {
|
||||
}
|
||||
|
||||
Vertexsnap.cubes.forEach(function(obj) {
|
||||
var cube_pos = new THREE.Vector3().copy(pos).removeEuler(Vertexsnap.cubes[0].getMesh().rotation)
|
||||
var q = obj.getMesh().getWorldQuaternion(new THREE.Quaternion()).inverse()
|
||||
var cube_pos = new THREE.Vector3().copy(pos).applyQuaternion(q)
|
||||
|
||||
for (i=0; i<3; i++) {
|
||||
if (m[i] === 1) {
|
||||
obj.to[i] += cube_pos.getComponent(i)
|
||||
@ -841,6 +882,9 @@ var Vertexsnap = {
|
||||
obj.from[i] += cube_pos.getComponent(i)
|
||||
}
|
||||
}
|
||||
if (Blockbench.entity_mode && obj.visibility) {
|
||||
Canvas.updateUV(obj)
|
||||
}
|
||||
})
|
||||
} else {
|
||||
Vertexsnap.cubes.forEach(function(obj) {
|
||||
@ -850,7 +894,8 @@ var Vertexsnap = {
|
||||
obj.origin[1] += cube_pos.getComponent(1)
|
||||
obj.origin[2] += cube_pos.getComponent(2)
|
||||
} else {
|
||||
cube_pos.removeEuler(Vertexsnap.cubes[0].getMesh().rotation)
|
||||
var q = obj.getMesh().getWorldQuaternion(new THREE.Quaternion()).inverse()
|
||||
cube_pos.applyQuaternion(q)
|
||||
}
|
||||
obj.from[0] += cube_pos.getComponent(0)
|
||||
obj.from[1] += cube_pos.getComponent(1)
|
||||
|
678
js/display.js
678
js/display.js
@ -3,10 +3,12 @@ Blockbench.display_settings = display
|
||||
var ground_animation = false;
|
||||
var ground_timer = 0
|
||||
var display_slot;
|
||||
var display_preview;
|
||||
var display_clipboard;
|
||||
|
||||
class refModel {
|
||||
constructor(id) {
|
||||
var scope = this;
|
||||
this.model = new THREE.Object3D();
|
||||
this.name = tl('display.reference.'+id);
|
||||
this.id = id;
|
||||
@ -16,12 +18,17 @@ class refModel {
|
||||
switch (id) {
|
||||
case 'player':
|
||||
this.onload = function() {
|
||||
let angle = Math.degToRad(scope.angle||22.5)
|
||||
let x = scope.variant === 'alex' ? 5.5 : 6
|
||||
let y = 22 - Math.cos(angle)*10 + Math.sin(angle)*2
|
||||
let z = Math.sin(angle)*10 + Math.cos(angle)*2
|
||||
|
||||
if (display_slot === 'thirdperson_righthand') {
|
||||
setDisplayArea(-5.7, 7.5, -6, -90, 22.5, 90, 1, 1, 1)
|
||||
setDisplayArea(x, y, -z, -67.5,0,0, 1, 1, 1)
|
||||
} else if (display_slot === 'thirdperson_lefthand') {
|
||||
setDisplayArea(-5.7, 7.5, 6, -90, 22.5, 90, 1, 1, 1)
|
||||
setDisplayArea(-x, y, -z, -67.5,0,0, 1, 1, 1)
|
||||
} else if (display_slot === 'head') {
|
||||
setDisplayArea(0, 22, 0, 0, 90, 0, 0.625, 0.625, 0.625)
|
||||
setDisplayArea(0, 22, 0, 0, 0, 0, 0.625, 0.625, 0.625)
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -104,18 +111,29 @@ class refModel {
|
||||
this.tex.needsUpdate = true;
|
||||
}
|
||||
img.crossOrigin = '';
|
||||
var mat = new THREE.MeshLambertMaterial({color: 0xffffff, map: tex, transparent: true});
|
||||
var mat = new THREE.MeshLambertMaterial({
|
||||
color: 0xffffff,
|
||||
map: tex,
|
||||
transparent: true,
|
||||
side: 2,
|
||||
alphaTest: 0.2
|
||||
});
|
||||
}
|
||||
|
||||
scope.material = mat
|
||||
|
||||
things.forEach(function(s) {
|
||||
var mesh = new THREE.Mesh(new THREE.CubeGeometry(s.size[0], s.size[1], s.size[2]), mat )
|
||||
mesh.position.set(s.origin[0], s.origin[1], s.origin[2])
|
||||
mesh.geometry.translate(-s.origin[0], -s.origin[1], -s.origin[2])
|
||||
if (s.origin) {
|
||||
mesh.position.set(s.origin[0], s.origin[1], s.origin[2])
|
||||
mesh.geometry.translate(-s.origin[0], -s.origin[1], -s.origin[2])
|
||||
}
|
||||
mesh.geometry.translate(s.pos[0], s.pos[1], s.pos[2])
|
||||
if (s.angle) {
|
||||
mesh.rotation['z'] = Math.PI / (180 /s.angle)
|
||||
if (s.rotation) {
|
||||
mesh.rotation.setFromDegreeArray(s.rotation)
|
||||
}
|
||||
if (s.model) {
|
||||
mesh.r_model = s.model
|
||||
}
|
||||
|
||||
for (var face in s) {
|
||||
@ -140,6 +158,17 @@ class refModel {
|
||||
scope.model.name = name;
|
||||
return this;
|
||||
}
|
||||
setModelVariant(variant) {
|
||||
this.variant = variant
|
||||
this.model.children.forEach((m) => {
|
||||
if (m.r_model) {
|
||||
m.visible = m.r_model === variant;
|
||||
}
|
||||
})
|
||||
if (displayReferenceObjects.active === this) {
|
||||
this.onload()
|
||||
}
|
||||
}
|
||||
load() {
|
||||
displayReferenceObjects.clear()
|
||||
if (typeof this.onload === 'function') {
|
||||
@ -163,82 +192,226 @@ class refModel {
|
||||
display_scene.add(this.model)
|
||||
displayReferenceObjects.active = this;
|
||||
|
||||
main_preview.loadBackground()
|
||||
display_preview.loadBackground()
|
||||
}
|
||||
buildPlayer() {
|
||||
buildPlayer(slim) {
|
||||
var scope = this;
|
||||
var things = [
|
||||
{"size": [4, 12, 4], "pos": [0, 12, -6], "origin": [0, 16, 0], "angle": -22.5,
|
||||
"north": {"uv": [10, 5, 11, 8], "texture": "#0"},
|
||||
"east": {"uv": [13, 5, 14, 8], "texture": "#0"},
|
||||
"south": {"uv": [12, 5, 13, 8], "texture": "#0"},
|
||||
"west": {"uv": [11, 5, 12, 8], "texture": "#0"},
|
||||
"up": { "uv": [11, 4, 12, 5], "texture": "#0", "rotation": 270 },
|
||||
"down": { "uv": [12, 5, 13, 4], "texture": "#0", "rotation": 270 }
|
||||
}, //Right Arm
|
||||
|
||||
{"size": [4, 12, 4], "pos": [0, 12, 6], "origin": [0, 16, 0], "angle": -22.5,
|
||||
"north": {"uv": [8, 13, 9, 16], "texture": "#0"},
|
||||
"east": {"uv": [11, 13, 12, 16], "texture": "#0"},
|
||||
"south": {"uv": [10, 13, 11, 16], "texture": "#0"},
|
||||
"west": {"uv": [9, 13, 10, 16], "texture": "#0"},
|
||||
"up": { "uv": [9, 12, 10, 13], "texture": "#0", "rotation": 270 },
|
||||
"down": { "uv": [10, 13, 11, 12], "texture": "#0", "rotation": 270 }
|
||||
}, //Left Arm
|
||||
|
||||
{"size": [4, 12, 4], "pos": [0, 0, -2], "origin": [0, 0, 0],
|
||||
"north": {"uv": [0, 5, 1, 8], "texture": "#0"},
|
||||
"east": {"uv": [3, 5, 4, 8], "texture": "#0"},
|
||||
"south": {"uv": [2, 5, 3, 8], "texture": "#0"},
|
||||
"west": {"uv": [1, 5, 2, 8], "texture": "#0"},
|
||||
"up": { "uv": [1, 4, 2, 5], "texture": "#0", "rotation": 270 },
|
||||
"down": { "uv": [2, 4, 3, 5], "texture": "#0", "rotation": 270 }
|
||||
},//R Leg
|
||||
|
||||
{"size": [4, 12, 4], "pos": [0, 0, 2], "origin": [0, 0, 0],
|
||||
"north": {"uv": [4, 13, 5, 16], "texture": "#0"},
|
||||
"east": {"uv": [7, 13, 8, 16], "texture": "#0"},
|
||||
"south": {"uv": [6, 13, 7, 16], "texture": "#0"},
|
||||
"west": {"uv": [5, 13, 6, 16], "texture": "#0"},
|
||||
"up": { "uv": [5, 12, 6, 13], "texture": "#0", "rotation": 270 },
|
||||
"down": { "uv": [6, 12, 7, 13], "texture": "#0", "rotation": 270 }
|
||||
},// L Leg
|
||||
|
||||
{"size": [8, 8, 8], "pos": [0, 22, 0], "origin": [0, 0, 0],
|
||||
"north": {"uv": [0, 2, 2, 4], "texture": "#0"},
|
||||
"east": {"uv": [6, 2, 8, 4], "texture": "#0"},
|
||||
"south": {"uv": [4, 2, 6, 4], "texture": "#0"},
|
||||
"west": {"uv": [2, 2, 4, 4], "texture": "#0"},
|
||||
"up": {"uv": [2, 0, 4, 2],"texture": "#0","rotation": 90 },
|
||||
"down": { "uv": [6, 0, 4, 2], "texture": "#0", "rotation": 90 }
|
||||
},//Head
|
||||
|
||||
|
||||
|
||||
{"size": [4, 12, 8], "pos": [0, 12, 0], "origin": [0, 0, 0],
|
||||
"north": {"uv": [4, 5, 5, 8], "texture": "#0"},
|
||||
"east": {"uv": [8, 5, 10, 8], "texture": "#0"},
|
||||
"south": {"uv": [7, 5, 8, 8], "texture": "#0"},
|
||||
"west": {"uv": [5, 5, 7, 8], "texture": "#0"},
|
||||
"up": { "uv": [5, 4, 7, 5], "texture": "#0", "rotation": 270 },
|
||||
"down": { "uv": [7, 4, 9, 5], "texture": "#0", "rotation": 270 }
|
||||
},//Body
|
||||
|
||||
/*
|
||||
{"size": [9, 9, 9], "pos": [0, 22, 0], "origin": [0, 0, 0],
|
||||
"north": {"uv": [8, 2, 10, 4], "texture": "#0"},
|
||||
"east": {"uv": [14, 2, 16, 4], "texture": "#0"},
|
||||
"south": {"uv": [12, 2, 14, 4], "texture": "#0"},
|
||||
"west": {"uv": [10, 2, 12, 4], "texture": "#0"},
|
||||
"up": {"uv": [10, 0, 12, 2],"texture": "#0","rotation": 90 },
|
||||
"down": { "uv": [12, 0, 14, 2], "texture": "#0", "rotation": 270 }
|
||||
}//Head Layer
|
||||
|
||||
*/
|
||||
var cubes = [
|
||||
{
|
||||
//Head
|
||||
"size": [8, 8, 8],
|
||||
"pos": [0, 28, 0],
|
||||
"north": {"uv": [2.032, 2.032, 3.968, 3.968]},
|
||||
"east": {"uv": [0.032, 2.032, 1.968, 3.968]},
|
||||
"south": {"uv": [6.032, 2.032, 7.968, 3.968]},
|
||||
"west": {"uv": [4.032, 2.032, 5.968, 3.968]},
|
||||
"up": {"uv": [3.968, 1.968, 2.032, 0.032]},
|
||||
"down": {"uv": [5.968, 0.032, 4.032, 1.968]}
|
||||
},
|
||||
{
|
||||
//Head Layer
|
||||
"size": [9, 9, 9],
|
||||
"pos": [0, 28, 0],
|
||||
"north": {"uv": [10.032, 2.032, 11.968, 3.968]},
|
||||
"east": {"uv": [8.032, 2.032, 9.968, 3.968]},
|
||||
"south": {"uv": [14.032, 2.032, 15.968, 3.968]},
|
||||
"west": {"uv": [12.032, 2.032, 13.968, 3.968]},
|
||||
"up": {"uv": [11.968, 1.968, 10.032, 0.032]},
|
||||
"down": {"uv": [13.968, 0.032, 12.032, 1.968]}
|
||||
},
|
||||
{
|
||||
//Body
|
||||
"size": [8, 12, 4],
|
||||
"pos": [0, 18, 0],
|
||||
"north": {"uv": [6.968, 5.032, 5.032, 7.968]},
|
||||
"east": {"uv": [7.968, 5.032, 7.032, 7.968]},
|
||||
"south": {"uv": [9.968, 5.032, 8.032, 7.968]},
|
||||
"west": {"uv": [4.968, 5.032, 4.032, 7.968]},
|
||||
"up": {"uv": [5.032, 4.968, 6.968, 4.032]},
|
||||
"down": {"uv": [7.032, 4.032, 8.968, 4.968]}
|
||||
},
|
||||
{
|
||||
//Body Layer
|
||||
"size": [9, 13, 5],
|
||||
"pos": [0, 18, 0],
|
||||
"north": {"uv": [6.968, 9.032, 5.032, 11.968]},
|
||||
"east": {"uv": [7.968, 9.032, 7.032, 11.968]},
|
||||
"south": {"uv": [9.968, 9.032, 8.032, 11.968]},
|
||||
"west": {"uv": [4.968, 9.032, 4.032, 11.968]},
|
||||
"up": {"uv": [5.032, 8.968, 6.968, 8.032]},
|
||||
"down": {"uv": [7.032, 8.032, 8.968, 8.968]}
|
||||
},
|
||||
{
|
||||
//R Leg
|
||||
"size": [4, 12, 4],
|
||||
"pos": [1.95, 6, 0],
|
||||
"origin": [0, 12, 0],
|
||||
"rotation": [-1, 0, 0],
|
||||
"north": {"uv": [1.032, 5.032, 1.968, 7.968]},
|
||||
"east": {"uv": [0.032, 5.032, 0.968, 7.968]},
|
||||
"south": {"uv": [3.032, 5.032, 3.968, 7.968]},
|
||||
"west": {"uv": [2.032, 5.032, 2.968, 7.968]},
|
||||
"up": {"uv": [1.968, 4.968, 1.032, 4.032]},
|
||||
"down": {"uv": [2.968, 4.032, 2.032, 4.968]}
|
||||
},
|
||||
{
|
||||
//R Leg Layer
|
||||
"size": [5, 13, 5],
|
||||
"pos": [1.95, 6, 0],
|
||||
"origin": [0, 12, 0],
|
||||
"rotation": [-1, 0, 0],
|
||||
"north": {"uv": [1.032, 9.032, 1.968, 11.968]},
|
||||
"east": {"uv": [0.032, 9.032, 0.968, 11.968]},
|
||||
"south": {"uv": [3.032, 9.032, 3.968, 11.968]},
|
||||
"west": {"uv": [2.032, 9.032, 2.968, 11.968]},
|
||||
"up": {"uv": [1.968, 8.968, 1.032, 8.032]},
|
||||
"down": {"uv": [2.968, 8.032, 2.032, 8.968]}
|
||||
},
|
||||
{
|
||||
//L Leg
|
||||
"size": [4, 12, 4],
|
||||
"pos": [-1.95, 6, 0],
|
||||
"origin": [0, 12, 0],
|
||||
"rotation": [1, 0, 0],
|
||||
"north": {"uv": [5.032, 13.032, 5.968, 15.968]},
|
||||
"east": {"uv": [4.032, 13.032, 4.968, 15.968]},
|
||||
"south": {"uv": [7.032, 13.032, 7.968, 15.968]},
|
||||
"west": {"uv": [6.032, 13.032, 6.968, 15.968]},
|
||||
"up": {"uv": [5.968, 12.968, 5.032, 12.032]},
|
||||
"down": {"uv": [6.968, 12.032, 6.032, 12.968]}
|
||||
},
|
||||
{
|
||||
//L Leg Layer
|
||||
"size": [5, 13, 5],
|
||||
"pos": [-1.95, 6, 0],
|
||||
"origin": [0, 12, 0],
|
||||
"rotation": [1, 0, 0],
|
||||
"north": {"uv": [1.032, 13.032, 1.968, 15.968]},
|
||||
"east": {"uv": [0.032, 13.032, 0.968, 15.968]},
|
||||
"south": {"uv": [3.032, 13.032, 3.968, 15.968]},
|
||||
"west": {"uv": [2.032, 13.032, 2.968, 15.968]},
|
||||
"up": {"uv": [1.968, 12.968, 1.032, 12.032]},
|
||||
"down": {"uv": [2.968, 12.032, 2.032, 12.968]}
|
||||
},
|
||||
//Steve
|
||||
{
|
||||
//R Arm
|
||||
"size": [4, 12, 4],
|
||||
"pos": [6, 18, 0],
|
||||
"origin": [4, 22, 0],
|
||||
"rotation": [22.5, 0, 0],
|
||||
"north": {"uv": [11.032, 5.032, 11.968, 7.968]},
|
||||
"east": {"uv": [10.032, 5.032, 10.968, 7.968]},
|
||||
"south": {"uv": [13.032, 5.032, 13.968, 7.968]},
|
||||
"west": {"uv": [12.032, 5.032, 12.968, 7.968]},
|
||||
"up": {"uv": [11.968, 4.968, 11.032, 4.032]},
|
||||
"down": {"uv": [12.968, 4.032, 12.032, 4.968]},
|
||||
"model": "steve"
|
||||
},
|
||||
{
|
||||
//R Arm Layer
|
||||
"size": [5, 13, 5],
|
||||
"pos": [6, 18, 0],
|
||||
"origin": [4, 22, 0],
|
||||
"rotation": [22.5, 0, 0],
|
||||
"north": {"uv": [11.032, 9.032, 11.968, 11.968]},
|
||||
"east": {"uv": [10.032, 9.032, 10.968, 11.968]},
|
||||
"south": {"uv": [13.032, 9.032, 13.968, 11.968]},
|
||||
"west": {"uv": [12.032, 9.032, 12.968, 11.968]},
|
||||
"up": {"uv": [11.968, 8.968, 11.032, 8.032]},
|
||||
"down": {"uv": [12.968, 8.032, 12.032, 8.968]},
|
||||
"model": "steve"
|
||||
},
|
||||
{
|
||||
//L Arm
|
||||
"size": [4, 12, 4],
|
||||
"pos": [-6, 18, 0],
|
||||
"origin": [-4, 22, 0],
|
||||
"rotation": [22.5, 0, 0],
|
||||
"north": {"uv": [9.032, 13.032, 9.968, 15.968]},
|
||||
"east": {"uv": [8.032, 13.032, 8.968, 15.968]},
|
||||
"south": {"uv": [11.032, 13.032, 11.968, 15.968]},
|
||||
"west": {"uv": [10.032, 13.032, 10.968, 15.968]},
|
||||
"up": {"uv": [9.968, 12.968, 9.032, 12.032]},
|
||||
"down": {"uv": [10.968, 12.032, 10.032, 12.968]},
|
||||
"model": "steve"
|
||||
},
|
||||
{
|
||||
//L Arm Layer
|
||||
"size": [5, 13, 5],
|
||||
"pos": [-6, 18, 0],
|
||||
"origin": [-4, 22, 0],
|
||||
"rotation": [22.5, 0, 0],
|
||||
"north": {"uv": [13.032, 13.032, 13.968, 15.968]},
|
||||
"east": {"uv": [12.032, 13.032, 12.968, 15.968]},
|
||||
"south": {"uv": [15.032, 13.032, 15.968, 15.968]},
|
||||
"west": {"uv": [14.032, 13.032, 14.968, 15.968]},
|
||||
"up": {"uv": [13.968, 12.968, 13.032, 12.032]},
|
||||
"down": {"uv": [14.968, 12.032, 14.032, 12.968]},
|
||||
"model": "steve"
|
||||
},
|
||||
//ALEX
|
||||
{
|
||||
//R Arm
|
||||
"size": [3, 12, 4],
|
||||
"pos": [5.5, 18, 0],
|
||||
"origin": [0, 22, 0],
|
||||
"rotation": [22.5, 0, 0],
|
||||
"north": {"uv": [11.032, 5.032, 11.718, 7.968]},
|
||||
"east": {"uv": [10.032, 5.032, 10.968, 7.968]},
|
||||
"south": {"uv": [12.782, 5.032, 13.468, 7.968]},
|
||||
"west": {"uv": [11.782, 5.032, 12.718, 7.968]},
|
||||
"up": {"uv": [11.718, 4.968, 11.032, 4.032]},
|
||||
"down": {"uv": [12.468, 4.032, 11.782, 4.968]},
|
||||
"model": "alex"
|
||||
},
|
||||
{
|
||||
//R Arm Layer
|
||||
"size": [4, 13, 5],
|
||||
"pos": [5.5, 18, 0],
|
||||
"origin": [0, 22, 0],
|
||||
"rotation": [22.5, 0, 0],
|
||||
"north": {"uv": [11.032, 9.032, 11.718, 11.968]},
|
||||
"east": {"uv": [10.032, 9.032, 10.968, 11.968]},
|
||||
"south": {"uv": [12.782, 9.032, 13.468, 11.968]},
|
||||
"west": {"uv": [11.782, 9.032, 12.718, 11.968]},
|
||||
"up": {"uv": [11.718, 8.968, 11.032, 8.032]},
|
||||
"down": {"uv": [12.468, 8.032, 11.782, 8.968]},
|
||||
"model": "alex"
|
||||
},
|
||||
{
|
||||
//L Arm
|
||||
"size": [3, 12, 4],
|
||||
"pos": [-5.5, 18, 0],
|
||||
"origin": [0, 22, 0],
|
||||
"rotation": [22.5, 0, 0],
|
||||
"north": {"uv": [9.032, 13.032, 9.718, 15.968]},
|
||||
"east": {"uv": [8.032, 13.032, 8.968, 15.968]},
|
||||
"south": {"uv": [10.782, 13.032, 11.468, 15.968]},
|
||||
"west": {"uv": [9.782, 13.032, 10.718, 15.968]},
|
||||
"up": {"uv": [9.718, 12.968, 9.032, 12.032]},
|
||||
"down": {"uv": [10.468, 12.032, 9.782, 12.968]},
|
||||
"model": "alex"
|
||||
},
|
||||
{
|
||||
//L Arm Layer
|
||||
"size": [4, 13, 5],
|
||||
"pos": [-5.5, 18, 0],
|
||||
"origin": [0, 22, 0],
|
||||
"rotation": [22.5, 0, 0],
|
||||
"north": {"uv": [13.032, 13.032, 13.718, 15.968]},
|
||||
"east": {"uv": [12.032, 13.032, 12.968, 15.968]},
|
||||
"south": {"uv": [14.782, 13.032, 15.468, 15.968]},
|
||||
"west": {"uv": [13.782, 13.032, 14.718, 15.968]},
|
||||
"up": {"uv": [13.718, 12.968, 13.032, 12.032]},
|
||||
"down": {"uv": [14.468, 12.032, 13.782, 12.968]},
|
||||
"model": "alex"
|
||||
}
|
||||
]
|
||||
var skin = 'assets/player_skin.png';
|
||||
|
||||
scope.buildModel(things, skin);
|
||||
scope.buildModel(cubes, skin);
|
||||
this.setModelVariant('steve')
|
||||
updateDisplaySkin()
|
||||
}
|
||||
buildArmorStand() {
|
||||
@ -247,34 +420,34 @@ class refModel {
|
||||
"size": [12, 1, 12],
|
||||
"pos": [0, -5.5, 0],
|
||||
"origin": [0, 0, 0],
|
||||
"north": {"uv": [0, 11, 3, 11.25], "texture": "#0"},
|
||||
"east": {"uv": [3, 11, 6, 11.25], "texture": "#0"},
|
||||
"south": {"uv": [6, 11, 9, 11.25], "texture": "#0"},
|
||||
"west": {"uv": [9, 11, 12, 11.25], "texture": "#0"},
|
||||
"up": {"uv": [3, 8, 6, 11], "texture": "#0","rotation": 90},
|
||||
"down": {"uv": [6, 8, 9, 11], "texture": "#0", "rotation": 270}
|
||||
"north": {"uv": [0, 11, 3, 11.25]},
|
||||
"east": {"uv": [3, 11, 6, 11.25]},
|
||||
"south": {"uv": [6, 11, 9, 11.25]},
|
||||
"west": {"uv": [9, 11, 12, 11.25]},
|
||||
"up": {"uv": [3, 8, 6, 11],"rotation": 90},
|
||||
"down": {"uv": [6, 8, 9, 11], "rotation": 270}
|
||||
},
|
||||
{
|
||||
"size": [2, 11, 2],
|
||||
"pos": [0, 0.5, -2],
|
||||
"origin": [0, 0, 0],
|
||||
"north": {"uv": [8.5, 4.5, 9, 7.5], "texture": "#0"},
|
||||
"east": {"uv": [9, 4.5, 9.5, 7.5], "texture": "#0"},
|
||||
"south": {"uv": [9.5, 4.5, 10, 7.5], "texture": "#0"},
|
||||
"west": {"uv": [8, 4.5, 8.5, 7.5], "texture": "#0"},
|
||||
"up": {"uv": [8.5, 4, 9, 4.5], "texture": "#0","rotation": 90},
|
||||
"down": {"uv": [9, 4, 9.5, 4.5], "texture": "#0", "rotation": 270}
|
||||
"north": {"uv": [8.5, 4.5, 9, 7.5]},
|
||||
"east": {"uv": [9, 4.5, 9.5, 7.5]},
|
||||
"south": {"uv": [9.5, 4.5, 10, 7.5]},
|
||||
"west": {"uv": [8, 4.5, 8.5, 7.5]},
|
||||
"up": {"uv": [8.5, 4, 9, 4.5],"rotation": 90},
|
||||
"down": {"uv": [9, 4, 9.5, 4.5], "rotation": 270}
|
||||
},
|
||||
{
|
||||
"size": [2, 11, 2],
|
||||
"pos": [0, 0.5, 2],
|
||||
"origin": [0, 0, 0],
|
||||
"north": {"uv": [8.5, 4.5, 9, 7.5], "texture": "#0"},
|
||||
"east": {"uv": [9, 4.5, 9.5, 7.5], "texture": "#0"},
|
||||
"south": {"uv": [9.5, 4.5, 10, 7.5], "texture": "#0"},
|
||||
"west": {"uv": [8, 4.5, 8.5, 7.5], "texture": "#0"},
|
||||
"up": {"uv": [8.5, 4, 9, 4.5], "texture": "#0","rotation": 90},
|
||||
"down": {"uv": [9, 4, 9.5, 4.5], "texture": "#0", "rotation": 270}
|
||||
"north": {"uv": [8.5, 4.5, 9, 7.5]},
|
||||
"east": {"uv": [9, 4.5, 9.5, 7.5]},
|
||||
"south": {"uv": [9.5, 4.5, 10, 7.5]},
|
||||
"west": {"uv": [8, 4.5, 8.5, 7.5]},
|
||||
"up": {"uv": [8.5, 4, 9, 4.5],"rotation": 90},
|
||||
"down": {"uv": [9, 4, 9.5, 4.5], "rotation": 270}
|
||||
},
|
||||
{
|
||||
"size": [2, 2, 8],
|
||||
@ -311,29 +484,29 @@ class refModel {
|
||||
"size": [2, 7, 2],
|
||||
"pos": [0, 11.5, 2],
|
||||
"origin": [0, 0, 0],
|
||||
"north": {"uv": [8.5, 4.5, 9, 7.5], "texture": "#0"},
|
||||
"east": {"uv": [9, 4.5, 9.5, 7.5], "texture": "#0"},
|
||||
"south": {"uv": [9.5, 4.5, 10, 7.5], "texture": "#0"},
|
||||
"west": {"uv": [8, 4.5, 8.5, 7.5], "texture": "#0"},
|
||||
"up": {"uv": [8.5, 4, 9, 4.5], "texture": "#0","rotation": 90},
|
||||
"down": {"uv": [9, 4, 9.5, 4.5], "texture": "#0", "rotation": 270}
|
||||
"north": {"uv": [8.5, 4.5, 9, 7.5]},
|
||||
"east": {"uv": [9, 4.5, 9.5, 7.5]},
|
||||
"south": {"uv": [9.5, 4.5, 10, 7.5]},
|
||||
"west": {"uv": [8, 4.5, 8.5, 7.5]},
|
||||
"up": {"uv": [8.5, 4, 9, 4.5],"rotation": 90},
|
||||
"down": {"uv": [9, 4, 9.5, 4.5], "rotation": 270}
|
||||
},
|
||||
{
|
||||
"size": [2, 7, 2],
|
||||
"pos": [0, 11.5, -2],
|
||||
"origin": [0, 0, 0],
|
||||
"north": {"uv": [8.5, 4.5, 9, 7.5], "texture": "#0"},
|
||||
"east": {"uv": [9, 4.5, 9.5, 7.5], "texture": "#0"},
|
||||
"south": {"uv": [9.5, 4.5, 10, 7.5], "texture": "#0"},
|
||||
"west": {"uv": [8, 4.5, 8.5, 7.5], "texture": "#0"},
|
||||
"up": {"uv": [8.5, 4, 9, 4.5], "texture": "#0","rotation": 90},
|
||||
"down": {"uv": [9, 4, 9.5, 4.5], "texture": "#0", "rotation": 270}
|
||||
"north": {"uv": [8.5, 4.5, 9, 7.5]},
|
||||
"east": {"uv": [9, 4.5, 9.5, 7.5]},
|
||||
"south": {"uv": [9.5, 4.5, 10, 7.5]},
|
||||
"west": {"uv": [8, 4.5, 8.5, 7.5]},
|
||||
"up": {"uv": [8.5, 4, 9, 4.5],"rotation": 90},
|
||||
"down": {"uv": [9, 4, 9.5, 4.5], "rotation": 270}
|
||||
},
|
||||
{
|
||||
"size": [3, 3, 12],
|
||||
"pos": [0, 16.505, 0],
|
||||
"origin": [0, 0, 0],
|
||||
"north": {"uv": [3, 7.25, 3.75, 8], "texture": "#0"},
|
||||
"north": {"uv": [3, 7.25, 3.75, 8]},
|
||||
"east": {
|
||||
"uv": [3.75, 7.25, 6.75, 8],
|
||||
"texture": "#0"
|
||||
@ -342,7 +515,7 @@ class refModel {
|
||||
"uv": [6.75, 7.25, 7.5, 8],
|
||||
"texture": "#0"
|
||||
},
|
||||
"west": {"uv": [0, 7.25, 3, 8], "texture": "#0"},
|
||||
"west": {"uv": [0, 7.25, 3, 8]},
|
||||
"up": {
|
||||
"uv": [0.75, 6.5, 3.75, 7.25],
|
||||
"texture": "#0",
|
||||
@ -358,34 +531,34 @@ class refModel {
|
||||
"size": [2, 6, 2],
|
||||
"pos": [0, 21, 0],
|
||||
"origin": [0, 0, 0],
|
||||
"north": {"uv": [0.5, 0.5, 1, 2.25], "texture": "#0"},
|
||||
"east": {"uv": [1, 0.5, 1.5, 2.25], "texture": "#0"},
|
||||
"south": {"uv": [1.5, 0.5, 2, 2.25], "texture": "#0"},
|
||||
"west": {"uv": [0, 0.5, 0.5, 2.25], "texture": "#0"},
|
||||
"up": {"uv": [0.5, 0, 1, 0.5], "texture": "#0","rotation": 90},
|
||||
"down": {"uv": [1, 0, 1.5, 0.5], "texture": "#0", "rotation": 270}
|
||||
"north": {"uv": [0.5, 0.5, 1, 2.25]},
|
||||
"east": {"uv": [1, 0.5, 1.5, 2.25]},
|
||||
"south": {"uv": [1.5, 0.5, 2, 2.25]},
|
||||
"west": {"uv": [0, 0.5, 0.5, 2.25]},
|
||||
"up": {"uv": [0.5, 0, 1, 0.5],"rotation": 90},
|
||||
"down": {"uv": [1, 0, 1.5, 0.5], "rotation": 270}
|
||||
},
|
||||
{
|
||||
"size": [2, 12, 2],
|
||||
"pos": [0, 12, -6],
|
||||
"origin": [0, 0, 0],
|
||||
"north": {"uv": [7, 0.5, 7.5, 3.5], "texture": "#0"},
|
||||
"east": {"uv": [6.5, 0.5, 6, 3.5], "texture": "#0"},
|
||||
"south": {"uv": [7.5, 0.5, 8, 3.5], "texture": "#0"},
|
||||
"west": {"uv": [6, 0.5, 6.5, 3.5], "texture": "#0"},
|
||||
"up": {"uv": [6.5, 0, 7, 0.5], "texture": "#0","rotation": 90},
|
||||
"down": {"uv": [7, 0, 7.5, 0.5], "texture": "#0", "rotation": 270}
|
||||
"north": {"uv": [7, 0.5, 7.5, 3.5]},
|
||||
"east": {"uv": [6.5, 0.5, 6, 3.5]},
|
||||
"south": {"uv": [7.5, 0.5, 8, 3.5]},
|
||||
"west": {"uv": [6, 0.5, 6.5, 3.5]},
|
||||
"up": {"uv": [6.5, 0, 7, 0.5],"rotation": 90},
|
||||
"down": {"uv": [7, 0, 7.5, 0.5], "rotation": 270}
|
||||
},
|
||||
{
|
||||
"size": [2, 12, 2],
|
||||
"pos": [0, 12, 6],
|
||||
"origin": [0, 0, 0],
|
||||
"north": {"uv": [7, 0.5, 7.5, 3.5], "texture": "#0"},
|
||||
"east": {"uv": [6.5, 0.5, 7, 3.5], "texture": "#0"},
|
||||
"south": {"uv": [7.5, 0.5, 8, 3.5], "texture": "#0"},
|
||||
"west": {"uv": [6.5, 0.5, 6, 3.5], "texture": "#0"},
|
||||
"up": {"uv": [6.5, 0, 7, 0.5], "texture": "#0","rotation": 90},
|
||||
"down": {"uv": [7, 0, 7.5, 0.5], "texture": "#0","rotation": 270}
|
||||
"north": {"uv": [7, 0.5, 7.5, 3.5]},
|
||||
"east": {"uv": [6.5, 0.5, 7, 3.5]},
|
||||
"south": {"uv": [7.5, 0.5, 8, 3.5]},
|
||||
"west": {"uv": [6.5, 0.5, 6, 3.5]},
|
||||
"up": {"uv": [6.5, 0, 7, 0.5],"rotation": 90},
|
||||
"down": {"uv": [7, 0, 7.5, 0.5],"rotation": 270}
|
||||
}
|
||||
], 'assets/armor_stand.png')
|
||||
}
|
||||
@ -395,34 +568,34 @@ class refModel {
|
||||
"size": [6, 0.5, 6],
|
||||
"pos": [0, -5.75, 0],
|
||||
"origin": [0, 0, 0],
|
||||
"north": {"uv": [0, 11, 3, 11.25], "texture": "#0"},
|
||||
"east": {"uv": [3, 11, 6, 11.25], "texture": "#0"},
|
||||
"south": {"uv": [6, 11, 9, 11.25], "texture": "#0"},
|
||||
"west": {"uv": [9, 11, 12, 11.25], "texture": "#0"},
|
||||
"up": {"uv": [3, 8, 6, 11], "texture": "#0","rotation": 90},
|
||||
"down": {"uv": [6, 8, 9, 11], "texture": "#0", "rotation": 270}
|
||||
"north": {"uv": [0, 11, 3, 11.25]},
|
||||
"east": {"uv": [3, 11, 6, 11.25]},
|
||||
"south": {"uv": [6, 11, 9, 11.25]},
|
||||
"west": {"uv": [9, 11, 12, 11.25]},
|
||||
"up": {"uv": [3, 8, 6, 11],"rotation": 90},
|
||||
"down": {"uv": [6, 8, 9, 11], "rotation": 270}
|
||||
},
|
||||
{
|
||||
"size": [1, 5.5, 1],
|
||||
"pos": [0, -2.75, -1],
|
||||
"origin": [0, 0, 0],
|
||||
"north": {"uv": [8.5, 4.5, 9, 7.5], "texture": "#0"},
|
||||
"east": {"uv": [9, 4.5, 9.5, 7.5], "texture": "#0"},
|
||||
"south": {"uv": [9.5, 4.5, 10, 7.5], "texture": "#0"},
|
||||
"west": {"uv": [8, 4.5, 8.5, 7.5], "texture": "#0"},
|
||||
"up": {"uv": [8.5, 4, 9, 4.5], "texture": "#0","rotation": 90},
|
||||
"down": {"uv": [9, 4, 9.5, 4.5], "texture": "#0", "rotation": 270}
|
||||
"north": {"uv": [8.5, 4.5, 9, 7.5]},
|
||||
"east": {"uv": [9, 4.5, 9.5, 7.5]},
|
||||
"south": {"uv": [9.5, 4.5, 10, 7.5]},
|
||||
"west": {"uv": [8, 4.5, 8.5, 7.5]},
|
||||
"up": {"uv": [8.5, 4, 9, 4.5],"rotation": 90},
|
||||
"down": {"uv": [9, 4, 9.5, 4.5], "rotation": 270}
|
||||
},
|
||||
{
|
||||
"size": [1, 5.5, 1],
|
||||
"pos": [0, -2.75, 1],
|
||||
"origin": [0, 0, 0],
|
||||
"north": {"uv": [8.5, 4.5, 9, 7.5], "texture": "#0"},
|
||||
"east": {"uv": [9, 4.5, 9.5, 7.5], "texture": "#0"},
|
||||
"south": {"uv": [9.5, 4.5, 10, 7.5], "texture": "#0"},
|
||||
"west": {"uv": [8, 4.5, 8.5, 7.5], "texture": "#0"},
|
||||
"up": {"uv": [8.5, 4, 9, 4.5], "texture": "#0","rotation": 90},
|
||||
"down": {"uv": [9, 4, 9.5, 4.5], "texture": "#0", "rotation": 270}
|
||||
"north": {"uv": [8.5, 4.5, 9, 7.5]},
|
||||
"east": {"uv": [9, 4.5, 9.5, 7.5]},
|
||||
"south": {"uv": [9.5, 4.5, 10, 7.5]},
|
||||
"west": {"uv": [8, 4.5, 8.5, 7.5]},
|
||||
"up": {"uv": [8.5, 4, 9, 4.5],"rotation": 90},
|
||||
"down": {"uv": [9, 4, 9.5, 4.5], "rotation": 270}
|
||||
},
|
||||
{
|
||||
"size": [1, 1, 4],
|
||||
@ -459,29 +632,29 @@ class refModel {
|
||||
"size": [1, 3.5, 1],
|
||||
"pos": [0, 2.75, 1],
|
||||
"origin": [0, 0, 0],
|
||||
"north": {"uv": [8.5, 4.5, 9, 7.5], "texture": "#0"},
|
||||
"east": {"uv": [9, 4.5, 9.5, 7.5], "texture": "#0"},
|
||||
"south": {"uv": [9.5, 4.5, 10, 7.5], "texture": "#0"},
|
||||
"west": {"uv": [8, 4.5, 8.5, 7.5], "texture": "#0"},
|
||||
"up": {"uv": [8.5, 4, 9, 4.5], "texture": "#0","rotation": 90},
|
||||
"down": {"uv": [9, 4, 9.5, 4.5], "texture": "#0", "rotation": 270}
|
||||
"north": {"uv": [8.5, 4.5, 9, 7.5]},
|
||||
"east": {"uv": [9, 4.5, 9.5, 7.5]},
|
||||
"south": {"uv": [9.5, 4.5, 10, 7.5]},
|
||||
"west": {"uv": [8, 4.5, 8.5, 7.5]},
|
||||
"up": {"uv": [8.5, 4, 9, 4.5],"rotation": 90},
|
||||
"down": {"uv": [9, 4, 9.5, 4.5], "rotation": 270}
|
||||
},
|
||||
{
|
||||
"size": [1, 3.5, 1],
|
||||
"pos": [0, 2.75, -1],
|
||||
"origin": [0, 0, 0],
|
||||
"north": {"uv": [8.5, 4.5, 9, 7.5], "texture": "#0"},
|
||||
"east": {"uv": [9, 4.5, 9.5, 7.5], "texture": "#0"},
|
||||
"south": {"uv": [9.5, 4.5, 10, 7.5], "texture": "#0"},
|
||||
"west": {"uv": [8, 4.5, 8.5, 7.5], "texture": "#0"},
|
||||
"up": {"uv": [8.5, 4, 9, 4.5], "texture": "#0","rotation": 90},
|
||||
"down": {"uv": [9, 4, 9.5, 4.5], "texture": "#0", "rotation": 270}
|
||||
"north": {"uv": [8.5, 4.5, 9, 7.5]},
|
||||
"east": {"uv": [9, 4.5, 9.5, 7.5]},
|
||||
"south": {"uv": [9.5, 4.5, 10, 7.5]},
|
||||
"west": {"uv": [8, 4.5, 8.5, 7.5]},
|
||||
"up": {"uv": [8.5, 4, 9, 4.5],"rotation": 90},
|
||||
"down": {"uv": [9, 4, 9.5, 4.5], "rotation": 270}
|
||||
},
|
||||
{
|
||||
"size": [1.5, 1.5, 6],
|
||||
"pos": [0, 5.255, 0],
|
||||
"origin": [0, 0, 0],
|
||||
"north": {"uv": [3, 7.25, 3.75, 8], "texture": "#0"},
|
||||
"north": {"uv": [3, 7.25, 3.75, 8]},
|
||||
"east": {
|
||||
"uv": [3.75, 7.25, 6.75, 8],
|
||||
"texture": "#0"
|
||||
@ -490,7 +663,7 @@ class refModel {
|
||||
"uv": [6.75, 7.25, 7.5, 8],
|
||||
"texture": "#0"
|
||||
},
|
||||
"west": {"uv": [0, 7.25, 3, 8], "texture": "#0"},
|
||||
"west": {"uv": [0, 7.25, 3, 8]},
|
||||
"up": {
|
||||
"uv": [0.75, 6.5, 3.75, 7.25],
|
||||
"texture": "#0",
|
||||
@ -510,34 +683,34 @@ class refModel {
|
||||
],
|
||||
"pos": [0, 8.27, 0],
|
||||
"origin": [0, 0, 0],
|
||||
"north": {"uv": [0.5, 0.5, 1, 2.25], "texture": "#0"},
|
||||
"east": {"uv": [1, 0.5, 1.5, 2.25], "texture": "#0"},
|
||||
"south": {"uv": [1.5, 0.5, 2, 2.25], "texture": "#0"},
|
||||
"west": {"uv": [0, 0.5, 0.5, 2.25], "texture": "#0"},
|
||||
"up": {"uv": [0.5, 0, 1, 0.5], "texture": "#0","rotation": 90},
|
||||
"down": {"uv": [1, 0, 1.5, 0.5], "texture": "#0", "rotation": 270}
|
||||
"north": {"uv": [0.5, 0.5, 1, 2.25]},
|
||||
"east": {"uv": [1, 0.5, 1.5, 2.25]},
|
||||
"south": {"uv": [1.5, 0.5, 2, 2.25]},
|
||||
"west": {"uv": [0, 0.5, 0.5, 2.25]},
|
||||
"up": {"uv": [0.5, 0, 1, 0.5],"rotation": 90},
|
||||
"down": {"uv": [1, 0, 1.5, 0.5], "rotation": 270}
|
||||
},
|
||||
{
|
||||
"size": [1, 6, 1],
|
||||
"pos": [0, 3, -3],
|
||||
"origin": [0, 0, 0],
|
||||
"north": {"uv": [7, 0.5, 7.5, 3.5], "texture": "#0"},
|
||||
"east": {"uv": [6.5, 0.5, 6, 3.5], "texture": "#0"},
|
||||
"south": {"uv": [7.5, 0.5, 8, 3.5], "texture": "#0"},
|
||||
"west": {"uv": [6, 0.5, 6.5, 3.5], "texture": "#0"},
|
||||
"up": {"uv": [6.5, 0, 7, 0.5], "texture": "#0","rotation": 90},
|
||||
"down": {"uv": [7, 0, 7.5, 0.5], "texture": "#0", "rotation": 270}
|
||||
"north": {"uv": [7, 0.5, 7.5, 3.5]},
|
||||
"east": {"uv": [6.5, 0.5, 6, 3.5]},
|
||||
"south": {"uv": [7.5, 0.5, 8, 3.5]},
|
||||
"west": {"uv": [6, 0.5, 6.5, 3.5]},
|
||||
"up": {"uv": [6.5, 0, 7, 0.5],"rotation": 90},
|
||||
"down": {"uv": [7, 0, 7.5, 0.5], "rotation": 270}
|
||||
},
|
||||
{
|
||||
"size": [1, 6, 1],
|
||||
"pos": [0, 3, 3],
|
||||
"origin": [0, 0, 0],
|
||||
"north": {"uv": [7, 0.5, 7.5, 3.5], "texture": "#0"},
|
||||
"east": {"uv": [6.5, 0.5, 7, 3.5], "texture": "#0"},
|
||||
"south": {"uv": [7.5, 0.5, 8, 3.5], "texture": "#0"},
|
||||
"west": {"uv": [6.5, 0.5, 6, 3.5], "texture": "#0"},
|
||||
"up": {"uv": [6.5, 0, 7, 0.5], "texture": "#0","rotation": 90},
|
||||
"down": {"uv": [7, 0, 7.5, 0.5], "texture": "#0", "rotation": 270}
|
||||
"north": {"uv": [7, 0.5, 7.5, 3.5]},
|
||||
"east": {"uv": [6.5, 0.5, 7, 3.5]},
|
||||
"south": {"uv": [7.5, 0.5, 8, 3.5]},
|
||||
"west": {"uv": [6.5, 0.5, 6, 3.5]},
|
||||
"up": {"uv": [6.5, 0, 7, 0.5],"rotation": 90},
|
||||
"down": {"uv": [7, 0, 7.5, 0.5], "rotation": 270}
|
||||
}
|
||||
], 'assets/armor_stand.png')
|
||||
}
|
||||
@ -1032,13 +1205,16 @@ function enterDisplaySettings() { //Enterung Display Setting Mode, changes the
|
||||
selected = []
|
||||
updateSelection()
|
||||
|
||||
if (!display_preview) {
|
||||
display_preview = new Preview({id: 'display'})
|
||||
}
|
||||
if (quad_previews.enabled) {
|
||||
quad_previews.enabled_before = true
|
||||
main_preview.fullscreen()
|
||||
}
|
||||
main_preview.setNormalCamera()
|
||||
main_preview.camPers.position.set(-80, 40, -30)
|
||||
main_preview.camPers.setFocalLength(45)
|
||||
display_preview.fullscreen()
|
||||
display_preview.setNormalCamera()
|
||||
display_preview.camPers.position.set(-80, 40, -30)
|
||||
display_preview.camPers.setFocalLength(45)
|
||||
|
||||
|
||||
$('body').addClass('display_mode')
|
||||
@ -1066,11 +1242,7 @@ function exitDisplaySettings() { //Enterung Display Setting Mode, changes the s
|
||||
|
||||
display_mode = false;
|
||||
|
||||
main_preview.controls.target.set(0,-3,0)
|
||||
main_preview.camPers.position.set(-20, 20, -20)
|
||||
main_preview.controls.enabled = true
|
||||
main_preview.setNormalCamera()
|
||||
main_preview.camPers.setFocalLength(45)
|
||||
main_preview.fullscreen()
|
||||
|
||||
$('.m_disp').hide()
|
||||
$('.m_edit').show()
|
||||
@ -1085,9 +1257,6 @@ function exitDisplaySettings() { //Enterung Display Setting Mode, changes the s
|
||||
buildGrid()
|
||||
setShading()
|
||||
Canvas.updateRenderSides()
|
||||
setTimeout(function() {
|
||||
main_preview.camPers.setFocalLength(45)
|
||||
}, 20)
|
||||
}, 60)
|
||||
|
||||
}
|
||||
@ -1242,7 +1411,7 @@ function applyDisplayPreset(preset, all) {
|
||||
function createPreset() {
|
||||
var name = $('input#preset_name').val()
|
||||
if (name == '') {
|
||||
$('input#preset_name').val(tl('"display.preset.blank_name'))
|
||||
$('input#preset_name').val(tl('display.preset.blank_name'))
|
||||
return;
|
||||
} else {
|
||||
$('input#preset_name').val('new preset')
|
||||
@ -1305,14 +1474,14 @@ function loadDisp(key, skin) { //Loads The Menu and slider values, common for al
|
||||
display_slot = key
|
||||
//enterScene(key)
|
||||
resetDisplayBase()
|
||||
if (key !== 'gui' && main_preview.isOrtho === true) {
|
||||
main_preview.setNormalCamera()
|
||||
if (key !== 'gui' && display_preview.isOrtho === true) {
|
||||
display_preview.setNormalCamera()
|
||||
}
|
||||
main_preview.controls.enabled = true;
|
||||
display_preview.controls.enabled = true;
|
||||
ground_animation = false;
|
||||
$('input#translation_z').prop('disabled', false)
|
||||
$('#donation_hint').hide()
|
||||
main_preview.camPers.setFocalLength(45)
|
||||
display_preview.camPers.setFocalLength(45)
|
||||
|
||||
if (display[key] == undefined) {
|
||||
display[key] = {}
|
||||
@ -1358,10 +1527,10 @@ function loadDispThirdLeft() { //Loader
|
||||
function loadDispFirstRight() { //Loader
|
||||
loadDisp('firstperson_righthand')
|
||||
setDisplayArea(-20.8, -8.4, 9, 0, 270, 0, 1,1,1)
|
||||
main_preview.camPers.setFocalLength(12)
|
||||
main_preview.camPers.position.set(-32.4, 0, 0)
|
||||
main_preview.controls.target.set(0,0,0)
|
||||
main_preview.controls.enabled = false
|
||||
display_preview.camPers.setFocalLength(12)
|
||||
display_preview.camPers.position.set(-32.4, 0, 0)
|
||||
display_preview.controls.target.set(0,0,0)
|
||||
display_preview.controls.enabled = false
|
||||
displayReferenceObjects.bar(['monitor', 'bow'])
|
||||
}
|
||||
function loadDispFirstLeft() { //Loader
|
||||
@ -1370,10 +1539,10 @@ function loadDispFirstLeft() { //Loader
|
||||
display_base.rotation['y'] = Math.PI / (180 / -getDisplayNumber('firstperson_lefthand', 'rotation', 1))
|
||||
display_base.rotation['z'] = Math.PI / (180 / -getDisplayNumber('firstperson_lefthand', 'rotation', 2))
|
||||
setDisplayArea(-20.5, -8.4, -9, 0, 270, 0, 1,1,1)
|
||||
main_preview.camPers.setFocalLength(12)
|
||||
main_preview.camPers.position.set(-32.4, 0, 0)
|
||||
main_preview.controls.target.set(0,0,0)
|
||||
main_preview.controls.enabled = false
|
||||
display_preview.camPers.setFocalLength(12)
|
||||
display_preview.camPers.position.set(-32.4, 0, 0)
|
||||
display_preview.controls.target.set(0,0,0)
|
||||
display_preview.controls.enabled = false
|
||||
displayReferenceObjects.bar(['monitor', 'bow'])
|
||||
}
|
||||
function loadDispHead() { //Loader
|
||||
@ -1383,11 +1552,11 @@ function loadDispHead() { //Loader
|
||||
function loadDispGUI() { //Loader
|
||||
loadDisp('gui')
|
||||
setDisplayArea(0, 0, 0, 0, 0, 0, 0.4, 0.4, 0.4)
|
||||
main_preview.camOrtho.zoom = 1
|
||||
main_preview.controls.target.set(0,0,0)
|
||||
display_preview.camOrtho.zoom = 1
|
||||
display_preview.controls.target.set(0,0,0)
|
||||
//controls.enabled = false
|
||||
main_preview.setOrthographicCamera(2)
|
||||
main_preview.camOrtho.position.set(0,0,32)
|
||||
display_preview.setOrthographicCamera(2)
|
||||
display_preview.camOrtho.position.set(0,0,32)
|
||||
displayReferenceObjects.bar(['inventory_nine', 'inventory_full', 'hud'])
|
||||
}
|
||||
function loadDispGround() { //Loader
|
||||
@ -1465,21 +1634,42 @@ function pasteDisplaySlot() {
|
||||
}
|
||||
|
||||
function changeDisplaySkin() {
|
||||
var buttons = [
|
||||
tl('message.display_skin.upload'),
|
||||
tl('message.display_skin.reset')
|
||||
]
|
||||
if (isApp) {
|
||||
buttons.splice(1, 0, tl('message.display_skin.name'))
|
||||
}
|
||||
Blockbench.showMessageBox({
|
||||
translateKey: 'display_skin',
|
||||
icon: 'icon-player',
|
||||
buttons: [
|
||||
tl('message.display_skin.upload'),
|
||||
tl('message.display_skin.name'),
|
||||
tl('message.display_skin.reset')
|
||||
],
|
||||
buttons: buttons,
|
||||
confirm: 0,
|
||||
cancel: 1
|
||||
cancel: isApp ? 2 : 1
|
||||
}, function(result) {
|
||||
if (result === 2) {
|
||||
settings.display_skin.value = false
|
||||
updateDisplaySkin()
|
||||
} else if (result === 1) {
|
||||
if (result === 0) {
|
||||
Blockbench.import({
|
||||
extensions: ['png'],
|
||||
type: 'PNG Player Skin',
|
||||
readtype: 'image'
|
||||
}, function(files) {
|
||||
|
||||
Blockbench.showMessageBox({
|
||||
translateKey: 'display_skin_model',
|
||||
icon: 'icon-player',
|
||||
buttons: [
|
||||
tl('message.display_skin_model.classic'),
|
||||
tl('message.display_skin_model.slim')
|
||||
]
|
||||
}, function(slim) {
|
||||
if (files.length) {
|
||||
settings.display_skin.value = (slim?'S':'C') +','+ (isApp ? files[0].path : files[0].content)
|
||||
updateDisplaySkin()
|
||||
}
|
||||
})
|
||||
})
|
||||
} else if (result === 1 && isApp) {
|
||||
if (typeof settings.display_skin.value === 'string' && settings.display_skin.value.substr(0, 9) === 'username:') {
|
||||
var before = settings.display_skin.value.replace('username:', '')
|
||||
} else {
|
||||
@ -1490,23 +1680,15 @@ function changeDisplaySkin() {
|
||||
updateDisplaySkin()
|
||||
})
|
||||
} else {
|
||||
Blockbench.import({
|
||||
extensions: ['png'],
|
||||
type: 'PNG Player Skin',
|
||||
readtype: 'image'
|
||||
}, function(files) {
|
||||
if (files.length) {
|
||||
settings.display_skin.value = isApp ? files[0].path : files[0].content
|
||||
updateDisplaySkin()
|
||||
}
|
||||
})
|
||||
settings.display_skin.value = false
|
||||
updateDisplaySkin()
|
||||
}
|
||||
})
|
||||
}
|
||||
function updateDisplaySkin() {
|
||||
var val = settings.display_skin.value
|
||||
var source;
|
||||
function setPSkin(skin) {
|
||||
function setPSkin(skin, slim) {
|
||||
if (!displayReferenceObjects.refmodels.player.material) {
|
||||
return;
|
||||
}
|
||||
@ -1525,15 +1707,15 @@ function updateDisplaySkin() {
|
||||
img.tex.magFilter = THREE.NearestFilter
|
||||
img.tex.minFilter = THREE.NearestFilter
|
||||
this.tex.needsUpdate = true;
|
||||
mat.map = tex
|
||||
mat.map = tex;
|
||||
|
||||
displayReferenceObjects.refmodels.player.setModelVariant(slim ? 'alex' : 'steve')
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
if (!val) {
|
||||
if (!val || typeof val !== 'string') {
|
||||
setPSkin('assets/player_skin.png')
|
||||
|
||||
} else if (typeof val === 'string' && val.substr(0, 9) === 'username:') {
|
||||
} else if (val.substr(0, 9) === 'username:') {
|
||||
var username = val.substr(9)
|
||||
$.getJSON('https://api.mojang.com/users/profiles/minecraft/'+username, function(uuid) {
|
||||
if (uuid && uuid.id) {
|
||||
@ -1541,16 +1723,38 @@ function updateDisplaySkin() {
|
||||
$.getJSON('https://sessionserver.mojang.com/session/minecraft/profile/'+uuid.id, function(data) {
|
||||
if (data && data.properties) {
|
||||
var skin_path;
|
||||
var is_slim = false;
|
||||
try {
|
||||
skin_path = JSON.parse(atob(data.properties[0].value)).textures.SKIN.url
|
||||
var parsed = JSON.parse(atob(data.properties[0].value))
|
||||
skin_path = parsed.textures.SKIN.url
|
||||
if (parsed.textures.SKIN.metadata && parsed.textures.SKIN.metadata.model === 'slim') {
|
||||
is_slim = true
|
||||
}
|
||||
} catch (err) {}
|
||||
setPSkin(skin_path)
|
||||
setPSkin(skin_path, is_slim)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
} else {
|
||||
setPSkin(val)
|
||||
if (val.substr(1,1) === ',') {
|
||||
var slim = val.substr(0,1) === 'S'
|
||||
val = val.substr(2)
|
||||
} else {
|
||||
var slim = false
|
||||
}
|
||||
setPSkin(val, slim)
|
||||
}
|
||||
//displayReferenceObjects.refmodels.player.material
|
||||
}
|
||||
BARS.defineActions(function() {
|
||||
|
||||
})
|
||||
BARS.defineActions(function() {
|
||||
new Action({
|
||||
id: 'add_display_preset',
|
||||
icon: 'add',
|
||||
category: 'display',
|
||||
click: function () {showDialog('create_preset')}
|
||||
})
|
||||
})
|
||||
|
203
js/elements.js
203
js/elements.js
@ -2,7 +2,7 @@
|
||||
var OutlinerButtons = {
|
||||
remove: {
|
||||
id: 'remove',
|
||||
title: tl('switches.remove'),
|
||||
title: tl('generic.delete'),
|
||||
icon: ' fa fa-times',
|
||||
icon_off: ' fa fa-times',
|
||||
advanced_option: false,
|
||||
@ -333,6 +333,9 @@ class Cube extends OutlinerElement {
|
||||
}
|
||||
}
|
||||
rotationAxis() {
|
||||
if (this.rotation_axis) {
|
||||
return this.rotation_axis
|
||||
}
|
||||
var axis_i = 0;
|
||||
while (axis_i < 3) {
|
||||
if (this.rotation[axis_i] !== 0) {
|
||||
@ -450,7 +453,10 @@ class Cube extends OutlinerElement {
|
||||
Merge.number(this.origin, object.rotation.origin, 1)
|
||||
Merge.number(this.origin, object.rotation.origin, 2)
|
||||
}
|
||||
Merge.boolean(this, object.rotation, 'rotation_rescale')
|
||||
Merge.boolean(this, object.rotation, 'rescale')
|
||||
if (typeof object.rotation.axis === 'string') {
|
||||
this.rotation_axis = object.rotation.axis
|
||||
}
|
||||
} else if (object.rotation) {
|
||||
Merge.number(this.rotation, object.rotation, 0)
|
||||
Merge.number(this.rotation, object.rotation, 1)
|
||||
@ -466,7 +472,8 @@ class Cube extends OutlinerElement {
|
||||
Merge.number(this.origin, object.origin, 1)
|
||||
Merge.number(this.origin, object.origin, 2)
|
||||
}
|
||||
Merge.boolean(this, object, 'rotation_rescale')
|
||||
Merge.boolean(this, object, 'rescale')
|
||||
Merge.string(this, object, 'rotation_axis')
|
||||
if (object.faces) {
|
||||
for (var face in this.faces) {
|
||||
if (this.faces.hasOwnProperty(face) && object.faces.hasOwnProperty(face)) {
|
||||
@ -913,7 +920,7 @@ class Cube extends OutlinerElement {
|
||||
})
|
||||
Undo.finishEdit('duplicate', {outliner: true, cubes: selected, selection: true})
|
||||
}},
|
||||
{name: 'menu.cube.rename', icon: 'text_format', click: function(cube) {
|
||||
{name: 'generic.rename', icon: 'text_format', click: function(cube) {
|
||||
if (selected.length > 1) {
|
||||
renameCubes(cube)
|
||||
} else {
|
||||
@ -978,6 +985,7 @@ class Group extends OutlinerElement {
|
||||
this.rotation = [0, 0, 0];
|
||||
this.reset = false;
|
||||
this.shade = true;
|
||||
this.material;
|
||||
this.selected = false;
|
||||
this.visibility = true;
|
||||
this.export = true;
|
||||
@ -1071,6 +1079,7 @@ class Group extends OutlinerElement {
|
||||
Merge.string(this, object, 'name')
|
||||
Merge.boolean(this, object, 'shade')
|
||||
Merge.boolean(this, object, 'reset')
|
||||
Merge.string(this, object, 'material')
|
||||
if (object.origin) {
|
||||
Merge.number(this.origin, object.origin, 0)
|
||||
Merge.number(this.origin, object.origin, 1)
|
||||
@ -1148,31 +1157,17 @@ class Group extends OutlinerElement {
|
||||
showContextMenu(event) {
|
||||
this.menu.open(event, this)
|
||||
}
|
||||
boneRotationDialog() {
|
||||
this.select()
|
||||
var bone_rotation_dialog = new Dialog({
|
||||
title: 'Bone Rotation',
|
||||
draggable: true,
|
||||
lines: [
|
||||
'<div class="dialog_bar"><label class="inline_label">X: </label><input type="number" class="dark_bordered rotation_x" min="-180" max="180" step="0.5" oninput="selected_group.setBoneRotation(0, $(this))"></div>',
|
||||
'<div class="dialog_bar"><label class="inline_label">Y: </label><input type="number" class="dark_bordered rotation_y" min="-180" max="180" step="0.5" oninput="selected_group.setBoneRotation(1, $(this))"></div>',
|
||||
'<div class="dialog_bar"><label class="inline_label">Z: </label><input type="number" class="dark_bordered rotation_z" min="-180" max="180" step="0.5" oninput="selected_group.setBoneRotation(2, $(this))"></div>'
|
||||
],
|
||||
id: 'bone_rotation',
|
||||
fadeTime: 100,
|
||||
onCancel: function() {
|
||||
bone_rotation_dialog.hide()
|
||||
},
|
||||
singleButton: true
|
||||
}).show()
|
||||
$(bone_rotation_dialog.object).find('input.rotation_x').val(this.rotation[0])
|
||||
$(bone_rotation_dialog.object).find('input.rotation_y').val(this.rotation[1])
|
||||
$(bone_rotation_dialog.object).find('input.rotation_z').val(this.rotation[2])
|
||||
}
|
||||
setBoneRotation(axis, obj) {
|
||||
this.rotation[axis] = limitNumber(parseFloat(obj.val()), -180, 180)
|
||||
if (isNaN(this.rotation[axis])) this.rotation[axis] = 0
|
||||
Canvas.updatePositions()
|
||||
setMaterial(material) {
|
||||
var scope = this;
|
||||
Blockbench.textPrompt('message.bone_material', scope.material, function(id) {
|
||||
Undo.initEdit({outliner: true})
|
||||
if (id) {
|
||||
scope.material = id
|
||||
} else {
|
||||
delete scope.material
|
||||
}
|
||||
Undo.finishEdit('bone_material')
|
||||
})
|
||||
}
|
||||
sortContent() {
|
||||
Undo.initEdit({outliner: true})
|
||||
@ -1220,20 +1215,31 @@ class Group extends OutlinerElement {
|
||||
base_group.origin = this.origin.slice()
|
||||
base_group.rotation = this.rotation.slice()
|
||||
base_group.shade = this.shade
|
||||
base_group.material = this.material
|
||||
base_group.reset = this.reset
|
||||
base_group.visibility = this.visibility
|
||||
base_group.export = this.export
|
||||
base_group.autouv = this.autouv
|
||||
return base_group;
|
||||
}
|
||||
compile() {
|
||||
compile(undo) {
|
||||
var obj = {
|
||||
name: this.name,
|
||||
isOpen: this.isOpen === true,
|
||||
export: this.export, //Don't export "export" if "lut" exists in compileGroups?
|
||||
visibility: this.visibility
|
||||
name: this.name
|
||||
}
|
||||
if (this.origin.join('_') !== '8_8_8') {
|
||||
if (this.shade == false) {
|
||||
obj.shade = false
|
||||
}
|
||||
if (this.material) {
|
||||
obj.material = this.material
|
||||
}
|
||||
if (undo) {
|
||||
obj.uuid = this.uuid;
|
||||
obj.export = this.export;
|
||||
obj.isOpen = this.isOpen === true;
|
||||
obj.visibility = this.visibility;
|
||||
obj.autouv = this.autouv;
|
||||
}
|
||||
if (this.origin.join('_') !== '8_8_8' || Blockbench.entity_mode) {
|
||||
obj.origin = this.origin
|
||||
}
|
||||
if (this.rotation.join('_') !== '0_0_0') {
|
||||
@ -1242,6 +1248,7 @@ class Group extends OutlinerElement {
|
||||
if (this.reset) {
|
||||
obj.reset = true
|
||||
}
|
||||
obj.children = []
|
||||
return obj;
|
||||
}
|
||||
forEachChild(func) {
|
||||
@ -1299,19 +1306,21 @@ class Group extends OutlinerElement {
|
||||
OutlinerButtons.autouv
|
||||
]
|
||||
Group.prototype.menu = new Menu([
|
||||
{icon: 'layers', name: 'menu.group.material', condition: () => Blockbench.entity_mode, click: function(group) {group.setMaterial()}},
|
||||
'_',
|
||||
{icon: 'content_copy', name: 'menu.group.duplicate', click: function(group) {
|
||||
var cubes_before = elements.length
|
||||
Undo.initEdit({outliner: true, cubes: [], selection: true})
|
||||
group.duplicate()
|
||||
Undo.finishEdit('duplicate_group', {outliner: true, cubes: elements.slice().slice(cubes_before), selection: true})
|
||||
}},
|
||||
{icon: 'text_format', name: 'generic.rename', click: function(group) {group.rename()}},
|
||||
{icon: 'sort_by_alpha', name: 'menu.group.sort', click: function(group) {group.sortContent()}},
|
||||
{icon: 'fa-leaf', name: 'menu.group.resolve', click: function(group) {
|
||||
Undo.initEdit({outliner: true})
|
||||
group.resolve()
|
||||
Undo.finishEdit('group resolve')
|
||||
}},
|
||||
{icon: 'text_format', name: 'menu.group.rename', click: function(group) {group.rename()}}
|
||||
])
|
||||
Array.prototype.clearObjectRecursive = function(obj) {
|
||||
var i = 0
|
||||
@ -1327,11 +1336,11 @@ Array.prototype.clearObjectRecursive = function(obj) {
|
||||
Array.prototype.findRecursive = function(key1, val) {
|
||||
var i = 0
|
||||
while (i < this.length) {
|
||||
var tag = this[i][key1]
|
||||
let tag = this[i][key1]
|
||||
if (tag === val) {
|
||||
return this[i];
|
||||
} else if (this[i].children && this[i].children.length > 0) {
|
||||
var inner = this[i].children.findRecursive(key1, val)
|
||||
let inner = this[i].children.findRecursive(key1, val)
|
||||
if (inner !== undefined) {
|
||||
return inner;
|
||||
}
|
||||
@ -1405,12 +1414,8 @@ function compileGroups(undo, lut) {
|
||||
|
||||
if (lut === undefined || array[i].export === true) {
|
||||
|
||||
var obj = array[i].compile()
|
||||
if (undo) {
|
||||
obj.autouv = array[i].autouv
|
||||
obj.shade = array[i].shade
|
||||
}
|
||||
obj.children = []
|
||||
var obj = array[i].compile(undo)
|
||||
|
||||
if (array[i].children.length > 0) {
|
||||
iterate(array[i].children, obj.children)
|
||||
}
|
||||
@ -1452,10 +1457,16 @@ function parseGroups(array, importGroup, startIndex) {
|
||||
} else {
|
||||
var obj = new Group(array[i])
|
||||
obj.parent = addGroup
|
||||
obj.isOpen = array[i].isOpen
|
||||
if (array[i].children.length > 0) {
|
||||
obj.isOpen = !!array[i].isOpen
|
||||
if (array[i].uuid) {
|
||||
obj.uuid = array[i].uuid
|
||||
}
|
||||
if (array[i].children && array[i].children.length > 0) {
|
||||
iterate(array[i].children, obj.children, obj)
|
||||
}
|
||||
if (array[i].content && array[i].content.length > 0) {
|
||||
iterate(array[i].content, obj.children, obj)
|
||||
}
|
||||
save_array.push(obj)
|
||||
}
|
||||
i++;
|
||||
@ -1599,6 +1610,13 @@ function dropOutlinerObjects(item, target, event) {
|
||||
selected.length = 0
|
||||
} else {
|
||||
Undo.initEdit({outliner: true, selection: true})
|
||||
var updatePosRecursive = function(item) {
|
||||
if (item.type === 'cube') {
|
||||
Canvas.adaptObjectPosition(item)
|
||||
} else if (item.type === 'group' && item.children && item.children.length) {
|
||||
item.children.forEach(updatePosRecursive)
|
||||
}
|
||||
}
|
||||
}
|
||||
items.forEach(function(item) {
|
||||
if (item && item !== target) {
|
||||
@ -1611,8 +1629,8 @@ function dropOutlinerObjects(item, target, event) {
|
||||
}
|
||||
} else {
|
||||
item.addTo(target)
|
||||
if (Blockbench.entity_mode && item.type === 'cube') {
|
||||
Canvas.adaptObjectPosition(item)
|
||||
if (Blockbench.entity_mode) {
|
||||
updatePosRecursive(item)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1628,35 +1646,35 @@ function dropOutlinerObjects(item, target, event) {
|
||||
function addCube() {
|
||||
Undo.initEdit({outliner: true, cubes: [], selection: true});
|
||||
var base_cube = new Cube({
|
||||
autouv: (settings.autouv.value ? 1 : 0)
|
||||
autouv: (settings.autouv.value ? 1 : 0)
|
||||
}).addTo()
|
||||
if (selected_group) {
|
||||
base_cube.addTo(selected_group)
|
||||
base_cube.addTo(selected_group)
|
||||
} else if (selected[0] !== undefined &&
|
||||
selected[0].parent !== 'root'
|
||||
selected[0].parent !== 'root'
|
||||
) {
|
||||
base_cube.addTo(selected[0].parent)
|
||||
base_cube.addTo(selected[0].parent)
|
||||
}
|
||||
|
||||
if (textures.length && Blockbench.entity_mode) {
|
||||
var sides = ['north', 'east', 'south', 'west', 'up', 'down']
|
||||
sides.forEach(function(side) {
|
||||
base_cube.faces[side].texture = '#'+textures[0].id
|
||||
})
|
||||
main_uv.loadData()
|
||||
var sides = ['north', 'east', 'south', 'west', 'up', 'down']
|
||||
sides.forEach(function(side) {
|
||||
base_cube.faces[side].texture = '#'+textures[0].id
|
||||
})
|
||||
main_uv.loadData()
|
||||
}
|
||||
if (Blockbench.entity_mode) {
|
||||
var add_group = selected_group
|
||||
if (!add_group && selected.length) {
|
||||
add_group = selected[0].parent
|
||||
}
|
||||
if (add_group && add_group.type === 'group') {
|
||||
var pos1 = add_group.origin.slice()
|
||||
base_cube.extend({
|
||||
from:[ pos1[0]-0, pos1[1]-0, pos1[2]-0 ],
|
||||
to:[ pos1[0]+1, pos1[1]+1, pos1[2]+1 ]
|
||||
})
|
||||
}
|
||||
var add_group = selected_group
|
||||
if (!add_group && selected.length) {
|
||||
add_group = selected[0].parent
|
||||
}
|
||||
if (add_group && add_group.type === 'group') {
|
||||
var pos1 = add_group.origin.slice()
|
||||
base_cube.extend({
|
||||
from:[ pos1[0]-0, pos1[1]-0, pos1[2]-0 ],
|
||||
to:[ pos1[0]+1, pos1[1]+1, pos1[2]+1 ]
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
if (selected_group) selected_group.unselect()
|
||||
@ -1681,7 +1699,9 @@ function addGroup() {
|
||||
if (!add_group && selected.length) {
|
||||
add_group = selected[0].parent
|
||||
}
|
||||
var base_group = new Group()
|
||||
var base_group = new Group({
|
||||
origin: add_group ? add_group.origin : undefined
|
||||
})
|
||||
selected.forEach(function(s, i) {
|
||||
s.addTo(base_group, false)
|
||||
if (i === 0) {
|
||||
@ -1711,16 +1731,15 @@ function deleteCubes(array) {
|
||||
}
|
||||
if (array == undefined) {
|
||||
array = selected.slice(0)
|
||||
}
|
||||
if (array.constructor !== Array) {
|
||||
} else if (array.constructor !== Array) {
|
||||
array = [array]
|
||||
} else {
|
||||
array.sort(function(a,b){return a - b}).reverse()
|
||||
array = array.slice(0)
|
||||
}
|
||||
array.forEach(function(s) {
|
||||
s.remove(false)
|
||||
})
|
||||
Canvas.updateIndexes()
|
||||
updateSelection()
|
||||
Undo.finishEdit('delete')
|
||||
}
|
||||
function duplicateCubes() {
|
||||
@ -1805,4 +1824,40 @@ function toggleCubeProperty(key) {
|
||||
}
|
||||
})
|
||||
Undo.finishEdit('toggle_prop')
|
||||
}
|
||||
}
|
||||
|
||||
BARS.defineActions(function() {
|
||||
new Action({
|
||||
id: 'add_cube',
|
||||
icon: 'add_box',
|
||||
category: 'edit',
|
||||
keybind: new Keybind({key: 78, ctrl: true}),
|
||||
condition: () => {return (!Blockbench.entity_mode || selected_group || selected.length) && !display_mode && !Animator.open},
|
||||
click: function () {
|
||||
addCube();
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'add_group',
|
||||
icon: 'create_new_folder',
|
||||
category: 'edit',
|
||||
keybind: new Keybind({key: 71, ctrl: true}),
|
||||
click: function () {
|
||||
addGroup();
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'outliner_toggle',
|
||||
icon: 'view_stream',
|
||||
category: 'edit',
|
||||
keybind: new Keybind({key: 115}),
|
||||
click: function () {
|
||||
toggleOutlinerOptions()
|
||||
}
|
||||
})
|
||||
new BarText({
|
||||
id: 'cube_counter',
|
||||
right: true,
|
||||
click: function() {selectAll()}
|
||||
})
|
||||
})
|
||||
|
@ -35,9 +35,16 @@ class Panel {
|
||||
var before = ui.position.top < target_pos + target_height / 2
|
||||
if (target && target !== scope) {
|
||||
scope.moveTo(target, before)
|
||||
} else {
|
||||
if (e.clientX > window.innerWidth - 200) {
|
||||
scope.moveTo('right_bar')
|
||||
} else if (e.clientX < 200) {
|
||||
scope.moveTo('left_bar')
|
||||
}
|
||||
}
|
||||
}
|
||||
saveInterfaceRearrangement()
|
||||
updateInterface()
|
||||
}
|
||||
})
|
||||
$(this.node)
|
||||
@ -72,6 +79,7 @@ class Panel {
|
||||
if (this.onResize) {
|
||||
this.onResize()
|
||||
}
|
||||
updateInterface()
|
||||
}
|
||||
update() {
|
||||
var show = BARS.condition(this.condition)
|
||||
@ -157,15 +165,45 @@ var Interface = {
|
||||
Resizers: {
|
||||
left: new ResizeLine({
|
||||
id: 'left',
|
||||
condition: function() {
|
||||
var i = 0;
|
||||
Interface.data.left_bar.forEach(p => {
|
||||
if (BARS.condition(Interface.Panels[p].condition)) {i++;}
|
||||
})
|
||||
return i;
|
||||
},
|
||||
get: function() {return Interface.data.left_bar_width},
|
||||
set: function(o, diff) {Interface.data.left_bar_width = limitNumber(o + diff, 64, $(window).width()- 240 - Interface.data.right_bar_width)},
|
||||
position: function(line) {line.setPosition({ top: 32, bottom: 0, left: Interface.data.left_bar_width-2 })}
|
||||
set: function(o, diff) {
|
||||
Interface.data.left_bar_width = limitNumber(o + diff, 64, $(window).width()- 240 - Interface.data.right_bar_width)
|
||||
},
|
||||
position: function(line) {
|
||||
line.setPosition({
|
||||
top: 32,
|
||||
bottom: 0,
|
||||
left: Interface.data.left_bar_width-2
|
||||
})
|
||||
}
|
||||
}),
|
||||
right: new ResizeLine({
|
||||
id: 'right',
|
||||
condition: function() {
|
||||
var i = 0;
|
||||
Interface.data.right_bar.forEach(p => {
|
||||
if (BARS.condition(Interface.Panels[p].condition)) {i++;}
|
||||
})
|
||||
return i;
|
||||
},
|
||||
get: function() {return Interface.data.right_bar_width},
|
||||
set: function(o, diff) {Interface.data.right_bar_width = limitNumber(o - diff, 64, $(window).width()- 240 - Interface.data.left_bar_width)},
|
||||
position: function(line) {line.setPosition({ top: 32, bottom: 0, right: Interface.data.right_bar_width-2 })}
|
||||
set: function(o, diff) {
|
||||
Interface.data.right_bar_width = limitNumber(o - diff, 64, $(window).width()- 240 - Interface.data.left_bar_width)
|
||||
},
|
||||
position: function(line) {
|
||||
line.setPosition({
|
||||
top: 32,
|
||||
bottom: 0,
|
||||
right: Interface.data.right_bar_width-2
|
||||
})
|
||||
}
|
||||
}),
|
||||
quad_view_x: new ResizeLine({
|
||||
id: 'quad_view_x',
|
||||
@ -183,7 +221,9 @@ var Interface = {
|
||||
horizontal: true,
|
||||
condition: function() {return quad_previews.enabled},
|
||||
get: function() {return Interface.data.quad_view_y},
|
||||
set: function(o, diff) {Interface.data.quad_view_y = limitNumber(o + diff/$('#preview').height()*100, 5, 95)},
|
||||
set: function(o, diff) {
|
||||
Interface.data.quad_view_y = limitNumber(o + diff/$('#preview').height()*100, 5, 95)
|
||||
},
|
||||
position: function(line) {line.setPosition({
|
||||
left: Interface.data.left_bar_width+2,
|
||||
right: Interface.data.right_bar_width+2,
|
||||
@ -219,7 +259,7 @@ function setupInterface() {
|
||||
//Panels
|
||||
Interface.Panels.uv = new Panel({
|
||||
id: 'uv',
|
||||
condition: function() {return !display_mode && !Animator.state},
|
||||
condition: function() {return !display_mode && !Animator.open},
|
||||
toolbars: {
|
||||
bottom: Toolbars.main_uv
|
||||
},
|
||||
@ -231,14 +271,14 @@ function setupInterface() {
|
||||
})
|
||||
Interface.Panels.textures = new Panel({
|
||||
id: 'textures',
|
||||
condition: function() {return !display_mode && !Animator.state},
|
||||
condition: function() {return !display_mode && !Animator.open},
|
||||
toolbars: {
|
||||
head: Toolbars.textures
|
||||
}
|
||||
})
|
||||
Interface.Panels.options = new Panel({
|
||||
id: 'options',
|
||||
condition: function() {return !display_mode && !Animator.state},
|
||||
condition: function() {return !display_mode && !Animator.open},
|
||||
toolbars: {
|
||||
|
||||
}
|
||||
@ -252,18 +292,24 @@ function setupInterface() {
|
||||
})
|
||||
Interface.Panels.animations = new Panel({
|
||||
id: 'animations',
|
||||
condition: () => Animator.state,
|
||||
condition: () => Animator.open,
|
||||
toolbars: {
|
||||
head: Toolbars.animations
|
||||
}
|
||||
})
|
||||
Interface.Panels.keyframe = new Panel({
|
||||
id: 'keyframe',
|
||||
condition: () => Animator.state,
|
||||
condition: () => Animator.open,
|
||||
toolbars: {
|
||||
head: Toolbars.keyframe
|
||||
}
|
||||
})
|
||||
Interface.Panels.variable_placeholders = new Panel({
|
||||
id: 'variable_placeholders',
|
||||
condition: () => Animator.open,
|
||||
toolbars: {
|
||||
}
|
||||
})
|
||||
Interface.Panels.display = new Panel({
|
||||
id: 'display',
|
||||
condition: function() {return display_mode},
|
||||
@ -349,10 +395,14 @@ function setupInterface() {
|
||||
$('#timeline_inner').on('mousewheel', function() {
|
||||
if (event.ctrlKey) {
|
||||
var offset = 1 - event.deltaY/600
|
||||
Timeline.vue._data.size = limitNumber(Timeline.vue._data.size * offset, 10, 500)
|
||||
Timeline.vue._data.size = limitNumber(Timeline.vue._data.size * offset, 10, 1000)
|
||||
this.scrollLeft *= offset
|
||||
let l = (event.offsetX / this.clientWidth) * 500 * (event.deltaY<0?1:-0.2)
|
||||
this.scrollLeft += l
|
||||
} else {
|
||||
this.scrollLeft += event.deltaY/2
|
||||
}
|
||||
Timeline.updateSize()
|
||||
event.preventDefault();
|
||||
});
|
||||
|
||||
@ -413,7 +463,7 @@ function setProjectTitle(title) {
|
||||
title = Project.parent
|
||||
}
|
||||
if (title) {
|
||||
Prop.file_name = title
|
||||
Prop.file_name = Prop.file_name_alt = title
|
||||
if (!Project.name) {
|
||||
Project.name = title
|
||||
}
|
||||
@ -422,7 +472,7 @@ function setProjectTitle(title) {
|
||||
}
|
||||
$('title').text(title+' - Blockbench')
|
||||
} else {
|
||||
Prop.file_name = ''
|
||||
Prop.file_name = Prop.file_name_alt = ''
|
||||
$('title').text('Blockbench')
|
||||
}
|
||||
}
|
||||
@ -484,12 +534,13 @@ function colorSettingsSetup(reset) {
|
||||
ui: {hex: '#282c34'},
|
||||
bright_ui: {hex: '#f4f3ff'},
|
||||
accent: {hex: '#3e90ff'},
|
||||
grid: {hex: '#495061'},
|
||||
button: {hex: '#3a3f4b'},
|
||||
selected: {hex: '#495061'},
|
||||
text: {hex: '#cacad4'},
|
||||
light: {hex: '#f4f3ff'},
|
||||
text_acc: {hex: '#000006'},
|
||||
grid: {hex: '#495061'},
|
||||
wireframe: {hex: '#576f82'},
|
||||
main: {font: ''},
|
||||
headline: {font: ''},
|
||||
css: ''
|
||||
@ -551,6 +602,11 @@ function updateUIColor() {
|
||||
gizmo_colors.outline = new THREE.Color( c_outline )
|
||||
Canvas.outlineMaterial.color = gizmo_colors.outline
|
||||
}
|
||||
var w_wire = parseInt('0x'+app_colors.wireframe.hex.replace('#', ''))
|
||||
if (!gizmo_colors.wire || w_wire !== gizmo_colors.wire.getHex()) {
|
||||
gizmo_colors.wire = new THREE.Color( w_wire )
|
||||
Canvas.wireframeMaterial.color = gizmo_colors.wire
|
||||
}
|
||||
|
||||
var c_grid = parseInt('0x'+app_colors.grid.hex.replace('#', ''))
|
||||
if (!gizmo_colors.grid || c_grid !== gizmo_colors.grid.getHex()) {
|
||||
|
185
js/io.js
185
js/io.js
@ -10,13 +10,10 @@ function newProject(entity_mode) {
|
||||
selected.length = 0;
|
||||
selected_group = undefined;
|
||||
display = {};
|
||||
Project.name = '';
|
||||
Project.parent = '';
|
||||
Project.description = '';
|
||||
Project.name = Project.parent = Project.description = '';
|
||||
Project.texture_width = Project.texture_height = 16;
|
||||
Project.ambientocclusion = true;
|
||||
Prop.file_path = '';
|
||||
Prop.file_name = '';
|
||||
Prop.file_path = Prop.file_name = Prop.file_name_alt = '';
|
||||
Prop.project_saved = true;
|
||||
Prop.added_models = 0;
|
||||
setProjectTitle();
|
||||
@ -26,11 +23,14 @@ function newProject(entity_mode) {
|
||||
Undo.history.length = 0;
|
||||
Undo.index = 0;
|
||||
Painter.current = {};
|
||||
Animator.animations.length = 1;
|
||||
Animator.animations.splice(0, 1);
|
||||
if (entity_mode) {
|
||||
entityMode.join();
|
||||
} else {
|
||||
entityMode.leave();
|
||||
}
|
||||
$('#var_placeholder_area').val('')
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
@ -197,7 +197,7 @@ function loadBlockModel(model, filepath, add) {
|
||||
up: {uv: [0,0,0,0], texture: '$transparent'},
|
||||
down: {uv: [0,0,0,0], texture: '$transparent'},
|
||||
},
|
||||
autouv: false,
|
||||
autouv: 0,
|
||||
export: false
|
||||
})
|
||||
elements.push(base_cube);
|
||||
@ -333,7 +333,7 @@ function loadJEMModel(model) {
|
||||
function addBox(box, i, mirrored) {
|
||||
var base_cube = new Cube({
|
||||
name: box.name || group.name,
|
||||
autouv: false,
|
||||
autouv: 0,
|
||||
uv_offset: box.textureOffset,
|
||||
inflate: box.sizeAdd
|
||||
})
|
||||
@ -557,7 +557,7 @@ function loadPEModel(data) {
|
||||
included_bones.push(b.name)
|
||||
})
|
||||
data.object.bones.forEach(function(b, bi) {
|
||||
var group = new Group({name: b.name, origin: b.pivot})
|
||||
var group = new Group({name: b.name, origin: b.pivot, material: b.material})
|
||||
bones[b.name] = group
|
||||
if (b.pivot) {
|
||||
group.origin[0] *= -1
|
||||
@ -587,7 +587,7 @@ function loadPEModel(data) {
|
||||
|
||||
if (b.cubes) {
|
||||
b.cubes.forEach(function(s) {
|
||||
var base_cube = new Cube({name: b.name, autouv: false, color: bi%8})
|
||||
var base_cube = new Cube({name: b.name, autouv: 0, color: bi%8})
|
||||
if (s.origin) {
|
||||
base_cube.from = s.origin
|
||||
base_cube.from[0] = -(base_cube.from[0] + s.size[0])
|
||||
@ -692,7 +692,7 @@ var Extruder = {
|
||||
var texture_index = '#'+textures[textures.length-1].id
|
||||
var isNewProject = elements.length === 0;
|
||||
|
||||
var jimage = Jimp.read(Extruder.ext_img.src, function() {}).then(function(image) {
|
||||
var jimage = Jimp.read(Extruder.ext_img.src).then(function(image) {
|
||||
var pixel_opacity_tolerance = $('#scan_tolerance').val()
|
||||
function isOpaquePixel(px_x, px_y) {
|
||||
return parseInt(image.getPixelColor(px_x, px_y).toString(16).substr(6,2), 16) >= pixel_opacity_tolerance;
|
||||
@ -897,7 +897,7 @@ function buildBlockModel(options) {
|
||||
} else {
|
||||
element.rotation = new oneLiner({
|
||||
angle: 0,
|
||||
axis: 'y',
|
||||
axis: s.rotation_axis||'y',
|
||||
origin: s.origin,
|
||||
rescale: true
|
||||
})
|
||||
@ -1110,6 +1110,9 @@ function buildEntityModel(options) {
|
||||
if (!g.shade) {
|
||||
bone.mirror = true
|
||||
}
|
||||
if (g.material) {
|
||||
bone.material = g.material
|
||||
}
|
||||
//Cubes
|
||||
if (g.children && g.children.length) {
|
||||
bone.cubes = []
|
||||
@ -1419,4 +1422,162 @@ function autoParseJSON(data, feedback) {
|
||||
}
|
||||
}
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
BARS.defineActions(function() {
|
||||
new Action({
|
||||
id: 'new_block_model',
|
||||
icon: 'insert_drive_file',
|
||||
category: 'file',
|
||||
keybind: new Keybind({key: 78, ctrl: true}),
|
||||
click: function () {newProject()}
|
||||
})
|
||||
new Action({
|
||||
id: 'new_entity_model',
|
||||
icon: 'pets',
|
||||
category: 'file',
|
||||
keybind: new Keybind({key: 78, ctrl: true, shift: true}),
|
||||
click: function () {newProject(true)}
|
||||
})
|
||||
new Action({
|
||||
id: 'open_model',
|
||||
icon: 'assessment',
|
||||
category: 'file',
|
||||
keybind: new Keybind({key: 79, ctrl: true}),
|
||||
click: function () {
|
||||
Blockbench.import({
|
||||
extensions: ['json', 'jem', 'jpm'],
|
||||
type: 'JSON Model'
|
||||
}, function(files) {
|
||||
if (isApp) {
|
||||
addRecentProject({name: pathToName(files[0].path, 'mobs_id'), path: files[0].path})
|
||||
}
|
||||
loadModel(files[0].content, files[0].path)
|
||||
})
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'add_model',
|
||||
icon: 'assessment',
|
||||
category: 'file',
|
||||
click: function () {
|
||||
Blockbench.import({
|
||||
extensions: ['json', 'jem', 'jpm'],
|
||||
type: 'JSON Model'
|
||||
}, function(files) {
|
||||
if (isApp) {
|
||||
addRecentProject({name: pathToName(files[0].path, 'mobs_id'), path: files[0].path})
|
||||
}
|
||||
loadModel(files[0].content, files[0].path, true)
|
||||
})
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'extrude_texture',
|
||||
icon: 'eject',
|
||||
category: 'file',
|
||||
click: function () {
|
||||
Blockbench.import({
|
||||
extensions: ['png'],
|
||||
type: 'PNG Texture',
|
||||
readtype: 'image'
|
||||
}, function(files) {
|
||||
if (files.length) {
|
||||
if (isApp) {
|
||||
new Texture().fromPath(files[0].path).add().fillParticle()
|
||||
} else {
|
||||
new Texture().fromDataURL(files[0].content).add().fillParticle()
|
||||
}
|
||||
showDialog('image_extruder')
|
||||
Extruder.drawImage(isApp ? files[0].path : files[0].content)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'export_blockmodel',
|
||||
icon: 'insert_drive_file',
|
||||
category: 'file',
|
||||
keybind: new Keybind({key: 83, ctrl: true, shift: true}),
|
||||
condition: function() {return !Blockbench.entity_mode},
|
||||
click: function () {
|
||||
var content = buildBlockModel()
|
||||
Blockbench.export({
|
||||
type: 'JSON Model',
|
||||
extensions: ['json'],
|
||||
name: Project.name||'model',
|
||||
startpath: Prop.file_path,
|
||||
content: content
|
||||
})
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'export_entity',
|
||||
icon: 'pets',
|
||||
category: 'file',
|
||||
keybind: new Keybind({key: 83, ctrl: true, shift: true}),
|
||||
condition: function() {return Blockbench.entity_mode},
|
||||
click: function () {
|
||||
var content = buildEntityModel({raw: true});
|
||||
Blockbench.export({
|
||||
type: 'JSON Entity Model',
|
||||
extensions: ['json'],
|
||||
name: Project.name,
|
||||
startpath: Prop.file_path,
|
||||
content: content,
|
||||
custom_writer: writeFileEntity
|
||||
})
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'export_optifine_part',
|
||||
icon: 'icon-optifine_file',
|
||||
category: 'file',
|
||||
condition: function() {return !Blockbench.entity_mode},
|
||||
click: function () {
|
||||
var content = buildJPMModel()
|
||||
Blockbench.export({
|
||||
type: 'Optifine Part Model',
|
||||
extensions: ['jpm'],
|
||||
name: Project.name,
|
||||
startpath: Prop.file_path,
|
||||
content: content
|
||||
})
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'export_optifine_full',
|
||||
icon: 'icon-optifine_file',
|
||||
category: 'file',
|
||||
condition: function() {return Blockbench.entity_mode},
|
||||
click: function () {
|
||||
var content = buildJEMModel()
|
||||
Blockbench.export({
|
||||
type: 'Optifine Entity Model',
|
||||
extensions: ['jem'],
|
||||
startpath: Prop.file_path,
|
||||
content: content
|
||||
})
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'export_obj',
|
||||
icon: 'icon-objects',
|
||||
category: 'file',
|
||||
click: function () {
|
||||
Blockbench.export({
|
||||
type: 'Alias Wavefront',
|
||||
extensions: ['obj'],
|
||||
startpath: Prop.file_path,
|
||||
custom_writer: writeFileObj
|
||||
})
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'save',
|
||||
icon: 'save',
|
||||
category: 'file',
|
||||
keybind: new Keybind({key: 83, ctrl: true}),
|
||||
click: function () {saveFile();saveTextures();}
|
||||
})
|
||||
})
|
||||
|
@ -225,7 +225,7 @@ $(document).keydown(function(e) {
|
||||
}
|
||||
|
||||
var used = false;
|
||||
var input_focus = $('input[type="text"]:focus, input[type="number"]:focus, div[contenteditable="true"]:focus').length > 0
|
||||
var input_focus = $('input[type="text"]:focus, input[type="number"]:focus, div[contenteditable="true"]:focus, textarea:focus').length > 0
|
||||
|
||||
if (input_focus) {
|
||||
//User Editing Anything
|
||||
|
@ -31,9 +31,10 @@ const Language = {
|
||||
//it: 'Italiano (Italian)',
|
||||
ja: '\u65E5\u672C\u8A9E (Japanese)',//日本語
|
||||
nl: 'Nederlands (Dutch)',
|
||||
//pl: 'Polski (Polish)',
|
||||
pl: 'Polski (Polish)',
|
||||
ru: '\u0440\u0443\u0441\u0441\u043A\u0438\u0439 (Russian)',
|
||||
//sv: 'Svenska (Swedish)',
|
||||
zh: '\u4e2d\u6587 (Chinese)',//中文
|
||||
}
|
||||
}
|
||||
function getStringWidth(string, size) {
|
||||
|
253
js/molang.js
Normal file
253
js/molang.js
Normal file
@ -0,0 +1,253 @@
|
||||
/*class MathNode {
|
||||
constructor(data) {
|
||||
|
||||
}
|
||||
intact() {
|
||||
for (var key in this.inputs) {
|
||||
if (this.inputs[keys] === false) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
class MathNodeSimple {
|
||||
constructur(data) {
|
||||
super(data)
|
||||
this.operator = data.operator||'+'
|
||||
this.inputs = {
|
||||
a: false,
|
||||
b: false
|
||||
}
|
||||
}
|
||||
get() {
|
||||
let a = this.inputs.a ? this.inputs.a.get()
|
||||
let b = this.inputs.a ? this.inputs.b.get()
|
||||
switch (this.operator) {
|
||||
case '-': return a-b; break;
|
||||
case '+': return a+b; break;
|
||||
case '*': return a*b; break;
|
||||
case '/': return a/b; break;
|
||||
default: return 0; break;
|
||||
}
|
||||
}
|
||||
getString() {
|
||||
if (a !== undefined && b !== undefined) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
TODO:
|
||||
Support for negative numbers
|
||||
*/
|
||||
|
||||
function parseMolang(string) {
|
||||
if (typeof string === 'number') {
|
||||
return isNaN(string) ? 0 : string
|
||||
}
|
||||
function splitUp(s, char) {
|
||||
var i = 0;
|
||||
var level = 0
|
||||
while (i < s.length) {
|
||||
let c = s[i];
|
||||
if (c === '(') {
|
||||
level++;
|
||||
} else if (c === ')') {
|
||||
level--;
|
||||
} else if (level === 0 && s.substr(i, char.length) === char) {
|
||||
return [
|
||||
s.substr(0, i),
|
||||
s.substr(i+char.length)
|
||||
];
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
}
|
||||
function iterate(s) {
|
||||
//Spaces and brackets
|
||||
s = s.replace(/\s/g, '')
|
||||
if (s.substr(0, 1) === '(' && s.substr(-1) === ')') {
|
||||
s = s.substr(1, s.length-2)
|
||||
}
|
||||
let split = splitUp(s, '&&')
|
||||
// a ? b : c
|
||||
split = splitUp(s, '?')
|
||||
if (split) {
|
||||
let condition = iterate(split[0])
|
||||
let ab = splitUp(split[1], ':')
|
||||
if (ab.length) {
|
||||
return iterate(ab[condition?0:1])
|
||||
}
|
||||
}
|
||||
//Logic operators, ==, !=, > etc.
|
||||
if (split) {
|
||||
return iterate(split[0]) && iterate(split[1]) ? 1 : 0
|
||||
}
|
||||
split = splitUp(s, '||')
|
||||
if (split) {
|
||||
return iterate(split[0]) || iterate(split[1]) ? 1 : 0
|
||||
}
|
||||
split = splitUp(s, '<')
|
||||
if (split) {
|
||||
return iterate(split[0]) < iterate(split[1]) ? 1 : 0
|
||||
}
|
||||
split = splitUp(s, '<==')
|
||||
if (split) {
|
||||
return iterate(split[0]) <= iterate(split[1]) ? 1 : 0
|
||||
}
|
||||
split = splitUp(s, '>')
|
||||
if (split) {
|
||||
return iterate(split[0]) < iterate(split[1]) ? 1 : 0
|
||||
}
|
||||
split = splitUp(s, '>==')
|
||||
if (split) {
|
||||
return iterate(split[0]) <= iterate(split[1]) ? 1 : 0
|
||||
}
|
||||
split = splitUp(s, '===')
|
||||
if (split) {
|
||||
return iterate(split[0]) === iterate(split[1]) ? 1 : 0
|
||||
}
|
||||
split = splitUp(s, '!==')
|
||||
if (split) {
|
||||
return iterate(split[0]) !== iterate(split[1]) ? 1 : 0
|
||||
}
|
||||
|
||||
split = splitUp(s, '+')
|
||||
if (split) {
|
||||
return iterate(split[0]) + iterate(split[1])
|
||||
}
|
||||
split = splitUp(s, '-')
|
||||
if (split) {
|
||||
if (split[0].length === 0) {
|
||||
return -iterate(split[1])
|
||||
} else if ('+*/<>=|&?:'.includes(split[0].substr(-1)) === false) {
|
||||
return iterate(split[0]) - iterate(split[1])
|
||||
}
|
||||
}
|
||||
split = splitUp(s, '*')
|
||||
if (split) {
|
||||
return iterate(split[0]) * iterate(split[1])
|
||||
}
|
||||
split = splitUp(s, '/')
|
||||
if (split) {
|
||||
return iterate(split[0]) / iterate(split[1])
|
||||
}
|
||||
if (s.substr(0, 5) === 'Math.') {
|
||||
let begin = s.search(/\(/);
|
||||
let operator = s.substr(5, begin-5);
|
||||
let inner = s.substr(begin+1, s.length-begin-2)
|
||||
let params = inner.split(',');
|
||||
|
||||
params.forEach((c, i) => {
|
||||
params[i] = iterate(c);
|
||||
})
|
||||
|
||||
if (s.substr(0, 7) === 'Math.Pi') {
|
||||
return Math.PI
|
||||
}
|
||||
|
||||
if (operator === 'abs') {
|
||||
return Math.abs(params[0])
|
||||
}
|
||||
if (operator === 'sin') {
|
||||
return Math.sin(params[0])
|
||||
}
|
||||
if (operator === 'cos') {
|
||||
return Math.cos(params[0])
|
||||
}
|
||||
if (operator === 'exp') {
|
||||
return Math.exp(params[0])
|
||||
}
|
||||
if (operator === 'ln') {
|
||||
return Math.log(params[0])
|
||||
}
|
||||
if (operator === 'pow') {
|
||||
return Math.pow( params[0], params[1] )
|
||||
}
|
||||
if (operator === 'sqrt') {
|
||||
return Math.sqrt(params[0])
|
||||
}
|
||||
if (operator === 'random') {
|
||||
return params[0] + Math.random() * (params[1] - params[0])
|
||||
}
|
||||
if (operator === 'ceil') {
|
||||
return Math.ceil(params[0])
|
||||
}
|
||||
if (operator === 'round') {
|
||||
return Math.round(params[0])
|
||||
}
|
||||
if (operator === 'trunc') {
|
||||
return Math.trunc(params[0])
|
||||
}
|
||||
if (operator === 'floor') {
|
||||
return Math.floor(params[0])
|
||||
}
|
||||
if (operator === 'mod') {
|
||||
return params[0] % params[1]
|
||||
}
|
||||
if (operator === 'min') {
|
||||
return Math.min(params[0], params[1])
|
||||
}
|
||||
if (operator === 'max') {
|
||||
return Math.max(params[0], params[1])
|
||||
}
|
||||
if (operator === 'clamp') {
|
||||
return limitNumber(params[0], params[1], params[2])
|
||||
}
|
||||
if (operator === 'lerp') {
|
||||
return params[0] + (params[1]-params[0]) * params[2]
|
||||
}
|
||||
if (operator === 'lerprotate') {
|
||||
let a = (((params[0] + 180) % 360) +180) % 360
|
||||
let b = (((params[1] + 180) % 360) +180) % 360
|
||||
let d = b-a
|
||||
let i = params[2]
|
||||
if (Math.abs(d) > 180) {
|
||||
i *= -1
|
||||
}
|
||||
return a + v*i
|
||||
}
|
||||
}
|
||||
split = s.match(/[a-zA-Z._]{2,}/g)
|
||||
if (split && split.length === 1) {
|
||||
return previewVariableValue(split[0], Timeline.second)
|
||||
}
|
||||
split = parseFloat(s)
|
||||
if (split) {
|
||||
return split
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
try {
|
||||
return iterate(string)
|
||||
} catch(err) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
function previewVariableValue(name, time) {
|
||||
if (name === 'true') {
|
||||
return 1
|
||||
} else if (name === 'false') {
|
||||
return 0
|
||||
} else if (name === 'global.anim_time' || name === 'Params.AnimTime' || name === 'Params.LifeTime' || name === 'global.life_time' ) {
|
||||
return time
|
||||
} else {
|
||||
var inputs = $('#var_placeholder_area').val().split('\n')
|
||||
var i = 0;
|
||||
while (i < inputs.length) {
|
||||
let key, val;
|
||||
[key, val] = inputs[i].split('=')
|
||||
if (key === name) {
|
||||
return parseMolang(val)
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
@ -36,7 +36,7 @@ class BBPainter {
|
||||
})
|
||||
} else {
|
||||
Painter.current.texture = texture
|
||||
Jimp.read(Buffer.from(texture.source.replace('data:image/png;base64,', ''), 'base64'), function() {}).then(function(image) {
|
||||
Jimp.read(Buffer.from(texture.source.replace('data:image/png;base64,', ''), 'base64')).then(function(image) {
|
||||
cb(image)
|
||||
Painter.current.image = image
|
||||
image.getBase64(Jimp.MIME_PNG, function(a, dataUrl){
|
||||
@ -77,10 +77,11 @@ class BBPainter {
|
||||
if (x === Painter.current.x && y === Painter.current.y) {
|
||||
//return
|
||||
}
|
||||
if (Painter.current.face !== data.face) {
|
||||
if (Painter.current.face !== data.face || Painter.current.cube !== data.cube) {
|
||||
Painter.current.x = x
|
||||
Painter.current.y = y
|
||||
Painter.current.face = data.face
|
||||
Painter.current.cube = data.cube
|
||||
new_face = true
|
||||
}
|
||||
var diff = {
|
||||
@ -126,9 +127,9 @@ class BBPainter {
|
||||
BarItems.brush_color.set(c)
|
||||
}
|
||||
if (texture.mode == 'bitmap') {
|
||||
Jimp.read(Buffer.from(texture.source.replace('data:image/png;base64,', ''), 'base64'), function() {}).then(getPxColor)
|
||||
Jimp.read(Buffer.from(texture.source.replace('data:image/png;base64,', ''), 'base64')).then(getPxColor)
|
||||
} else {
|
||||
Jimp.read(texture.source, function() {}).then(getPxColor)
|
||||
Jimp.read(texture.source).then(getPxColor)
|
||||
}
|
||||
}
|
||||
useBrush(texture, x, y, uvTag) {
|
||||
@ -462,7 +463,7 @@ class BBPainter {
|
||||
var line_length = Math.sqrt(elements.length/2)
|
||||
var o = 0
|
||||
|
||||
var cubes = elements.slice()
|
||||
var cubes = Blockbench.entity_mode ? elements.slice() : selected.slice()
|
||||
var avg_size = 0;
|
||||
|
||||
var i = cubes.length-1
|
||||
@ -624,6 +625,7 @@ class BBPainter {
|
||||
bone_temps.forEach(function(bt) {
|
||||
bt.forEach(function(t) {
|
||||
t.obj.applyTexture(texture, true)
|
||||
t.obj.autouv = 0
|
||||
})
|
||||
})
|
||||
}
|
||||
@ -632,3 +634,67 @@ class BBPainter {
|
||||
}
|
||||
}
|
||||
var Painter = new BBPainter()
|
||||
|
||||
BARS.defineActions(function() {
|
||||
new BarSelect({
|
||||
id: 'vertex_snap_mode',
|
||||
options: {
|
||||
move: true,
|
||||
scale: true
|
||||
}
|
||||
})
|
||||
new ColorPicker({
|
||||
id: 'brush_color',
|
||||
palette: true
|
||||
})
|
||||
new BarSelect({
|
||||
id: 'brush_mode',
|
||||
options: {
|
||||
brush: true,
|
||||
noise: true,
|
||||
eraser: true,
|
||||
fill: true
|
||||
}
|
||||
})
|
||||
|
||||
new NumSlider({
|
||||
id: 'slider_brush_size',
|
||||
settings: {
|
||||
min: 1, max: 20, step: 1, default: 1,
|
||||
}
|
||||
})
|
||||
new NumSlider({
|
||||
id: 'slider_brush_softness',
|
||||
settings: {
|
||||
min: 0, max: 100, default: 0,
|
||||
interval: function(event) {
|
||||
if (event.shiftKey && event.ctrlKey) {
|
||||
return 0.25;
|
||||
} else if (event.shiftKey) {
|
||||
return 5;
|
||||
} else if (event.ctrlKey) {
|
||||
return 1;
|
||||
} else {
|
||||
return 10;
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
new NumSlider({
|
||||
id: 'slider_brush_opacity',
|
||||
settings: {
|
||||
min: 0, max: 100, default: 100,
|
||||
interval: function(event) {
|
||||
if (event.shiftKey && event.ctrlKey) {
|
||||
return 0.25;
|
||||
} else if (event.shiftKey) {
|
||||
return 5;
|
||||
} else if (event.ctrlKey) {
|
||||
return 1;
|
||||
} else {
|
||||
return 10;
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
|
@ -347,4 +347,21 @@ function switchPluginTabs(installed) {
|
||||
$('#all_plugins').addClass('open')
|
||||
Plugins.Vue._data.showAll = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BARS.defineActions(function() {
|
||||
new Action({
|
||||
id: 'load_plugin',
|
||||
icon: 'fa-file-code-o',
|
||||
category: 'blockbench',
|
||||
click: function () {
|
||||
Blockbench.import({
|
||||
extensions: ['bbplugin', 'js'],
|
||||
type: 'Blockbench Plugin',
|
||||
startpath: localStorage.getItem('plugin_dev_path')
|
||||
}, function(files) {
|
||||
loadPluginFromFile(files[0])
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
|
435
js/preview.js
435
js/preview.js
@ -263,7 +263,7 @@ class Preview {
|
||||
resetCamera() {
|
||||
this.controls.target.set(0, -3, 0);
|
||||
this.camPers.position.set(-20, 20, -20)
|
||||
this.setCameraType('pers')
|
||||
this.setNormalCamera()
|
||||
return this;
|
||||
}
|
||||
getFacingDirection() {
|
||||
@ -581,7 +581,7 @@ class Preview {
|
||||
var dataUrl = scope.canvas.toDataURL()
|
||||
|
||||
dataUrl = dataUrl.replace('data:image/png;base64,','')
|
||||
Jimp.read(Buffer.from(dataUrl, 'base64'), function() {}).then(function(image) {
|
||||
Jimp.read(Buffer.from(dataUrl, 'base64')).then(function(image) {
|
||||
|
||||
image.autocrop([0, false])
|
||||
if (options && options.width && options.height) {
|
||||
@ -624,6 +624,9 @@ class Preview {
|
||||
{icon: 'photo_camera', name: 'menu.preview.screenshot', click: function(preview) {
|
||||
preview.screenshot()
|
||||
}},
|
||||
{icon: 'icon-player', name: 'settings.display_skin', condition: () => (display_mode && displayReferenceObjects.active.id === 'player'), click: function() {
|
||||
changeDisplaySkin()
|
||||
}},
|
||||
{icon: 'wallpaper', name: 'menu.preview.background', children: function(preview) {
|
||||
var has_background = !!main_preview.background.image
|
||||
return [
|
||||
@ -655,7 +658,7 @@ class Preview {
|
||||
}}
|
||||
]
|
||||
}},
|
||||
{icon: 'videocam', name: 'menu.preview.perspective', condition: function(preview) {return !preview.movingBackground && !display_mode && !Animator.state}, children: function(preview) {
|
||||
{icon: 'videocam', name: 'menu.preview.perspective', condition: function(preview) {return !preview.movingBackground && !display_mode && !Animator.open}, children: function(preview) {
|
||||
function getBtn(angle, pers) {
|
||||
var condition = (pers && !preview.isOrtho)
|
||||
|| (!pers && angle === preview.angle && preview.isOrtho);
|
||||
@ -671,7 +674,7 @@ class Preview {
|
||||
{icon: getBtn(5), name: 'direction.west', color: 'x', click: function(preview) {preview.setOrthographicCamera(5)}}
|
||||
]
|
||||
}},
|
||||
{icon: 'widgets', name: 'menu.preview.quadview', condition: function(preview) {return !quad_previews.enabled && !preview.movingBackground && !display_mode && !Animator.state}, click: function() {
|
||||
{icon: 'widgets', name: 'menu.preview.quadview', condition: function(preview) {return !quad_previews.enabled && !preview.movingBackground && !display_mode && !Animator.open}, click: function() {
|
||||
openQuadView()
|
||||
}},
|
||||
{icon: 'web_asset', name: 'menu.preview.fullview', condition: function(preview) {return quad_previews.enabled && !preview.movingBackground && !display_mode}, click: function(preview) {
|
||||
@ -839,7 +842,11 @@ function initCanvas() {
|
||||
}
|
||||
emptyMaterials = []
|
||||
cubeColors.forEach(function(s, i) {
|
||||
var thismaterial = new THREE.MeshLambertMaterial({color: 0xffffff, map: tex})
|
||||
var thismaterial = new THREE.MeshLambertMaterial({
|
||||
color: 0xffffff,
|
||||
map: tex,
|
||||
side: display_mode || Blockbench.entity_mode ? 2 : 0
|
||||
})
|
||||
|
||||
thismaterial.color.set(s.hex)
|
||||
emptyMaterials.push(thismaterial)
|
||||
@ -885,6 +892,9 @@ function resizeWindow(event) {
|
||||
if (Interface.data) {
|
||||
updateInterfacePanels()
|
||||
}
|
||||
if (Animator.open) {
|
||||
Timeline.updateSize()
|
||||
}
|
||||
if (!Toolbars || !Toolbars[Toolbox.selected.toolbar]) return;
|
||||
Toolbars[Toolbox.selected.toolbar].children.forEach(function(action) {
|
||||
if (action.type === 'numslider') {
|
||||
@ -1087,18 +1097,6 @@ function buildGrid() {
|
||||
setupGrid = true;
|
||||
}
|
||||
}
|
||||
function setOriginHelper(obj) {
|
||||
|
||||
rot_origin.position.x = obj.origin[0]
|
||||
rot_origin.position.y = obj.origin[1]
|
||||
rot_origin.position.z = obj.origin[2]
|
||||
|
||||
rot_origin.rotation.x = Math.degToRad( obj.rotation[0] )
|
||||
rot_origin.rotation.y = Math.degToRad( obj.rotation[1] )
|
||||
rot_origin.rotation.z = Math.degToRad( obj.rotation[2] )
|
||||
|
||||
scene.add(rot_origin)
|
||||
}
|
||||
function centerTransformer(offset) {
|
||||
if (selected.length === 0) return;
|
||||
var first_obj
|
||||
@ -1109,14 +1107,47 @@ function centerTransformer(offset) {
|
||||
var center = [0, 0, 0]
|
||||
var i = 0;
|
||||
selected.forEach(function(obj) {
|
||||
i = 0;
|
||||
while (i < 3) {
|
||||
center[i] += obj.from[i]
|
||||
center[i] += obj.to[i]
|
||||
i++;
|
||||
}
|
||||
if (!first_obj && obj.visibility) {
|
||||
first_obj = obj
|
||||
var m = obj.getMesh()
|
||||
if (obj.visibility && m) {
|
||||
var pos = new THREE.Vector3(
|
||||
obj.from[0] + obj.size(0)/2,
|
||||
obj.from[1] + obj.size(1)/2,
|
||||
obj.from[2] + obj.size(2)/2
|
||||
)
|
||||
if (!Blockbench.entity_mode) {
|
||||
|
||||
pos.x -= obj.origin[0]
|
||||
pos.y -= obj.origin[1]
|
||||
pos.z -= obj.origin[2]
|
||||
var r = m.getWorldQuaternion(new THREE.Quaternion())
|
||||
pos.applyQuaternion(r)
|
||||
pos.x += obj.origin[0]
|
||||
pos.y += obj.origin[1]
|
||||
pos.z += obj.origin[2]
|
||||
} else {
|
||||
TreeElements.forEach((obj) => {
|
||||
if (obj.type === 'group') {
|
||||
let mesh = obj.getMesh()
|
||||
if (obj.visibility && mesh) {
|
||||
mesh.updateMatrixWorld()
|
||||
}
|
||||
}
|
||||
})
|
||||
var r = m.getWorldQuaternion(new THREE.Quaternion())
|
||||
pos.applyQuaternion(r)
|
||||
pos.add(m.getWorldPosition(new THREE.Vector3()))
|
||||
pos.x += 8
|
||||
pos.y += 8
|
||||
pos.z += 8
|
||||
}
|
||||
|
||||
center[0] += pos.x
|
||||
center[1] += pos.y
|
||||
center[2] += pos.z
|
||||
|
||||
if (!first_obj) {
|
||||
first_obj = obj
|
||||
}
|
||||
}
|
||||
})
|
||||
if (!first_obj) {
|
||||
@ -1124,7 +1155,7 @@ function centerTransformer(offset) {
|
||||
}
|
||||
i = 0;
|
||||
while (i < 3) {
|
||||
center[i] = center[i] / (selected.length * 2)
|
||||
center[i] = center[i] / selected.length
|
||||
i++;
|
||||
}
|
||||
var vec = new THREE.Vector3(center[0], center[1], center[2])
|
||||
@ -1135,45 +1166,27 @@ function centerTransformer(offset) {
|
||||
if (Blockbench.entity_mode === false) {
|
||||
|
||||
//Blockmodel Mode
|
||||
|
||||
Transformer.rotation.set(0, 0, 0)
|
||||
var mesh = first_obj.getMesh()
|
||||
|
||||
if (selected.length === 1 && first_obj.rotation !== undefined) {
|
||||
vec.x -= first_obj.origin[0]
|
||||
vec.y -= first_obj.origin[1]
|
||||
vec.z -= first_obj.origin[2]
|
||||
if (mesh) {
|
||||
vec.applyEuler(mesh.rotation)
|
||||
}
|
||||
vec.x += first_obj.origin[0]
|
||||
vec.y += first_obj.origin[1]
|
||||
vec.z += first_obj.origin[2]
|
||||
}
|
||||
Transformer.position.copy(vec)
|
||||
|
||||
var mesh = first_obj.getMesh()
|
||||
if (mesh && Blockbench.globalMovement === false) {
|
||||
Transformer.rotation.copy(mesh.rotation)
|
||||
}
|
||||
|
||||
if (first_obj.rotation !== undefined && Blockbench.globalMovement === false) {
|
||||
//Transformer.rotation.x = Math.PI / (180 /first_obj.rotation[0])
|
||||
//Transformer.rotation.y = Math.PI / (180 /first_obj.rotation[1])
|
||||
//Transformer.rotation.z = Math.PI / (180 /first_obj.rotation[2])
|
||||
}
|
||||
} else {
|
||||
|
||||
//Entity Mode
|
||||
|
||||
var group;
|
||||
if (selected_group) {
|
||||
var group = selected_group
|
||||
group = selected_group
|
||||
} else {
|
||||
var i = 0;
|
||||
while (i < selected.length) {
|
||||
if (typeof selected[i].parent === 'object' &&
|
||||
selected[i].parent.type === 'group'
|
||||
) {
|
||||
var group = selected[i].parent
|
||||
group = selected[i].parent
|
||||
i = selected.length
|
||||
}
|
||||
i++;
|
||||
@ -1199,7 +1212,7 @@ function centerTransformer(offset) {
|
||||
}
|
||||
|
||||
if (offset !== undefined) {
|
||||
Transformer.position.add(offset)
|
||||
//Transformer.position.add(offset)
|
||||
}
|
||||
}
|
||||
//Display
|
||||
@ -1254,7 +1267,14 @@ class CanvasController {
|
||||
this.materials = {}
|
||||
this.meshes = {}
|
||||
this.bones = {}
|
||||
this.outlineMaterial = new THREE.LineBasicMaterial({linewidth: 2})
|
||||
this.outlineMaterial = new THREE.LineBasicMaterial({
|
||||
linewidth: 2,
|
||||
transparent: true
|
||||
})
|
||||
this.wireframeMaterial = new THREE.MeshBasicMaterial({
|
||||
color: 0x00FF00,
|
||||
wireframe: true
|
||||
});
|
||||
this.face_order = ['east', 'west', 'up', 'down', 'south', 'north']
|
||||
}
|
||||
raycast(event) {
|
||||
@ -1310,34 +1330,11 @@ class CanvasController {
|
||||
})
|
||||
updateSelection()
|
||||
}
|
||||
updateIndexes() {
|
||||
var lut = []
|
||||
elements.forEach(function(s, i) {
|
||||
var obj = s.getMesh();
|
||||
if (obj !== undefined) {
|
||||
obj.name = s.uuid;
|
||||
lut.push(obj)
|
||||
}
|
||||
})
|
||||
scene.children.forEach(function(s, i) {
|
||||
if (s.isElement === true) {
|
||||
if (lut.indexOf(s) === -1) {
|
||||
s.parent.remove(s)
|
||||
}
|
||||
}
|
||||
})
|
||||
updateSelection()
|
||||
}
|
||||
addCube(s) {
|
||||
//This does NOT remove old cubes
|
||||
|
||||
//Material
|
||||
if (Prop.wireframe === false) {
|
||||
var mesh = new THREE.Mesh(new THREE.BoxGeometry(1, 1, 1))
|
||||
Canvas.adaptObjectFaces(s, mesh)
|
||||
} else {
|
||||
var mesh = new THREE.LineSegments(new THREE.EdgesGeometry(new THREE.BoxGeometry(1, 1, 1)), wireframeMaterial);
|
||||
}
|
||||
var mesh = new THREE.Mesh(new THREE.BoxGeometry(1, 1, 1))
|
||||
Canvas.adaptObjectFaces(s, mesh)
|
||||
|
||||
Canvas.adaptObjectPosition(s, mesh)
|
||||
mesh.name = s.uuid;
|
||||
@ -1364,16 +1361,9 @@ class CanvasController {
|
||||
}
|
||||
}
|
||||
|
||||
if (Prop.wireframe === true) {
|
||||
var proxy_box = new THREE.BoxGeometry(1, 1, 1)
|
||||
setSize(proxy_box)
|
||||
proxy_box.computeBoundingSphere()
|
||||
mesh.geometry = new THREE.EdgesGeometry(proxy_box)
|
||||
mesh.vertices = proxy_box.vertices
|
||||
} else {
|
||||
setSize(mesh.geometry)
|
||||
mesh.geometry.computeBoundingSphere()
|
||||
}
|
||||
setSize(mesh.geometry)
|
||||
mesh.geometry.computeBoundingSphere()
|
||||
|
||||
mesh.scale.set(1, 1, 1)
|
||||
mesh.rotation.set(0, 0, 0)
|
||||
|
||||
@ -1388,11 +1378,13 @@ class CanvasController {
|
||||
itobj.rotation.forEach(function(n, i) {
|
||||
itmesh.rotation[getAxisLetter(i)] = Math.PI / (180 / n) * (i == 2 ? -1 : 1)
|
||||
})
|
||||
itmesh.updateMatrixWorld()
|
||||
}
|
||||
itmesh.fix_rotation = itmesh.rotation.clone()
|
||||
|
||||
if (itobj.type === 'group') {
|
||||
itmesh.position.fromArray(itobj.origin)
|
||||
itmesh.scale.x = itmesh.scale.y = itmesh.scale.z = 1
|
||||
}
|
||||
|
||||
if (typeof itobj.parent === 'object') {
|
||||
@ -1437,6 +1429,7 @@ class CanvasController {
|
||||
scene.add(mesh)
|
||||
}
|
||||
Canvas.buildOutline(obj)
|
||||
mesh.updateMatrixWorld()
|
||||
}
|
||||
updatePositions(leave_selection) {
|
||||
updateNslideValues()
|
||||
@ -1457,6 +1450,7 @@ class CanvasController {
|
||||
})
|
||||
if (leave_selection !== true) {
|
||||
updateSelection()
|
||||
updateSelection()
|
||||
}
|
||||
}
|
||||
updateAllPositions(leave_selection) {
|
||||
@ -1474,23 +1468,17 @@ class CanvasController {
|
||||
elements.forEach(function(s) {
|
||||
var mesh = s.getMesh()
|
||||
if (s.visibility == true) {
|
||||
if (mesh && !mesh.isLine == Prop.wireframe) {
|
||||
if (mesh.parent) {
|
||||
mesh.parent.remove(mesh)
|
||||
}
|
||||
mesh = undefined
|
||||
}
|
||||
if (!mesh) {
|
||||
Canvas.addCube(s)
|
||||
} else if (!scene.children.includes(mesh)) {
|
||||
scene.add(mesh)
|
||||
Canvas.adaptObjectPosition(s, mesh)
|
||||
Canvas.adaptObjectFaces(s, mesh)
|
||||
if (!Prop.wireframe) {
|
||||
Canvas.adaptObjectFaces(s, mesh)
|
||||
Canvas.updateUV(s)
|
||||
}
|
||||
}
|
||||
} else if (mesh.parent) {
|
||||
} else if (mesh && mesh.parent) {
|
||||
mesh.parent.remove(mesh)
|
||||
}
|
||||
})
|
||||
@ -1503,51 +1491,68 @@ class CanvasController {
|
||||
mat.side = display_mode || Blockbench.entity_mode ? 2 : 0
|
||||
}
|
||||
})
|
||||
emptyMaterials.forEach(function(mat) {
|
||||
mat.side = display_mode || Blockbench.entity_mode ? 2 : 0
|
||||
})
|
||||
}
|
||||
adaptObjectFaces(obj, mesh) {
|
||||
if (Prop.wireframe === true) return;
|
||||
if (!mesh) mesh = obj.getMesh()
|
||||
var materials = []
|
||||
if (!Prop.wireframe) {
|
||||
var materials = []
|
||||
this.face_order.forEach(function(face) {
|
||||
|
||||
this.face_order.forEach(function(face) {
|
||||
if (obj.faces.hasOwnProperty(face)) {
|
||||
|
||||
if (obj.faces.hasOwnProperty(face)) {
|
||||
|
||||
var tex = getTextureById(obj.faces[face].texture)
|
||||
if (typeof tex !== 'object') {
|
||||
materials.push(emptyMaterials[obj.color])
|
||||
} else {
|
||||
materials.push(Canvas.materials[tex.uuid])
|
||||
var tex = getTextureById(obj.faces[face].texture)
|
||||
if (typeof tex !== 'object') {
|
||||
materials.push(emptyMaterials[obj.color])
|
||||
} else {
|
||||
materials.push(Canvas.materials[tex.uuid])
|
||||
}
|
||||
}
|
||||
})
|
||||
mesh.material = materials
|
||||
} else {
|
||||
mesh.material = Canvas.wireframeMaterial
|
||||
}
|
||||
/*
|
||||
if (!mesh.wireframe == Prop.wireframe) {
|
||||
if (Prop.wireframe) {
|
||||
mesh.wireframe = Canvas.getOutlineMesh(mesh);
|
||||
mesh.add(mesh.wireframe);
|
||||
} else {
|
||||
mesh.remove(mesh.wireframe);
|
||||
delete mesh.wireframe;
|
||||
}
|
||||
})
|
||||
mesh.material = materials
|
||||
}*/
|
||||
}
|
||||
updateSelectedFaces() {
|
||||
if (Prop.wireframe === true) return;
|
||||
selected.forEach(function(obj) {
|
||||
if (obj.visibility == true) {
|
||||
Canvas.adaptObjectFaces(obj)
|
||||
Canvas.updateUV(obj)
|
||||
if (!Prop.wireframe) {
|
||||
Canvas.updateUV(obj)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
updateAllFaces(texture) {
|
||||
if (Prop.wireframe === true) return;
|
||||
elements.forEach(function(s, i) {
|
||||
if (s.visibility == true) {
|
||||
elements.forEach(function(obj) {
|
||||
if (obj.visibility == true) {
|
||||
var used = true;
|
||||
if (texture) {
|
||||
used = false;
|
||||
for (var face in s.faces) {
|
||||
if (s.faces[face] && s.faces[face].texture === '#'+texture.id) {
|
||||
for (var face in obj.faces) {
|
||||
if (obj.faces[face] && obj.faces[face].texture === '#'+texture.id) {
|
||||
used = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (used === true) {
|
||||
Canvas.adaptObjectFaces(s)
|
||||
Canvas.updateUV(s)
|
||||
Canvas.adaptObjectFaces(obj)
|
||||
if (!Prop.wireframe) {
|
||||
Canvas.updateUV(obj)
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
@ -1688,18 +1693,45 @@ class CanvasController {
|
||||
mesh.geometry.elementsNeedUpdate = true;
|
||||
return mesh.geometry
|
||||
}
|
||||
getOutlineMesh(mesh) {
|
||||
var vs = mesh.geometry.vertices
|
||||
var geometry = new THREE.Geometry()
|
||||
geometry.vertices = [
|
||||
vs[2],
|
||||
vs[3],
|
||||
vs[6],
|
||||
vs[7],
|
||||
vs[2],
|
||||
vs[0],
|
||||
vs[1],
|
||||
vs[4],
|
||||
vs[5],
|
||||
vs[0],//1
|
||||
vs[5],
|
||||
vs[7],//2
|
||||
vs[6],
|
||||
vs[4],//3
|
||||
vs[1],
|
||||
vs[3]
|
||||
]
|
||||
return new THREE.Line(geometry, Canvas.outlineMaterial)
|
||||
}
|
||||
buildOutline(obj) {
|
||||
if (obj.visibility == false) return;
|
||||
var mesh = obj.getMesh()
|
||||
if (mesh === undefined) return;
|
||||
|
||||
if (mesh.outline) {
|
||||
mesh.outline.geometry.verticesNeedUpdate = true;
|
||||
return;
|
||||
}
|
||||
mesh.remove(mesh.outline)
|
||||
|
||||
var geo = new THREE.EdgesGeometry(mesh.geometry);
|
||||
var wireframe = new THREE.LineSegments(geo, Canvas.outlineMaterial)
|
||||
wireframe.name = obj.uuid+'_outline'
|
||||
wireframe.visible = obj.selected
|
||||
mesh.outline = wireframe
|
||||
mesh.add(wireframe)
|
||||
var line = Canvas.getOutlineMesh(mesh)
|
||||
line.name = obj.uuid+'_outline'
|
||||
line.visible = obj.selected
|
||||
mesh.outline = line
|
||||
mesh.add(line)
|
||||
}
|
||||
outlineObjects(arr) {
|
||||
arr.forEach(function(obj) {
|
||||
@ -1707,6 +1739,16 @@ class CanvasController {
|
||||
var mesh = obj.getMesh()
|
||||
if (mesh === undefined) return;
|
||||
|
||||
var line = Canvas.getOutlineMesh(mesh)
|
||||
|
||||
mesh.getWorldPosition(line.position)
|
||||
line.position.sub(scene.position)
|
||||
line.rotation.setFromQuaternion(mesh.getWorldQuaternion(new THREE.Quaternion()))
|
||||
line.scale.copy(mesh.scale)
|
||||
|
||||
line.name = obj.uuid+'_ghost_outline'
|
||||
outlines.add(line)
|
||||
/*
|
||||
var geo = new THREE.EdgesGeometry(mesh.geometry);
|
||||
var wireframe = new THREE.LineSegments(geo, Canvas.outlineMaterial)
|
||||
|
||||
@ -1717,7 +1759,160 @@ class CanvasController {
|
||||
|
||||
wireframe.name = obj.uuid+'_ghost_outline'
|
||||
outlines.add(wireframe)
|
||||
*/
|
||||
})
|
||||
}
|
||||
}
|
||||
var Canvas = new CanvasController()
|
||||
|
||||
BARS.defineActions(function() {
|
||||
new Action({
|
||||
id: 'toggle_wireframe',
|
||||
icon: 'border_clear',
|
||||
category: 'view',
|
||||
keybind: new Keybind({key: 90}),
|
||||
condition: () => Toolbox && Toolbox.selected && Toolbox.selected.allowWireframe,
|
||||
click: function () {
|
||||
Prop.wireframe = !Prop.wireframe
|
||||
Canvas.updateAll()
|
||||
}
|
||||
})
|
||||
|
||||
new Action({
|
||||
id: 'screenshot_model',
|
||||
icon: 'fa-cubes',
|
||||
category: 'view',
|
||||
keybind: new Keybind({key: 80, ctrl: true}),
|
||||
click: function () {quad_previews.current.screenshot()}
|
||||
})
|
||||
new Action({
|
||||
id: 'screenshot_app',
|
||||
icon: 'icon-bb_interface',
|
||||
category: 'view',
|
||||
click: function () {Screencam.fullScreen()}
|
||||
})
|
||||
new Action({
|
||||
id: 'toggle_quad_view',
|
||||
icon: 'widgets',
|
||||
category: 'view',
|
||||
keybind: new Keybind({key: 9}),
|
||||
click: function () {
|
||||
main_preview.toggleFullscreen()
|
||||
}
|
||||
})
|
||||
|
||||
//{icon: getBtn(0, true), name: 'menu.preview.perspective.normal', click: function(preview) {preview.setNormalCamera()}},
|
||||
//{icon: getBtn(0), name: 'direction.top', color: 'y', (0)}},
|
||||
//{icon: getBtn(1), name: 'direction.bottom', color: 'y', (1)}},
|
||||
//{icon: getBtn(2), name: 'direction.south', color: 'z', (2)}},
|
||||
//{icon: getBtn(3), name: 'direction.north', color: 'z', (3)}},
|
||||
//{icon: getBtn(4), name: 'direction.east', color: 'x', (4)}},
|
||||
//{icon: getBtn(5), name: 'direction.west', color: 'x', (5)}}
|
||||
/*
|
||||
reset_view: {shift: false, ctrl: false, alt: false, code: 96, name: 'Reset View', char: 'NUMPAD 0'},
|
||||
view_normal: {shift: false, ctrl: false, alt: false, code: 101, name: 'Normal View', char: 'NUMPAD 5'},
|
||||
view_0: {shift: false, ctrl: false, alt: false, code: 104, name: 'Top View', char: 'NUMPAD 8'},
|
||||
view_1: {shift: false, ctrl: false, alt: false, code: 98, name: 'Bottom View', char: 'NUMPAD 2'},
|
||||
view_2: {shift: false, ctrl: false, alt: false, code: 100, name: 'South View', char: 'NUMPAD 4'},
|
||||
view_3: {shift: false, ctrl: false, alt: false, code: 102, name: 'North View', char: 'NUMPAD 6'},
|
||||
view_4: {shift: false, ctrl: false, alt: false, code: 103, name: 'East View', char: 'NUMPAD 7'},
|
||||
view_5: {shift: false, ctrl: false, alt: false, code: 105, name: 'West View', char: 'NUMPAD 9'}
|
||||
*/
|
||||
|
||||
new Action({
|
||||
id: 'camera_reset',
|
||||
name: 'direction.top',
|
||||
description: 'direction.top',
|
||||
icon: 'videocam',
|
||||
category: 'view',
|
||||
keybind: new Keybind({key: 96}),
|
||||
click: function () {
|
||||
quad_previews.current.resetCamera()
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'camera_normal',
|
||||
name: 'menu.preview.perspective.normal',
|
||||
description: 'menu.preview.perspective.normal',
|
||||
icon: 'videocam',
|
||||
category: 'view',
|
||||
keybind: new Keybind({key: 101}),
|
||||
click: function () {
|
||||
quad_previews.current.setNormalCamera()
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
new Action({
|
||||
id: 'camera_top',
|
||||
name: 'direction.top',
|
||||
description: 'direction.top',
|
||||
icon: 'videocam',
|
||||
color: 'y',
|
||||
category: 'view',
|
||||
keybind: new Keybind({key: 104}),
|
||||
click: function () {
|
||||
quad_previews.current.setOrthographicCamera(0)
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'camera_bottom',
|
||||
name: 'direction.bottom',
|
||||
description: 'direction.bottom',
|
||||
icon: 'videocam',
|
||||
color: 'y',
|
||||
category: 'view',
|
||||
keybind: new Keybind({key: 98}),
|
||||
click: function () {
|
||||
quad_previews.current.setOrthographicCamera(1)
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'camera_south',
|
||||
name: 'direction.south',
|
||||
description: 'direction.south',
|
||||
icon: 'videocam',
|
||||
color: 'z',
|
||||
category: 'view',
|
||||
keybind: new Keybind({key: 100}),
|
||||
click: function () {
|
||||
quad_previews.current.setOrthographicCamera(2)
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'camera_north',
|
||||
name: 'direction.north',
|
||||
description: 'direction.north',
|
||||
icon: 'videocam',
|
||||
color: 'z',
|
||||
category: 'view',
|
||||
keybind: new Keybind({key: 102}),
|
||||
click: function () {
|
||||
quad_previews.current.setOrthographicCamera(3)
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'camera_east',
|
||||
name: 'direction.east',
|
||||
description: 'direction.east',
|
||||
icon: 'videocam',
|
||||
color: 'x',
|
||||
category: 'view',
|
||||
keybind: new Keybind({key: 103}),
|
||||
click: function () {
|
||||
quad_previews.current.setOrthographicCamera(4)
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'camera_west',
|
||||
name: 'direction.west',
|
||||
description: 'direction.west',
|
||||
icon: 'videocam',
|
||||
color: 'x',
|
||||
category: 'view',
|
||||
keybind: new Keybind({key: 105}),
|
||||
click: function () {
|
||||
quad_previews.current.setOrthographicCamera(5)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
@ -3,18 +3,6 @@ var settings, settings_old, display_presets;
|
||||
settingSetup()
|
||||
displayPresetsSetup()
|
||||
|
||||
/*Settings
|
||||
toggle
|
||||
number
|
||||
text
|
||||
select (language)
|
||||
click (displayskin, defaultrp)
|
||||
|
||||
|
||||
image editor (option, path)
|
||||
|
||||
*/
|
||||
|
||||
function settingSetup() {
|
||||
settings_old = {}
|
||||
settings = {
|
||||
@ -280,6 +268,4 @@ function toggleSetting(setting) {
|
||||
saveSettings()
|
||||
}
|
||||
function toggleWireframe() {
|
||||
Prop.wireframe = !Prop.wireframe
|
||||
Canvas.updateAll()
|
||||
}
|
||||
}
|
||||
|
@ -170,7 +170,8 @@ class Texture {
|
||||
color: 0xffffff,
|
||||
map: tex,
|
||||
transparent: settings.transparency.value,
|
||||
side: display_mode || Blockbench.entity_mode ? 2 : 0
|
||||
side: display_mode || Blockbench.entity_mode ? 2 : 0,
|
||||
alphaTest: 0.2
|
||||
});
|
||||
Canvas.materials[this.uuid] = mat
|
||||
return this;
|
||||
@ -180,7 +181,10 @@ class Texture {
|
||||
this.load()
|
||||
return this;
|
||||
}
|
||||
|
||||
if (link.substr(0, 22) === 'data:image/png;base64,') {
|
||||
this.fromDataURL(link)
|
||||
return this;
|
||||
}
|
||||
var spaces = link.split(':')
|
||||
if (spaces.length > 1) {
|
||||
this.namespace = spaces[0]
|
||||
@ -546,7 +550,7 @@ class Texture {
|
||||
if (isApp) {
|
||||
//overwrite path
|
||||
if (scope.mode === 'link') {
|
||||
var image = nativeImage.createFromPath(scope.source).toPNG()
|
||||
var image = nativeImage.createFromPath(scope.source.replace(/\?\d+$/, '')).toPNG()
|
||||
} else {
|
||||
var image = nativeImage.createFromDataURL(scope.source).toPNG()
|
||||
}
|
||||
@ -679,7 +683,7 @@ class Texture {
|
||||
},
|
||||
{
|
||||
icon: 'delete',
|
||||
name: 'menu.texture.delete',
|
||||
name: 'generic.delete',
|
||||
click: function(texture) {
|
||||
Undo.initEdit({textures: [texture], bitmap: true})
|
||||
texture.remove()
|
||||
@ -849,4 +853,68 @@ function getTexturesById(id) {
|
||||
if (id === undefined) return;
|
||||
id = id.split('#').join('');
|
||||
return $.grep(textures, function(e) {return e.id == id});
|
||||
}
|
||||
}
|
||||
|
||||
BARS.defineActions(function() {
|
||||
new Action({
|
||||
id: 'import_texture',
|
||||
icon: 'library_add',
|
||||
category: 'textures',
|
||||
keybind: new Keybind({key: 84, ctrl: true}),
|
||||
click: function () {
|
||||
openTexture()
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'create_texture',
|
||||
icon: 'icon-create_bitmap',
|
||||
category: 'textures',
|
||||
keybind: new Keybind({key: 84, ctrl: true, shift: true}),
|
||||
click: function () {
|
||||
Painter.addBitmapDialog()
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'reload_textures',
|
||||
icon: 'refresh',
|
||||
category: 'textures',
|
||||
keybind: new Keybind({key: 82, ctrl: true}),
|
||||
condition: isApp,
|
||||
click: reloadTextures
|
||||
})
|
||||
new Action({
|
||||
id: 'save_textures',
|
||||
icon: 'save',
|
||||
category: 'textures',
|
||||
keybind: new Keybind({key: 83, ctrl: true, alt: true}),
|
||||
click: function () {saveTextures()}
|
||||
})
|
||||
new Action({
|
||||
id: 'change_textures_folder',
|
||||
icon: 'fa-hdd-o',
|
||||
category: 'textures',
|
||||
condition: () => textures.length > 0,
|
||||
click: function () {changeTexturesFolder()}
|
||||
})
|
||||
new Action({
|
||||
id: 'animated_textures',
|
||||
icon: 'play_arrow',
|
||||
category: 'textures',
|
||||
condition: function() {
|
||||
if (Blockbench.entity_mode) return false;
|
||||
var i = 0;
|
||||
var show = false;
|
||||
while (i < textures.length) {
|
||||
if (textures[i].frameCount > 1) {
|
||||
show = true;
|
||||
i = textures.length
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return show;
|
||||
},
|
||||
click: function () {
|
||||
TextureAnimator.toggle()
|
||||
}
|
||||
})
|
||||
})
|
594
js/transform.js
594
js/transform.js
@ -201,7 +201,7 @@ function scaleCubeNegative(obj, val, axis) {
|
||||
obj.mapAutoUV()
|
||||
}
|
||||
function moveCubesRelative(difference, index, event) { //Multiple
|
||||
if (!quad_previews.current) {
|
||||
if (!quad_previews.current || !selected.length) {
|
||||
return;
|
||||
}
|
||||
Undo.initEdit({cubes: selected})
|
||||
@ -243,6 +243,7 @@ function moveCubesRelative(difference, index, event) { //Multiple
|
||||
}
|
||||
//Rotate
|
||||
function rotateSelected(axis, steps) {
|
||||
if (!selected.length) return;
|
||||
Undo.initEdit({cubes: selected});
|
||||
if (!steps) steps = 1
|
||||
var origin = [8, 8, 8]
|
||||
@ -261,6 +262,7 @@ function rotateSelected(axis, steps) {
|
||||
}
|
||||
//Mirror
|
||||
function mirrorSelected(axis) {
|
||||
if (!selected.length) return;
|
||||
Undo.initEdit({cubes: selected})
|
||||
var center = 8
|
||||
if (selected_group && Blockbench.entity_mode) {
|
||||
@ -363,6 +365,7 @@ function centerCubesAll(axis) {
|
||||
Canvas.updatePositions()
|
||||
}
|
||||
function centerCubes(axis, update) {
|
||||
if (!selected.length) return;
|
||||
var average = 0;
|
||||
selected.forEach(function(obj) {
|
||||
average += obj.from[axis]
|
||||
@ -381,3 +384,592 @@ function centerCubes(axis, update) {
|
||||
Canvas.updatePositions()
|
||||
}
|
||||
}
|
||||
|
||||
BARS.defineActions(function() {
|
||||
function moveOnAxis(value, fixed, axis) {
|
||||
selected.forEach(function(obj, i) {
|
||||
var number = value
|
||||
if (fixed) {
|
||||
number -= obj.from[axis]
|
||||
}
|
||||
number = limitToBox(obj.to [axis] + number) - obj.to [axis];
|
||||
number = limitToBox(obj.from[axis] + number) - obj.from[axis];
|
||||
obj.from[axis] += number
|
||||
obj.to[axis] += number
|
||||
obj.mapAutoUV()
|
||||
})
|
||||
Canvas.updatePositions()
|
||||
}
|
||||
new NumSlider({
|
||||
id: 'slider_pos_x',
|
||||
condition: function() {return selected.length},
|
||||
get: function() {
|
||||
return selected[0].from[0]
|
||||
},
|
||||
change: function(value, fixed) {
|
||||
moveOnAxis(value, fixed, 0)
|
||||
},
|
||||
onBefore: function() {
|
||||
Undo.initEdit({cubes: selected})
|
||||
},
|
||||
onAfter: function() {
|
||||
Undo.finishEdit('move')
|
||||
}
|
||||
})
|
||||
new NumSlider({
|
||||
id: 'slider_pos_y',
|
||||
condition: function() {return selected.length},
|
||||
get: function() {
|
||||
return selected[0].from[1]
|
||||
},
|
||||
change: function(value, fixed) {
|
||||
moveOnAxis(value, fixed, 1)
|
||||
},
|
||||
onBefore: function() {
|
||||
Undo.initEdit({cubes: selected})
|
||||
},
|
||||
onAfter: function() {
|
||||
Undo.finishEdit('move')
|
||||
}
|
||||
})
|
||||
new NumSlider({
|
||||
id: 'slider_pos_z',
|
||||
condition: function() {return selected.length},
|
||||
get: function() {
|
||||
return selected[0].from[2]
|
||||
},
|
||||
change: function(value, fixed) {
|
||||
moveOnAxis(value, fixed, 2)
|
||||
},
|
||||
onBefore: function() {
|
||||
Undo.initEdit({cubes: selected})
|
||||
},
|
||||
onAfter: function() {
|
||||
Undo.finishEdit('move')
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
function scaleOnAxis(value, fixed, axis) {
|
||||
selected.forEach(function(obj, i) {
|
||||
var diff = value
|
||||
if (fixed) {
|
||||
diff -= obj.size(axis)
|
||||
}
|
||||
obj.to[axis] = limitToBox(obj.to[axis] + diff)
|
||||
obj.mapAutoUV()
|
||||
})
|
||||
Canvas.updatePositions()
|
||||
}
|
||||
new NumSlider({
|
||||
id: 'slider_size_x',
|
||||
condition: function() {return selected.length},
|
||||
get: function() {
|
||||
return selected[0].to[0] - selected[0].from[0]
|
||||
},
|
||||
change: function(value, fixed) {
|
||||
scaleOnAxis(value, fixed, 0)
|
||||
},
|
||||
onBefore: function() {
|
||||
Undo.initEdit({cubes: selected})
|
||||
},
|
||||
onAfter: function() {
|
||||
Undo.finishEdit('resize')
|
||||
}
|
||||
})
|
||||
new NumSlider({
|
||||
id: 'slider_size_y',
|
||||
condition: function() {return selected.length},
|
||||
get: function() {
|
||||
return selected[0].to[1] - selected[0].from[1]
|
||||
},
|
||||
change: function(value, fixed) {
|
||||
scaleOnAxis(value, fixed, 1)
|
||||
},
|
||||
onBefore: function() {
|
||||
Undo.initEdit({cubes: selected})
|
||||
},
|
||||
onAfter: function() {
|
||||
Undo.finishEdit('resize')
|
||||
}
|
||||
})
|
||||
new NumSlider({
|
||||
id: 'slider_size_z',
|
||||
condition: function() {return selected.length},
|
||||
get: function() {
|
||||
return selected[0].to[2] - selected[0].from[2]
|
||||
},
|
||||
change: function(value, fixed) {
|
||||
scaleOnAxis(value, fixed, 2)
|
||||
},
|
||||
onBefore: function() {
|
||||
Undo.initEdit({cubes: selected})
|
||||
},
|
||||
onAfter: function() {
|
||||
Undo.finishEdit('resize')
|
||||
}
|
||||
})
|
||||
|
||||
new NumSlider({
|
||||
id: 'slider_inflate',
|
||||
condition: function() {return Blockbench.entity_mode && selected.length},
|
||||
get: function() {
|
||||
return selected[0].inflate
|
||||
},
|
||||
change: function(value, fixed) {
|
||||
selected.forEach(function(obj, i) {
|
||||
var diff = value
|
||||
if (fixed) {
|
||||
diff -= obj.inflate
|
||||
}
|
||||
obj.inflate = obj.inflate + diff
|
||||
})
|
||||
Canvas.updatePositions()
|
||||
},
|
||||
onBefore: function() {
|
||||
Undo.initEdit({cubes: selected})
|
||||
},
|
||||
onAfter: function() {
|
||||
Undo.finishEdit('inflate')
|
||||
}
|
||||
})
|
||||
|
||||
function rotateOnAxis(value, fixed, axis) {
|
||||
if (Blockbench.entity_mode) {
|
||||
if (!selected_group) return;
|
||||
if (!fixed) {
|
||||
value = value + selected_group.rotation[axis]
|
||||
}
|
||||
value = value % 360
|
||||
selected_group.rotation[axis] = value
|
||||
Canvas.updatePositions()
|
||||
return;
|
||||
}
|
||||
//Warning
|
||||
if (settings.limited_rotation.value && settings.dialog_rotation_limit.value) {
|
||||
var i = 0;
|
||||
while (i < selected.length) {
|
||||
if (selected[i].rotation[(axis+1)%3] ||
|
||||
selected[i].rotation[(axis+2)%3]
|
||||
) {
|
||||
i = Infinity
|
||||
|
||||
Blockbench.showMessageBox({
|
||||
title: tl('message.rotation_limit.title'),
|
||||
icon: 'rotate_right',
|
||||
message: tl('message.rotation_limit.message'),
|
||||
buttons: [tl('dialog.ok'), tl('dialog.dontshowagain')]
|
||||
}, function(r) {
|
||||
if (r === 1) {
|
||||
settings.dialog_rotation_limit.value = false
|
||||
saveSettings()
|
||||
}
|
||||
})
|
||||
return;
|
||||
//Gotta stop the numslider here
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
var axis_letter = getAxisLetter(axis)
|
||||
var origin = selected[0].origin
|
||||
selected.forEach(function(obj, i) {
|
||||
if (!obj.rotation.equals([0,0,0])) {
|
||||
origin = obj.origin
|
||||
}
|
||||
})
|
||||
selected.forEach(function(obj, i) {
|
||||
if (obj.rotation.equals([0,0,0])) {
|
||||
obj.origin = origin
|
||||
}
|
||||
var obj_val = value;
|
||||
if (!fixed) {
|
||||
obj_val += obj.rotation[axis]
|
||||
}
|
||||
obj_val = obj_val % 360
|
||||
if (settings.limited_rotation.value) {
|
||||
//Limit To 1 Axis
|
||||
obj.rotation[(axis+1)%3] = 0
|
||||
obj.rotation[(axis+2)%3] = 0
|
||||
//Limit Angle
|
||||
obj_val = Math.round(obj_val/22.5)*22.5
|
||||
if (obj_val > 45 || obj_val < -45) {
|
||||
|
||||
let f = obj_val > 45
|
||||
obj.roll(axis, f!=(axis==1) ? 1 : 3)
|
||||
obj_val = f ? -22.5 : 22.5;
|
||||
}
|
||||
}
|
||||
obj.rotation[axis] = obj_val
|
||||
obj.rotation_axis = axis_letter
|
||||
})
|
||||
Canvas.updatePositions()
|
||||
}
|
||||
function getRotationInterval(event) {
|
||||
if (settings.limited_rotation.value && !Blockbench.entity_mode) {
|
||||
return 22.5;
|
||||
} else if (event.shiftKey && event.ctrlKey) {
|
||||
return 0.25;
|
||||
} else if (event.shiftKey) {
|
||||
return 45;
|
||||
} else if (event.ctrlKey) {
|
||||
return 1;
|
||||
} else {
|
||||
return 5;
|
||||
}
|
||||
}
|
||||
new NumSlider({
|
||||
id: 'slider_rotation_x',
|
||||
condition: function() {return !!(Blockbench.entity_mode ? selected_group : selected.length)},
|
||||
get: function() {
|
||||
var obj = Blockbench.entity_mode ? selected_group : selected[0]
|
||||
return obj ? obj.rotation[0] : ''
|
||||
},
|
||||
change: function(value, fixed) {
|
||||
rotateOnAxis(value, fixed, 0)
|
||||
},
|
||||
onBefore: function() {
|
||||
Undo.initEdit({cubes: selected, group: selected_group})
|
||||
},
|
||||
onAfter: function() {
|
||||
Undo.finishEdit('rotate')
|
||||
},
|
||||
getInterval: getRotationInterval
|
||||
})
|
||||
new NumSlider({
|
||||
id: 'slider_rotation_y',
|
||||
condition: function() {return !!(Blockbench.entity_mode ? selected_group : selected.length)},
|
||||
get: function() {
|
||||
var obj = Blockbench.entity_mode ? selected_group : selected[0]
|
||||
return obj ? obj.rotation[1] : ''
|
||||
},
|
||||
change: function(value, fixed) {
|
||||
rotateOnAxis(value, fixed, 1)
|
||||
},
|
||||
onBefore: function() {
|
||||
Undo.initEdit({cubes: selected, group: selected_group})
|
||||
},
|
||||
onAfter: function() {
|
||||
Undo.finishEdit('rotate')
|
||||
},
|
||||
getInterval: getRotationInterval
|
||||
})
|
||||
new NumSlider({
|
||||
id: 'slider_rotation_z',
|
||||
condition: function() {return !!(Blockbench.entity_mode ? selected_group : selected.length)},
|
||||
get: function() {
|
||||
var obj = Blockbench.entity_mode ? selected_group : selected[0]
|
||||
return obj ? obj.rotation[2] : ''
|
||||
},
|
||||
change: function(value, fixed) {
|
||||
rotateOnAxis(value, fixed, 2)
|
||||
},
|
||||
onBefore: function() {
|
||||
Undo.initEdit({cubes: selected, group: selected_group})
|
||||
},
|
||||
onAfter: function() {
|
||||
Undo.finishEdit('rotate')
|
||||
},
|
||||
getInterval: getRotationInterval
|
||||
})
|
||||
|
||||
|
||||
function moveOriginOnAxis(value, fixed, axis) {
|
||||
if (selected_group) {
|
||||
var diff = value
|
||||
if (fixed) {
|
||||
diff -= selected_group.origin[axis]
|
||||
}
|
||||
selected_group.origin[axis] += diff
|
||||
Canvas.updatePositions()
|
||||
return;
|
||||
}
|
||||
selected.forEach(function(obj, i) {
|
||||
var diff = value
|
||||
if (fixed) {
|
||||
diff -= obj.origin[axis]
|
||||
}
|
||||
obj.origin[axis] += diff
|
||||
})
|
||||
Canvas.updatePositions()
|
||||
}
|
||||
new NumSlider({
|
||||
id: 'slider_origin_x',
|
||||
condition: function() {return !!(Blockbench.entity_mode ? selected_group : selected.length)},
|
||||
get: function() {
|
||||
var obj = Blockbench.entity_mode ? selected_group : selected[0]
|
||||
return obj ? obj.origin[0] : ''
|
||||
},
|
||||
change: function(value, fixed) {
|
||||
moveOriginOnAxis(value, fixed, 0)
|
||||
},
|
||||
onBefore: function() {
|
||||
Undo.initEdit({cubes: selected, group: selected_group})
|
||||
},
|
||||
onAfter: function() {
|
||||
Undo.finishEdit('origin')
|
||||
}
|
||||
})
|
||||
new NumSlider({
|
||||
id: 'slider_origin_y',
|
||||
condition: function() {return !!(Blockbench.entity_mode ? selected_group : selected.length)},
|
||||
get: function() {
|
||||
var obj = Blockbench.entity_mode ? selected_group : selected[0]
|
||||
return obj ? obj.origin[1] : ''
|
||||
},
|
||||
change: function(value, fixed) {
|
||||
moveOriginOnAxis(value, fixed, 1)
|
||||
},
|
||||
onBefore: function() {
|
||||
Undo.initEdit({cubes: selected, group: selected_group})
|
||||
},
|
||||
onAfter: function() {
|
||||
Undo.finishEdit('origin')
|
||||
}
|
||||
})
|
||||
new NumSlider({
|
||||
id: 'slider_origin_z',
|
||||
condition: function() {return !!(Blockbench.entity_mode ? selected_group : selected.length)},
|
||||
get: function() {
|
||||
var obj = Blockbench.entity_mode ? selected_group : selected[0]
|
||||
return obj ? obj.origin[2] : ''
|
||||
},
|
||||
change: function(value, fixed) {
|
||||
moveOriginOnAxis(value, fixed, 2)
|
||||
},
|
||||
onBefore: function() {
|
||||
Undo.initEdit({cubes: selected, group: selected_group})
|
||||
},
|
||||
onAfter: function() {
|
||||
Undo.finishEdit('origin')
|
||||
}
|
||||
})
|
||||
|
||||
new Action({
|
||||
id: 'scale',
|
||||
icon: 'settings_overscan',
|
||||
category: 'transform',
|
||||
click: function () {
|
||||
$('#model_scale_range').val(1)
|
||||
$('#model_scale_label').val(1)
|
||||
|
||||
Undo.initEdit({cubes: selected})
|
||||
|
||||
selected.forEach(function(obj) {
|
||||
obj.before = {
|
||||
from: obj.from.slice(),
|
||||
to: obj.to.slice(),
|
||||
origin: obj.origin.slice()
|
||||
}
|
||||
})
|
||||
showDialog('scaling')
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'rotate_x_cw',
|
||||
icon: 'rotate_right',
|
||||
color: 'x',
|
||||
category: 'transform',
|
||||
click: function () {
|
||||
rotateSelected(0, 1);
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'rotate_x_ccw',
|
||||
icon: 'rotate_left',
|
||||
color: 'x',
|
||||
category: 'transform',
|
||||
click: function () {
|
||||
rotateSelected(0, 3);
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'rotate_y_cw',
|
||||
icon: 'rotate_right',
|
||||
color: 'y',
|
||||
category: 'transform',
|
||||
click: function () {
|
||||
rotateSelected(1, 1);
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'rotate_y_ccw',
|
||||
icon: 'rotate_left',
|
||||
color: 'y',
|
||||
category: 'transform',
|
||||
click: function () {
|
||||
rotateSelected(1, 3);
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'rotate_z_cw',
|
||||
icon: 'rotate_right',
|
||||
color: 'z',
|
||||
category: 'transform',
|
||||
click: function () {
|
||||
rotateSelected(2, 1);
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'rotate_z_ccw',
|
||||
icon: 'rotate_left',
|
||||
color: 'z',
|
||||
category: 'transform',
|
||||
click: function () {
|
||||
rotateSelected(2, 3);
|
||||
}
|
||||
})
|
||||
|
||||
new Action({
|
||||
id: 'flip_x',
|
||||
icon: 'icon-mirror_x',
|
||||
color: 'x',
|
||||
category: 'transform',
|
||||
click: function () {
|
||||
mirrorSelected(0);
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'flip_y',
|
||||
icon: 'icon-mirror_y',
|
||||
color: 'y',
|
||||
category: 'transform',
|
||||
click: function () {
|
||||
mirrorSelected(1);
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'flip_z',
|
||||
icon: 'icon-mirror_z',
|
||||
color: 'z',
|
||||
category: 'transform',
|
||||
click: function () {
|
||||
mirrorSelected(2);
|
||||
}
|
||||
})
|
||||
|
||||
new Action({
|
||||
id: 'center_x',
|
||||
icon: 'vertical_align_center',
|
||||
color: 'x',
|
||||
category: 'transform',
|
||||
click: function () {
|
||||
Undo.initEdit({cubes: selected});
|
||||
centerCubes(0);
|
||||
Undo.finishEdit('center')
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'center_y',
|
||||
icon: 'vertical_align_center',
|
||||
color: 'y',
|
||||
category: 'transform',
|
||||
click: function () {
|
||||
Undo.initEdit({cubes: selected});
|
||||
centerCubes(1);
|
||||
Undo.finishEdit('center')
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'center_z',
|
||||
icon: 'vertical_align_center',
|
||||
color: 'z',
|
||||
category: 'transform',
|
||||
click: function () {
|
||||
Undo.initEdit({cubes: selected});
|
||||
centerCubes(2);
|
||||
Undo.finishEdit('center')
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'center_all',
|
||||
icon: 'filter_center_focus',
|
||||
category: 'transform',
|
||||
click: function () {
|
||||
Undo.initEdit({cubes: selected});
|
||||
centerCubesAll();
|
||||
Undo.finishEdit('center')
|
||||
}
|
||||
})
|
||||
|
||||
new Action({
|
||||
id: 'toggle_visibility',
|
||||
icon: 'visibility',
|
||||
category: 'transform',
|
||||
click: function () {toggleCubeProperty('visibility')}
|
||||
})
|
||||
new Action({
|
||||
id: 'toggle_export',
|
||||
icon: 'save',
|
||||
category: 'transform',
|
||||
click: function () {toggleCubeProperty('export')}
|
||||
})
|
||||
new Action({
|
||||
id: 'toggle_autouv',
|
||||
icon: 'fullscreen_exit',
|
||||
category: 'transform',
|
||||
click: function () {toggleCubeProperty('autouv')}
|
||||
})
|
||||
new Action({
|
||||
id: 'toggle_shade',
|
||||
icon: 'wb_sunny',
|
||||
category: 'transform',
|
||||
click: function () {toggleCubeProperty('shade')}
|
||||
})
|
||||
new Action({
|
||||
id: 'rename',
|
||||
icon: 'text_format',
|
||||
category: 'transform',
|
||||
keybind: new Keybind({key: 113}),
|
||||
click: function () {renameCubes()}
|
||||
})
|
||||
new Action({
|
||||
id: 'update_autouv',
|
||||
icon: 'brightness_auto',
|
||||
category: 'transform',
|
||||
condition: () => !Blockbench.entity_mode,
|
||||
click: function () {
|
||||
if (selected.length) {
|
||||
Undo.initEdit({cubes: selected[0].forSelected(), selection: true})
|
||||
selected[0].forSelected(function(cube) {
|
||||
cube.mapAutoUV()
|
||||
})
|
||||
Undo.finishEdit('update_autouv')
|
||||
}
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'origin_to_geometry',
|
||||
icon: 'filter_center_focus',
|
||||
category: 'transform',
|
||||
click: function () {origin2geometry()}
|
||||
})
|
||||
new Action({
|
||||
id: 'rescale_toggle',
|
||||
icon: 'check_box_outline_blank',
|
||||
category: 'transform',
|
||||
condition: function() {return !Blockbench.entity_mode && selected.length;},
|
||||
click: function () {
|
||||
Undo.initEdit({cubes: selected})
|
||||
var value = !selected[0].rescale
|
||||
selected.forEach(function(cube) {
|
||||
cube.rescale = value
|
||||
})
|
||||
Canvas.updatePositions()
|
||||
updateNslideValues()
|
||||
Undo.finishEdit('rescale')
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'bone_reset_toggle',
|
||||
icon: 'check_box_outline_blank',
|
||||
category: 'transform',
|
||||
condition: function() {return Blockbench.entity_mode && selected_group;},
|
||||
click: function () {
|
||||
Undo.initEdit({group: selected_group})
|
||||
selected_group.reset = !selected_group.reset
|
||||
updateNslideValues()
|
||||
Undo.finishEdit('bone_reset')
|
||||
}
|
||||
})
|
||||
})
|
||||
|
@ -82,6 +82,9 @@ Math.roundTo = function(num, digits) {
|
||||
Math.lerp = function(a,b,m) {
|
||||
return (m-a) / (b-a)
|
||||
}
|
||||
Math.isBetween = function(n, a, b) {
|
||||
return (n - a) * (n - b) <= 0
|
||||
}
|
||||
function trimFloatNumber(val) {
|
||||
if (val == '') return val;
|
||||
var string = val.toFixed(4)
|
||||
|
185
js/uv.js
185
js/uv.js
@ -1609,3 +1609,188 @@ var uv_dialog = {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BARS.defineActions(function() {
|
||||
new Action({
|
||||
id: 'uv_dialog',
|
||||
icon: 'view_module',
|
||||
category: 'blockbench',
|
||||
condition: ()=>!Blockbench.entity_mode && selected.length,
|
||||
click: function () {uv_dialog.openAll()}
|
||||
})
|
||||
new Action({
|
||||
id: 'uv_dialog_full',
|
||||
icon: 'web_asset',
|
||||
category: 'blockbench',
|
||||
click: function () {uv_dialog.openFull()}
|
||||
})
|
||||
|
||||
new BarSlider({
|
||||
id: 'uv_rotation',
|
||||
category: 'uv',
|
||||
condition: () => !Blockbench.entity_mode && selected.length,
|
||||
min: 0, max: 270, step: 90, width: 80,
|
||||
onChange: function(slider) {
|
||||
Undo.initEdit({cubes: selected, uv_only: true})
|
||||
uv_dialog.forSelection('rotate')
|
||||
Undo.finishEdit('uv')
|
||||
}
|
||||
})
|
||||
new BarSelect({
|
||||
id: 'uv_grid',
|
||||
category: 'uv',
|
||||
condition: () => !Blockbench.entity_mode && selected.length,
|
||||
width: 60,
|
||||
options: {
|
||||
auto: true,
|
||||
'16': '16x16',
|
||||
'32': '32x32',
|
||||
'64': '64x64',
|
||||
none: true,
|
||||
},
|
||||
onChange: function(slider) {
|
||||
if (open_dialog) {
|
||||
uv_dialog.changeGrid(slider.get())
|
||||
} else {
|
||||
main_uv.setGrid()
|
||||
}
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'uv_maximize',
|
||||
icon: 'zoom_out_map',
|
||||
category: 'uv',
|
||||
condition: () => !Blockbench.entity_mode && selected.length,
|
||||
click: function (event) {
|
||||
Undo.initEdit({cubes: selected, uv_only: true})
|
||||
uv_dialog.forSelection('maximize', event)
|
||||
Undo.finishEdit('uv')
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'uv_auto',
|
||||
icon: 'brightness_auto',
|
||||
category: 'uv',
|
||||
condition: () => !Blockbench.entity_mode && selected.length,
|
||||
click: function (event) {
|
||||
Undo.initEdit({cubes: selected, uv_only: true})
|
||||
uv_dialog.forSelection('setAutoSize', event)
|
||||
Undo.finishEdit('uv')
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'uv_rel_auto',
|
||||
icon: 'brightness_auto',
|
||||
category: 'uv',
|
||||
condition: () => !Blockbench.entity_mode && selected.length,
|
||||
click: function (event) {
|
||||
Undo.initEdit({cubes: selected, uv_only: true})
|
||||
uv_dialog.forSelection('setRelativeAutoSize', event)
|
||||
Undo.finishEdit('uv')
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'uv_mirror_x',
|
||||
icon: 'icon-mirror_x',
|
||||
category: 'uv',
|
||||
condition: () => !Blockbench.entity_mode && selected.length,
|
||||
click: function (event) {
|
||||
Undo.initEdit({cubes: selected, uv_only: true})
|
||||
uv_dialog.forSelection('mirrorX', event)
|
||||
Undo.finishEdit('uv')
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'uv_mirror_y',
|
||||
icon: 'icon-mirror_y',
|
||||
category: 'uv',
|
||||
condition: () => !Blockbench.entity_mode && selected.length,
|
||||
click: function (event) {
|
||||
Undo.initEdit({cubes: selected, uv_only: true})
|
||||
uv_dialog.forSelection('mirrorY', event)
|
||||
Undo.finishEdit('uv')
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'uv_transparent',
|
||||
icon: 'clear',
|
||||
category: 'uv',
|
||||
condition: () => !Blockbench.entity_mode && selected.length,
|
||||
click: function (event) {
|
||||
Undo.initEdit({cubes: selected, uv_only: true})
|
||||
uv_dialog.forSelection('clear', event)
|
||||
Undo.finishEdit('uv')
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'uv_reset',
|
||||
icon: 'replay',
|
||||
category: 'uv',
|
||||
condition: () => !Blockbench.entity_mode && selected.length,
|
||||
click: function (event) {
|
||||
Undo.initEdit({cubes: selected, uv_only: true})
|
||||
uv_dialog.forSelection('reset', event)
|
||||
Undo.finishEdit('uv')
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'uv_apply_all',
|
||||
icon: 'format_color_fill',
|
||||
category: 'uv',
|
||||
condition: () => !Blockbench.entity_mode && selected.length,
|
||||
click: function (e) {
|
||||
Undo.initEdit({cubes: selected, uv_only: true})
|
||||
main_uv.applyAll(e)
|
||||
Undo.finishEdit('uv')
|
||||
}
|
||||
})
|
||||
new BarSelect({
|
||||
id: 'cullface',
|
||||
category: 'uv',
|
||||
condition: () => !Blockbench.entity_mode && selected.length,
|
||||
options: {
|
||||
off: tl('uv_editor.no_faces'),
|
||||
north: tl('face.north'),
|
||||
south: tl('face.south'),
|
||||
west: tl('face.west'),
|
||||
east: tl('face.east'),
|
||||
top: tl('face.up'),
|
||||
bottom: tl('face.down'),
|
||||
},
|
||||
onChange: function(sel, event) {
|
||||
Undo.initEdit({cubes: selected, uv_only: true})
|
||||
uv_dialog.forSelection('switchCullface')
|
||||
Undo.finishEdit('uv')
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'auto_cullface',
|
||||
icon: 'block',
|
||||
category: 'uv',
|
||||
condition: () => !Blockbench.entity_mode && selected.length,
|
||||
click: function (event) {
|
||||
Undo.initEdit({cubes: selected, uv_only: true})
|
||||
uv_dialog.forSelection('autoCullface', event)
|
||||
Undo.finishEdit('uv')
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'face_tint',
|
||||
category: 'uv',
|
||||
condition: () => !Blockbench.entity_mode && selected.length,
|
||||
click: function (event) {
|
||||
Undo.initEdit({cubes: selected, uv_only: true})
|
||||
uv_dialog.forSelection('switchTint', event)
|
||||
Undo.finishEdit('uv')
|
||||
}
|
||||
})
|
||||
new Action({
|
||||
id: 'uv_shift',
|
||||
condition: () => Blockbench.entity_mode,
|
||||
icon: 'photo_size_select_large',
|
||||
category: 'uv',
|
||||
click: function () {
|
||||
showUVShiftDialog()
|
||||
}
|
||||
})
|
||||
})
|
||||
|
65
lang/de.json
65
lang/de.json
@ -163,7 +163,7 @@
|
||||
"dialog.create_texture.resolution": "Auflösung",
|
||||
"dialog.input.title": "Eingabe",
|
||||
"dialog.update.title": "Aktualisierungen",
|
||||
"dialog.update.refresh": "Neu Laden",
|
||||
"dialog.update.refresh": "Neu laden",
|
||||
"dialog.update.up_to_date": "Blockbench ist aktuell!",
|
||||
"dialog.update.connecting": "Mit Server verbinden",
|
||||
"dialog.settings.settings": "Einstellungen",
|
||||
@ -193,7 +193,7 @@
|
||||
"layout.color.light": "Hell",
|
||||
"layout.color.light.desc": "Ausgewählter Text",
|
||||
"layout.color.accent_text": "Akzenttext",
|
||||
"layout.color.accent_text.desc": "Text auf Akzent-Elementen",
|
||||
"layout.color.accent_text.desc": "Text auf hellen- oder Akzent-Elementen",
|
||||
"layout.font.main": "Haupt-Schriftart",
|
||||
"layout.font.headline": "Überschriften-Schriftart",
|
||||
"about.version": "Version: ",
|
||||
@ -535,17 +535,13 @@
|
||||
"menu.view.background": "Hintergrund",
|
||||
"menu.view.screenshot": "Bildschirmfoto",
|
||||
"menu.cube.duplicate": "Duplizieren",
|
||||
"menu.cube.rename": "Umbenennen",
|
||||
"menu.cube.color": "Kennzeichnungsfarbe",
|
||||
"menu.cube.texture": "Textur",
|
||||
"menu.cube.texture.transparent": "Transparent",
|
||||
"menu.cube.texture.blank": "Leer",
|
||||
"menu.cube.delete": "Löschen",
|
||||
"menu.group.duplicate": "Duplizieren",
|
||||
"menu.group.sort": "Sortieren",
|
||||
"menu.group.resolve": "Auflösen",
|
||||
"menu.group.rename": "Umbenennen",
|
||||
"menu.group.rename_content": "Inhalt umbenennen",
|
||||
"menu.texture.face": "Auf Flächen anwenden",
|
||||
"menu.texture.cube": "Auf Elemente anwenden",
|
||||
"menu.texture.file": "Datei",
|
||||
@ -555,7 +551,6 @@
|
||||
"menu.texture.edit": "Bearbeiten",
|
||||
"menu.texture.export": "Speichern unter",
|
||||
"menu.texture.save": "Speichern",
|
||||
"menu.texture.delete": "Löschen",
|
||||
"menu.texture.properties": "Eigenschaften",
|
||||
"menu.preview.background": "Hintergrund",
|
||||
"menu.preview.background.load": "Laden",
|
||||
@ -589,7 +584,6 @@
|
||||
"cube.color.blue": "Blau",
|
||||
"cube.color.green": "Grün",
|
||||
"cube.color.lime": "Hellgrün",
|
||||
"switches.remove": "Löschen",
|
||||
"switches.visibility": "Sichtbarkeit",
|
||||
"switches.export": "Exportieren",
|
||||
"switches.shading": "Schattierung",
|
||||
@ -647,9 +641,6 @@
|
||||
"display.preset.block": "Standard-Block",
|
||||
"display.preset.handheld": "Standard-Waffe",
|
||||
"display.preset.rod": "Standard-Stab",
|
||||
"display.preset.use": "Anwenden",
|
||||
"display.preset.use_all": "Auf alle Positionen anwenden",
|
||||
"display.preset.remove": "Löschen",
|
||||
"dialog.continue": "Fortfahren",
|
||||
"message.square_textures": "Texturen müssen quadratisch sein",
|
||||
"message.unsaved_texture.title": "Ungespeicherte Texturen",
|
||||
@ -680,7 +671,6 @@
|
||||
"dialog.shift_uv.message": "Gebe den Wert ein, mit dem du die UV Koordinaten multiplizieren möchtest. Mathematische Ausdrücke sind erlaubt. Starte mit einem \"+\", wenn du den Wert addieren möchtest.",
|
||||
"dialog.shift_uv.horizontal": "Horizontal",
|
||||
"dialog.shift_uv.vertical": "Vertikal",
|
||||
"dialog.shift_uv": "UV Verschieben",
|
||||
"keybindings.reset": "Zurücksetzen",
|
||||
"keybindings.clear": "Leeren",
|
||||
"action.cube_counter": "Elementanzahl",
|
||||
@ -757,5 +747,54 @@
|
||||
"action.move_forth": "Nach vorne verschieben",
|
||||
"action.move_forth.desc": "Verschiebt die ausgewählten Elemente relativ zur Kameraperspektive nach vorne",
|
||||
"action.move_back": "Nach hinten verschieben",
|
||||
"action.move_back.desc": "Verschiebt die ausgewählten Elemente relativ zur Kameraperspektive nach hinten"
|
||||
"action.move_back.desc": "Verschiebt die ausgewählten Elemente relativ zur Kameraperspektive nach hinten",
|
||||
"layout.color.wireframe": "Drahtgitter",
|
||||
"layout.color.wireframe.desc": "Drahtgitter-Linien",
|
||||
"action.add_animation": "Animation hinzufügen",
|
||||
"action.add_animation.desc": "Fügt eine neue Animation hinzu",
|
||||
"action.load_animation_file": "Animation importieren",
|
||||
"action.load_animation_file.desc": "Öffnet eine Animationsdatei",
|
||||
"action.play_animation": "Animation Abspielen",
|
||||
"action.play_animation.desc": "Spielt die ausgewählte Animation ab",
|
||||
"action.export_animation_file": "Animation exportieren",
|
||||
"action.export_animation_file.desc": "Exportiert die Animationen als Animationsdatei",
|
||||
"action.slider_keyframe_time": "Zeitpunkt",
|
||||
"action.slider_keyframe_time.desc": "Den Zeitpunkt des Keyframes verschieben",
|
||||
"timeline.rotation": "Drehung",
|
||||
"timeline.position": "Position",
|
||||
"timeline.scale": "Größe",
|
||||
"menu.timeline.add": "Keyframe hinzufügen",
|
||||
"menu.keyframe.quaternion": "Quaternion",
|
||||
"panel.animations": "Animationen",
|
||||
"panel.keyframe": "Keyframe",
|
||||
"panel.keyframe.type": "Keyframe (%0)",
|
||||
"generic.delete": "Löschen",
|
||||
"generic.rename": "Umbenennen",
|
||||
"message.rename_animation": "Animation umbenennen",
|
||||
"message.animation_update_var": "Updatevariable",
|
||||
"message.no_animation_selected": "Du musst zuerst eine Animation auswählen",
|
||||
"message.no_bone_selected": "Du musst zuerst einen Bone auswählen",
|
||||
"message.duplicate_groups.title": "Bone-Name doppelt",
|
||||
"message.duplicate_groups.message": "Der Name dieses Bones kommt mehrfach vor. Dies kann Probleme verursachen.",
|
||||
"action.select_all_keyframes": "Alle Keyframes auswählen",
|
||||
"action.select_all_keyframes.desc": "Wählt alle Keyframes des ausgewählten Bones aus",
|
||||
"action.delete_keyframes": "Keyframes löschen",
|
||||
"action.delete_keyframes.desc": "Löscht alle ausgewählten Keyframes",
|
||||
"menu.animation": "Animation",
|
||||
"menu.animation.loop": "Endlosschleife",
|
||||
"menu.animation.override": "Überschreiben",
|
||||
"menu.animation.anim_time_update": "Updatevariable",
|
||||
"message.display_skin_model.title": "Skinmodell",
|
||||
"message.display_skin_model.message": "Wähle das Modell für diesen Skin",
|
||||
"message.display_skin_model.classic": "Klassisch",
|
||||
"message.display_skin_model.slim": "Schlank",
|
||||
"message.bone_material": "Bone-Material verändern",
|
||||
"action.slider_animation_length": "Animationslänge",
|
||||
"action.slider_animation_length.desc": "Verändert die Länge der ausgewählten Animation",
|
||||
"menu.group.material": "Material festlegen",
|
||||
"action.camera_reset": "Kamera zurücksetzen",
|
||||
"action.camera_reset.desc": "Setzt die Kamera der aktuellen Ansicht auf die Standardperspektive zurück",
|
||||
"panel.variable_placeholders": "Variablen-Platzhalter",
|
||||
"panel.variable_placeholders.info": "Gebe die Variablen der Animation an, für die du eine Vorschau brauchst, als Name=Wert",
|
||||
"status_bar.vertex_distance": "Entfernung: %0"
|
||||
}
|
80
lang/en.json
80
lang/en.json
@ -19,6 +19,9 @@
|
||||
"data.seperator": "Seperator",
|
||||
"data.image": "Image",
|
||||
|
||||
"generic.delete": "Delete",
|
||||
"generic.rename": "Rename",
|
||||
|
||||
"keys.ctrl": "Control",
|
||||
"keys.shift": "Shift",
|
||||
"keys.alt": "Alt",
|
||||
@ -54,6 +57,7 @@
|
||||
|
||||
"status_bar.saved":"Model is saved",
|
||||
"status_bar.unsaved":"There are unsaved changes",
|
||||
"status_bar.vertex_distance":"Distance: %0",
|
||||
|
||||
"message.rotation_limit.title": "Rotation Limits",
|
||||
"message.rotation_limit.message": "Rotations are limited by Minecraft to one axis and 22.5 degree increments. Rotating on a different axis will clear all rotations on the other axes. Disable the option \"Restricted Rotation\" if you are modeling for other purposes and need free rotations.",
|
||||
@ -120,6 +124,11 @@
|
||||
"message.display_skin.name": "Username",
|
||||
"message.display_skin.reset": "Reset",
|
||||
|
||||
"message.display_skin_model.title": "Skin Model",
|
||||
"message.display_skin_model.message": "Chose the model type of your skin",
|
||||
"message.display_skin_model.classic": "Classic",
|
||||
"message.display_skin_model.slim": "Slim",
|
||||
|
||||
"message.invalid_plugin": "Invalid Plugin File, See Console",
|
||||
"message.load_plugin_app": "Do you want to allow this plugin to make changes to your PC? Only load plugins from people you trust.",
|
||||
"message.load_plugin_web": "Do you want to load this plugin? Only load plugins from people you trust.",
|
||||
@ -129,8 +138,16 @@
|
||||
"message.save_obj": "Saved as .obj model",
|
||||
"message.save_entity": "Saved as bedrock entity model",
|
||||
"message.rename_cubes": "Rename Cubes",
|
||||
"message.rename_animation": "Rename Animation",
|
||||
"message.animation_update_var": "Animation Update Variable",
|
||||
"message.untextured": "This surface does not have a texture",
|
||||
|
||||
"message.no_animation_selected": "You have to select an animation to do this",
|
||||
"message.bone_material": "Change bone material",
|
||||
"message.no_bone_selected": "You have to select a bone to do this",
|
||||
"message.duplicate_groups.title": "Bone Name Duplicate",
|
||||
"message.duplicate_groups.message": "The name of this bone exists on multiple bones. This can cause problems.",
|
||||
|
||||
"dialog.project.title": "Project",
|
||||
"dialog.project.name": "File Name",
|
||||
"dialog.project.parent": "Parent Model",
|
||||
@ -206,10 +223,6 @@
|
||||
"dialog.shift_uv.message": "Enter the number you want to multiply the UV offset coordinates by. Mathematical expressions are allowed. Prepend a \"+\" if you want to add that number.",
|
||||
"dialog.shift_uv.horizontal": "Horizontal",
|
||||
"dialog.shift_uv.vertical": "Vertical",
|
||||
"dialog.shift_uv": "",
|
||||
"dialog.shift_uv": "",
|
||||
"dialog.shift_uv": "",
|
||||
"dialog.shift_uv": "",
|
||||
|
||||
"dialog.input.title": "Input",
|
||||
|
||||
@ -249,12 +262,14 @@
|
||||
"layout.color.accent.desc": "Slider thumb and other details",
|
||||
"layout.color.grid": "Grid",
|
||||
"layout.color.grid.desc": "3D preview grid",
|
||||
"layout.color.wireframe": "Wireframe",
|
||||
"layout.color.wireframe.desc": "Wireframe view lines",
|
||||
"layout.color.text": "Text",
|
||||
"layout.color.text.desc": "Normal text",
|
||||
"layout.color.light": "Light",
|
||||
"layout.color.light.desc": "Selected text",
|
||||
"layout.color.light.desc": "Highlighted text",
|
||||
"layout.color.accent_text": "Accent Text",
|
||||
"layout.color.accent_text.desc": "Text on accent elements",
|
||||
"layout.color.accent_text.desc": "Text on bright or accent elements",
|
||||
"layout.font.main": "Main Font",
|
||||
"layout.font.headline": "Headline Font",
|
||||
|
||||
@ -609,6 +624,8 @@
|
||||
"action.screenshot_app.desc": "Take a screenshot of the whole application",
|
||||
"action.toggle_quad_view": "Toggle Quad View",
|
||||
"action.toggle_quad_view.desc": "Toggle the 4 viewport mode",
|
||||
"action.camera_reset": "Reset Camera",
|
||||
"action.camera_reset.desc": "Reset the current preview to the default camera angle",
|
||||
|
||||
"action.import_texture": "Import Texture",
|
||||
"action.import_texture.desc": "Import one or more textures from your file system",
|
||||
@ -639,7 +656,7 @@
|
||||
"action.uv_grid.auto": "Auto",
|
||||
"action.uv_grid.none": "None",
|
||||
"action.uv_apply_all": "Apply To All Faces",
|
||||
"action.uv_apply_all.desc": "Applies the settings of the current face to all ",
|
||||
"action.uv_apply_all.desc": "Applies the settings of the current face to all faces",
|
||||
"action.uv_maximize": "Maximize UV",
|
||||
"action.uv_maximize.desc": "Sets the UV for this face to the full texture",
|
||||
"action.uv_auto": "Auto UV",
|
||||
@ -663,11 +680,34 @@
|
||||
"action.uv_shift": "Shift UV",
|
||||
"action.uv_shift.desc": "Shift all UV regions by a fixed amount or mathematical expression",
|
||||
|
||||
"action.add_animation": "Add Animation",
|
||||
"action.add_animation.desc": "Create a blank animation",
|
||||
"action.load_animation_file": "Import Animations",
|
||||
"action.load_animation_file.desc": "Import an animation file",
|
||||
"action.play_animation": "Play Animations",
|
||||
"action.play_animation.desc": "Preview the selected animation",
|
||||
"action.export_animation_file": "Export Animations",
|
||||
"action.export_animation_file.desc": "Export a json file with the current animations",
|
||||
"action.slider_animation_length": "Animation Length",
|
||||
"action.slider_animation_length.desc": "Change the length of the selected animation",
|
||||
"action.slider_keyframe_time": "Timecode",
|
||||
"action.slider_keyframe_time.desc": "Change the timecode of the selected keyframes",
|
||||
"action.select_all_keyframes": "Select All Keyframes",
|
||||
"action.select_all_keyframes.desc": "Select all keyframes of the current bone",
|
||||
"action.delete_keyframes": "Delete Keyframes",
|
||||
"action.delete_keyframes.desc": "Delete all selected keyframes",
|
||||
|
||||
|
||||
"timeline.rotation": "Rotation",
|
||||
"timeline.position": "Position",
|
||||
"timeline.scale": "Scale",
|
||||
|
||||
"menu.file": "File",
|
||||
"menu.edit": "Edit",
|
||||
"menu.transform": "Transform",
|
||||
"menu.filter": "Filter",
|
||||
"menu.display": "Display",
|
||||
"menu.animation": "Animation",
|
||||
"menu.view": "View",
|
||||
|
||||
"menu.file.new": "New",
|
||||
@ -686,18 +726,15 @@
|
||||
"menu.view.screenshot": "Screenshot",
|
||||
|
||||
"menu.cube.duplicate": "Duplicate",
|
||||
"menu.cube.rename": "Rename",
|
||||
"menu.cube.color": "Marker Color",
|
||||
"menu.cube.texture": "Texture",
|
||||
"menu.cube.texture.transparent": "Transparent",
|
||||
"menu.cube.texture.blank": "Blank",
|
||||
"menu.cube.delete": "Delete",
|
||||
|
||||
"menu.group.material": "Set Material",
|
||||
"menu.group.duplicate": "Duplicate",
|
||||
"menu.group.sort": "Sort",
|
||||
"menu.group.resolve": "Resolve",
|
||||
"menu.group.rename": "Rename",
|
||||
"menu.group.rename_content": "Rename Content",
|
||||
|
||||
"menu.texture.face": "Apply to Face",
|
||||
"menu.texture.cube": "Apply to Cubes",
|
||||
@ -709,7 +746,6 @@
|
||||
"menu.texture.particle": "Use for Particles",
|
||||
"menu.texture.export": "Save As",
|
||||
"menu.texture.save": "Save",
|
||||
"menu.texture.delete": "Delete",
|
||||
"menu.texture.properties": "Properties",
|
||||
|
||||
"menu.preview.background": "Background",
|
||||
@ -741,6 +777,14 @@
|
||||
"menu.toolbar.edit": "Customize",
|
||||
"menu.toolbar.reset": "Reset",
|
||||
|
||||
"menu.animation.loop": "Loop",
|
||||
"menu.animation.override": "Override",
|
||||
"menu.animation.anim_time_update": "Update Variable",
|
||||
|
||||
"menu.timeline.add": "Add Keyframe",
|
||||
|
||||
"menu.keyframe.quaternion": "Quaternion",
|
||||
|
||||
"cube.color.light_blue": "Light Blue",
|
||||
"cube.color.yellow": "Yellow",
|
||||
"cube.color.orange": "Orange",
|
||||
@ -750,7 +794,6 @@
|
||||
"cube.color.green": "Green",
|
||||
"cube.color.lime": "Lime",
|
||||
|
||||
"switches.remove": "Remove",
|
||||
"switches.visibility": "Visibility",
|
||||
"switches.export": "Export",
|
||||
"switches.shading": "Shade",
|
||||
@ -760,6 +803,12 @@
|
||||
"panel.display": "Display",
|
||||
"panel.textures": "Textures",
|
||||
"panel.outliner": "Outliner",
|
||||
"panel.animations": "Animations",
|
||||
"panel.keyframe": "Keyframe",
|
||||
"panel.keyframe.type": "Keyframe (%0)",
|
||||
"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",
|
||||
@ -830,8 +879,5 @@
|
||||
"display.preset.item": "Default Item",
|
||||
"display.preset.block": "Default Block",
|
||||
"display.preset.handheld": "Default Weapon",
|
||||
"display.preset.rod": "Default Rod",
|
||||
"display.preset.use": "Apply",
|
||||
"display.preset.use_all": "Apply to all slots",
|
||||
"display.preset.remove": "Remove"
|
||||
"display.preset.rod": "Default Rod"
|
||||
}
|
||||
|
91
lang/es.json
91
lang/es.json
@ -535,17 +535,13 @@
|
||||
"menu.view.background": "Fondo",
|
||||
"menu.view.screenshot": "Captura de Pantalla",
|
||||
"menu.cube.duplicate": "Duplicar",
|
||||
"menu.cube.rename": "Renombrar",
|
||||
"menu.cube.color": "Color",
|
||||
"menu.cube.texture": "Textura",
|
||||
"menu.cube.texture.transparent": "Transparente",
|
||||
"menu.cube.texture.blank": "En Blanco",
|
||||
"menu.cube.delete": "Borrar",
|
||||
"menu.group.duplicate": "Diplicar",
|
||||
"menu.group.sort": "Ordenar",
|
||||
"menu.group.resolve": "Resolver",
|
||||
"menu.group.rename": "Renombrar",
|
||||
"menu.group.rename_content": "Renombrar Contenido",
|
||||
"menu.texture.face": "Aplicar a Cara",
|
||||
"menu.texture.cube": "Aplicar a Cubo",
|
||||
"menu.texture.file": "Archivo",
|
||||
@ -555,7 +551,6 @@
|
||||
"menu.texture.edit": "Editar",
|
||||
"menu.texture.export": "Guardar Como",
|
||||
"menu.texture.save": "Guardar",
|
||||
"menu.texture.delete": "Borrar",
|
||||
"menu.texture.properties": "Propiedades",
|
||||
"menu.preview.background": "Fondo",
|
||||
"menu.preview.background.load": "Cargar",
|
||||
@ -589,7 +584,6 @@
|
||||
"cube.color.blue": "Azul",
|
||||
"cube.color.green": "Verde",
|
||||
"cube.color.lime": "Lima",
|
||||
"switches.remove": "Borrar",
|
||||
"switches.visibility": "Visibilidad",
|
||||
"switches.export": "Exportar",
|
||||
"switches.shading": "Sombreado",
|
||||
@ -647,9 +641,6 @@
|
||||
"display.preset.block": "Bloque por defecto",
|
||||
"display.preset.handheld": "Arma por defecto",
|
||||
"display.preset.rod": "Palo por defecto",
|
||||
"display.preset.use": "Aplicar",
|
||||
"display.preset.use_all": "Aplicar a todos los apartados",
|
||||
"display.preset.remove": "Borrar",
|
||||
"dialog.continue": "Continuar",
|
||||
"message.square_textures": "Las texturas tienen que ser cuadradas",
|
||||
"message.unsaved_texture.title": "Textura sin guardar",
|
||||
@ -680,7 +671,6 @@
|
||||
"dialog.shift_uv.message": "Escribe el número por el que quieres multiplicar las coordenadas extras del UV. Puedes usar expresiones matemáticas. Escribe \"+\" antes de un número si quieres añadirlo",
|
||||
"dialog.shift_uv.horizontal": "Horizontal",
|
||||
"dialog.shift_uv.vertical": "Vertical",
|
||||
"dialog.shift_uv": "Desplazar UV",
|
||||
"keybindings.reset": "Resetear",
|
||||
"keybindings.clear": "Vacío",
|
||||
"action.cube_counter": "Contador de Cubos",
|
||||
@ -742,20 +732,69 @@
|
||||
"action.update_autouv": "Actualizar Auto UV",
|
||||
"action.update_autouv.desc": "Actualiza el mapeado del auto UV en los cubos seleccionados",
|
||||
"category.uv": "UV",
|
||||
"status_bar.saved": "Model is saved",
|
||||
"status_bar.unsaved": "There are unsaved changes",
|
||||
"action.animation_mode_tool": "Animation",
|
||||
"action.animation_mode_tool.desc": "Define custom animations for the model",
|
||||
"action.move_up": "Move Up",
|
||||
"action.move_up.desc": "Move the selected cubes up relative to the current camera angle",
|
||||
"action.move_down": "Move Down",
|
||||
"action.move_down.desc": "Move the selected cubes down relative to the current camera angle",
|
||||
"action.move_left": "Move Left",
|
||||
"action.move_left.desc": "Move the selected cubes left relative to the current camera angle",
|
||||
"action.move_right": "Move Right",
|
||||
"action.move_right.desc": "Move the selected cubes right relative to the current camera angle",
|
||||
"action.move_forth": "Move Forth",
|
||||
"action.move_forth.desc": "Move the selected cubes forth relative to the current camera angle",
|
||||
"action.move_back": "Move Back",
|
||||
"action.move_back.desc": "Move the selected cubes back relative to the current camera angle"
|
||||
"status_bar.saved": "El modelo está guardado",
|
||||
"status_bar.unsaved": "Hay cambios sin guardar",
|
||||
"action.animation_mode_tool": "Animación",
|
||||
"action.animation_mode_tool.desc": "Define animaciones personalizadas para este modelo",
|
||||
"action.move_up": "Mover Hacia Arriba",
|
||||
"action.move_up.desc": "Mueve los cubos seleccionados hacia arriba relativo al ángulo actual de la cámara",
|
||||
"action.move_down": "Mover Hacia Abajo",
|
||||
"action.move_down.desc": "Mueve los cubos seleccionados hacia abajorelativo al ángulo actual de la cámara",
|
||||
"action.move_left": "Mover Hacia Izquierda",
|
||||
"action.move_left.desc": "Mueve los cubos seleccionados hacia la izquierda relativo al ángulo actual de la cámara",
|
||||
"action.move_right": "Mover Hacia Derecha",
|
||||
"action.move_right.desc": "Mueve los cubos seleccionados hacia la derecha relativo al ángulo actual de la cámara",
|
||||
"action.move_forth": "Mover Hacia Delante",
|
||||
"action.move_forth.desc": "Mueve los cubos seleccionados hacia delante relativo al ángulo actual de la cámara",
|
||||
"action.move_back": "Mover Hacia Atrás",
|
||||
"action.move_back.desc": "Mueve los cubos seleccionados hacia atrás relativo al ángulo actual de la cámara",
|
||||
"layout.color.wireframe": "Estructura",
|
||||
"layout.color.wireframe.desc": "Líneas de vista de la estructura",
|
||||
"action.add_animation": "Añadir Animación",
|
||||
"action.add_animation.desc": "Crear Animación Vacía",
|
||||
"action.load_animation_file": "Importar Animaciones",
|
||||
"action.load_animation_file.desc": "Importa un archivo de animación",
|
||||
"action.play_animation": "Mostrar Animaciones",
|
||||
"action.play_animation.desc": "Previsualiza la animación seleccionada",
|
||||
"action.export_animation_file": "Exportar Animaciones",
|
||||
"action.export_animation_file.desc": "Exporta una archivo json con las animaciones actuales",
|
||||
"action.slider_keyframe_time": "Código de tiempo",
|
||||
"action.slider_keyframe_time.desc": "Cambia el código de tiempo de los frames seleccionados",
|
||||
"timeline.rotation": "Rotación",
|
||||
"timeline.position": "Posición",
|
||||
"timeline.scale": "Escala",
|
||||
"menu.timeline.add": "Añadir frame",
|
||||
"menu.keyframe.quaternion": "Quaternion",
|
||||
"panel.animations": "Animaciones",
|
||||
"panel.keyframe": "Frame",
|
||||
"panel.keyframe.type": "Frame (%0)",
|
||||
"generic.delete": "Eliminar",
|
||||
"generic.rename": "Renombrar",
|
||||
"message.rename_animation": "Renombrar Animación",
|
||||
"message.animation_update_var": "Variable de Actualización de la Animación",
|
||||
"message.no_animation_selected": "Tienes que seleccionar una animación para hacer esto",
|
||||
"message.no_bone_selected": "Tienes que seleccionar un hueso para hacer esto",
|
||||
"message.duplicate_groups.title": "Duplicar Nombre del Hueso",
|
||||
"message.duplicate_groups.message": "El nombre de este hueso existe en varios huesos. Esto puede causar problemas",
|
||||
"action.select_all_keyframes": "Seleccionar Todos los Frames",
|
||||
"action.select_all_keyframes.desc": "Selecciona todos los frames del hueso actual",
|
||||
"action.delete_keyframes": "Eliminar Frames",
|
||||
"action.delete_keyframes.desc": "Elimina todos los frames seleccionados",
|
||||
"menu.animation": "Animación",
|
||||
"menu.animation.loop": "Repetición",
|
||||
"menu.animation.override": "Sobreescribir",
|
||||
"menu.animation.anim_time_update": "Actualizar Variable",
|
||||
"message.display_skin_model.title": "Skin Model",
|
||||
"message.display_skin_model.message": "Chose the model type of your skin",
|
||||
"message.display_skin_model.classic": "Classic",
|
||||
"message.display_skin_model.slim": "Slim",
|
||||
"message.bone_material": "Change bone material",
|
||||
"action.slider_animation_length": "Animation Length",
|
||||
"action.slider_animation_length.desc": "Change the length of the selected animation",
|
||||
"menu.group.material": "Set Material",
|
||||
"action.camera_reset": "Reset Camera",
|
||||
"action.camera_reset.desc": "Reset the current preview to the default camera angle",
|
||||
"panel.variable_placeholders": "Variable Placeholders",
|
||||
"panel.variable_placeholders.info": "List the variables you want to preview via name=value",
|
||||
"status_bar.vertex_distance": "Distance: %0"
|
||||
}
|
107
lang/fr.json
107
lang/fr.json
@ -421,13 +421,13 @@
|
||||
"action.add_group": "Ajouter un groupe",
|
||||
"action.add_group.desc": "Ajoute un nouveau groupe ou un nouvel os",
|
||||
"action.outliner_toggle": "Voir plus d’option",
|
||||
"action.outliner_toggle.desc": "Bascule les commutateurs pour plus d'options dans le contour",
|
||||
"action.outliner_toggle.desc": "Appuyez pour plus d'options concernant la liste",
|
||||
"action.duplicate": "Dupliquer",
|
||||
"action.duplicate.desc": "Dupliquer les cubes ou groupes sélectionnés",
|
||||
"action.delete": "Supprimer",
|
||||
"action.delete.desc": "Supprime les cubes ou groupes sélectionnés",
|
||||
"action.sort_outliner": "Type de contour",
|
||||
"action.sort_outliner.desc": "Triez le contour par ordre alphabétique",
|
||||
"action.sort_outliner.desc": "Triez la liste des blocs par ordre alphabétique",
|
||||
"action.local_move": "Mouvement relatif",
|
||||
"action.local_move.desc": "Déplacer les éléments pivotés sur leurs propres axes si possible",
|
||||
"action.select_window": "Sélectionner...",
|
||||
@ -440,7 +440,7 @@
|
||||
"action.collapse_groups.desc": "Réduire tous les groupes",
|
||||
"action.scale": "Échelle...",
|
||||
"action.scale.desc": "Échelle des cubes sélectionnés",
|
||||
"action.rotate_x_cw": "Rotation CW",
|
||||
"action.rotate_x_cw": "Tourner CW",
|
||||
"action.rotate_x_cw.desc": "Faire pivoter les cubes sélectionnés de 90° sur l'axe X",
|
||||
"action.rotate_x_ccw": "Tourner contre-CW",
|
||||
"action.rotate_x_ccw.desc": "Faire pivoter les cubes sélectionnés de -90° sur l'axe X",
|
||||
@ -488,9 +488,9 @@
|
||||
"action.zoom_reset.desc": "Réinitialiser le zoom sur la valeur par défaut 100%.",
|
||||
"action.reset_interface": "Réinitialiser l'interface",
|
||||
"action.reset_interface.desc": "Réinitialiser la taille et les positions du GUI",
|
||||
"action.toggle_wireframe": "Basculer l’armature",
|
||||
"action.toggle_wireframe": "Voir l’armature",
|
||||
"action.toggle_wireframe.desc": "Basculer le mode d’affichage en armature",
|
||||
"action.screenshot_model": "Modèle de capture d'écran",
|
||||
"action.screenshot_model": "Capture d'écran du modèle",
|
||||
"action.screenshot_model.desc": "Prendre une capture d'écran recadrée du modèle sous l'angle actuel",
|
||||
"action.screenshot_app": "Capture d'écran",
|
||||
"action.screenshot_app.desc": "Prendre une capture d'écran de l'ensemble de l'application",
|
||||
@ -535,17 +535,13 @@
|
||||
"menu.view.background": "Arrière-plan",
|
||||
"menu.view.screenshot": "Capture d’écran",
|
||||
"menu.cube.duplicate": "Dupliquer",
|
||||
"menu.cube.rename": "Renommer",
|
||||
"menu.cube.color": "Couleur du marqueur",
|
||||
"menu.cube.texture": "Texture",
|
||||
"menu.cube.texture.transparent": "Transparant",
|
||||
"menu.cube.texture.blank": "Blanc",
|
||||
"menu.cube.delete": "Supprimer",
|
||||
"menu.group.duplicate": "Dupliquer",
|
||||
"menu.group.sort": "Trier",
|
||||
"menu.group.resolve": "Résoudre",
|
||||
"menu.group.rename": "Renommer",
|
||||
"menu.group.rename_content": "Renommer contenu",
|
||||
"menu.texture.face": "Appliquer aux faces",
|
||||
"menu.texture.cube": "Appliquer aux cubes",
|
||||
"menu.texture.file": "Fichier",
|
||||
@ -555,13 +551,12 @@
|
||||
"menu.texture.edit": "Modifier",
|
||||
"menu.texture.export": "Exporter",
|
||||
"menu.texture.save": "Sauvegarder",
|
||||
"menu.texture.delete": "Supprimer",
|
||||
"menu.texture.properties": "Propriétés",
|
||||
"menu.preview.background": "Arrière-plan",
|
||||
"menu.preview.background.load": "Charger",
|
||||
"menu.preview.background.position": "Position",
|
||||
"menu.preview.background.lock": "Verrouiller la caméra",
|
||||
"menu.preview.background.remove": "Enlever",
|
||||
"menu.preview.background.remove": "Supprimer",
|
||||
"menu.preview.screenshot": "Capture d’écran",
|
||||
"menu.preview.perspective": "Perspective",
|
||||
"menu.preview.perspective.normal": "Normal",
|
||||
@ -589,7 +584,6 @@
|
||||
"cube.color.blue": "Bleu",
|
||||
"cube.color.green": "Vert",
|
||||
"cube.color.lime": "Vert pale",
|
||||
"switches.remove": "Enlever",
|
||||
"switches.visibility": "Visibilité",
|
||||
"switches.export": "Exporter",
|
||||
"switches.shading": "Ombre",
|
||||
@ -597,7 +591,7 @@
|
||||
"panel.uv": "UV",
|
||||
"panel.display": "Afficher",
|
||||
"panel.textures": "Textures",
|
||||
"panel.outliner": "Contour",
|
||||
"panel.outliner": "Liste des blocs",
|
||||
"panel.options": "Rotation",
|
||||
"panel.options.angle": "Angle",
|
||||
"panel.options.origin": "Origne",
|
||||
@ -608,8 +602,8 @@
|
||||
"face.south": "Sud",
|
||||
"face.west": "Ouest",
|
||||
"face.east": "Est",
|
||||
"face.up": "Vers le haut",
|
||||
"face.down": "Vers le bas",
|
||||
"face.up": "Haut",
|
||||
"face.down": "Bas",
|
||||
"direction.north": "Nord",
|
||||
"direction.south": "Sud",
|
||||
"direction.west": "Ouest",
|
||||
@ -647,9 +641,6 @@
|
||||
"display.preset.block": "Arme par défaut",
|
||||
"display.preset.handheld": "Arme par défaut",
|
||||
"display.preset.rod": "Barre par défaut",
|
||||
"display.preset.use": "Appliquer",
|
||||
"display.preset.use_all": "Appliquer à tous les emplacements",
|
||||
"display.preset.remove": "Retirer",
|
||||
"dialog.continue": "Continuer",
|
||||
"message.square_textures": "Les textures doivent être carrées",
|
||||
"message.unsaved_texture.title": "Texture non sauvegardée",
|
||||
@ -680,7 +671,6 @@
|
||||
"dialog.shift_uv.message": "Entrez le nombre que vous souhaitez multiplier des coordonnées de décalage UV par les expressions mathématiques autorisées. Prévoyez un \"+\" si vous souhaitez ajouter ce numéro.",
|
||||
"dialog.shift_uv.horizontal": "Horizontal",
|
||||
"dialog.shift_uv.vertical": "Vertical",
|
||||
"dialog.shift_uv": "Décalage UV",
|
||||
"keybindings.reset": "Réinitialiser",
|
||||
"keybindings.clear": "Vide",
|
||||
"action.cube_counter": "Compteur de cube",
|
||||
@ -742,20 +732,69 @@
|
||||
"action.update_autouv": "Mettre à jour l'UV automatique",
|
||||
"action.update_autouv.desc": "Mettre à jour le mappage UV automatique des cubes sélectionnés",
|
||||
"category.uv": "UV",
|
||||
"status_bar.saved": "Model is saved",
|
||||
"status_bar.unsaved": "There are unsaved changes",
|
||||
"status_bar.saved": "Le modèle est enregistré",
|
||||
"status_bar.unsaved": "Il y a des modifications non enregistrées",
|
||||
"action.animation_mode_tool": "Animation",
|
||||
"action.animation_mode_tool.desc": "Define custom animations for the model",
|
||||
"action.move_up": "Move Up",
|
||||
"action.move_up.desc": "Move the selected cubes up relative to the current camera angle",
|
||||
"action.move_down": "Move Down",
|
||||
"action.move_down.desc": "Move the selected cubes down relative to the current camera angle",
|
||||
"action.move_left": "Move Left",
|
||||
"action.move_left.desc": "Move the selected cubes left relative to the current camera angle",
|
||||
"action.move_right": "Move Right",
|
||||
"action.move_right.desc": "Move the selected cubes right relative to the current camera angle",
|
||||
"action.move_forth": "Move Forth",
|
||||
"action.move_forth.desc": "Move the selected cubes forth relative to the current camera angle",
|
||||
"action.move_back": "Move Back",
|
||||
"action.move_back.desc": "Move the selected cubes back relative to the current camera angle"
|
||||
"action.animation_mode_tool.desc": "Définir des animations personnalisées pour le modèle",
|
||||
"action.move_up": "Déplacer vers le haut",
|
||||
"action.move_up.desc": "Déplacer les cubes sélectionnés vers le haut par rapport à l'angle de caméra actuel",
|
||||
"action.move_down": "Déplacer vers le bas",
|
||||
"action.move_down.desc": "Déplacer les cubes sélectionnés vers le bas par rapport à l'angle de caméra actuel",
|
||||
"action.move_left": "Déplacer vers la gauche",
|
||||
"action.move_left.desc": "Déplacer les cubes sélectionnés vers la gauche par rapport à l'angle de caméra actuel",
|
||||
"action.move_right": "Déplacer vers la droite",
|
||||
"action.move_right.desc": "Déplacer les cubes sélectionnés vers la droite par rapport à l'angle de caméra actuel",
|
||||
"action.move_forth": "Déplacer vers l'avant",
|
||||
"action.move_forth.desc": "Reculer les cubes sélectionnés vers l'avant par rapport à l'angle de la caméra actuel",
|
||||
"action.move_back": "Déplacer vers l'arrière",
|
||||
"action.move_back.desc": "Reculer les cubes sélectionnés vers l'arrière par rapport à l'angle de la caméra actuel",
|
||||
"layout.color.wireframe": "Wireframe",
|
||||
"layout.color.wireframe.desc": "Wireframe view lines",
|
||||
"action.add_animation": "Add Animation",
|
||||
"action.add_animation.desc": "Create a blank animation",
|
||||
"action.load_animation_file": "Import Animations",
|
||||
"action.load_animation_file.desc": "Import an animation file",
|
||||
"action.play_animation": "Play Animations",
|
||||
"action.play_animation.desc": "Preview the selected animation",
|
||||
"action.export_animation_file": "Export Animations",
|
||||
"action.export_animation_file.desc": "Export a json file with the current animations",
|
||||
"action.slider_keyframe_time": "Timecode",
|
||||
"action.slider_keyframe_time.desc": "Change the timecode of the selected keyframes",
|
||||
"timeline.rotation": "Rotation",
|
||||
"timeline.position": "Position",
|
||||
"timeline.scale": "Scale",
|
||||
"menu.timeline.add": "Add Keyframe",
|
||||
"menu.keyframe.quaternion": "Quaternion",
|
||||
"panel.animations": "Animations",
|
||||
"panel.keyframe": "Keyframe",
|
||||
"panel.keyframe.type": "Keyframe (%0)",
|
||||
"generic.delete": "Delete",
|
||||
"generic.rename": "Rename",
|
||||
"message.rename_animation": "Rename Animation",
|
||||
"message.animation_update_var": "Animation Update Variable",
|
||||
"message.no_animation_selected": "You have to select an animation to do this",
|
||||
"message.no_bone_selected": "You have to select a bone to do this",
|
||||
"message.duplicate_groups.title": "Bone Name Duplicate",
|
||||
"message.duplicate_groups.message": "The name of this bone exists on multiple bones. This can cause problems.",
|
||||
"action.select_all_keyframes": "Select All Keyframes",
|
||||
"action.select_all_keyframes.desc": "Select all keyframes of the current bone",
|
||||
"action.delete_keyframes": "Delete Keyframes",
|
||||
"action.delete_keyframes.desc": "Delete all selected keyframes",
|
||||
"menu.animation": "Animation",
|
||||
"menu.animation.loop": "Loop",
|
||||
"menu.animation.override": "Override",
|
||||
"menu.animation.anim_time_update": "Update Variable",
|
||||
"message.display_skin_model.title": "Skin Model",
|
||||
"message.display_skin_model.message": "Chose the model type of your skin",
|
||||
"message.display_skin_model.classic": "Classic",
|
||||
"message.display_skin_model.slim": "Slim",
|
||||
"message.bone_material": "Change bone material",
|
||||
"action.slider_animation_length": "Animation Length",
|
||||
"action.slider_animation_length.desc": "Change the length of the selected animation",
|
||||
"menu.group.material": "Set Material",
|
||||
"action.camera_reset": "Reset Camera",
|
||||
"action.camera_reset.desc": "Reset the current preview to the default camera angle",
|
||||
"panel.variable_placeholders": "Variable Placeholders",
|
||||
"panel.variable_placeholders.info": "List the variables you want to preview via name=value",
|
||||
"status_bar.vertex_distance": "Distance: %0"
|
||||
}
|
95
lang/ja.json
95
lang/ja.json
@ -360,9 +360,9 @@
|
||||
"action.swap_tools.desc": "移動ツールとサイズ変更ツールを切り替える",
|
||||
"action.project_window": "プロジェクト…",
|
||||
"action.project_window.desc": "モデルのメタデータを編集できるウィンドウを開きます",
|
||||
"action.new_block_model": "NEWモデル",
|
||||
"action.new_block_model": "モデル",
|
||||
"action.new_block_model.desc": "新しいモデルを作成する",
|
||||
"action.new_entity_model": "NEWエンティティモデル",
|
||||
"action.new_entity_model": "エンティティモデル",
|
||||
"action.new_entity_model.desc": "新しいベッドロックエンティティモデルを作成する",
|
||||
"action.open_model": "モデルを開く",
|
||||
"action.open_model.desc": "コンピュータからモデルファイルを取り出す",
|
||||
@ -520,7 +520,7 @@
|
||||
"menu.filter": "フィルタ",
|
||||
"menu.display": "表示",
|
||||
"menu.view": "ビュー",
|
||||
"menu.file.new": "NEW",
|
||||
"menu.file.new": "新規",
|
||||
"menu.file.recent": "最近作ったモデル",
|
||||
"menu.file.import": "インポート",
|
||||
"menu.file.export": "エクスポート",
|
||||
@ -535,17 +535,13 @@
|
||||
"menu.view.background": "背景",
|
||||
"menu.view.screenshot": "スクリーンショット",
|
||||
"menu.cube.duplicate": "複製",
|
||||
"menu.cube.rename": "名前を変更する",
|
||||
"menu.cube.color": "ブロックのカラー",
|
||||
"menu.cube.texture": "テクスチャ",
|
||||
"menu.cube.texture.transparent": "透明",
|
||||
"menu.cube.texture.blank": "空白",
|
||||
"menu.cube.delete": "削除",
|
||||
"menu.group.duplicate": "複製",
|
||||
"menu.group.sort": "ソート",
|
||||
"menu.group.resolve": "決定",
|
||||
"menu.group.rename": "名前を変更する",
|
||||
"menu.group.rename_content": "コンテンツの名前を変更する",
|
||||
"menu.texture.face": "面に適用する",
|
||||
"menu.texture.cube": "キューブに適用する",
|
||||
"menu.texture.file": "ファイル",
|
||||
@ -555,7 +551,6 @@
|
||||
"menu.texture.edit": "編集",
|
||||
"menu.texture.export": "名前をつけて保存",
|
||||
"menu.texture.save": "セーブ",
|
||||
"menu.texture.delete": "削除",
|
||||
"menu.texture.properties": "プロパティ",
|
||||
"menu.preview.background": "背景",
|
||||
"menu.preview.background.load": "ロード",
|
||||
@ -589,7 +584,6 @@
|
||||
"cube.color.blue": "青色",
|
||||
"cube.color.green": "緑色",
|
||||
"cube.color.lime": "ライム",
|
||||
"switches.remove": "削除",
|
||||
"switches.visibility": "可視性",
|
||||
"switches.export": "エクスポート",
|
||||
"switches.shading": "シャドー",
|
||||
@ -597,7 +591,7 @@
|
||||
"panel.uv": "UV",
|
||||
"panel.display": "表示",
|
||||
"panel.textures": "テクスチャ",
|
||||
"panel.outliner": "アウトライナー",
|
||||
"panel.outliner": "Outliner",
|
||||
"panel.options": "回転",
|
||||
"panel.options.angle": "角度",
|
||||
"panel.options.origin": "原点",
|
||||
@ -625,7 +619,7 @@
|
||||
"display.slot.frame": "額縁",
|
||||
"display.slot.gui": "GUI",
|
||||
"display.rotation": "回転",
|
||||
"display.translation": "移動",
|
||||
"display.translation": "位置",
|
||||
"display.scale": "スケール",
|
||||
"display.slot": "スロット",
|
||||
"display.reference": "参照モデル",
|
||||
@ -640,16 +634,13 @@
|
||||
"display.reference.block": "ブロック",
|
||||
"display.reference.frame": "額縁",
|
||||
"display.reference.inventory_nine": "3×3",
|
||||
"display.reference.inventory_full": "インベントリ",
|
||||
"display.reference.inventory_full": "インベントリー",
|
||||
"display.reference.hud": "HUD",
|
||||
"display.preset.blank_name": "名前を入力してください",
|
||||
"display.preset.item": "デフォルトアイテム",
|
||||
"display.preset.block": "デフォルトブロック",
|
||||
"display.preset.handheld": "デフォルト武器",
|
||||
"display.preset.rod": "デフォルトロッド",
|
||||
"display.preset.use": "適用",
|
||||
"display.preset.use_all": "すべてのスロットに適用",
|
||||
"display.preset.remove": "削除",
|
||||
"dialog.continue": "続ける",
|
||||
"message.square_textures": "テクスチャは正方形でなければ適用出来ません",
|
||||
"message.unsaved_texture.title": "保存されてないテクスチャ",
|
||||
@ -680,7 +671,6 @@
|
||||
"dialog.shift_uv.message": "UVオフセット座標を算出する数値を入力します。その数値を追加したい場合は、「+」を先頭に追加してください。",
|
||||
"dialog.shift_uv.horizontal": "水平",
|
||||
"dialog.shift_uv.vertical": "垂直",
|
||||
"dialog.shift_uv": "シフトUV",
|
||||
"keybindings.reset": "リセット",
|
||||
"keybindings.clear": "クリア",
|
||||
"action.cube_counter": "キューブカウンター",
|
||||
@ -746,16 +736,65 @@
|
||||
"status_bar.unsaved": "変更が保存されていません",
|
||||
"action.animation_mode_tool": "アニメーション",
|
||||
"action.animation_mode_tool.desc": "モデルのカスタムアニメーション",
|
||||
"action.move_up": "Move Up",
|
||||
"action.move_up.desc": "Move the selected cubes up relative to the current camera angle",
|
||||
"action.move_down": "Move Down",
|
||||
"action.move_down.desc": "Move the selected cubes down relative to the current camera angle",
|
||||
"action.move_left": "Move Left",
|
||||
"action.move_left.desc": "Move the selected cubes left relative to the current camera angle",
|
||||
"action.move_right": "Move Right",
|
||||
"action.move_right.desc": "Move the selected cubes right relative to the current camera angle",
|
||||
"action.move_forth": "Move Forth",
|
||||
"action.move_forth.desc": "Move the selected cubes forth relative to the current camera angle",
|
||||
"action.move_back": "Move Back",
|
||||
"action.move_back.desc": "Move the selected cubes back relative to the current camera angle"
|
||||
"action.move_up": "上に移動",
|
||||
"action.move_up.desc": "選択したキューブを上に移動する",
|
||||
"action.move_down": "下に移動",
|
||||
"action.move_down.desc": "選択したキューブを下に移動する",
|
||||
"action.move_left": "左に移動",
|
||||
"action.move_left.desc": "選択したキューブを左に移動する",
|
||||
"action.move_right": "右に移動",
|
||||
"action.move_right.desc": "選択したキューブを右に移動する",
|
||||
"action.move_forth": "前に移動",
|
||||
"action.move_forth.desc": "選択したキューブを前方に移動する",
|
||||
"action.move_back": "後ろに移動",
|
||||
"action.move_back.desc": "選択したキューブを後方に移動する",
|
||||
"layout.color.wireframe": "ワイヤーフレーム",
|
||||
"layout.color.wireframe.desc": "Wireframe view lines",
|
||||
"action.add_animation": "アニメーションを加える",
|
||||
"action.add_animation.desc": "action.add_animation.desc",
|
||||
"action.load_animation_file": "アニメーションをインポートする",
|
||||
"action.load_animation_file.desc": "action.load_animation_file.desc",
|
||||
"action.play_animation": "アニメーションを再生する",
|
||||
"action.play_animation.desc": "action.play_animation.desc",
|
||||
"action.export_animation_file": "アニメーションをエクスポートする",
|
||||
"action.export_animation_file.desc": "action.export_animation_file.desc",
|
||||
"action.slider_keyframe_time": "タイムコード",
|
||||
"action.slider_keyframe_time.desc": "action.slider_keyframe_time.desc",
|
||||
"timeline.rotation": "ローテーション",
|
||||
"timeline.position": "ポジション",
|
||||
"timeline.scale": "スケール",
|
||||
"menu.timeline.add": "キーフレームを加える",
|
||||
"menu.keyframe.quaternion": "四元数",
|
||||
"panel.animations": "アニメーション",
|
||||
"panel.keyframe": "キーフレーム",
|
||||
"panel.keyframe.type": "キーフレーム(%0)",
|
||||
"generic.delete": "削除",
|
||||
"generic.rename": "名前を変更",
|
||||
"message.rename_animation": "アニメーションの名前を変更する",
|
||||
"message.animation_update_var": "Animation Update Variable",
|
||||
"message.no_animation_selected": "アニメーションを選択してください",
|
||||
"message.no_bone_selected": "You have to select a bone to do this",
|
||||
"message.duplicate_groups.title": "Bone Name Duplicate",
|
||||
"message.duplicate_groups.message": "The name of this bone exists on multiple bones. This can cause problems.",
|
||||
"action.select_all_keyframes": "すべてのキーフレームを選択",
|
||||
"action.select_all_keyframes.desc": "Select all keyframes of the current bone",
|
||||
"action.delete_keyframes": "キーフレームを削除",
|
||||
"action.delete_keyframes.desc": "選択したすべてのキーフレームを削除する",
|
||||
"menu.animation": "アニメーション",
|
||||
"menu.animation.loop": "ループ",
|
||||
"menu.animation.override": "オーバーライド",
|
||||
"menu.animation.anim_time_update": "Update Variable",
|
||||
"message.display_skin_model.title": "スキンモデル",
|
||||
"message.display_skin_model.message": "Chose the model type of your skin",
|
||||
"message.display_skin_model.classic": "クラシック",
|
||||
"message.display_skin_model.slim": "スリム",
|
||||
"message.bone_material": "Change bone material",
|
||||
"action.slider_animation_length": "アニメーションの長さ",
|
||||
"action.slider_animation_length.desc": "Change the length of the selected animation",
|
||||
"menu.group.material": "Set Material",
|
||||
"action.camera_reset": "Reset Camera",
|
||||
"action.camera_reset.desc": "Reset the current preview to the default camera angle",
|
||||
"panel.variable_placeholders": "Variable Placeholders",
|
||||
"panel.variable_placeholders.info": "List the variables you want to preview via name=value",
|
||||
"status_bar.vertex_distance": "Distance: %0"
|
||||
}
|
81
lang/nl.json
81
lang/nl.json
@ -535,17 +535,13 @@
|
||||
"menu.view.background": "Achtergrond",
|
||||
"menu.view.screenshot": "Schermafbeelding",
|
||||
"menu.cube.duplicate": "Dupliceer",
|
||||
"menu.cube.rename": "Wijzig naam",
|
||||
"menu.cube.color": "Markeerkleur",
|
||||
"menu.cube.texture": "Afbeelding",
|
||||
"menu.cube.texture.transparent": "Transparant",
|
||||
"menu.cube.texture.blank": "Leeg",
|
||||
"menu.cube.delete": "Verwijderen",
|
||||
"menu.group.duplicate": "Dupliceren",
|
||||
"menu.group.sort": "Sorteren",
|
||||
"menu.group.resolve": "Oplossen",
|
||||
"menu.group.rename": "wijzig naam",
|
||||
"menu.group.rename_content": "Een Andere Naam Geven",
|
||||
"menu.texture.face": "Pas Toe op Oppervlak",
|
||||
"menu.texture.cube": "Pas Toe op Kubus",
|
||||
"menu.texture.file": "Bestand",
|
||||
@ -555,7 +551,6 @@
|
||||
"menu.texture.edit": "Bewerken",
|
||||
"menu.texture.export": "Opslaan Als",
|
||||
"menu.texture.save": "Opslaan",
|
||||
"menu.texture.delete": "Verwijderen",
|
||||
"menu.texture.properties": "Eigenschappen",
|
||||
"menu.preview.background": "Achtergrond",
|
||||
"menu.preview.background.load": "Laden",
|
||||
@ -589,7 +584,6 @@
|
||||
"cube.color.blue": "Blauw",
|
||||
"cube.color.green": "Groen",
|
||||
"cube.color.lime": "Lichtgroen",
|
||||
"switches.remove": "Verwijder",
|
||||
"switches.visibility": "Zichtbaarheid",
|
||||
"switches.export": "Exporteer",
|
||||
"switches.shading": "Schaduw",
|
||||
@ -647,9 +641,6 @@
|
||||
"display.preset.block": "Standaard Blok",
|
||||
"display.preset.handheld": "Standaard Wapen",
|
||||
"display.preset.rod": "Standaard Rod",
|
||||
"display.preset.use": "Pas Toe",
|
||||
"display.preset.use_all": "Op elk slot toepassen",
|
||||
"display.preset.remove": "Verwijder",
|
||||
"dialog.continue": "Doorgaan",
|
||||
"message.square_textures": "Texturen moeten vierkant zijn",
|
||||
"message.unsaved_texture.title": "Niet Opgeslagen Textuur",
|
||||
@ -680,7 +671,6 @@
|
||||
"dialog.shift_uv.message": "Voer het getal waarmee je de UV offset coördinaten mee wilt vermenigvuldigen. ",
|
||||
"dialog.shift_uv.horizontal": "Horizontaal",
|
||||
"dialog.shift_uv.vertical": "Verticaal",
|
||||
"dialog.shift_uv": "Shift UV",
|
||||
"keybindings.reset": "Reset",
|
||||
"keybindings.clear": "Leeg",
|
||||
"action.cube_counter": "Blok teller",
|
||||
@ -742,20 +732,69 @@
|
||||
"action.update_autouv": "Update Auto UV",
|
||||
"action.update_autouv.desc": "Update de auto UV van de geselecteerde",
|
||||
"category.uv": "UV",
|
||||
"status_bar.saved": "Model is saved",
|
||||
"status_bar.unsaved": "There are unsaved changes",
|
||||
"action.animation_mode_tool": "Animation",
|
||||
"action.animation_mode_tool.desc": "Define custom animations for the model",
|
||||
"action.move_up": "Move Up",
|
||||
"status_bar.saved": "Model is opgeslagen",
|
||||
"status_bar.unsaved": "Er zijn onopgeslagen veranderingen",
|
||||
"action.animation_mode_tool": "Animatie",
|
||||
"action.animation_mode_tool.desc": "Defineer custom animaties voor het model",
|
||||
"action.move_up": "Beweeg omhoog",
|
||||
"action.move_up.desc": "Move the selected cubes up relative to the current camera angle",
|
||||
"action.move_down": "Move Down",
|
||||
"action.move_down": "Beweeg naar beneden",
|
||||
"action.move_down.desc": "Move the selected cubes down relative to the current camera angle",
|
||||
"action.move_left": "Move Left",
|
||||
"action.move_left": "Beweeg Naar Links",
|
||||
"action.move_left.desc": "Move the selected cubes left relative to the current camera angle",
|
||||
"action.move_right": "Move Right",
|
||||
"action.move_right": "Beweeg Naar Rechts",
|
||||
"action.move_right.desc": "Move the selected cubes right relative to the current camera angle",
|
||||
"action.move_forth": "Move Forth",
|
||||
"action.move_forth": "Beweeg naar voren",
|
||||
"action.move_forth.desc": "Move the selected cubes forth relative to the current camera angle",
|
||||
"action.move_back": "Move Back",
|
||||
"action.move_back.desc": "Move the selected cubes back relative to the current camera angle"
|
||||
"action.move_back": "Beweeg naar achteren",
|
||||
"action.move_back.desc": "Move the selected cubes back relative to the current camera angle",
|
||||
"layout.color.wireframe": "Wireframe",
|
||||
"layout.color.wireframe.desc": "Wireframe view lines",
|
||||
"action.add_animation": "Voeg Animatie Toe",
|
||||
"action.add_animation.desc": "Creëer een blanco animatie ",
|
||||
"action.load_animation_file": "Import Animatie",
|
||||
"action.load_animation_file.desc": "Import een animatie bestand",
|
||||
"action.play_animation": "Speel Animaties",
|
||||
"action.play_animation.desc": "Preview de geselecteerde animatie",
|
||||
"action.export_animation_file": "Exporteer Animaties",
|
||||
"action.export_animation_file.desc": "Exporteer een json file met de huidige animaties",
|
||||
"action.slider_keyframe_time": "Tijdcode",
|
||||
"action.slider_keyframe_time.desc": "Verander de tijdcode van de geselecteerde keyframes",
|
||||
"timeline.rotation": "Rotatie",
|
||||
"timeline.position": "Positie",
|
||||
"timeline.scale": "Vergroot/Verklein",
|
||||
"menu.timeline.add": "Voeg KeyframeToe",
|
||||
"menu.keyframe.quaternion": "Quaternion",
|
||||
"panel.animations": "Animaties",
|
||||
"panel.keyframe": "Keyframe",
|
||||
"panel.keyframe.type": "Keyframe (%0)",
|
||||
"generic.delete": "Verwijder",
|
||||
"generic.rename": "Hernoem",
|
||||
"message.rename_animation": "Hernoem Animatie",
|
||||
"message.animation_update_var": "Animatie Update Variabele",
|
||||
"message.no_animation_selected": "Je moet een animatie selecteren om dit te doen",
|
||||
"message.no_bone_selected": "You have to select a bone to do this",
|
||||
"message.duplicate_groups.title": "Bone Name Duplicate",
|
||||
"message.duplicate_groups.message": "The name of this bone exists on multiple bones. This can cause problems.",
|
||||
"action.select_all_keyframes": "Select All Keyframes",
|
||||
"action.select_all_keyframes.desc": "Select all keyframes of the current bone",
|
||||
"action.delete_keyframes": "Delete Keyframes",
|
||||
"action.delete_keyframes.desc": "Delete all selected keyframes",
|
||||
"menu.animation": "Animation",
|
||||
"menu.animation.loop": "Loop",
|
||||
"menu.animation.override": "Override",
|
||||
"menu.animation.anim_time_update": "Update Variable",
|
||||
"message.display_skin_model.title": "Skin Model",
|
||||
"message.display_skin_model.message": "Chose the model type of your skin",
|
||||
"message.display_skin_model.classic": "Classic",
|
||||
"message.display_skin_model.slim": "Slim",
|
||||
"message.bone_material": "Change bone material",
|
||||
"action.slider_animation_length": "Animation Length",
|
||||
"action.slider_animation_length.desc": "Change the length of the selected animation",
|
||||
"menu.group.material": "Set Material",
|
||||
"action.camera_reset": "Reset Camera",
|
||||
"action.camera_reset.desc": "Reset the current preview to the default camera angle",
|
||||
"panel.variable_placeholders": "Variable Placeholders",
|
||||
"panel.variable_placeholders.info": "List the variables you want to preview via name=value",
|
||||
"status_bar.vertex_distance": "Distance: %0"
|
||||
}
|
800
lang/pl.json
Normal file
800
lang/pl.json
Normal file
@ -0,0 +1,800 @@
|
||||
{
|
||||
"dialog.ok": "OK",
|
||||
"dialog.cancel": "Anuluj",
|
||||
"dialog.confirm": "Potwierdź",
|
||||
"dialog.close": "Zamknij",
|
||||
"dialog.import": "Importuj",
|
||||
"dialog.save": "Zapisz",
|
||||
"dialog.discard": "Odrzuć",
|
||||
"dialog.dontshowagain": "Nie pokazuj ponownie",
|
||||
"data.cube": "Kostka",
|
||||
"data.cubes": "Kostki",
|
||||
"data.group": "Grupa",
|
||||
"data.texture": "Tekstura",
|
||||
"data.plugin": "Plugin",
|
||||
"data.preview": "Podgląd",
|
||||
"data.toolbar": "Pasek narzędzi",
|
||||
"data.image": "Obraz",
|
||||
"keys.ctrl": "Ctrl",
|
||||
"keys.shift": "Shift",
|
||||
"keys.alt": "Alt",
|
||||
"keys.meta": "Cmd",
|
||||
"keys.delete": "Usuń",
|
||||
"keys.space": "Spacja",
|
||||
"keys.leftclick": "Lewy przycisk myszy",
|
||||
"keys.middleclick": "Środkowy przycisk myszy",
|
||||
"keys.rightclick": "Prawy przycisk myszy",
|
||||
"keys.tab": "Tab",
|
||||
"keys.backspace": "Backspace",
|
||||
"keys.enter": "Enter",
|
||||
"keys.escape": "Escape",
|
||||
"keys.function": "F%0",
|
||||
"keys.numpad": "Numpad %0",
|
||||
"keys.caps": "Caps Lock",
|
||||
"keys.menu": "Menu kontekstowe",
|
||||
"keys.left": "Lewo",
|
||||
"keys.up": "Góra",
|
||||
"keys.right": "Prawo",
|
||||
"keys.down": "Dół",
|
||||
"keys.pageup": "Page Up",
|
||||
"keys.pagedown": "Page Down",
|
||||
"keys.plus": "Plus",
|
||||
"keys.comma": "Przecinek",
|
||||
"keys.point": "Kropka",
|
||||
"keys.minus": "Minus",
|
||||
"keys.cross": "Krzyżyk",
|
||||
"keys.end": "End",
|
||||
"keys.pos1": "Pozycja 1",
|
||||
"keys.printscreen": "Print Screen",
|
||||
"keys.pause": "Pauza",
|
||||
"message.rotation_limit.title": "Ograniczenia rotacji",
|
||||
"message.rotation_limit.message": "Rotacje są ograniczone do jednej osi i wielokrotności 22,5 stopni przez Minecraft. Obracanie na innej osi zresetuje obroty na innych osiach. Wyłącz opcje \"Ograniczenia rotacji\" jeżeli tworzysz model na inne potrzeby i potrzebujesz dowolności rotacji.",
|
||||
"message.file_not_found.title": "Nie znaleziono pliku",
|
||||
"message.file_not_found.message": "Blockbench nie mógł odnaleźć pliku. Upewnij się że jest zapisany lokalnie, a nie w chmurze.",
|
||||
"message.screenshot.title": "Zrzut ekranu",
|
||||
"message.screenshot.message": "Przechwycono zrzut ekranu.",
|
||||
"message.screenshot.clipboard": "Schowek",
|
||||
"message.screenshot.right_click": "Zrzut ekranu - kliknij prawym przyciskiem myszy aby skopiować",
|
||||
"message.invalid_file.title": "Nieprawidłowy plik",
|
||||
"message.invalid_file.message": "Nie udało się otworzyć pliku modelu: %0",
|
||||
"message.invalid_model.title": "Nieprawidłowy plik modelu",
|
||||
"message.invalid_model.message": "Ten plik nie zawiera prawidłowych danych modelu.",
|
||||
"message.child_model_only.title": "Pusty model potomka",
|
||||
"message.child_model_only.message": "Ten plik jest potomkiem %0 i nie zawiera modelu.",
|
||||
"message.drag_background.title": "Pozycjonuj tło",
|
||||
"message.drag_background.message": "Przesuń tło aby zmienić jego pozycję. Przytrzymaj shift i przeciągnij w górę lub w dół aby zmienić rozmiar.",
|
||||
"message.unsaved_textures.title": "Niezapisane tekstury",
|
||||
"message.unsaved_textures.message": "Twój model ma niezapisane tekstury. Zapisz je i wstaw w odpowiedni folder w swoim resource packu.",
|
||||
"message.model_clipping.title": "Model zbyt duży",
|
||||
"message.model_clipping.message": "Twój model zawiera %0 kostek, które są większe niż limit 3x3x3 dozwalany przez Minecraft. Ten model nie będzie działał w Minecrafcie. Włącz opcję 'Ograniczony obszar roboczy' żeby temu zapobiec.",
|
||||
"message.loose_texture.title": "Import tekstur",
|
||||
"message.loose_texture.message": "Zaimportowana tekstura nie jest w resource packu. Minecraft może załadować tylko tekstury z folderu textures z załadowanego resource packa.",
|
||||
"message.loose_texture.change": "Zmień ścieżkę",
|
||||
"message.update_res.title": "Rozdzielczość tekstury",
|
||||
"message.update_res.message": "Czy chcesz zmienić rozdzielczość projektu do rozdzielczości tekstury? Kliknij 'Anuluj' jeżeli twoja tekstura ma większą rozdzielczość niż normalnie.",
|
||||
"message.update_res.update": "Aktualizuj",
|
||||
"message.bedrock_overwrite_error.message": "Blockbench nie może połączyć tego modelu ze starym plikiem",
|
||||
"message.bedrock_overwrite_error.backup_overwrite": "Stwórz kopię zapasową i nadpisz",
|
||||
"message.bedrock_overwrite_error.overwrite": "Nadpisz",
|
||||
"message.close_warning.message": "Czy chcesz zapisać swój model?",
|
||||
"message.close_warning.web": "Twoje niezapisane zmiany będą stracone. Jesteś pewien, że chcesz wyjść?",
|
||||
"message.default_textures.title": "Domyślne tekstury",
|
||||
"message.default_textures.message": "Wybierz folder \"textures\" w domyślnym resource packu",
|
||||
"message.default_textures.detail": "Wyciągnij domyślny resource pack z pliku .jar Minecrafta albo wygoogluj i ściągnij go. Potem, znajdź folder \"textures\" i otwórz go. Blockbench zapamięta to miejsce i weźmie stamtąd tekstury, jeżeli nie znajdzie ich w aktualnym resource packu.",
|
||||
"message.default_textures.select": "Wybierz domyślny folder \"textures\"",
|
||||
"message.default_textures.continue": "Kontynuuj",
|
||||
"message.default_textures.remove": "Usuń",
|
||||
"message.image_editor.title": "Wybierz edytor obrazów",
|
||||
"message.image_editor.file": "Wybierz plik...",
|
||||
"message.image_editor.exe": "Wybierz .exe edytora obrazów",
|
||||
"message.display_skin.title": "Wyświetl skin",
|
||||
"message.display_skin.message": "Wybierz skin z komputera lub wpisz nazwę gracza",
|
||||
"message.display_skin.upload": "Prześlij skin",
|
||||
"message.display_skin.name": "Nazwa gracza",
|
||||
"message.display_skin.reset": "Resetuj",
|
||||
"message.invalid_plugin": "Nieprawidłowy plugin, sprawdź konsolę",
|
||||
"message.load_plugin_app": "Czy chcesz zezwolić temu pluginowi na dokonywanie zmian na twoim komputerze? Używaj tylko pluginów osób, którym ufasz.",
|
||||
"message.load_plugin_web": "Czy chcesz załadować ten plugin? Używaj tylko pluginów osób, którym ufasz.",
|
||||
"message.preset_no_info": "Ten preset nie zawiera informacji dla tego slotu",
|
||||
"message.restart_to_update": "Otwórz Blockbench ponownie by zatwierdzić zmiany",
|
||||
"message.save_file": "Zapisano jako %0",
|
||||
"message.save_obj": "Zapisano jako model .obj",
|
||||
"message.save_entity": "Zapisano jako model bytu bedrock",
|
||||
"message.rename_cubes": "Zmień nazwę kostek",
|
||||
"dialog.project.title": "Projekt",
|
||||
"dialog.project.name": "Nazwa pliku",
|
||||
"dialog.project.parent": "Model rodzic",
|
||||
"dialog.project.geoname": "Nazwa geometrii moba",
|
||||
"dialog.project.openparent": "Otwórz rodzica",
|
||||
"dialog.project.ao": "Ambient Occlusion",
|
||||
"dialog.project.texture_size": "Rozmiar tekstury",
|
||||
"dialog.project.width": "Szerokość",
|
||||
"dialog.project.height": "Wysokość",
|
||||
"dialog.project.to_blockmodel": "Do modelu bloku",
|
||||
"dialog.project.to_entitymodel": "Do modelu bytu",
|
||||
"dialog.texture.title": "Tekstura",
|
||||
"dialog.texture.name": "Nazwa",
|
||||
"dialog.texture.variable": "Zmienna",
|
||||
"dialog.texture.namespace": "Przestrzeń nazw",
|
||||
"dialog.texture.folder": "Folder",
|
||||
"dialog.extrude.title": "Wytłocz obrazek",
|
||||
"dialog.extrude.mode": "Tryb skanowania",
|
||||
"dialog.extrude.mode.areas": "Pola",
|
||||
"dialog.extrude.mode.lines": "Linie",
|
||||
"dialog.extrude.mode.columns": "Kolumny",
|
||||
"dialog.extrude.mode.pixels": "Piksele",
|
||||
"dialog.extrude.opacity": "Minimalne krycie",
|
||||
"dialog.extrude.scan": "Skanuj i importuj",
|
||||
"dialog.display_preset.title": "Stwórz preset",
|
||||
"dialog.display_preset.message": "Wybierz sloty, które chcesz zapisać",
|
||||
"dialog.display_preset.create": "Stwórz",
|
||||
"dialog.select.title": "Wybierz",
|
||||
"dialog.select.new": "Nowe zaznaczenie",
|
||||
"dialog.select.group": "W zaznaczonej grupie",
|
||||
"dialog.select.name": "Nazwa zawiera",
|
||||
"dialog.select.random": "Losuj",
|
||||
"dialog.select.select": "Wybierz",
|
||||
"dialog.scale.title": "Skaluj model",
|
||||
"dialog.scale.axis": "Oś",
|
||||
"dialog.scale.scale": "Skala",
|
||||
"dialog.scale.clipping": "Ucięty model: twój model jest zbyt duży dla obszaru roboczego",
|
||||
"dialog.scale.confirm": "Skala",
|
||||
"dialog.plugins.title": "Pluginy",
|
||||
"dialog.plugins.installed": "Zainstalowane",
|
||||
"dialog.plugins.available": "Dostępne",
|
||||
"dialog.plugins.install": "Zainstaluj",
|
||||
"dialog.plugins.uninstall": "Odinstaluj",
|
||||
"dialog.plugins.reload": "Przeładuj",
|
||||
"dialog.plugins.none_installed": "Brak zainstalowanych pluginów",
|
||||
"dialog.plugins.none_available": "Brak dostępnych pluginów",
|
||||
"dialog.plugins.outdated": "Wymaga nowszej wersji Blockbench",
|
||||
"dialog.plugins.web_only": "Tylko dla aplikacji na stronie",
|
||||
"dialog.plugins.app_only": "Tylko dla aplikacji komputerowej",
|
||||
"dialog.plugins.author": "autorstwa %0",
|
||||
"dialog.plugins.show_less": "Pokaż mniej",
|
||||
"dialog.entitylist.title": "Otwórz model bytu",
|
||||
"dialog.entitylist.text": "Wybierz model który chesz zaimportować",
|
||||
"dialog.entitylist.bones": "Kości",
|
||||
"dialog.entitylist.cubes": "Kostki",
|
||||
"dialog.create_texture.title": "Stwórz teksturę",
|
||||
"dialog.create_texture.name": "Nazwa",
|
||||
"dialog.create_texture.folder": "Folder",
|
||||
"dialog.create_texture.template": "Szablon",
|
||||
"dialog.create_texture.resolution": "Rozdzielczość",
|
||||
"dialog.input.title": "Wstaw",
|
||||
"dialog.update.title": "Aktualizacje",
|
||||
"dialog.update.refresh": "Odśwież",
|
||||
"dialog.update.up_to_date": "Blockbench jest aktualny!",
|
||||
"dialog.update.connecting": "Łączenie z serwerem",
|
||||
"dialog.settings.settings": "Ustawienia",
|
||||
"dialog.settings.keybinds": "Klawisze",
|
||||
"dialog.settings.layout": "Układ",
|
||||
"dialog.settings.about": "O programie",
|
||||
"layout.color.back": "Wstecz",
|
||||
"layout.color.back.desc": "Tła i pola wpisywania",
|
||||
"layout.color.dark": "Ciemny",
|
||||
"layout.color.dark.desc": "Tło obszaru roboczego",
|
||||
"layout.color.ui": "UI",
|
||||
"layout.color.ui.desc": "Główny kolor interfejsu",
|
||||
"layout.color.bright_ui": "Jasny UI",
|
||||
"layout.color.bright_ui.desc": "Menu kontekstowe i podpowiedzi",
|
||||
"layout.color.button": "Przycisk",
|
||||
"layout.color.button.desc": "Przyciski i przełączniki",
|
||||
"layout.color.selected": "Wybrany",
|
||||
"layout.color.selected.desc": "Wybrane zakładki i obiekty",
|
||||
"layout.color.border": "Ramki",
|
||||
"layout.color.border.desc": "Ramki przycisków i pól wpisywania",
|
||||
"layout.color.accent": "Akcent",
|
||||
"layout.color.accent.desc": "Gałki przełączników i inne detale",
|
||||
"layout.color.grid": "Siatka",
|
||||
"layout.color.grid.desc": "Siatka podglądu 3D",
|
||||
"layout.color.text": "Tekst",
|
||||
"layout.color.text.desc": "Normalny tekst",
|
||||
"layout.color.light": "Jasny",
|
||||
"layout.color.light.desc": "Zaznaczony tekst",
|
||||
"layout.color.accent_text": "Akcent tekstu",
|
||||
"layout.color.accent_text.desc": "Tekst na zaakcentowanych elementach",
|
||||
"layout.font.main": "Główna czcionka",
|
||||
"layout.font.headline": "Czcionka nagłówkowa",
|
||||
"about.version": "Wersja:",
|
||||
"about.creator": "Twórca:",
|
||||
"about.website": "Strona:",
|
||||
"about.bugtracker": "Śledzenie błędów:",
|
||||
"about.electron": "Ta aplikacja jest zbudowana za pomocą Electron, frameworka do tworzenia natywnych aplikacji, używając technologii sieciowych, takich jak Javascript, HTML i CSS.",
|
||||
"about.vertex_snap": "Przyciąganie wierzchołków jest bazowane na pluginie autorstwa SirBenet",
|
||||
"about.icons": "Paczki ikon:",
|
||||
"about.libraries": "Biblioteki:",
|
||||
"settings.category.general": "Ogólne",
|
||||
"settings.category.preview": "Podgląd",
|
||||
"settings.category.grid": "Siatka",
|
||||
"settings.category.edit": "Edytuj",
|
||||
"settings.category.snapping": "Przyciąganie",
|
||||
"settings.category.defaults": "Wartości domyślne",
|
||||
"settings.category.dialogs": "Okienka dialogowe",
|
||||
"settings.category.export": "Eksportuj",
|
||||
"settings.language": "Język",
|
||||
"settings.language.desc": "Język interfejsu. Otwórz Blockbench ponownie, żeby zatwierdzić zmiany.",
|
||||
"settings.show_actions": "Wyświetlaj akcje",
|
||||
"settings.show_actions.desc": "Wyświetlaj każdą akcję w pasku statusu",
|
||||
"settings.backup_interval": "Interwał kopii zapasowych",
|
||||
"settings.backup_interval.desc": "Interwał tworzenia automatycznych kopii zapasowych, w minutach",
|
||||
"settings.origin_size": "Punkt obrotu",
|
||||
"settings.origin_size.desc": "Rozmiar punktu obrotu",
|
||||
"settings.control_size": "Rozmiar kontroli osi",
|
||||
"settings.control_size.desc": "Rozmiar narzędzia do kontroli 3 osi",
|
||||
"settings.display_skin": "Wyświetlany skin",
|
||||
"settings.display_skin.desc": "Skin używany do wyświetlenia na referencyjnym modelu gracza",
|
||||
"settings.shading": "Cieniowanie",
|
||||
"settings.shading.desc": "Włącz cieniowanie",
|
||||
"settings.transparency": "Przezroczystość",
|
||||
"settings.transparency.desc": "Renderowanie przezroczystych tekstur jako przezroczyste",
|
||||
"settings.texture_fps": "FPS animowanych tekstur",
|
||||
"settings.texture_fps.desc": "Klatki na sekundę dla animowanych tekstur",
|
||||
"settings.base_grid": "Mała siatka",
|
||||
"settings.base_grid.desc": "Pokaż małą siatkę i osie",
|
||||
"settings.large_grid": "Duża siatka",
|
||||
"settings.large_grid.desc": "Pokaż siatkę bloków 3x3",
|
||||
"settings.full_grid": "Pełna duża siatka",
|
||||
"settings.full_grid.desc": "Pokaż precyzyjną siatkę 3x3",
|
||||
"settings.large_box": "Duże pudełko",
|
||||
"settings.large_box.desc": "Pokaż granice bloków 3x3",
|
||||
"settings.display_grid": "Tryb wyświetlania",
|
||||
"settings.display_grid.desc": "Pokaż siatkę w trybie wyświetlania",
|
||||
"settings.undo_limit": "Limit kroków wstecz",
|
||||
"settings.undo_limit.desc": "Maksymalna liczba kroków wstecz",
|
||||
"settings.restricted_canvas": "Ograniczony obszar roboczy",
|
||||
"settings.restricted_canvas.desc": "Ogranicz obszar roboczy do rozmiarów 3x3 bloki aby uniknąć nieprawidłowych modeli",
|
||||
"settings.limited_rotation": "Ograniczona rotacja",
|
||||
"settings.limited_rotation.desc": "Ogranicz rotację elementó do wartości prawidłowych dla modeli w Minecraft",
|
||||
"settings.local_move": "Przesuwaj na osiach lokalnych",
|
||||
"settings.local_move.desc": "Przesuwaj elementy po ich własnych osiach, jeżeli to możliwe",
|
||||
"settings.canvas_unselect": "Kliknięcie w obszar roboczy odznacza",
|
||||
"settings.canvas_unselect.desc": "Odznacza wszystkie elementy kiedy obszar roboczy jest kliknięty",
|
||||
"settings.paint_side_restrict": "Ogranicz szczotkę do strony",
|
||||
"settings.paint_side_restrict.desc": "Ogranicz działanie szczotek aby tylko malować na aktualnej stronie",
|
||||
"settings.autouv": "Automatyczne UV",
|
||||
"settings.autouv.desc": "Domyślnie włącz automatyczne UV",
|
||||
"settings.create_rename": "Nazwij nową kostkę",
|
||||
"settings.create_rename.desc": "Wpisz nazwę po stworzeniu nowego elementu lub grupy",
|
||||
"settings.edit_size": "Rozdzielczość siatki",
|
||||
"settings.edit_size.desc": "Rozdzielczość siatki, do której przyciągane są kostki",
|
||||
"settings.shift_size": "Rozdzielczość shifta",
|
||||
"settings.shift_size.desc": "Rozdzielczość siatki gdy trzymany jest shift",
|
||||
"settings.ctrl_size": "Rozdzielczość ctrl",
|
||||
"settings.ctrl_size.desc": "Rozdzielczość siatki gdy trzymany jest ctrl",
|
||||
"settings.negative_size": "Ujemny rozmiar",
|
||||
"settings.negative_size.desc": "Pozwalaj narzędziu skalowania na używanie ujemnych rozmiarów",
|
||||
"settings.dialog_unsaved_textures": "Niezapisane tekstury",
|
||||
"settings.dialog_unsaved_textures.desc": "Pokaż okienko \"Niezapisane tekstury\"",
|
||||
"settings.dialog_larger_cubes": "Model zbyt duży",
|
||||
"settings.dialog_larger_cubes.desc": "Pokaż okienko \"Model zbyt duży\"",
|
||||
"settings.dialog_rotation_limit": "Ograniczenia rotacji",
|
||||
"settings.dialog_rotation_limit.desc": "Pokaż okienko \"Ograniczenia rotacji\"",
|
||||
"settings.minifiedout": "Zminifikowany eksport",
|
||||
"settings.minifiedout.desc": "Wypisz plik JSON w jednej linii",
|
||||
"settings.export_groups": "Eksportuj grupy",
|
||||
"settings.export_groups.desc": "Zapisuj grupy w plikach modeli bloków",
|
||||
"settings.obj_textures": "Eksportuj tekstury",
|
||||
"settings.obj_textures.desc": "Eksportuj tekstury przy eksportowanu pliku OBJ",
|
||||
"settings.credit": "Komentarz uznania",
|
||||
"settings.credit.desc": "Dodaj komentarz uznania do eksportowanych plików",
|
||||
"settings.default_path": "Domyślna ścieżka",
|
||||
"settings.default_path.desc": "Folder, z którego Blockbench ładuje domyślne tekstury",
|
||||
"settings.image_editor": "Edytor obrazów",
|
||||
"settings.image_editor.desc": "Domyślny edytor obrazów do edytowania tekstur",
|
||||
"category.navigate": "Nawigacja",
|
||||
"category.tools": "Narzędzia",
|
||||
"category.file": "Plik",
|
||||
"category.blockbench": "Blockbench",
|
||||
"category.edit": "Edycja",
|
||||
"category.transform": "Przesuwanie",
|
||||
"category.filter": "Filtr",
|
||||
"category.view": "Widok",
|
||||
"category.display": "Ustawienia wyglądu",
|
||||
"category.textures": "Tekstury",
|
||||
"category.misc": "Inne",
|
||||
"keybind.preview_select": "Wybierz",
|
||||
"keybind.preview_rotate": "Obróć widok",
|
||||
"keybind.preview_drag": "Przenieś widok",
|
||||
"keybind.confirm": "Potwierdź",
|
||||
"keybind.cancel": "Anuluj",
|
||||
"action.slider_pos_x": "Przesuń X",
|
||||
"action.slider_pos_x.desc": "Przesuń kostki w osi X",
|
||||
"action.slider_pos_y": "Przesuń Y",
|
||||
"action.slider_pos_y.desc": "Przesuń kostki w osi Y",
|
||||
"action.slider_pos_z": "Przesuń Z",
|
||||
"action.slider_pos_z.desc": "Przesuń kostki w osi Z",
|
||||
"action.slider_size_x": "Rozmiar X",
|
||||
"action.slider_size_x.desc": "Zmienia rozmiar kostek w osi X",
|
||||
"action.slider_size_y": "Rozmiar Y",
|
||||
"action.slider_size_y.desc": "Zmienia rozmiar kostek w osi Y",
|
||||
"action.slider_size_z": "Rozmiar Z",
|
||||
"action.slider_size_z.desc": "Zmienia rozmiar kostek w osi Z",
|
||||
"action.slider_inflate": "Nadmuchaj",
|
||||
"action.slider_inflate.desc": "Nadmuchaj kostki we wszystkich kierunkach, bez zmieniania UV.",
|
||||
"action.slider_rotation_x": "Obróć X",
|
||||
"action.slider_rotation_x.desc": "Obraca kostki w osi X",
|
||||
"action.slider_rotation_y": "Obróć Y",
|
||||
"action.slider_rotation_y.desc": "Obraca kostki w osi Y",
|
||||
"action.slider_rotation_z": "Obróć Z",
|
||||
"action.slider_rotation_z.desc": "Obraca kostki w osi Z",
|
||||
"action.slider_origin_x": "X punktu obrotu",
|
||||
"action.slider_origin_x.desc": "Przesuń punkt obrotu na osi X",
|
||||
"action.slider_origin_y": "Y punktu obrotu",
|
||||
"action.slider_origin_y.desc": "Przesuń punkt obrotu na osi X",
|
||||
"action.slider_origin_z": "Z punktu obrotu",
|
||||
"action.slider_origin_z.desc": "Przesuń punkt obrotu na osi Z",
|
||||
"action.brush_mode": "Tryb pędzla",
|
||||
"action.brush_mode.desc": "Tryb pędzla",
|
||||
"action.brush_color": "Kolor",
|
||||
"action.brush_color.desc": "Kolor pędzla",
|
||||
"action.slider_brush_size": "Wielkość",
|
||||
"action.slider_brush_size.desc": "Promień pędzla w pikselach",
|
||||
"action.slider_brush_opacity": "Nieprzezroczystość",
|
||||
"action.slider_brush_opacity.desc": "Nieprzezroczystość pędzla w procentach",
|
||||
"action.slider_brush_softness": "Miękkość",
|
||||
"action.slider_brush_softness.desc": "Miękkość pędzla w procentach",
|
||||
"action.background_color": "Kolor tła",
|
||||
"action.background_color.desc": "Kolor tła stworzonej tekstury",
|
||||
"action.uv_slider_pos_x": "Przesuń w poziomie",
|
||||
"action.uv_slider_pos_x.desc": "Przesuń zaznaczenie UV wszystkich zaznaczonych kostek w poziomie",
|
||||
"action.uv_slider_pos_y": "Przesuń w pionie",
|
||||
"action.uv_slider_pos_y.desc": "Przesuń pionowy wybór UV wszystkich zaznaczonych kostek",
|
||||
"action.uv_slider_size_x": "Skaluj poziomo",
|
||||
"action.uv_slider_size_x.desc": "Skaluj zaznaczenie UV wszystkich zaznaczonych kostek w poziomie",
|
||||
"action.uv_slider_size_y": "Skaluj w pionie",
|
||||
"action.uv_slider_size_y.desc": "Skaluj zaznaczenie UV wszystkich zaznaczonych kostek w pionie",
|
||||
"action.vertex_snap_mode": "Tryb przyciągania",
|
||||
"action.vertex_snap_mode.desc": "Wybierz czy przyciąganie wierzchołków ma przesuwać elementy czy zmieniać ich rozmiar",
|
||||
"action.move_tool": "Przesuń",
|
||||
"action.move_tool.desc": "Narzędzie do wybierania i przesuwania elementów",
|
||||
"action.resize_tool": "Zmień rozmiar",
|
||||
"action.resize_tool.desc": "Narzędzie do wybierania i zmieniania rozmiaru elementów",
|
||||
"action.brush_tool": "Pędzel",
|
||||
"action.brush_tool.desc": "Narzędzie do malowania na teksturach bitmapowych na powierzniach lub w edytorze UV.",
|
||||
"action.vertex_snap_tool": "Przyciąganie wierzchołków",
|
||||
"action.vertex_snap_tool.desc": "Przesuń jedną kostkę do innej przez połączenie dwóch wierzchołków.",
|
||||
"action.display_mode_tool": "Wyświetlanie",
|
||||
"action.display_mode_tool.desc": "Zmień wygląd modelu, kiedy trzyma go gracz",
|
||||
"action.swap_tools": "Przełącz narzędzia",
|
||||
"action.swap_tools.desc": "Przełącz się pomiędzy narzędziem przesuwania i zmiany rozmiaru",
|
||||
"action.project_window": "Projekt...",
|
||||
"action.project_window.desc": "Otwiera okienko projektu, gdzie możesz edytować metadatę twojego modelu",
|
||||
"action.new_block_model": "Nowy model",
|
||||
"action.new_block_model.desc": "Tworzy nowy model bloku/przedmiotu",
|
||||
"action.new_entity_model": "Nowy model bytu",
|
||||
"action.new_entity_model.desc": "Tworzy nowy model bytu na Bedrock",
|
||||
"action.open_model": "Otwórz model",
|
||||
"action.open_model.desc": "Otwórz plik modelu z komputera",
|
||||
"action.add_model": "Dodaj model",
|
||||
"action.add_model.desc": "Dodaje plik modelu do aktualnego pliku modelu",
|
||||
"action.extrude_texture": "Wyciągnięta tekstura",
|
||||
"action.extrude_texture.desc": "Generuj model przez rozciągnięcie tekstury",
|
||||
"action.export_blockmodel": "Eksportuj model bloku",
|
||||
"action.export_blockmodel.desc": "Eksportuj model bloku lub przedmiotu Minecraft",
|
||||
"action.export_entity": "Eksportuj byt Bedrock",
|
||||
"action.export_entity.desc": "Dodaj aktualny model jako byt do pliku mobs.json",
|
||||
"action.export_optifine_part": "Eksportuj JPM Optifine",
|
||||
"action.export_optifine_part.desc": "Eksportuje ",
|
||||
"action.export_optifine_full": "Eksportuj JEM Optifine",
|
||||
"action.export_optifine_full.desc": "Eksportuj cały model bytu Optifine",
|
||||
"action.export_obj": "Eksportuj model OBJ",
|
||||
"action.export_obj.desc": "Eksportuj model Wavefront OBJ do użycia w innych programach lub wstawienia na Sketchfab",
|
||||
"action.save": "Zapisz",
|
||||
"action.save.desc": "Zapisz aktualny model i tekstury",
|
||||
"action.settings_window": "Ustawienia...",
|
||||
"action.settings_window.desc": "Otwórz okienko ustawień Blockbench",
|
||||
"action.plugins_window": "Pluginy...",
|
||||
"action.plugins_window.desc": "Otwórz okienko sklepu z pluginami",
|
||||
"action.update_window": "Aktualizacje...",
|
||||
"action.update_window.desc": "Znajdź aktualizacje dla Blockbench",
|
||||
"action.donate": "Podaruj",
|
||||
"action.donate.desc": "Podaruj na rzecz Blockbench",
|
||||
"action.reset_keybindings": "Resetuj przypisanie klawiszy",
|
||||
"action.reset_keybindings.desc": "Resetuj wszystkie przypisania klawiszy do domyślnych",
|
||||
"action.import_layout": "Importuj układ",
|
||||
"action.import_layout.desc": "Importuj plik układu",
|
||||
"action.export_layout": "Eksportuj układ",
|
||||
"action.export_layout.desc": "Stwórz plik układu bazowany na aktualnych ustawieniach",
|
||||
"action.reset_layout": "Resetuj układ",
|
||||
"action.reset_layout.desc": "Resetuj układ do domyślnego w Blockbench",
|
||||
"action.load_plugin": "Załaduj plugin z pliku",
|
||||
"action.load_plugin.desc": "Załaduj plugin z pliku źródłowego",
|
||||
"action.reload_plugins": "Przeładuj pluginy",
|
||||
"action.reload_plugins.desc": "Przeładowuje wszystkie pluginy deweloperskie",
|
||||
"action.uv_dialog": "Okienko UV",
|
||||
"action.uv_dialog.desc": "Otwórz okienko UV żeby zobaczyć wszystkie ściany obok siebie",
|
||||
"action.uv_dialog_full": "Pełny widok",
|
||||
"action.uv_dialog_full.desc": "Otwórz okienko UV żeby edytować jedną ścianę na pełnym ekranie",
|
||||
"action.undo": "Undo",
|
||||
"action.undo.desc": "Odwraca ostatnią zmianę",
|
||||
"action.redo": "Redo",
|
||||
"action.redo.desc": "Ponawia ostatnie undo",
|
||||
"action.copy": "Kopiuj",
|
||||
"action.copy.desc": "Kopiuj zaznaczenie, ścianę lub ustawienia wyświetlania",
|
||||
"action.paste": "Wklej",
|
||||
"action.paste.desc": "Wklej zaznaczenie, ścianę lub ustawienia wyświetlania",
|
||||
"action.cut": "Wytnij",
|
||||
"action.cut.desc": "Wytnij zaznaczenie, ścianę lub ustawienia wyświetlania",
|
||||
"action.add_cube": "Dodaj kostkę",
|
||||
"action.add_cube.desc": "Dodaje nową kostkę",
|
||||
"action.add_group": "Dodaj grupę",
|
||||
"action.add_group.desc": "Dodaje nową grupę lub kość",
|
||||
"action.outliner_toggle": "Przełącz więcej opcji",
|
||||
"action.outliner_toggle.desc": "Pokazuje więcej opcji w outlinerze",
|
||||
"action.duplicate": "Duplikuj",
|
||||
"action.duplicate.desc": "Duplikuje zaznaczone kostki lub grupę",
|
||||
"action.delete": "Usuń",
|
||||
"action.delete.desc": "Usuwa zaznaczone kostki lub grupę",
|
||||
"action.sort_outliner": "Sortuj outliner",
|
||||
"action.sort_outliner.desc": "Sortuje outliner alfabetycznie",
|
||||
"action.local_move": "Przesuń względnie",
|
||||
"action.local_move.desc": "Przesuń obrócone elementy na ich własnych osiach, jeżeli to możliwe",
|
||||
"action.select_window": "Wybierz...",
|
||||
"action.select_window.desc": "Wyszukaj i wybierz kostki ze względu na ich własności",
|
||||
"action.invert_selection": "Odwróć zaznaczenie",
|
||||
"action.invert_selection.desc": "Odwróć aktualnie zaznaczone kostki",
|
||||
"action.select_all": "Wybierz wszystko",
|
||||
"action.select_all.desc": "Wybierz wszystkie kostki",
|
||||
"action.collapse_groups": "Zwiń grupy",
|
||||
"action.collapse_groups.desc": "Zwiń wszystkie grupy",
|
||||
"action.scale": "Skaluj",
|
||||
"action.scale.desc": "Skaluj zaznaczone kostki",
|
||||
"action.rotate_x_cw": "Obróć w prawo",
|
||||
"action.rotate_x_cw.desc": "Obróć wybrane kostki o 90° na osi X",
|
||||
"action.rotate_x_ccw": "Obróć w lewo",
|
||||
"action.rotate_x_ccw.desc": "Obróć zaznaczone kostki o -90° na osi X",
|
||||
"action.rotate_y_cw": "Obróć w prawo",
|
||||
"action.rotate_y_cw.desc": "Obróć zaznaczone kostki o 90° na osi Y",
|
||||
"action.rotate_y_ccw": "Obróć w lewo",
|
||||
"action.rotate_y_ccw.desc": "Obróć zaznaczone kostki o -90° na osi Y",
|
||||
"action.rotate_z_cw": "Obróć w prawo",
|
||||
"action.rotate_z_cw.desc": "Obróć zaznaczone kostki o 90° na osi Z",
|
||||
"action.rotate_z_ccw": "Obróć w lewo",
|
||||
"action.rotate_z_ccw.desc": "Obróć zaznaczone kostki o -90° na osi Z",
|
||||
"action.flip_x": "Odwróć X",
|
||||
"action.flip_x.desc": "Odwróć zaznaczone kostki na osi X",
|
||||
"action.flip_y": "Odwróć Y",
|
||||
"action.flip_y.desc": "Odwróć zaznaczone kostki na osi Y",
|
||||
"action.flip_z": "Odwróć Z",
|
||||
"action.flip_z.desc": "Odwróć zaznaczone kostki na osi Z",
|
||||
"action.center_x": "Wyśrodkuj X",
|
||||
"action.center_x.desc": "Wyśrodkuj zaznaczone kostki na osi X",
|
||||
"action.center_y": "Wyśrodkuj Y",
|
||||
"action.center_y.desc": "Wyśrodkuj zaznaczone kostki na osi Y",
|
||||
"action.center_z": "Wyśrodkuj Z",
|
||||
"action.center_z.desc": "Wyśrodkuj zaznaczone kostki na osi Z",
|
||||
"action.center_all": "Wyśrodkuj wszystkie",
|
||||
"action.center_all.desc": "Wyśrodkuj zaznaczone kostki",
|
||||
"action.toggle_visibility": "Przełącz widoczność",
|
||||
"action.toggle_visibility.desc": "Przełącz widoczność zaznaczonych kostek.",
|
||||
"action.toggle_export": "Przełącz eksportowanie",
|
||||
"action.toggle_export.desc": "Przełącz ustawienia eksportowania zaznaczonych kostek.",
|
||||
"action.toggle_autouv": "Przełącz automatyczne UV",
|
||||
"action.toggle_autouv.desc": "Przełącz ustawienie automatycznego UV dla zaznaczonych kostek.",
|
||||
"action.toggle_shade": "Przełącz cieniowanie",
|
||||
"action.toggle_shade.desc": "Przełącz cieniowanie zaznaczonych kostek",
|
||||
"action.rename": "Zmień nazwę",
|
||||
"action.rename.desc": "Zmień nazwę zaznaczonych kostek.",
|
||||
"action.add_display_preset": "Nowy preset",
|
||||
"action.add_display_preset.desc": "Dodaj nowy preset ustawień widoku",
|
||||
"action.fullscreen": "Pełny ekran",
|
||||
"action.fullscreen.desc": "Przełącza tryb pełnego ekranu.",
|
||||
"action.zoom_in": "Przybliż",
|
||||
"action.zoom_in.desc": "Przybliż aby powiększyć interfejs.",
|
||||
"action.zoom_out": "Oddal",
|
||||
"action.zoom_out.desc": "Oddal aby zmniejszyć interfejs.",
|
||||
"action.zoom_reset": "Resetuj powiększenie",
|
||||
"action.zoom_reset.desc": "Resetuj powiększenie do domyślnych 100%",
|
||||
"action.reset_interface": "Resetuj interfejs",
|
||||
"action.reset_interface.desc": "Resetuj rozmiar i pozycje GUI",
|
||||
"action.toggle_wireframe": "Przełącz siatkę",
|
||||
"action.toggle_wireframe.desc": "Przełącz tryb wyświetlania siatki.",
|
||||
"action.screenshot_model": "Zrzut ekranu modelu",
|
||||
"action.screenshot_model.desc": "Wykonaj przyciętyu zrzut ekranu modelu z aktualnego kąta",
|
||||
"action.screenshot_app": "Zrzut ekranu programu",
|
||||
"action.screenshot_app.desc": "Wykonaj zrzut ekranu całej aplikacji",
|
||||
"action.toggle_quad_view": "Przełącz widok poczwórny",
|
||||
"action.toggle_quad_view.desc": "Przełącz na tryb 4 widoków",
|
||||
"action.import_texture": "Importuj teksturę",
|
||||
"action.import_texture.desc": "Zaimportuj jedną lub więcej tekstur z komputera",
|
||||
"action.create_texture": "Stwórz teksturę",
|
||||
"action.create_texture.desc": "Stwórz czystą teksturę lub szablon tekstury",
|
||||
"action.reload_textures": "Przeładuj tekstury",
|
||||
"action.reload_textures.desc": "Przeładuj wszystkie tekstury",
|
||||
"action.save_textures": "Zapisz tekstury",
|
||||
"action.save_textures.desc": "Zapisz wszystkie niezapisane tekstury",
|
||||
"action.animated_textures": "Odtwarzaj animowane tekstury",
|
||||
"action.animated_textures.desc": "Odtwarzaj i pauzuj animowane tekstury",
|
||||
"action.origin_to_geometry": "Punkt obrotu do geometrii",
|
||||
"action.origin_to_geometry.desc": "Ustal punkt obrotu w środku geometrii",
|
||||
"action.rescale_toggle": "Przełącz zmianę rozmiaru",
|
||||
"action.rescale_toggle.desc": "Zmieniaj rozmiar kostek w zależności od ich aktualnego obrotu",
|
||||
"action.bone_reset_toggle": "Resetuj kość",
|
||||
"action.bone_reset_toggle.desc": "Kość nie będzie wyświetlać kostek z modelu rodzica",
|
||||
"action.reload": "Przeładuj Blockbench",
|
||||
"action.reload.desc": "Przeładuj Blockbench. To usunie wszystkie niezapisane postępy.",
|
||||
"menu.file": "Plik",
|
||||
"menu.edit": "Edycja",
|
||||
"menu.transform": "Przesuń",
|
||||
"menu.filter": "Filtr",
|
||||
"menu.display": "Wyświetlanie",
|
||||
"menu.view": "Widok",
|
||||
"menu.file.new": "Nowy",
|
||||
"menu.file.recent": "Ostatnio",
|
||||
"menu.file.import": "Import",
|
||||
"menu.file.export": "Eksport",
|
||||
"menu.transform.rotate": "Obróć",
|
||||
"menu.transform.flip": "Odwróć",
|
||||
"menu.transform.center": "Wyśrodkuj",
|
||||
"menu.transform.properties": "Właściwości",
|
||||
"menu.display.preset": "Zastosuj preset",
|
||||
"menu.display.preset_all": "Zastosuj preset wszędzie",
|
||||
"menu.display.remove_preset": "Usuń Preset",
|
||||
"menu.view.zoom": "Powiększenie",
|
||||
"menu.view.background": "Tło",
|
||||
"menu.view.screenshot": "Zrzut ekranu",
|
||||
"menu.cube.duplicate": "Duplikuj",
|
||||
"menu.cube.color": "Kolor znacznika",
|
||||
"menu.cube.texture": "Tekstura",
|
||||
"menu.cube.texture.transparent": "Przezroczysta",
|
||||
"menu.cube.texture.blank": "Pusta",
|
||||
"menu.group.duplicate": "Duplikuj",
|
||||
"menu.group.sort": "Sortuj",
|
||||
"menu.group.resolve": "Rozwiąż",
|
||||
"menu.texture.face": "Zastosuj do ściany",
|
||||
"menu.texture.cube": "Zastosuj do kostek",
|
||||
"menu.texture.file": "Plik",
|
||||
"menu.texture.refresh": "Odśwież",
|
||||
"menu.texture.change": "Zmień plik",
|
||||
"menu.texture.folder": "Otwórz w folderze",
|
||||
"menu.texture.edit": "Edytuj",
|
||||
"menu.texture.export": "Zapisz jako",
|
||||
"menu.texture.save": "Zapisz",
|
||||
"menu.texture.properties": "Właściwości",
|
||||
"menu.preview.background": "Tło",
|
||||
"menu.preview.background.load": "Załaduj",
|
||||
"menu.preview.background.position": "Pozycja",
|
||||
"menu.preview.background.lock": "Zablokuj do kamery",
|
||||
"menu.preview.background.remove": "Usuń",
|
||||
"menu.preview.screenshot": "Zrzut ekranu",
|
||||
"menu.preview.perspective": "Perspektywa",
|
||||
"menu.preview.perspective.normal": "Normalna",
|
||||
"menu.preview.quadview": "Widok Quad",
|
||||
"menu.preview.fullview": "Pełny widok",
|
||||
"menu.preview.stop_drag": "Skończ pozycjonowanie tła",
|
||||
"menu.uv.copy": "Kopiuj",
|
||||
"menu.uv.paste": "Wklej",
|
||||
"menu.uv.mapping": "Mapowanie UV",
|
||||
"menu.uv.mapping.export": "Eksport",
|
||||
"menu.uv.mapping.maximize": "Maksymalizuj",
|
||||
"menu.uv.mapping.auto": "Automatyczne UV",
|
||||
"menu.uv.mapping.rel_auto": "Względne automatyczne UV",
|
||||
"menu.uv.mapping.rotation": "Rotacja",
|
||||
"menu.uv.mapping.mirror_x": "Odbicie X",
|
||||
"menu.uv.mapping.mirror_y": "Odbicie Y",
|
||||
"menu.uv.tint": "Odcień",
|
||||
"menu.uv.texture": "Tekstura",
|
||||
"menu.uv.texture.transparent": "Przeźroczystość",
|
||||
"cube.color.light_blue": "Jasnoniebieski",
|
||||
"cube.color.yellow": "Żółty",
|
||||
"cube.color.orange": "Pomarańczowy",
|
||||
"cube.color.red": "Czerwony",
|
||||
"cube.color.purple": "Fioletowy",
|
||||
"cube.color.blue": "Niebieski",
|
||||
"cube.color.green": "Zielony",
|
||||
"cube.color.lime": "Limonkowy",
|
||||
"switches.visibility": "Widoczność",
|
||||
"switches.export": "Eksport",
|
||||
"switches.shading": "Cień",
|
||||
"switches.autouv": "Automatyczne UV",
|
||||
"panel.uv": "UV",
|
||||
"panel.display": "Wyświetlanie",
|
||||
"panel.textures": "Tekstury",
|
||||
"panel.outliner": "Outliner",
|
||||
"panel.options": "Rotacja",
|
||||
"panel.options.angle": "Kąt",
|
||||
"panel.options.origin": "Punkt obrotu",
|
||||
"uv_editor.title": "Edytor UV",
|
||||
"uv_editor.all_faces": "Wszystkie",
|
||||
"uv_editor.no_faces": "Żadne",
|
||||
"face.north": "Północ",
|
||||
"face.south": "Południe",
|
||||
"face.west": "Zachód",
|
||||
"face.east": "Wschód",
|
||||
"face.up": "Góra",
|
||||
"face.down": "Dół",
|
||||
"direction.north": "Północ",
|
||||
"direction.south": "Południe",
|
||||
"direction.west": "Zachód",
|
||||
"direction.east": "Wschód",
|
||||
"direction.top": "Góra",
|
||||
"direction.bottom": "Dół",
|
||||
"display.slot.third_right": "Trzecioosobowa Prawa",
|
||||
"display.slot.third_left": "Trzecioosobowa Lewa",
|
||||
"display.slot.first_right": "Pierwszoosobowa Prawa",
|
||||
"display.slot.first_left": "Pierwszoosobowa Lewa",
|
||||
"display.slot.head": "Głowa",
|
||||
"display.slot.ground": "Podłoże",
|
||||
"display.slot.frame": "Ramka",
|
||||
"display.slot.gui": "GUI",
|
||||
"display.rotation": "Rotacja",
|
||||
"display.translation": "Transpozycja",
|
||||
"display.scale": "Skala",
|
||||
"display.slot": "Slot",
|
||||
"display.reference": "Model referencyjny",
|
||||
"display.presetname": "Nazwa",
|
||||
"display.reference.player": "Gracz",
|
||||
"display.reference.zombie": "Zombie",
|
||||
"display.reference.armor_stand": "Stojak na zbroje",
|
||||
"display.reference.baby_zombie": "Zombie dziecko",
|
||||
"display.reference.armor_stand_small": "Mały stojak na zbroje",
|
||||
"display.reference.monitor": "Normalny",
|
||||
"display.reference.bow": "Łuk",
|
||||
"display.reference.block": "Blok",
|
||||
"display.reference.frame": "Ramka na przedmiot",
|
||||
"display.reference.inventory_nine": "3x3",
|
||||
"display.reference.inventory_full": "Ekwipunek",
|
||||
"display.reference.hud": "HUD",
|
||||
"display.preset.blank_name": "Proszę podać nazwę",
|
||||
"display.preset.item": "Podstawowy Przedmiot",
|
||||
"display.preset.block": "Podstawowy blok",
|
||||
"display.preset.handheld": "Podstawowa broń",
|
||||
"display.preset.rod": "Podstawowa róźdżka",
|
||||
"dialog.continue": "Kontynuuj",
|
||||
"message.square_textures": "Tekstury muszą być kwadratowe",
|
||||
"message.unsaved_texture.title": "Niezapisana tekstura",
|
||||
"message.unsaved_texture.message": "Wszystkie niezapisane zmiany tej tekstury zostaną utracone. Chcesz kontynuować?",
|
||||
"dialog.update.no_connection": "Brak łączności z internetem",
|
||||
"dialog.update.latest": "Najnowsza wersja",
|
||||
"dialog.update.installed": "Zainstalowana wersja",
|
||||
"dialog.update.update": "Aktualizacja",
|
||||
"action.brush_mode.brush": "Szczotka",
|
||||
"action.brush_mode.noise": "Mieszanie",
|
||||
"action.brush_mode.eraser": "Gumka",
|
||||
"action.brush_mode.fill": "Wypełnij",
|
||||
"action.vertex_snap_mode.move": "Przesuń",
|
||||
"action.vertex_snap_mode.scale": "Skaluj",
|
||||
"action.open_model_folder": "Otwórz folder modelu",
|
||||
"action.open_model_folder.desc": "Otwiera folder, w którym znajduje się model",
|
||||
"action.change_textures_folder": "Zmień lokalizacje tekstur",
|
||||
"action.change_textures_folder.desc": "Zmienia katalog, w którym są zapisane wszystkie tekstury",
|
||||
"menu.texture.particle": "Użyj dla cząstek",
|
||||
"data.seperator": "Separator",
|
||||
"message.update_notification.title": "Dostępna jest aktualizacja",
|
||||
"message.update_notification.message": "Nowa wersja Blockbench \"%0\" jest dostępna. Chcesz ją teraz zainstalować?",
|
||||
"message.update_notification.install": "Zainstaluj",
|
||||
"message.update_notification.later": "Później",
|
||||
"message.untextured": "Ta powierzchnia nie ma tekstury",
|
||||
"dialog.toolbar_edit.title": "Dostosuj pasek z narzędziami",
|
||||
"dialog.shift_uv.title": "Przesuń UV",
|
||||
"dialog.shift_uv.message": "Wpisz liczbę przez którą chcesz pomnożyć przesunięcie koordynatów UV. Wyrażenia matematyczne są dozwolone. Zacznij \"+\" jeżeli chcesz dodać tą liczbę.",
|
||||
"dialog.shift_uv.horizontal": "Poziomy",
|
||||
"dialog.shift_uv.vertical": "Pionowy",
|
||||
"keybindings.reset": "Resetuj",
|
||||
"keybindings.clear": "Pusty",
|
||||
"action.cube_counter": "Licznik kostek",
|
||||
"action.uv_rotation": "Obrót UV",
|
||||
"action.uv_rotation.desc": "Obrót UV ściany",
|
||||
"action.uv_grid": "Siatka UV",
|
||||
"action.uv_grid.desc": "Rozdzielczość siatki, do której selektor UV się przyciąga",
|
||||
"action.uv_grid.auto": "Auto",
|
||||
"action.uv_grid.none": "Żadne",
|
||||
"action.uv_maximize": "Maksymalizuj UV",
|
||||
"action.uv_maximize.desc": "Ustala UV tej ściany na całą teksturę",
|
||||
"action.uv_auto": "Automatyczne UV",
|
||||
"action.uv_auto.desc": "Ustala UV tej ściany na prawdziwy rozmiar ściany",
|
||||
"action.uv_rel_auto": "Względne Automatyczne UV",
|
||||
"action.uv_rel_auto.desc": "Ustala UV tej ściany do pozycji i wielkośći ściany",
|
||||
"action.uv_mirror_x": "Odbij X UV",
|
||||
"action.uv_mirror_x.desc": "Odbija UV tej ściany na osi X",
|
||||
"action.uv_mirror_y": "Odbij Y UV",
|
||||
"action.uv_mirror_y.desc": "Odbija UV tej ściany na osi Y",
|
||||
"action.uv_transparent": "Przezroczysta ściana",
|
||||
"action.uv_transparent.desc": "Ustawia wybraną ścianę na przezroczystą",
|
||||
"action.uv_reset": "Resetuj ścianę",
|
||||
"action.uv_reset.desc": "Resetuje wybraną ścianę",
|
||||
"action.cullface": "Cullface",
|
||||
"action.cullface.desc": "Nie renderuje tej ściany jeżeli wybrana strona modelu jest zakryta",
|
||||
"action.auto_cullface": "Auto Cullface",
|
||||
"action.auto_cullface.desc": "Ustala cullface tej ściany do siebie",
|
||||
"action.face_tint": "Odcień",
|
||||
"action.face_tint.desc": "Pozwala na ustalenie odcienia dla wybranej ściany",
|
||||
"action.uv_shift": "Przesuń UV",
|
||||
"action.uv_shift.desc": "Przesuwa wszystkie UV o ustaloną wartość lub wyrażenie matematyczne",
|
||||
"menu.toolbar.edit": "Dostosuj",
|
||||
"menu.toolbar.reset": "Resetuj",
|
||||
"uv_editor.rotated": "Obrócone",
|
||||
"uv_editor.auto_cull": "Cullface do siebie",
|
||||
"uv_editor.copied": "Skopiowana ściana",
|
||||
"uv_editor.pasted": "Wklejona ściana",
|
||||
"uv_editor.copied_x": "Skopiowano %0 ścian",
|
||||
"uv_editor.reset": "Resetuj ścianę",
|
||||
"uv_editor.maximized": "Maksymalizowane",
|
||||
"uv_editor.autouv": "Auto rozmiar",
|
||||
"uv_editor.mirrored": "Odbito",
|
||||
"uv_editor.to_all": "Zastosowano do wszystkich ścian",
|
||||
"uv_editor.transparent": "Zrobiono przezroczyste",
|
||||
"uv_editor.cullface_on": "Cullface włączony",
|
||||
"uv_editor.cullface_off": "Cullface wyłączony",
|
||||
"uv_editor.tint_on": "Odcień włączony",
|
||||
"uv_editor.tint_off": "Odcień wyłączony",
|
||||
"action.uv_apply_all": "Zastosuj do wszystkich ścian",
|
||||
"action.uv_apply_all.desc": "Stosuje ustawienia wybranej ściany do wszystkich ",
|
||||
"message.convert_mode.title": "Konwertuj model",
|
||||
"message.convert_mode.message": "Jesteś pewien że chcesz konwertować ten model do %0? Nie ma odwrotu.",
|
||||
"message.convert_mode.block": "modelu bytu",
|
||||
"message.convert_mode.entity": "modelu bloku",
|
||||
"message.convert_mode.convert": "Konwertuj",
|
||||
"message.image_editor_missing.title": "Domyślny edytor obrazów",
|
||||
"message.image_editor_missing.message": "Wybierz plik exe twojego edytora obrazów.",
|
||||
"message.image_editor_missing.detail": "Blockbench nie mógł odnaleźć edytora obrazów na twoim komputerze. Wybierz plik exe twojego preferowanego edytora obrazów.",
|
||||
"action.update_autouv": "Aktualizuj auto UV",
|
||||
"action.update_autouv.desc": "Aktualizuj automatyczne mapowanie UV zaznaczonych kostek",
|
||||
"category.uv": "UV",
|
||||
"status_bar.saved": "Model jest zapisany",
|
||||
"status_bar.unsaved": "Istnieją niezapisane zmiany",
|
||||
"action.animation_mode_tool": "Animacja",
|
||||
"action.animation_mode_tool.desc": "Zdefiniuj własne animacje dla modelu",
|
||||
"action.move_up": "Przesuń w górę",
|
||||
"action.move_up.desc": "Przesuń zaznaczone kostki w górę, względem aktualnego kąta kamery",
|
||||
"action.move_down": "Przesuń w dół",
|
||||
"action.move_down.desc": "Przesuń zaznaczone kostki w dół, względem aktualnego kąta kamery",
|
||||
"action.move_left": "Przesuń w lewo",
|
||||
"action.move_left.desc": "Przesuń zaznaczone kostki w lewo, względem aktualnego kąta kamery",
|
||||
"action.move_right": "Przesuń w prawo",
|
||||
"action.move_right.desc": "Przesuń zaznaczone kostki w prawo, względem aktualnego kąta kamery",
|
||||
"action.move_forth": "Przesuń do przódu",
|
||||
"action.move_forth.desc": "Przesuń zaznaczone kostki do przodu, względem aktualnego kąta kamery",
|
||||
"action.move_back": "Przesuń do tyłu",
|
||||
"action.move_back.desc": "Przesuń zaznaczone kostki do tyłu, względem aktualnego kąta kamery",
|
||||
"layout.color.wireframe": "Szkielet",
|
||||
"layout.color.wireframe.desc": "Widok linii szkieletów",
|
||||
"action.add_animation": "Dodaj animację",
|
||||
"action.add_animation.desc": "Stwórz pustą animację",
|
||||
"action.load_animation_file": "Importuj animacje",
|
||||
"action.load_animation_file.desc": "Importuj plik animacji",
|
||||
"action.play_animation": "Odtwórz animacje",
|
||||
"action.play_animation.desc": "Obejrzyj zaznaczoną animację",
|
||||
"action.export_animation_file": "Eksportuj animacje",
|
||||
"action.export_animation_file.desc": "Eksportuj plik json z aktualnymi animacjami",
|
||||
"action.slider_keyframe_time": "Czas",
|
||||
"action.slider_keyframe_time.desc": "Zmień czas zaznaczonych klatek kluczowych",
|
||||
"timeline.rotation": "Rotacja",
|
||||
"timeline.position": "Pozycja",
|
||||
"timeline.scale": "Rozmiar",
|
||||
"menu.timeline.add": "Dodaj klatkę kluczową",
|
||||
"menu.keyframe.quaternion": "Kwaternion",
|
||||
"panel.animations": "Animacje",
|
||||
"panel.keyframe": "Klatka kluczowa",
|
||||
"panel.keyframe.type": "Klatka kluczowa (%0)",
|
||||
"generic.delete": "Usuń",
|
||||
"generic.rename": "Zmień nazwę",
|
||||
"message.rename_animation": "Zmień nazwę animacji",
|
||||
"message.animation_update_var": "Zmienna aktualizacji animacji",
|
||||
"message.no_animation_selected": "Musisz wybrać animację żeby to zrobić",
|
||||
"message.no_bone_selected": "Musisz wybrać kość żeby to zrobić",
|
||||
"message.duplicate_groups.title": "Duplikat nazwy kości",
|
||||
"message.duplicate_groups.message": "Nazwa tej kości istnieje na wielu kościach. To moze sprawić problemy.",
|
||||
"action.select_all_keyframes": "Zaznacz wszystkie klatki kluczowe",
|
||||
"action.select_all_keyframes.desc": "Zaznacz wszystkie klatki kluczowe aktualnej kości",
|
||||
"action.delete_keyframes": "Usuń klatki kluczowe",
|
||||
"action.delete_keyframes.desc": "Usuń wszystkie zaznaczone klatki kluczowe",
|
||||
"menu.animation": "Animacja",
|
||||
"menu.animation.loop": "Zapętl",
|
||||
"menu.animation.override": "Nadpisz",
|
||||
"menu.animation.anim_time_update": "Aktualizuj zmienną",
|
||||
"message.display_skin_model.title": "Model skina",
|
||||
"message.display_skin_model.message": "Zmień typ modelu skina",
|
||||
"message.display_skin_model.classic": "Klasyczny",
|
||||
"message.display_skin_model.slim": "Slim",
|
||||
"message.bone_material": "Zmień materiał kości",
|
||||
"action.slider_animation_length": "Długość animacji",
|
||||
"action.slider_animation_length.desc": "Zmień długość zaznaczonej animacji",
|
||||
"menu.group.material": "Ustal materiał",
|
||||
"action.camera_reset": "Reset Camera",
|
||||
"action.camera_reset.desc": "Reset the current preview to the default camera angle",
|
||||
"panel.variable_placeholders": "Variable Placeholders",
|
||||
"panel.variable_placeholders.info": "List the variables you want to preview via name=value",
|
||||
"status_bar.vertex_distance": "Distance: %0"
|
||||
}
|
185
lang/ru.json
185
lang/ru.json
@ -48,7 +48,7 @@
|
||||
"keys.printscreen": "Print Screen",
|
||||
"keys.pause": "Пауза",
|
||||
"message.rotation_limit.title": "Ограничение поворота",
|
||||
"message.rotation_limit.message": "Поворот ограничен до 22,5 градусов самим Майнкрафтом по каждой с осей. Поворот на разных осях сбросит повороты на других. Отключите функцию \"Ограничение поворота\", если вы создаете модель для других целей, где нужен свободный поворот.",
|
||||
"message.rotation_limit.message": "Поворот ограничен до 22,5 градусов Майнкрафтом по каждой с осей. Поворот на разных осях сбросит повороты на других. Отключите функцию \"Ограничение поворота\", если вы создаете модель для других целей, где нужен свободный поворот.",
|
||||
"message.file_not_found.title": "Файл не найден",
|
||||
"message.file_not_found.message": "Blockbench не может найти запрашиваемый файл. Убедитесь, что он сохранен по указанному пути, не на облаке.",
|
||||
"message.screenshot.title": "Скриншот",
|
||||
@ -83,11 +83,11 @@
|
||||
"message.default_textures.detail": "Извлеките стандартный ресурспак из Minecraft jar файла или скачайте его с интернета, после чего выберите папку \"textures\" и откройте ее. Blockbench запомнит ее и будет брать текстуры из нее, если не сможет найти из данного ресурспака.",
|
||||
"message.default_textures.select": "Выберите паку \"textures\" для текстур по умолчанию",
|
||||
"message.default_textures.continue": "Продолжить",
|
||||
"message.default_textures.remove": "Убрать",
|
||||
"message.default_textures.remove": "Удалить",
|
||||
"message.image_editor.title": "Выберите редактор изображений",
|
||||
"message.image_editor.file": "Выбрать файл...",
|
||||
"message.image_editor.exe": "Выберите .exe файл редактора изображений",
|
||||
"message.display_skin.title": "Показать скин",
|
||||
"message.display_skin.title": "Скин дисплея",
|
||||
"message.display_skin.message": "Выберите скин на вашем компьютере или введите имя игрока",
|
||||
"message.display_skin.upload": "Загрузить скин",
|
||||
"message.display_skin.name": "Никнейм",
|
||||
@ -104,9 +104,9 @@
|
||||
"dialog.project.title": "Проект",
|
||||
"dialog.project.name": "Имя файла",
|
||||
"dialog.project.parent": "Родительская модель",
|
||||
"dialog.project.geoname": "Геометрическое имя моба",
|
||||
"dialog.project.openparent": "Открыть родительскую",
|
||||
"dialog.project.ao": "Окружающая Окклюзия",
|
||||
"dialog.project.geoname": "Имя геометрий моба",
|
||||
"dialog.project.openparent": "Открыть родительскую модель",
|
||||
"dialog.project.ao": "Окружающая окклюзия",
|
||||
"dialog.project.texture_size": "Размер текстуры",
|
||||
"dialog.project.width": "Ширина",
|
||||
"dialog.project.height": "Высота",
|
||||
@ -337,15 +337,15 @@
|
||||
"action.background_color": "Цвет фона",
|
||||
"action.background_color.desc": "Цвет фона созданной текстуры",
|
||||
"action.uv_slider_pos_x": "Двигать горизонтально",
|
||||
"action.uv_slider_pos_x.desc": "Move the UV selection of all selected cubes horizontally",
|
||||
"action.uv_slider_pos_x.desc": "Двигать UV выбранных кубов горизонтально",
|
||||
"action.uv_slider_pos_y": "Двигать вертикально",
|
||||
"action.uv_slider_pos_y.desc": "Move the UV selection of all selected cubes vertically",
|
||||
"action.uv_slider_pos_y.desc": "Двигать UV выбранных кубов вертикально",
|
||||
"action.uv_slider_size_x": "Горизонтальный масштаб",
|
||||
"action.uv_slider_size_x.desc": "Scale the UV selection of all selected cubes horizontally",
|
||||
"action.uv_slider_size_x.desc": "Масштабировать UV выбранных кубов горизонтально",
|
||||
"action.uv_slider_size_y": "Вертикальный масштаб",
|
||||
"action.uv_slider_size_y.desc": "Scale the UV selection of all selected cubes vertically",
|
||||
"action.uv_slider_size_y.desc": "Масштабировать UV выбранных кубов вертикально",
|
||||
"action.vertex_snap_mode": "Режим привязки",
|
||||
"action.vertex_snap_mode.desc": "Select if Vertex Snap moves elements to the selected position or resizes them",
|
||||
"action.vertex_snap_mode.desc": "Выберите если вершинная привязка должна двигать элементы или изменять их размер",
|
||||
"action.move_tool": "Двигать",
|
||||
"action.move_tool.desc": "Инструмент для выбора и движения элементов",
|
||||
"action.resize_tool": "Изменить размер",
|
||||
@ -355,11 +355,11 @@
|
||||
"action.vertex_snap_tool": "Вершинная привязка",
|
||||
"action.vertex_snap_tool.desc": "Переместить один куб к другому соединяя две вершины",
|
||||
"action.display_mode_tool": "Дисплей",
|
||||
"action.display_mode_tool.desc": "Change how the model will look when held by players",
|
||||
"action.swap_tools": "Swap Tools",
|
||||
"action.swap_tools.desc": "Switch between the move and resize tool",
|
||||
"action.display_mode_tool.desc": "Изменить вид модели в руках игроков",
|
||||
"action.swap_tools": "Поменять инструменты",
|
||||
"action.swap_tools.desc": "Переключиться между инструментами сдвига и изменения размера",
|
||||
"action.project_window": "Проект...",
|
||||
"action.project_window.desc": "Opens the project window, where you can edit metadata of your model",
|
||||
"action.project_window.desc": "Открывает окно проекта, где можно изменить метаданные Вашей модели",
|
||||
"action.new_block_model": "Новая модель",
|
||||
"action.new_block_model.desc": "Создаёт новую модель блока/вещи",
|
||||
"action.new_entity_model": "Новая модель сущности",
|
||||
@ -369,7 +369,7 @@
|
||||
"action.add_model": "Добавить модель",
|
||||
"action.add_model.desc": "Добавить модель из файла к этой модели",
|
||||
"action.extrude_texture": "Отсканированное изображение",
|
||||
"action.extrude_texture.desc": "Generate a model by stretching out a texture",
|
||||
"action.extrude_texture.desc": "Сгенерировать модель выдавливая текстуру",
|
||||
"action.export_blockmodel": "Экспортировать модель блока",
|
||||
"action.export_blockmodel.desc": "Экспортировать Майнкрафт модель для вещей или блоков",
|
||||
"action.export_entity": "Экспортировать Бедрок сущность",
|
||||
@ -395,45 +395,45 @@
|
||||
"action.import_layout": "Импортировать внешний вид",
|
||||
"action.import_layout.desc": "Импортировать файл внешнего вида",
|
||||
"action.export_layout": "Экспортировать внешний вид",
|
||||
"action.export_layout.desc": "Create a layout file based off the current settings",
|
||||
"action.export_layout.desc": "Создать файл внешнего виды на основе текущих настроек",
|
||||
"action.reset_layout": "Сбросить внешний вид",
|
||||
"action.reset_layout.desc": "Reset the layout to Blockbench's default",
|
||||
"action.reset_layout.desc": "Сбросить внешний вид",
|
||||
"action.load_plugin": "Загрузить плагин из файла",
|
||||
"action.load_plugin.desc": "Загрузить плагин импортируя исходный файл",
|
||||
"action.reload_plugins": "Перезагрузить плагины",
|
||||
"action.reload_plugins.desc": "Перезагрузить все плагины в разработке",
|
||||
"action.uv_dialog": "Окно UV",
|
||||
"action.uv_dialog.desc": "Open the UV dialog to see all faces next to each other",
|
||||
"action.uv_dialog.desc": "Открыть диалог UV чтобы увидеть все грани",
|
||||
"action.uv_dialog_full": "Полный вид",
|
||||
"action.uv_dialog_full.desc": "Open the UV dialog to edit one face in fullscreen",
|
||||
"action.uv_dialog_full.desc": "Открыть диалог UV для изменения одной грани в полном экране",
|
||||
"action.undo": "Отменить",
|
||||
"action.undo.desc": "Отменяет последнее изменение",
|
||||
"action.redo": "Повторить",
|
||||
"action.redo.desc": "Возвращает последнюю отмену",
|
||||
"action.copy": "Копировать",
|
||||
"action.copy.desc": "Copy the selected selection, face or display settings",
|
||||
"action.copy.desc": "Скопировать выбранное выделение, грань или настройки дисплея",
|
||||
"action.paste": "Вставить",
|
||||
"action.paste.desc": "Paste the selected selection, face or display settings",
|
||||
"action.paste.desc": "Вставить выбранное выделение, грань или настройки дисплея",
|
||||
"action.cut": "Вырезать",
|
||||
"action.cut.desc": "Cut the selected selection, face or display settings",
|
||||
"action.cut.desc": "Вырезать выбранное выделение, грань или настройки дисплея",
|
||||
"action.add_cube": "Добавить куб",
|
||||
"action.add_cube.desc": "Добавляет новый куб",
|
||||
"action.add_group": "Добавить группу",
|
||||
"action.add_group.desc": "Добавляет новую группу или кость",
|
||||
"action.outliner_toggle": "Больше опций",
|
||||
"action.outliner_toggle.desc": "Toggles switches for more options in the outliner",
|
||||
"action.outliner_toggle.desc": "Показывает больше опций для элементов",
|
||||
"action.duplicate": "Создать копию",
|
||||
"action.duplicate.desc": "Копирует выбранные кубы или группы",
|
||||
"action.delete": "Удалить",
|
||||
"action.delete.desc": "Удаляет выбранные кубы или группы",
|
||||
"action.sort_outliner": "Сортировать элементы",
|
||||
"action.sort_outliner.desc": "Sort the outliner alphabetically",
|
||||
"action.sort_outliner.desc": "Сортировать элементы в алфавитном порядке",
|
||||
"action.local_move": "Двигать относительно",
|
||||
"action.local_move.desc": "Move rotated elements on their own axes if possible",
|
||||
"action.local_move.desc": "Двигать повёрнутые на собственных осях, если возможно",
|
||||
"action.select_window": "Выделить...",
|
||||
"action.select_window.desc": "Search and select cubes based on their properties",
|
||||
"action.select_window.desc": "Искать и выбрать кубы на основе их свойств",
|
||||
"action.invert_selection": "Инвертировать выбор",
|
||||
"action.invert_selection.desc": "Invert the current selection of cubes",
|
||||
"action.invert_selection.desc": "Инвертировать текущий выбор кубов",
|
||||
"action.select_all": "Выделить все",
|
||||
"action.select_all.desc": "Выделить все кубы",
|
||||
"action.collapse_groups": "Спрятать содержимое групп",
|
||||
@ -469,9 +469,9 @@
|
||||
"action.toggle_visibility": "Переключить видимость",
|
||||
"action.toggle_visibility.desc": "Переключить видимость выбранных кубов",
|
||||
"action.toggle_export": "Переключить экспорт",
|
||||
"action.toggle_export.desc": "Toggle the export setting of the selected cubes.",
|
||||
"action.toggle_export.desc": "Переключить экспортирование выбранных кубов",
|
||||
"action.toggle_autouv": "Переключить авто UV",
|
||||
"action.toggle_autouv.desc": "Toggle the auto UV setting of the selected cubes.",
|
||||
"action.toggle_autouv.desc": "Переключить настройку авто-UV выбранных кубов",
|
||||
"action.toggle_shade": "Переключить тени",
|
||||
"action.toggle_shade.desc": "Переключить тени выбранных кубов",
|
||||
"action.rename": "Переименовать",
|
||||
@ -481,17 +481,17 @@
|
||||
"action.fullscreen": "Полный экран",
|
||||
"action.fullscreen.desc": "Переключает полноэкранный режим",
|
||||
"action.zoom_in": "Увеличить",
|
||||
"action.zoom_in.desc": "Zoom in to scale up the interface.",
|
||||
"action.zoom_in.desc": "Увеличить для увеличения масштаба интерфейса",
|
||||
"action.zoom_out": "Уменшить",
|
||||
"action.zoom_out.desc": "Zoom out to scale down the interface.",
|
||||
"action.zoom_out.desc": "Уменшить для уменшения масштаба интерфейса",
|
||||
"action.zoom_reset": "Сбросить зум",
|
||||
"action.zoom_reset.desc": "Reset zoom to the default 100%.",
|
||||
"action.zoom_reset.desc": "Сбросить зум к 100%.",
|
||||
"action.reset_interface": "Сбросить интерфейс",
|
||||
"action.reset_interface.desc": "Reset size and positions of the GUI",
|
||||
"action.reset_interface.desc": "Сбросить размер и позиции ГПИ",
|
||||
"action.toggle_wireframe": "Переключить каркасные",
|
||||
"action.toggle_wireframe.desc": "Toggle the wireframe display mode.",
|
||||
"action.toggle_wireframe.desc": "Переключить режим каркасных",
|
||||
"action.screenshot_model": "Снимок модели",
|
||||
"action.screenshot_model.desc": "Take a cropped screenshot of the model from the current angle",
|
||||
"action.screenshot_model.desc": "Сделать вырезанный снимок модели с текущего вида",
|
||||
"action.screenshot_app": "Снимок приложения",
|
||||
"action.screenshot_app.desc": "Сделать снимок экрана всего приложения",
|
||||
"action.toggle_quad_view": "Переключить режим четырёх видов",
|
||||
@ -504,14 +504,14 @@
|
||||
"action.reload_textures.desc": "Перезагрузить все текстуры",
|
||||
"action.save_textures": "Сохранить текстуры",
|
||||
"action.save_textures.desc": "Сохранить все несохранённые текстуры",
|
||||
"action.animated_textures": "Play Animated Textures",
|
||||
"action.animated_textures.desc": "Play and pause the preview of animated textures",
|
||||
"action.animated_textures": "Проигрывать анимированные текстуры",
|
||||
"action.animated_textures.desc": "Проигрывать превью анимированных текстур",
|
||||
"action.origin_to_geometry": "Центр поворота к геометрии",
|
||||
"action.origin_to_geometry.desc": "Set the origin to the center of the geometry",
|
||||
"action.rescale_toggle": "Toggle Rescale",
|
||||
"action.rescale_toggle.desc": "Rescale cubes based on their current rotation",
|
||||
"action.origin_to_geometry.desc": "Установить центр поворота в центр геометрии",
|
||||
"action.rescale_toggle": "Переключить масштабирование",
|
||||
"action.rescale_toggle.desc": "Масштабировать кубы на основе их поворота",
|
||||
"action.bone_reset_toggle": "Сбросить кость",
|
||||
"action.bone_reset_toggle.desc": "Stop the bone from displaying cubes from the parent model",
|
||||
"action.bone_reset_toggle.desc": "Остановить просмотр кубов родительской модели",
|
||||
"action.reload": "Перезагрузить Blockbench",
|
||||
"action.reload.desc": "Перезагрузить Blockbench. Это удалит весь несохранённый прогресс.",
|
||||
"menu.file": "Файл",
|
||||
@ -535,17 +535,13 @@
|
||||
"menu.view.background": "Фон",
|
||||
"menu.view.screenshot": "Снимок экрана",
|
||||
"menu.cube.duplicate": "Создать копию",
|
||||
"menu.cube.rename": "Переименовать",
|
||||
"menu.cube.color": "Цвет маркера",
|
||||
"menu.cube.texture": "Текстура",
|
||||
"menu.cube.texture.transparent": "Прозрачная",
|
||||
"menu.cube.texture.blank": "Пустая",
|
||||
"menu.cube.delete": "Удалить",
|
||||
"menu.group.duplicate": "Создать копию",
|
||||
"menu.group.sort": "Сортировать",
|
||||
"menu.group.resolve": "Освободить",
|
||||
"menu.group.rename": "Переименовать",
|
||||
"menu.group.rename_content": "Переименовать содержимое",
|
||||
"menu.texture.face": "Применить к грани",
|
||||
"menu.texture.cube": "Применить к кубам",
|
||||
"menu.texture.file": "Файл",
|
||||
@ -555,7 +551,6 @@
|
||||
"menu.texture.edit": "Изменить",
|
||||
"menu.texture.export": "Экспортировать",
|
||||
"menu.texture.save": "Сохранить",
|
||||
"menu.texture.delete": "Удалить",
|
||||
"menu.texture.properties": "Опции",
|
||||
"menu.preview.background": "Фон",
|
||||
"menu.preview.background.load": "Загрузить",
|
||||
@ -589,7 +584,6 @@
|
||||
"cube.color.blue": "Синий",
|
||||
"cube.color.green": "Зелёный",
|
||||
"cube.color.lime": "Салатовый",
|
||||
"switches.remove": "Удалить",
|
||||
"switches.visibility": "Видимость",
|
||||
"switches.export": "Экспортировать",
|
||||
"switches.shading": "Тень",
|
||||
@ -647,9 +641,6 @@
|
||||
"display.preset.block": "Блок по умолчанию",
|
||||
"display.preset.handheld": "Оружие по умолчанию",
|
||||
"display.preset.rod": "Стержень по умолчанию",
|
||||
"display.preset.use": "Применить",
|
||||
"display.preset.use_all": "Применить ко всем слотам",
|
||||
"display.preset.remove": "Удалить",
|
||||
"dialog.continue": "Продолжить",
|
||||
"message.square_textures": "Текстуры должны быть квадратными",
|
||||
"message.unsaved_texture.title": "Несохранённая текстура",
|
||||
@ -667,7 +658,7 @@
|
||||
"action.open_model_folder": "Открыть папку модели",
|
||||
"action.open_model_folder.desc": "Открывает модель в которой находится текстура",
|
||||
"action.change_textures_folder": "Изменить папку текстур",
|
||||
"action.change_textures_folder.desc": "Change the folder that all textures are saved in",
|
||||
"action.change_textures_folder.desc": "Изменить папку в которой сохранены все текстуры",
|
||||
"menu.texture.particle": "Использовать для частиц",
|
||||
"data.seperator": "Разделитель",
|
||||
"message.update_notification.title": "Доступно обновление",
|
||||
@ -680,22 +671,21 @@
|
||||
"dialog.shift_uv.message": "Введите число по которому Вы хотите умножить смещение UV. Математические выражения разрешены. Добавьте \"+\" перед числом если Вы хотите добавить его.",
|
||||
"dialog.shift_uv.horizontal": "Горизонтально",
|
||||
"dialog.shift_uv.vertical": "Вертикально",
|
||||
"dialog.shift_uv": "Сместить UV",
|
||||
"keybindings.reset": "Сбросить",
|
||||
"keybindings.clear": "Пусто",
|
||||
"action.cube_counter": "Счетчик кубов",
|
||||
"action.uv_rotation": "Поворот UV",
|
||||
"action.uv_rotation.desc": "Поворот грани UV",
|
||||
"action.uv_grid": "Сеть UV",
|
||||
"action.uv_grid.desc": "The resolution of the grid that the UV selector snaps to",
|
||||
"action.uv_grid.desc": "Разрешение сети к которой привязывается селектор UV",
|
||||
"action.uv_grid.auto": "Авто",
|
||||
"action.uv_grid.none": "Ничего",
|
||||
"action.uv_maximize": "Максимизировать UV",
|
||||
"action.uv_maximize.desc": "Sets the UV for this face to the full texture",
|
||||
"action.uv_maximize.desc": "Устанавливает UV этой грани на полную текстуру",
|
||||
"action.uv_auto": "Авто UV",
|
||||
"action.uv_auto.desc": "Sets the UV size of this face to the real size of the face",
|
||||
"action.uv_auto.desc": "Устанавливает UV этой грани на реальный размер грани",
|
||||
"action.uv_rel_auto": "Относительное авто UV",
|
||||
"action.uv_rel_auto.desc": "Sets the UV of this face to the position and size of the actual face",
|
||||
"action.uv_rel_auto.desc": "Устанавливает UV этой грани на позицию и размер текущей грани",
|
||||
"action.uv_mirror_x": "Отразить UV на оси X",
|
||||
"action.uv_mirror_x.desc": "Отражает UV этой грани на оси X",
|
||||
"action.uv_mirror_y": "Отразить UV на оси Y",
|
||||
@ -742,20 +732,69 @@
|
||||
"action.update_autouv": "Обновить авто UV",
|
||||
"action.update_autouv.desc": "Обновить авто UV маппинг выбранных кубов",
|
||||
"category.uv": "UV",
|
||||
"status_bar.saved": "Model is saved",
|
||||
"status_bar.unsaved": "There are unsaved changes",
|
||||
"action.animation_mode_tool": "Animation",
|
||||
"action.animation_mode_tool.desc": "Define custom animations for the model",
|
||||
"action.move_up": "Move Up",
|
||||
"action.move_up.desc": "Move the selected cubes up relative to the current camera angle",
|
||||
"action.move_down": "Move Down",
|
||||
"action.move_down.desc": "Move the selected cubes down relative to the current camera angle",
|
||||
"action.move_left": "Move Left",
|
||||
"action.move_left.desc": "Move the selected cubes left relative to the current camera angle",
|
||||
"action.move_right": "Move Right",
|
||||
"action.move_right.desc": "Move the selected cubes right relative to the current camera angle",
|
||||
"action.move_forth": "Move Forth",
|
||||
"action.move_forth.desc": "Move the selected cubes forth relative to the current camera angle",
|
||||
"action.move_back": "Move Back",
|
||||
"action.move_back.desc": "Move the selected cubes back relative to the current camera angle"
|
||||
"status_bar.saved": "Модель сохранена",
|
||||
"status_bar.unsaved": "Есть несохранённые изменения",
|
||||
"action.animation_mode_tool": "Анимация",
|
||||
"action.animation_mode_tool.desc": "Определить пользовательские анимации для модели",
|
||||
"action.move_up": "Двигать вверх",
|
||||
"action.move_up.desc": "Двигать выбранные кубы вверх относительно камеры",
|
||||
"action.move_down": "Двигать вниз",
|
||||
"action.move_down.desc": "Двигать выбранные кубы вниз относительно камеры",
|
||||
"action.move_left": "Двигать влево",
|
||||
"action.move_left.desc": "Двигать выбранные кубы влево относительно камеры",
|
||||
"action.move_right": "Двигать вправо",
|
||||
"action.move_right.desc": "Двигать выбранные кубы вправо относительно камеры",
|
||||
"action.move_forth": "Двигать вперёд",
|
||||
"action.move_forth.desc": "Двигать выбранные кубы вперед относительно камеры",
|
||||
"action.move_back": "Двигать назад",
|
||||
"action.move_back.desc": "Двигать выбранные кубы назад относительно камеры",
|
||||
"layout.color.wireframe": "Каркасные",
|
||||
"layout.color.wireframe.desc": "Линии в каркасном режиме",
|
||||
"action.add_animation": "Добавить анимацию",
|
||||
"action.add_animation.desc": "Создать пустую анимацию",
|
||||
"action.load_animation_file": "Импортировать анимации",
|
||||
"action.load_animation_file.desc": "Ипортировать файл анимации",
|
||||
"action.play_animation": "Проигрывать анимации",
|
||||
"action.play_animation.desc": "Предпросмотр выбранной анимации",
|
||||
"action.export_animation_file": "Экспортировать анимации",
|
||||
"action.export_animation_file.desc": "Экспортировать файл json с текущими анимациями",
|
||||
"action.slider_keyframe_time": "Таймкод",
|
||||
"action.slider_keyframe_time.desc": "Изменить таймкод для выбранных кадров",
|
||||
"timeline.rotation": "Поворот",
|
||||
"timeline.position": "Позиция",
|
||||
"timeline.scale": "Масштаб",
|
||||
"menu.timeline.add": "Добавить кадр",
|
||||
"menu.keyframe.quaternion": "Кватернион",
|
||||
"panel.animations": "Анимации",
|
||||
"panel.keyframe": "Кадр",
|
||||
"panel.keyframe.type": "Кадр (%0)",
|
||||
"generic.delete": "Удалить",
|
||||
"generic.rename": "Переименовать",
|
||||
"message.rename_animation": "Переименовать анимацию",
|
||||
"message.animation_update_var": "Переменная обновления анимации",
|
||||
"message.no_animation_selected": "Вы должны выбрать анимацию чтобы выполнить это",
|
||||
"message.no_bone_selected": "Вы должны выбрать кость чтобы выполнить это",
|
||||
"message.duplicate_groups.title": "Дубликат имени кости",
|
||||
"message.duplicate_groups.message": "Имя этой кости уже используется. Это может создать проблемы.",
|
||||
"action.select_all_keyframes": "Выбрать все кадры",
|
||||
"action.select_all_keyframes.desc": "Выбрать все кадры текущей кости",
|
||||
"action.delete_keyframes": "Удалить кадры",
|
||||
"action.delete_keyframes.desc": "Удалить все выбранные кадры",
|
||||
"menu.animation": "Анимация",
|
||||
"menu.animation.loop": "Цикл",
|
||||
"menu.animation.override": "Перезаписать",
|
||||
"menu.animation.anim_time_update": "Переменная обновления",
|
||||
"message.display_skin_model.title": "Модель скина",
|
||||
"message.display_skin_model.message": "Выберите модель вашего скина",
|
||||
"message.display_skin_model.classic": "Классический",
|
||||
"message.display_skin_model.slim": "Тонкий",
|
||||
"message.bone_material": "Изменить материал кости",
|
||||
"action.slider_animation_length": "Длительность анимации",
|
||||
"action.slider_animation_length.desc": "Изменить длительность выбранной анимации",
|
||||
"menu.group.material": "Установить материал",
|
||||
"action.camera_reset": "Reset Camera",
|
||||
"action.camera_reset.desc": "Reset the current preview to the default camera angle",
|
||||
"panel.variable_placeholders": "Variable Placeholders",
|
||||
"panel.variable_placeholders.info": "List the variables you want to preview via name=value",
|
||||
"status_bar.vertex_distance": "Distance: %0"
|
||||
}
|
800
lang/zh.json
Normal file
800
lang/zh.json
Normal file
@ -0,0 +1,800 @@
|
||||
{
|
||||
"dialog.ok": "好的",
|
||||
"dialog.cancel": "取消",
|
||||
"dialog.confirm": "确认",
|
||||
"dialog.close": "关闭",
|
||||
"dialog.import": "导入",
|
||||
"dialog.save": "保存",
|
||||
"dialog.discard": "弃置",
|
||||
"dialog.dontshowagain": "不再显示此提示",
|
||||
"data.cube": "立方体",
|
||||
"data.cubes": "立方体",
|
||||
"data.group": "组",
|
||||
"data.texture": "贴图",
|
||||
"data.plugin": "插件",
|
||||
"data.preview": "预览",
|
||||
"data.toolbar": "工具栏",
|
||||
"data.image": "图像",
|
||||
"keys.ctrl": "Ctrl",
|
||||
"keys.shift": "Shift",
|
||||
"keys.alt": "Alt",
|
||||
"keys.meta": "Cmd",
|
||||
"keys.delete": "删除",
|
||||
"keys.space": "空格",
|
||||
"keys.leftclick": "左键点击",
|
||||
"keys.middleclick": "中键点击",
|
||||
"keys.rightclick": "右键点击",
|
||||
"keys.tab": "Tab",
|
||||
"keys.backspace": "退格键",
|
||||
"keys.enter": "回车键",
|
||||
"keys.escape": "Esc",
|
||||
"keys.function": "F%0",
|
||||
"keys.numpad": "数字键 %0",
|
||||
"keys.caps": "大写锁定",
|
||||
"keys.menu": "右键菜单",
|
||||
"keys.left": "左方向键",
|
||||
"keys.up": "上方向键",
|
||||
"keys.right": "右方向键",
|
||||
"keys.down": "下方向键",
|
||||
"keys.pageup": "上翻页键",
|
||||
"keys.pagedown": "下翻页键",
|
||||
"keys.plus": "加号",
|
||||
"keys.comma": "逗号",
|
||||
"keys.point": "点号",
|
||||
"keys.minus": "减号",
|
||||
"keys.cross": "斜杠",
|
||||
"keys.end": "End键",
|
||||
"keys.pos1": "Home键",
|
||||
"keys.printscreen": "截屏键",
|
||||
"keys.pause": "暂停键",
|
||||
"message.rotation_limit.title": "旋转限制",
|
||||
"message.rotation_limit.message": "受 Minecarft 的限制,仅允许旋转单个轴,且旋转角度限制为22.5的倍数。在不同的轴上旋转将清除其他轴上的旋转。如果您的建模需要自由旋转,请禁用“限制旋转”选项。",
|
||||
"message.file_not_found.title": "未找到文件",
|
||||
"message.file_not_found.message": "Blockbench 找不到该文件。请确保此文件为本地文件而不是云文件。",
|
||||
"message.screenshot.title": "屏幕截图",
|
||||
"message.screenshot.message": "屏幕截取成功。",
|
||||
"message.screenshot.clipboard": "剪贴板",
|
||||
"message.screenshot.right_click": "屏幕截图 - 右键点击以复制",
|
||||
"message.invalid_file.title": "无效的文件",
|
||||
"message.invalid_file.message": "无法打开模型文件:%0",
|
||||
"message.invalid_model.title": "无效的模型文件",
|
||||
"message.invalid_model.message": "此文件缺少有效的模型数据",
|
||||
"message.child_model_only.title": "空的子类模型",
|
||||
"message.child_model_only.message": "此文件为 %0 的子类模型,不包含模型。",
|
||||
"message.drag_background.title": "编辑背景",
|
||||
"message.drag_background.message": "拖动背景可移动位置。按住 shift 并上下拖动可更改大小。",
|
||||
"message.unsaved_textures.title": "未保存的贴图",
|
||||
"message.unsaved_textures.message": "您的模型中存在未保存的贴图。请确保它们存在于资源包里正确的文件夹中。",
|
||||
"message.model_clipping.title": "模型太大了",
|
||||
"message.model_clipping.message": "您的模型包含了 %0 个大于 Minecraft 限制允许的 3x3x3 方块范围。此模型将不会被 Minecraft 成功读取。可启用 “限制工作区” 选项防止此类情况发生。",
|
||||
"message.loose_texture.title": "导入贴图",
|
||||
"message.loose_texture.message": "导入的贴图不在资源包中。Minecraft 只能加载资源包里 textures 文件夹中的贴图。",
|
||||
"message.loose_texture.change": "更改路径",
|
||||
"message.update_res.title": "贴图分辨率",
|
||||
"message.update_res.message": "是否将项目中的分辨率调整为此贴图的分辨率?如果您选择使用高分辨率的贴图,请点击 “取消” 。",
|
||||
"message.update_res.update": "更新",
|
||||
"message.bedrock_overwrite_error.message": "Blockbench 无法将此模型与旧文件组合在一起",
|
||||
"message.bedrock_overwrite_error.backup_overwrite": "创建备份后覆盖",
|
||||
"message.bedrock_overwrite_error.overwrite": "覆盖",
|
||||
"message.close_warning.message": "您想保存模型吗?",
|
||||
"message.close_warning.web": "您现在的工作进度将会丢失。确定要退出吗?",
|
||||
"message.default_textures.title": "默认贴图",
|
||||
"message.default_textures.message": "选择默认的资源包 \"textures\" 文件夹",
|
||||
"message.default_textures.detail": "从 Minecraft jar里提取或在网上下载默认资源包,然后找到 \"textures\" 文件夹并打开。Blockbench 将会在当前资源包找不到对应贴图时从此位置获取贴图。",
|
||||
"message.default_textures.select": "选择默认的 \"textures\" 文件夹",
|
||||
"message.default_textures.continue": "继续",
|
||||
"message.default_textures.remove": "清除",
|
||||
"message.image_editor.title": "选择图像编辑器",
|
||||
"message.image_editor.file": "选择文件...",
|
||||
"message.image_editor.exe": "选择图像编辑器的可执行文件",
|
||||
"message.display_skin.title": "显示皮肤",
|
||||
"message.display_skin.message": "选择本地文件或输入正版玩家名字获取皮肤",
|
||||
"message.display_skin.upload": "上传皮肤",
|
||||
"message.display_skin.name": "用户名",
|
||||
"message.display_skin.reset": "重置",
|
||||
"message.invalid_plugin": "无效的插件文件,请查看控制台",
|
||||
"message.load_plugin_app": "是否允许此插件更改您的PC?请仅加载您信任的插件。",
|
||||
"message.load_plugin_web": "您想加载这个插件吗?请仅加载您信任的插件。",
|
||||
"message.preset_no_info": "预设不包含此槽位的信息",
|
||||
"message.restart_to_update": "重新启动 Blockbench 以应用更改",
|
||||
"message.save_file": "保存为 %0",
|
||||
"message.save_obj": "保存为 .obj 模型",
|
||||
"message.save_entity": "保存为基岩版的实体模型",
|
||||
"message.rename_cubes": "重命名立方体",
|
||||
"dialog.project.title": "项目",
|
||||
"dialog.project.name": "文件名",
|
||||
"dialog.project.parent": "父类模型",
|
||||
"dialog.project.geoname": "怪物几何体名字",
|
||||
"dialog.project.openparent": "打开父类",
|
||||
"dialog.project.ao": "环境光遮蔽",
|
||||
"dialog.project.texture_size": "贴图尺寸",
|
||||
"dialog.project.width": "宽度",
|
||||
"dialog.project.height": "高度",
|
||||
"dialog.project.to_blockmodel": "至方块模型",
|
||||
"dialog.project.to_entitymodel": "至实体模型",
|
||||
"dialog.texture.title": "贴图",
|
||||
"dialog.texture.name": "名字",
|
||||
"dialog.texture.variable": "变量",
|
||||
"dialog.texture.namespace": "命名空间",
|
||||
"dialog.texture.folder": "文件夹",
|
||||
"dialog.extrude.title": "拉伸图像",
|
||||
"dialog.extrude.mode": "扫描模式",
|
||||
"dialog.extrude.mode.areas": "区域",
|
||||
"dialog.extrude.mode.lines": "行",
|
||||
"dialog.extrude.mode.columns": "列",
|
||||
"dialog.extrude.mode.pixels": "像素",
|
||||
"dialog.extrude.opacity": "最低不透明度",
|
||||
"dialog.extrude.scan": "扫描并导入",
|
||||
"dialog.display_preset.title": "创建预设",
|
||||
"dialog.display_preset.message": "选择保存的槽位",
|
||||
"dialog.display_preset.create": "创建",
|
||||
"dialog.select.title": "选择",
|
||||
"dialog.select.new": "新建选择",
|
||||
"dialog.select.group": "在选定的组中",
|
||||
"dialog.select.name": "名字包含",
|
||||
"dialog.select.random": "随机",
|
||||
"dialog.select.select": "选择",
|
||||
"dialog.scale.title": "缩放模型",
|
||||
"dialog.scale.axis": "轴",
|
||||
"dialog.scale.scale": "比例",
|
||||
"dialog.scale.clipping": "模型裁剪:您的模型超出了工作区的范围",
|
||||
"dialog.scale.confirm": "确认缩放",
|
||||
"dialog.plugins.title": "插件",
|
||||
"dialog.plugins.installed": "已安装",
|
||||
"dialog.plugins.available": "可用",
|
||||
"dialog.plugins.install": "安装",
|
||||
"dialog.plugins.uninstall": "卸载",
|
||||
"dialog.plugins.reload": "刷新",
|
||||
"dialog.plugins.none_installed": "未安装插件",
|
||||
"dialog.plugins.none_available": "没有可用插件",
|
||||
"dialog.plugins.outdated": "需要更高版本的 Blockbench",
|
||||
"dialog.plugins.web_only": "仅网页版可用",
|
||||
"dialog.plugins.app_only": "仅桌面版可用",
|
||||
"dialog.plugins.author": "%0 制作",
|
||||
"dialog.plugins.show_less": "收起",
|
||||
"dialog.entitylist.title": "打开实体模型",
|
||||
"dialog.entitylist.text": "选择要导入的模型",
|
||||
"dialog.entitylist.bones": "骨骼",
|
||||
"dialog.entitylist.cubes": "立方体",
|
||||
"dialog.create_texture.title": "创建贴图",
|
||||
"dialog.create_texture.name": "名字",
|
||||
"dialog.create_texture.folder": "文件夹",
|
||||
"dialog.create_texture.template": "模板",
|
||||
"dialog.create_texture.resolution": "分辨率",
|
||||
"dialog.input.title": "输入",
|
||||
"dialog.update.title": "更新",
|
||||
"dialog.update.refresh": "重试",
|
||||
"dialog.update.up_to_date": "Blockbench 已是最新版本!",
|
||||
"dialog.update.connecting": "连接到服务器",
|
||||
"dialog.settings.settings": "设置",
|
||||
"dialog.settings.keybinds": "按键绑定",
|
||||
"dialog.settings.layout": "布局",
|
||||
"dialog.settings.about": "关于",
|
||||
"layout.color.back": "底色",
|
||||
"layout.color.back.desc": "背景和输入界面",
|
||||
"layout.color.dark": "工作区",
|
||||
"layout.color.dark.desc": "工作区背景",
|
||||
"layout.color.ui": "UI",
|
||||
"layout.color.ui.desc": "主界面颜色",
|
||||
"layout.color.bright_ui": "高亮UI",
|
||||
"layout.color.bright_ui.desc": "右键菜单和工具提示",
|
||||
"layout.color.button": "按钮",
|
||||
"layout.color.button.desc": "按钮和开关",
|
||||
"layout.color.selected": "已选择",
|
||||
"layout.color.selected.desc": "已选定的标签和对象",
|
||||
"layout.color.border": "边界",
|
||||
"layout.color.border.desc": "按钮和输入的边缘",
|
||||
"layout.color.accent": "强调",
|
||||
"layout.color.accent.desc": "滑块和其他",
|
||||
"layout.color.grid": "网格",
|
||||
"layout.color.grid.desc": "3D 预览网格",
|
||||
"layout.color.text": "文字",
|
||||
"layout.color.text.desc": "普通文字",
|
||||
"layout.color.light": "亮",
|
||||
"layout.color.light.desc": "已选定的文字",
|
||||
"layout.color.accent_text": "强调文字",
|
||||
"layout.color.accent_text.desc": "强调元素中的文字",
|
||||
"layout.font.main": "主字体",
|
||||
"layout.font.headline": "标题字体",
|
||||
"about.version": "版本:",
|
||||
"about.creator": "作者:",
|
||||
"about.website": "网址:",
|
||||
"about.bugtracker": "漏洞追踪器:",
|
||||
"about.electron": "此应用程序使用 Electron 构建,这是一个使用 Javascript、HTML 和 CSS 等 Web 技术制作的本地应用程序的框架。",
|
||||
"about.vertex_snap": "顶点捕捉基于 SirBenet 的插件",
|
||||
"about.icons": "图标包:",
|
||||
"about.libraries": "库:",
|
||||
"settings.category.general": "常规",
|
||||
"settings.category.preview": "预览",
|
||||
"settings.category.grid": "网格",
|
||||
"settings.category.edit": "编辑",
|
||||
"settings.category.snapping": "吸附",
|
||||
"settings.category.defaults": "默认",
|
||||
"settings.category.dialogs": "对话框",
|
||||
"settings.category.export": "导出",
|
||||
"settings.language": "语言",
|
||||
"settings.language.desc": "界面语言。重新启动 Blockbench 以应用更改。",
|
||||
"settings.show_actions": "显示操作",
|
||||
"settings.show_actions.desc": "在状态栏中显示所有操作",
|
||||
"settings.backup_interval": "备份间隔",
|
||||
"settings.backup_interval.desc": "自动备份间隔(分钟)",
|
||||
"settings.origin_size": "三轴长度",
|
||||
"settings.origin_size.desc": "三轴控制工具的长度",
|
||||
"settings.control_size": "轴的大小",
|
||||
"settings.control_size.desc": "三轴控制工具的整体大小",
|
||||
"settings.display_skin": "显示皮肤",
|
||||
"settings.display_skin.desc": "用于显示玩家参考模型的皮肤",
|
||||
"settings.shading": "阴影",
|
||||
"settings.shading.desc": "启用阴影",
|
||||
"settings.transparency": "透明度",
|
||||
"settings.transparency.desc": "渲染贴图的透明部分",
|
||||
"settings.texture_fps": "动态贴图 FPS",
|
||||
"settings.texture_fps.desc": "动态贴图的帧数",
|
||||
"settings.base_grid": "小网格",
|
||||
"settings.base_grid.desc": "显示小网格和轴",
|
||||
"settings.large_grid": "大网格",
|
||||
"settings.large_grid.desc": "显示 3x3 方块大小的网格",
|
||||
"settings.full_grid": "精确大网格",
|
||||
"settings.full_grid.desc": "显示 3x3 方块大小的精确网格",
|
||||
"settings.large_box": "大箱",
|
||||
"settings.large_box.desc": "显示 3x3x3 方块大小的边界范围",
|
||||
"settings.display_grid": "显示模式",
|
||||
"settings.display_grid.desc": "在显示模式下显示网格",
|
||||
"settings.undo_limit": "撤消限制",
|
||||
"settings.undo_limit.desc": "可撤消次数",
|
||||
"settings.restricted_canvas": "限制工作区",
|
||||
"settings.restricted_canvas.desc": "将工作区限制为 3x3 方块区域以防止模型无效",
|
||||
"settings.limited_rotation": "限制旋转",
|
||||
"settings.limited_rotation.desc": "将旋转的角度限制为 Minecraft 模型的有效值",
|
||||
"settings.local_move": "对应轴移动",
|
||||
"settings.local_move.desc": "如果可行,已旋转的元素根据自身的轴移动",
|
||||
"settings.canvas_unselect": "点击工作区取消选择",
|
||||
"settings.canvas_unselect.desc": "点击工作区时取消对所有元素的选择",
|
||||
"settings.paint_side_restrict": "限制笔刷",
|
||||
"settings.paint_side_restrict.desc": "限制笔刷仅对当前面的涂改",
|
||||
"settings.autouv": "自动 UV",
|
||||
"settings.autouv.desc": "默认启用自动UV",
|
||||
"settings.create_rename": "重命名新立方体",
|
||||
"settings.create_rename.desc": "创建新元素或组时优先对其命名",
|
||||
"settings.edit_size": "网格移动",
|
||||
"settings.edit_size.desc": "立方体移动时的距离",
|
||||
"settings.shift_size": "精确移动(Shift)",
|
||||
"settings.shift_size.desc": "按住 Shift 时立方体移动的距离",
|
||||
"settings.ctrl_size": "超精确移动(Ctrl)",
|
||||
"settings.ctrl_size.desc": "按住 Ctrl 时立方体移动的距离",
|
||||
"settings.negative_size": "负值尺寸",
|
||||
"settings.negative_size.desc": "允许尺寸调整使用负值",
|
||||
"settings.dialog_unsaved_textures": "未保存的材质纹理",
|
||||
"settings.dialog_unsaved_textures.desc": "显示\"未保存的贴图\"的提示",
|
||||
"settings.dialog_larger_cubes": "模型过大",
|
||||
"settings.dialog_larger_cubes.desc": "显示\"模型过大\"的提示",
|
||||
"settings.dialog_rotation_limit": "旋转限制",
|
||||
"settings.dialog_rotation_limit.desc": "显示\"旋转限制\"的提示",
|
||||
"settings.minifiedout": "简化导出",
|
||||
"settings.minifiedout.desc": "使导出的JSON信息写在一行之内",
|
||||
"settings.export_groups": "导出组",
|
||||
"settings.export_groups.desc": "保存方块模型中的组类信息",
|
||||
"settings.obj_textures": "导出贴图",
|
||||
"settings.obj_textures.desc": "导出OBJ文件时导出贴图",
|
||||
"settings.credit": "制作信息注释",
|
||||
"settings.credit.desc": "为导出的文件添加制作信息注释",
|
||||
"settings.default_path": "默认路径",
|
||||
"settings.default_path.desc": "Blockbench 获取默认贴图的文件夹",
|
||||
"settings.image_editor": "图像编辑器",
|
||||
"settings.image_editor.desc": "默认修改贴图的图像编辑器",
|
||||
"category.navigate": "导航",
|
||||
"category.tools": "工具",
|
||||
"category.file": "文件",
|
||||
"category.blockbench": "Blockbench",
|
||||
"category.edit": "编辑",
|
||||
"category.transform": "转换",
|
||||
"category.filter": "滤器",
|
||||
"category.view": "视图",
|
||||
"category.display": "显示设置",
|
||||
"category.textures": "贴图",
|
||||
"category.misc": "杂项",
|
||||
"keybind.preview_select": "选择",
|
||||
"keybind.preview_rotate": "旋转视图",
|
||||
"keybind.preview_drag": "拖动视图",
|
||||
"keybind.confirm": "确认",
|
||||
"keybind.cancel": "取消",
|
||||
"action.slider_pos_x": "X轴移动",
|
||||
"action.slider_pos_x.desc": "以 X 轴移动立方体",
|
||||
"action.slider_pos_y": "Y轴移动",
|
||||
"action.slider_pos_y.desc": "以 Y 轴移动立方体",
|
||||
"action.slider_pos_z": "Z轴移动",
|
||||
"action.slider_pos_z.desc": "以 Z 轴移动立方体",
|
||||
"action.slider_size_x": "X轴尺寸",
|
||||
"action.slider_size_x.desc": "以 X 轴调整立方体大小",
|
||||
"action.slider_size_y": "Y轴尺寸",
|
||||
"action.slider_size_y.desc": "以 Y 轴调整立方体大小",
|
||||
"action.slider_size_z": "Z轴尺寸",
|
||||
"action.slider_size_z.desc": "以 Z 轴调整立方体大小",
|
||||
"action.slider_inflate": "放大",
|
||||
"action.slider_inflate.desc": "在不改变UV的情况下放大所有立方体",
|
||||
"action.slider_rotation_x": "X轴旋转",
|
||||
"action.slider_rotation_x.desc": "围绕 X 轴旋转立方体",
|
||||
"action.slider_rotation_y": "Y轴旋转",
|
||||
"action.slider_rotation_y.desc": "围绕 Y 轴旋转立方体",
|
||||
"action.slider_rotation_z": "Z轴旋转",
|
||||
"action.slider_rotation_z.desc": "围绕 Z 轴旋转立方体",
|
||||
"action.slider_origin_x": "X轴原点",
|
||||
"action.slider_origin_x.desc": "以 X 轴移动原点",
|
||||
"action.slider_origin_y": "Y轴原点",
|
||||
"action.slider_origin_y.desc": "以 Y 轴移动原点",
|
||||
"action.slider_origin_z": "Z轴原点",
|
||||
"action.slider_origin_z.desc": "以 Z 轴移动原点",
|
||||
"action.brush_mode": "笔刷模式",
|
||||
"action.brush_mode.desc": "笔刷的模式",
|
||||
"action.brush_color": "颜色",
|
||||
"action.brush_color.desc": "笔刷的颜色",
|
||||
"action.slider_brush_size": "尺寸",
|
||||
"action.slider_brush_size.desc": "笔刷的半径(以像素为单位)",
|
||||
"action.slider_brush_opacity": "不透明度",
|
||||
"action.slider_brush_opacity.desc": "笔刷的不透明度百分比",
|
||||
"action.slider_brush_softness": "柔软度",
|
||||
"action.slider_brush_softness.desc": "笔刷的柔软度百分比",
|
||||
"action.background_color": "背景颜色",
|
||||
"action.background_color.desc": "已创建贴图的背景颜色",
|
||||
"action.uv_slider_pos_x": "水平移动",
|
||||
"action.uv_slider_pos_x.desc": "水平移动所有选定立方体的UV范围",
|
||||
"action.uv_slider_pos_y": "垂直移动",
|
||||
"action.uv_slider_pos_y.desc": "垂直移动所有选定立方体的UV范围",
|
||||
"action.uv_slider_size_x": "水平缩放",
|
||||
"action.uv_slider_size_x.desc": "水平缩放所有选定立方体的UV范围",
|
||||
"action.uv_slider_size_y": "垂直缩放",
|
||||
"action.uv_slider_size_y.desc": "垂直缩放所有选定立方体的UV范围",
|
||||
"action.vertex_snap_mode": "捕捉模式",
|
||||
"action.vertex_snap_mode.desc": "选择“顶点捕捉”将元素移动到所选位置或调整其大小",
|
||||
"action.move_tool": "移动",
|
||||
"action.move_tool.desc": "选择和移动元素的工具",
|
||||
"action.resize_tool": "调整",
|
||||
"action.resize_tool.desc": "选择和调整元素大小的工具",
|
||||
"action.brush_tool": "笔刷",
|
||||
"action.brush_tool.desc": "在模型表面或UV编辑器中绘制贴图的工具",
|
||||
"action.vertex_snap_tool": "顶点捕捉",
|
||||
"action.vertex_snap_tool.desc": "通过连接两个顶点将一个立方体移动到另一个立方体",
|
||||
"action.display_mode_tool": "显示",
|
||||
"action.display_mode_tool.desc": "对玩家手持物品时的模型位置调整",
|
||||
"action.swap_tools": "交换工具",
|
||||
"action.swap_tools.desc": "在移动和调整工具之间交换",
|
||||
"action.project_window": "项目...",
|
||||
"action.project_window.desc": "打开编辑模型数据的项目窗口",
|
||||
"action.new_block_model": "新建模型",
|
||||
"action.new_block_model.desc": "创建新的方块/物品模型",
|
||||
"action.new_entity_model": "新建实体模型",
|
||||
"action.new_entity_model.desc": "创建新的基岩版实体模型",
|
||||
"action.open_model": "打开模型",
|
||||
"action.open_model.desc": "从电脑中打开模型文件",
|
||||
"action.add_model": "添加模型",
|
||||
"action.add_model.desc": "在当前编辑的模型中添加一个模型",
|
||||
"action.extrude_texture": "拉伸贴图",
|
||||
"action.extrude_texture.desc": "通过拉伸贴图生成模型",
|
||||
"action.export_blockmodel": "导出方块模型",
|
||||
"action.export_blockmodel.desc": "导出 Minecraft 方块或物品模型",
|
||||
"action.export_entity": "导出基岩版实体",
|
||||
"action.export_entity.desc": "将当前模型作为实体添加到 mobs.json 文件中",
|
||||
"action.export_optifine_part": "导出 Optifine JPM",
|
||||
"action.export_optifine_part.desc": "导出 Optifine 实体文件(Json Part Model)",
|
||||
"action.export_optifine_full": "导出 Optifine JEM",
|
||||
"action.export_optifine_full.desc": "导出 Optifine 实体文件(Json Entity Model)",
|
||||
"action.export_obj": "导出 OBJ 模型",
|
||||
"action.export_obj.desc": "导出 Wavefront OBJ 模型以用于其他程序或上传到 Sketchfab",
|
||||
"action.save": "保存",
|
||||
"action.save.desc": "保存当前模型和贴图",
|
||||
"action.settings_window": "设置...",
|
||||
"action.settings_window.desc": "打开 Blockbench 设置对话框。",
|
||||
"action.plugins_window": "插件",
|
||||
"action.plugins_window.desc": "打开插件商店页面",
|
||||
"action.update_window": "更新",
|
||||
"action.update_window.desc": "检查 Blockbench 更新",
|
||||
"action.donate": "赞助开发者",
|
||||
"action.donate.desc": "赞助 Blockbench",
|
||||
"action.reset_keybindings": "重置快捷键",
|
||||
"action.reset_keybindings.desc": "将所有快捷键重置为 Blockbench 默认",
|
||||
"action.import_layout": "导入布局",
|
||||
"action.import_layout.desc": "导入布局文件",
|
||||
"action.export_layout": "导出布局",
|
||||
"action.export_layout.desc": "根据当前设置创建布局文件",
|
||||
"action.reset_layout": "重置布局",
|
||||
"action.reset_layout.desc": "将布局重置为 Blockbench 的默认值",
|
||||
"action.load_plugin": "从文件加载插件",
|
||||
"action.load_plugin.desc": "通过导入源文件加载插件。",
|
||||
"action.reload_plugins": "重新加载插件",
|
||||
"action.reload_plugins.desc": "重载所有开发插件。",
|
||||
"action.uv_dialog": "UV 窗口",
|
||||
"action.uv_dialog.desc": "打开 UV 对话框以查看彼此相邻的所有面",
|
||||
"action.uv_dialog_full": "全视图",
|
||||
"action.uv_dialog_full.desc": "打开UV对话框以全屏编辑一个面",
|
||||
"action.undo": "撤消",
|
||||
"action.undo.desc": "撤消上次更改",
|
||||
"action.redo": "重做",
|
||||
"action.redo.desc": "重做上次撤消",
|
||||
"action.copy": "复制",
|
||||
"action.copy.desc": "复制选定的,面或显示设置.",
|
||||
"action.paste": "粘贴",
|
||||
"action.paste.desc": "粘贴选定的,面或显示设置",
|
||||
"action.cut": "剪切",
|
||||
"action.cut.desc": "剪切选定的,面或显示设置",
|
||||
"action.add_cube": "添加方块",
|
||||
"action.add_cube.desc": "添加一个新的方块",
|
||||
"action.add_group": "添加组",
|
||||
"action.add_group.desc": "添加一个新的组",
|
||||
"action.outliner_toggle": "切换更多选项",
|
||||
"action.outliner_toggle.desc": "切换开关以在outliner中添加更多选项",
|
||||
"action.duplicate": "复制",
|
||||
"action.duplicate.desc": "复制选定的方块或组",
|
||||
"action.delete": "删除",
|
||||
"action.delete.desc": "删除选定的方块或组",
|
||||
"action.sort_outliner": "排序大纲",
|
||||
"action.sort_outliner.desc": "按字母顺序排列大纲",
|
||||
"action.local_move": "相对移动",
|
||||
"action.local_move.desc": "如果可以,将旋转的元素移动到自己的轴上",
|
||||
"action.select_window": "选择",
|
||||
"action.select_window.desc": "根据其属性搜索并选择方块",
|
||||
"action.invert_selection": "反向选择",
|
||||
"action.invert_selection.desc": "反向选择当前的方块",
|
||||
"action.select_all": "全选",
|
||||
"action.select_all.desc": "选择所有方块",
|
||||
"action.collapse_groups": "折叠组",
|
||||
"action.collapse_groups.desc": "折叠所有组",
|
||||
"action.scale": "缩放",
|
||||
"action.scale.desc": "缩放选定的方块",
|
||||
"action.rotate_x_cw": "顺时针旋转",
|
||||
"action.rotate_x_cw.desc": "在 X 轴上将选定的方块旋转 90°",
|
||||
"action.rotate_x_ccw": "逆时针旋转",
|
||||
"action.rotate_x_ccw.desc": "在 X 轴上旋转选定的方块 -90°",
|
||||
"action.rotate_y_cw": "顺时针旋转",
|
||||
"action.rotate_y_cw.desc": "在 Y 轴上将选定的方块旋转 90°",
|
||||
"action.rotate_y_ccw": "逆时针旋转",
|
||||
"action.rotate_y_ccw.desc": "在 Y 轴上将选定的方块旋转 -90°",
|
||||
"action.rotate_z_cw": "顺时针旋转",
|
||||
"action.rotate_z_cw.desc": "在 Z 轴上将选定的方块旋转 90°",
|
||||
"action.rotate_z_ccw": "逆时针旋转",
|
||||
"action.rotate_z_ccw.desc": "在 Y 轴上将选定的方块旋转 -90°",
|
||||
"action.flip_x": "X 轴翻转",
|
||||
"action.flip_x.desc": "翻转 X 轴上的选定方块",
|
||||
"action.flip_y": "Y 轴翻转",
|
||||
"action.flip_y.desc": "翻转 Y 轴上的选定方块",
|
||||
"action.flip_z": "Z 轴翻转",
|
||||
"action.flip_z.desc": "翻转 Z 轴上的选定方块",
|
||||
"action.center_x": "X 轴居中",
|
||||
"action.center_x.desc": "将所选方块居中在 X 轴上",
|
||||
"action.center_y": "Y 轴居中",
|
||||
"action.center_y.desc": "将所选方块居中在 Y 轴上",
|
||||
"action.center_z": "Z 轴居中",
|
||||
"action.center_z.desc": "将所选方块居中在 Z 轴上",
|
||||
"action.center_all": "全部居中",
|
||||
"action.center_all.desc": "使所选方块居中",
|
||||
"action.toggle_visibility": "切换可见",
|
||||
"action.toggle_visibility.desc": "切换所选方块的可见",
|
||||
"action.toggle_export": "切换导出",
|
||||
"action.toggle_export.desc": "切换所选方块的导出设置",
|
||||
"action.toggle_autouv": "切换自动 UV",
|
||||
"action.toggle_autouv.desc": "切换所选方块的自动UV设置",
|
||||
"action.toggle_shade": "切换阴影",
|
||||
"action.toggle_shade.desc": "切换所选方块的阴影",
|
||||
"action.rename": "重命名",
|
||||
"action.rename.desc": "更改所选方块的名称",
|
||||
"action.add_display_preset": "新建预设",
|
||||
"action.add_display_preset.desc": "添加新的显示设置预设",
|
||||
"action.fullscreen": "全屏",
|
||||
"action.fullscreen.desc": "切换全屏模式。",
|
||||
"action.zoom_in": "放大",
|
||||
"action.zoom_in.desc": "放大以扩大界面。",
|
||||
"action.zoom_out": "缩小",
|
||||
"action.zoom_out.desc": "缩小以缩小界面。",
|
||||
"action.zoom_reset": "重置缩放",
|
||||
"action.zoom_reset.desc": "将缩放重置为默认的100%。",
|
||||
"action.reset_interface": "重置界面",
|
||||
"action.reset_interface.desc": "重置界面的尺寸和位置",
|
||||
"action.toggle_wireframe": "切换线框图",
|
||||
"action.toggle_wireframe.desc": "切换线框图显示模式",
|
||||
"action.screenshot_model": "截图",
|
||||
"action.screenshot_model.desc": "从当前角度拍摄模型的裁剪截图",
|
||||
"action.screenshot_app": "截图当前应用界面",
|
||||
"action.screenshot_app.desc": "截取整个应用程序的屏幕截图",
|
||||
"action.toggle_quad_view": "切换四视图",
|
||||
"action.toggle_quad_view.desc": "切换四视口模式",
|
||||
"action.import_texture": "导入贴图",
|
||||
"action.import_texture.desc": "从文件系统中导入一个或多个贴图",
|
||||
"action.create_texture": "创建贴图",
|
||||
"action.create_texture.desc": "创建空白纹理或模板材质纹理",
|
||||
"action.reload_textures": "重载贴图",
|
||||
"action.reload_textures.desc": "重载所有贴图",
|
||||
"action.save_textures": "保存贴图",
|
||||
"action.save_textures.desc": "保存所有未保存的贴图",
|
||||
"action.animated_textures": "播放动画贴图",
|
||||
"action.animated_textures.desc": "播放和暂停动画材质纹理的预览",
|
||||
"action.origin_to_geometry": "原点到几何",
|
||||
"action.origin_to_geometry.desc": "将原点设置为几何体的中心",
|
||||
"action.rescale_toggle": "切换重新调节",
|
||||
"action.rescale_toggle.desc": "根据当前旋转重新缩放方块",
|
||||
"action.bone_reset_toggle": "重置骨骼",
|
||||
"action.bone_reset_toggle.desc": "阻止骨骼显示父模型中的方块",
|
||||
"action.reload": "重载 Blockbench",
|
||||
"action.reload.desc": "重载 Blockbench,这将删除所有未保存的进度",
|
||||
"menu.file": "文件",
|
||||
"menu.edit": "编辑",
|
||||
"menu.transform": "转换",
|
||||
"menu.filter": "过滤",
|
||||
"menu.display": "显示",
|
||||
"menu.view": "视图",
|
||||
"menu.file.new": "新建",
|
||||
"menu.file.recent": "最近",
|
||||
"menu.file.import": "导入",
|
||||
"menu.file.export": "导出",
|
||||
"menu.transform.rotate": "旋转",
|
||||
"menu.transform.flip": "翻动",
|
||||
"menu.transform.center": "中心",
|
||||
"menu.transform.properties": "属性",
|
||||
"menu.display.preset": "应用预设",
|
||||
"menu.display.preset_all": "在全局应用预设",
|
||||
"menu.display.remove_preset": "删除预设",
|
||||
"menu.view.zoom": "放大",
|
||||
"menu.view.background": "背景",
|
||||
"menu.view.screenshot": "截图",
|
||||
"menu.cube.duplicate": "复制",
|
||||
"menu.cube.color": "标记颜色",
|
||||
"menu.cube.texture": "材质纹理",
|
||||
"menu.cube.texture.transparent": "透明度",
|
||||
"menu.cube.texture.blank": "空白",
|
||||
"menu.group.duplicate": "复制",
|
||||
"menu.group.sort": "排序",
|
||||
"menu.group.resolve": "解析",
|
||||
"menu.texture.face": "应用到面",
|
||||
"menu.texture.cube": "应用到方块",
|
||||
"menu.texture.file": "文件",
|
||||
"menu.texture.refresh": "刷新",
|
||||
"menu.texture.change": "更改文件",
|
||||
"menu.texture.folder": "在文件夹中打开",
|
||||
"menu.texture.edit": "编辑",
|
||||
"menu.texture.export": "另存为",
|
||||
"menu.texture.save": "保存",
|
||||
"menu.texture.properties": "属性",
|
||||
"menu.preview.background": "背景",
|
||||
"menu.preview.background.load": "加载",
|
||||
"menu.preview.background.position": "位置",
|
||||
"menu.preview.background.lock": "锁定视角相机",
|
||||
"menu.preview.background.remove": "清除",
|
||||
"menu.preview.screenshot": "截图",
|
||||
"menu.preview.perspective": "透视",
|
||||
"menu.preview.perspective.normal": "正常",
|
||||
"menu.preview.quadview": "四视图",
|
||||
"menu.preview.fullview": "全视图",
|
||||
"menu.preview.stop_drag": "停止背景定位",
|
||||
"menu.uv.copy": "复制",
|
||||
"menu.uv.paste": "粘贴",
|
||||
"menu.uv.mapping": "UV贴图射映",
|
||||
"menu.uv.mapping.export": "导出",
|
||||
"menu.uv.mapping.maximize": "最大化",
|
||||
"menu.uv.mapping.auto": "自动UV",
|
||||
"menu.uv.mapping.rel_auto": "自动相对 UV",
|
||||
"menu.uv.mapping.rotation": "旋转",
|
||||
"menu.uv.mapping.mirror_x": "镜像 X 轴",
|
||||
"menu.uv.mapping.mirror_y": "镜像 Y 轴",
|
||||
"menu.uv.tint": "着色",
|
||||
"menu.uv.texture": "贴图",
|
||||
"menu.uv.texture.transparent": "透明化",
|
||||
"cube.color.light_blue": "淡蓝色",
|
||||
"cube.color.yellow": "黄色",
|
||||
"cube.color.orange": "橙色",
|
||||
"cube.color.red": "红色",
|
||||
"cube.color.purple": "紫色",
|
||||
"cube.color.blue": "蓝色",
|
||||
"cube.color.green": "绿色",
|
||||
"cube.color.lime": "黄绿色",
|
||||
"switches.visibility": "可见度",
|
||||
"switches.export": "导出",
|
||||
"switches.shading": "阴影",
|
||||
"switches.autouv": "自动UV",
|
||||
"panel.uv": "UV",
|
||||
"panel.display": "显示",
|
||||
"panel.textures": "贴图",
|
||||
"panel.outliner": "大纲视图",
|
||||
"panel.options": "旋转",
|
||||
"panel.options.angle": "角度",
|
||||
"panel.options.origin": "原点",
|
||||
"uv_editor.title": "UV 编辑器",
|
||||
"uv_editor.all_faces": "全部",
|
||||
"uv_editor.no_faces": "无",
|
||||
"face.north": "北",
|
||||
"face.south": "南",
|
||||
"face.west": "西",
|
||||
"face.east": "东",
|
||||
"face.up": "上",
|
||||
"face.down": "下",
|
||||
"direction.north": "北",
|
||||
"direction.south": "南",
|
||||
"direction.west": "西",
|
||||
"direction.east": "东",
|
||||
"direction.top": "顶部",
|
||||
"direction.bottom": "底部",
|
||||
"display.slot.third_right": "第三人称右手",
|
||||
"display.slot.third_left": "第三人称左手",
|
||||
"display.slot.first_right": "第一人称右手",
|
||||
"display.slot.first_left": "第一人称左手",
|
||||
"display.slot.head": "头",
|
||||
"display.slot.ground": "地面",
|
||||
"display.slot.frame": "展示框",
|
||||
"display.slot.gui": "GUI",
|
||||
"display.rotation": "旋转",
|
||||
"display.translation": "偏移",
|
||||
"display.scale": "缩放",
|
||||
"display.slot": "位置",
|
||||
"display.reference": "参考模型",
|
||||
"display.presetname": "名称",
|
||||
"display.reference.player": "玩家",
|
||||
"display.reference.zombie": "僵尸",
|
||||
"display.reference.armor_stand": "盔甲架",
|
||||
"display.reference.baby_zombie": "幼年僵尸",
|
||||
"display.reference.armor_stand_small": "小盔甲架",
|
||||
"display.reference.monitor": "普通",
|
||||
"display.reference.bow": "弓",
|
||||
"display.reference.block": "方块",
|
||||
"display.reference.frame": "物品展示框",
|
||||
"display.reference.inventory_nine": "3x3",
|
||||
"display.reference.inventory_full": "物品栏",
|
||||
"display.reference.hud": "HUD",
|
||||
"display.preset.blank_name": "请输入名称",
|
||||
"display.preset.item": "默认物品",
|
||||
"display.preset.block": "默认方块",
|
||||
"display.preset.handheld": "默认武器",
|
||||
"display.preset.rod": "默认棒",
|
||||
"dialog.continue": "继续",
|
||||
"message.square_textures": "贴图必须是方形的",
|
||||
"message.unsaved_texture.title": "未保存的贴图",
|
||||
"message.unsaved_texture.message": "对此贴图的所有未保存更改都将丢失。你想继续吗?",
|
||||
"dialog.update.no_connection": "无网络连接",
|
||||
"dialog.update.latest": "最新版本",
|
||||
"dialog.update.installed": "已安装的版本",
|
||||
"dialog.update.update": "更新",
|
||||
"action.brush_mode.brush": "刷子",
|
||||
"action.brush_mode.noise": "噪点",
|
||||
"action.brush_mode.eraser": "橡皮擦",
|
||||
"action.brush_mode.fill": "填充",
|
||||
"action.vertex_snap_mode.move": "移动",
|
||||
"action.vertex_snap_mode.scale": "规模",
|
||||
"action.open_model_folder": "打开模型文件夹",
|
||||
"action.open_model_folder.desc": "打开包含模型的文件夹",
|
||||
"action.change_textures_folder": "更改材质纹理位置",
|
||||
"action.change_textures_folder.desc": "更改保存所有纹理的文件夹",
|
||||
"menu.texture.particle": "使用的颗粒",
|
||||
"data.seperator": "分隔符",
|
||||
"message.update_notification.title": "有可用更新",
|
||||
"message.update_notification.message": "新的 Blockbench 版本“%0”可用。你想现在安装吗?",
|
||||
"message.update_notification.install": "安装",
|
||||
"message.update_notification.later": "稍后",
|
||||
"message.untextured": "这个面没有材质纹理",
|
||||
"dialog.toolbar_edit.title": "自定义工具栏",
|
||||
"dialog.shift_uv.title": "Shift UV",
|
||||
"dialog.shift_uv.message": "输入要将 UV 偏移坐标乘以的数字。允许使用数学表达式。如果要添加该数字,请前置“+”",
|
||||
"dialog.shift_uv.horizontal": "横向",
|
||||
"dialog.shift_uv.vertical": "垂直",
|
||||
"keybindings.reset": "重启",
|
||||
"keybindings.clear": "Empty",
|
||||
"action.cube_counter": "方块数量",
|
||||
"action.uv_rotation": "UV旋转",
|
||||
"action.uv_rotation.desc": "UV面的旋转",
|
||||
"action.uv_grid": "UV网格",
|
||||
"action.uv_grid.desc": "UV选择器选择的网格分辨率",
|
||||
"action.uv_grid.auto": "自动",
|
||||
"action.uv_grid.none": "无",
|
||||
"action.uv_maximize": "最大化 UV",
|
||||
"action.uv_maximize.desc": "将此面的UV设置为完整材质纹理",
|
||||
"action.uv_auto": "自动 UV",
|
||||
"action.uv_auto.desc": "将此面的UV大小设置为面的实际大小",
|
||||
"action.uv_rel_auto": "Rel. 自动 UV",
|
||||
"action.uv_rel_auto.desc": "将此面的UV设置为实际面的位置和大小",
|
||||
"action.uv_mirror_x": "UV X轴镜像",
|
||||
"action.uv_mirror_x.desc": "在X轴上反射此面的UV",
|
||||
"action.uv_mirror_y": "UV 镜像Y轴",
|
||||
"action.uv_mirror_y.desc": "在Y轴上反射此面的UV",
|
||||
"action.uv_transparent": "透明化",
|
||||
"action.uv_transparent.desc": "使当前面透明",
|
||||
"action.uv_reset": "重置面",
|
||||
"action.uv_reset.desc": "重置当前面",
|
||||
"action.cullface": "剔除面",
|
||||
"action.cullface.desc": "如果覆盖了模型的选定面则禁用此面的渲染",
|
||||
"action.auto_cullface": "自动剔除面",
|
||||
"action.auto_cullface.desc": "将此面的剔除面设置为自身",
|
||||
"action.face_tint": "着色",
|
||||
"action.face_tint.desc": "为当前面启用着色选项",
|
||||
"action.uv_shift": "Shift UV",
|
||||
"action.uv_shift.desc": "按固定量或数学表达式移动所有UV区域",
|
||||
"menu.toolbar.edit": "自定义",
|
||||
"menu.toolbar.reset": "重置",
|
||||
"uv_editor.rotated": "旋转",
|
||||
"uv_editor.auto_cull": "自己选择面",
|
||||
"uv_editor.copied": "复制面",
|
||||
"uv_editor.pasted": "粘贴面",
|
||||
"uv_editor.copied_x": "复制 %0 面",
|
||||
"uv_editor.reset": "重设面",
|
||||
"uv_editor.maximized": "最大化",
|
||||
"uv_editor.autouv": "尺寸自动",
|
||||
"uv_editor.mirrored": "镜像",
|
||||
"uv_editor.to_all": "适用于所有人",
|
||||
"uv_editor.transparent": "设置透明度",
|
||||
"uv_editor.cullface_on": "开启面剔除",
|
||||
"uv_editor.cullface_off": "关闭面剔除",
|
||||
"uv_editor.tint_on": "开启着色",
|
||||
"uv_editor.tint_off": "关闭着色",
|
||||
"action.uv_apply_all": "适用于所有人",
|
||||
"action.uv_apply_all.desc": "将当前面的设置应用于所有面",
|
||||
"message.convert_mode.title": "模型转换",
|
||||
"message.convert_mode.message": "您确定要将此类型转换为 %0 吗?您无法撤消此步骤",
|
||||
"message.convert_mode.block": "实体模型",
|
||||
"message.convert_mode.entity": "方块模型",
|
||||
"message.convert_mode.convert": "转换",
|
||||
"message.image_editor_missing.title": "默认图像编辑器",
|
||||
"message.image_editor_missing.message": "选择图像编辑器的可执行文件",
|
||||
"message.image_editor_missing.detail": "Blockbench 无法在您的计算机上找到图像编辑器,请选择图像编辑器的可执行文件。",
|
||||
"action.update_autouv": "自动更新UV",
|
||||
"action.update_autouv.desc": "更新所选方块的自动UV映射",
|
||||
"category.uv": "UV",
|
||||
"status_bar.saved": "模型已保存",
|
||||
"status_bar.unsaved": "有未保存的更改",
|
||||
"action.animation_mode_tool": "动画",
|
||||
"action.animation_mode_tool.desc": "为模型定义自定义动画",
|
||||
"action.move_up": "上移",
|
||||
"action.move_up.desc": "相对于当前摄像机角度向上移动选定的立方体",
|
||||
"action.move_down": "下移",
|
||||
"action.move_down.desc": "相对于当前摄像机角度向下移动选定的立方体",
|
||||
"action.move_left": "左移",
|
||||
"action.move_left.desc": "相对于当前摄像机角度向左移动选定的立方体",
|
||||
"action.move_right": "右移",
|
||||
"action.move_right.desc": "相对于当前摄像机角度向右移动选定的立方体",
|
||||
"action.move_forth": "前移",
|
||||
"action.move_forth.desc": "相对于当前摄像机角度向前移动选定的立方体",
|
||||
"action.move_back": "后移",
|
||||
"action.move_back.desc": "相对于当前摄像机角度向后移动选定的立方体",
|
||||
"layout.color.wireframe": "线框",
|
||||
"layout.color.wireframe.desc": "线框模式中的线",
|
||||
"action.add_animation": "添加动态",
|
||||
"action.add_animation.desc": "创建一个空白动画",
|
||||
"action.load_animation_file": "导入动态文件",
|
||||
"action.load_animation_file.desc": "导入动画文件",
|
||||
"action.play_animation": "播放动态",
|
||||
"action.play_animation.desc": "预览所选的动画",
|
||||
"action.export_animation_file": "导出动态文件",
|
||||
"action.export_animation_file.desc": "导出当前动画的JSON文件",
|
||||
"action.slider_keyframe_time": "时间码",
|
||||
"action.slider_keyframe_time.desc": "修改选定关键帧的时间码",
|
||||
"timeline.rotation": "旋转",
|
||||
"timeline.position": "定位",
|
||||
"timeline.scale": "放大",
|
||||
"menu.timeline.add": "添加关键帧",
|
||||
"menu.keyframe.quaternion": "四元数",
|
||||
"panel.animations": "动态",
|
||||
"panel.keyframe": "关键帧",
|
||||
"panel.keyframe.type": "关键帧(%0)",
|
||||
"generic.delete": "删除",
|
||||
"generic.rename": "重命名",
|
||||
"message.rename_animation": "重命名动画",
|
||||
"message.animation_update_var": "动画更新变量",
|
||||
"message.no_animation_selected": "你必须选择有动画才能执行此操作",
|
||||
"message.no_bone_selected": "你必须选择有骨骼才能执行此操作",
|
||||
"message.duplicate_groups.title": "骨骼名称复制",
|
||||
"message.duplicate_groups.message": "此骨骼的名称存在于多个骨骼上,这可能会导致问题.\n重复命名错误",
|
||||
"action.select_all_keyframes": "选择所有关键帧",
|
||||
"action.select_all_keyframes.desc": "选择当前骨骼的所有关键帧",
|
||||
"action.delete_keyframes": "删除关键帧",
|
||||
"action.delete_keyframes.desc": "删除所有选定的关键帧",
|
||||
"menu.animation": "动画",
|
||||
"menu.animation.loop": "环?不懂怎么翻译",
|
||||
"menu.animation.override": "覆盖",
|
||||
"menu.animation.anim_time_update": "更新变量",
|
||||
"message.display_skin_model.title": "皮肤模型",
|
||||
"message.display_skin_model.message": "选择你的皮肤的模型类型",
|
||||
"message.display_skin_model.classic": "经典\nSteve",
|
||||
"message.display_skin_model.slim": "瘦小\nAlex",
|
||||
"message.bone_material": "改变骨骼材料",
|
||||
"action.slider_animation_length": "动画长度",
|
||||
"action.slider_animation_length.desc": "更改所选的动画长度",
|
||||
"menu.group.material": "设置材料",
|
||||
"action.camera_reset": "Reset Camera",
|
||||
"action.camera_reset.desc": "Reset the current preview to the default camera angle",
|
||||
"panel.variable_placeholders": "Variable Placeholders",
|
||||
"panel.variable_placeholders.info": "List the variables you want to preview via name=value",
|
||||
"status_bar.vertex_distance": "Distance: %0"
|
||||
}
|
8
lib/jimp.min.js
vendored
8
lib/jimp.min.js
vendored
File diff suppressed because one or more lines are too long
@ -665,6 +665,11 @@
|
||||
if (!visible || flat) { return; }
|
||||
visible = false;
|
||||
|
||||
|
||||
if (isValid()) {
|
||||
updateOriginalInput(true);
|
||||
}
|
||||
|
||||
$(doc).unbind("keydown.spectrum", onkeydown);
|
||||
$(doc).unbind("click.spectrum", clickout);
|
||||
$(window).unbind("resize.spectrum", resize);
|
||||
|
12
lib/three.js
12
lib/three.js
@ -7542,6 +7542,18 @@
|
||||
|
||||
},
|
||||
|
||||
setFromDegreeArray: function ( arr, invert ) {
|
||||
|
||||
this._x = Math.degToRad(arr[0]) * (invert ? -1 : 1);
|
||||
this._y = Math.degToRad(arr[1]) * (invert ? -1 : 1);
|
||||
this._z = Math.degToRad(arr[2]) * (invert ? -1 : 1);
|
||||
|
||||
this.onChangeCallback();
|
||||
|
||||
return this;
|
||||
|
||||
},
|
||||
|
||||
setFromRotationMatrix: function ( m, order, update ) {
|
||||
|
||||
var clamp = _Math.clamp;
|
||||
|
Loading…
x
Reference in New Issue
Block a user