mirror of
https://github.com/JannisX11/blockbench.git
synced 2025-02-23 16:31:20 +08:00
Allow float sizes in modded entity format
This commit is contained in:
parent
006d8aa361
commit
291fbd31fb
@ -231,6 +231,7 @@ class ModelFormat {
|
||||
|
||||
new Property(ModelFormat, 'boolean', 'box_uv');
|
||||
new Property(ModelFormat, 'boolean', 'optional_box_uv');
|
||||
new Property(ModelFormat, 'boolean', 'box_uv_float_size');
|
||||
new Property(ModelFormat, 'boolean', 'single_texture');
|
||||
new Property(ModelFormat, 'boolean', 'model_identifier', {default: true});
|
||||
new Property(ModelFormat, 'boolean', 'parent_model_id');
|
||||
|
@ -471,9 +471,9 @@ var codec = new Codec('modded_entity', {
|
||||
|
||||
} else {
|
||||
c_snippet = c_snippet
|
||||
.replace(R('dx'), F(cube.size(0, true)) )
|
||||
.replace(R('dy'), F(cube.size(1, true)) )
|
||||
.replace(R('dz'), F(cube.size(2, true)) )
|
||||
.replace(R('dx'), F(cube.size(0, false)) )
|
||||
.replace(R('dy'), F(cube.size(1, false)) )
|
||||
.replace(R('dz'), F(cube.size(2, false)) )
|
||||
}
|
||||
|
||||
cube_snippets.push(c_snippet);
|
||||
@ -884,13 +884,14 @@ var format = new ModelFormat({
|
||||
},
|
||||
codec,
|
||||
box_uv: true,
|
||||
box_uv_float_size: true,
|
||||
single_texture: true,
|
||||
bone_rig: true,
|
||||
centered_grid: true,
|
||||
rotate_cubes: true,
|
||||
integer_size: true
|
||||
})
|
||||
//Object.defineProperty(format, 'integer_size', {get: _ => Templates.get('integer_size')})
|
||||
Object.defineProperty(format, 'integer_size', {get: _ => Templates.get('integer_size')});
|
||||
codec.format = format;
|
||||
|
||||
|
||||
|
@ -187,8 +187,12 @@ class Cube extends OutlinerElement {
|
||||
var scope = this;
|
||||
let epsilon = 0.0000001;
|
||||
function getA(axis) {
|
||||
if (floored) {
|
||||
if (floored == true) {
|
||||
return Math.floor(scope.to[axis] - scope.from[axis] + epsilon);
|
||||
|
||||
} else if (floored == 'box_uv' && Format.box_uv_float_size != true) {
|
||||
return Math.floor(scope.to[axis] - scope.from[axis] + epsilon);
|
||||
|
||||
} else {
|
||||
return scope.to[axis] - scope.from[axis]
|
||||
}
|
||||
@ -1005,7 +1009,7 @@ new NodePreviewController(Cube, {
|
||||
|
||||
if (element.box_uv) {
|
||||
|
||||
var size = element.size(undefined, true)
|
||||
var size = element.size(undefined, Format.box_uv_float_size != true);
|
||||
|
||||
var face_list = [
|
||||
{face: 'east', from: [0, size[2]], size: [size[2], size[1]]},
|
||||
|
@ -1214,107 +1214,7 @@ const Canvas = {
|
||||
},
|
||||
updateUV(cube, animation = true) {
|
||||
// Deprecated
|
||||
var mesh = cube.mesh
|
||||
if (mesh === undefined || !mesh.geometry) return;
|
||||
|
||||
if (cube.box_uv) {
|
||||
|
||||
var size = cube.size(undefined, true)
|
||||
|
||||
var face_list = [
|
||||
{face: 'east', from: [0, size[2]], size: [size[2], size[1]]},
|
||||
{face: 'west', from: [size[2] + size[0], size[2]], size: [size[2], size[1]]},
|
||||
{face: 'up', from: [size[2]+size[0], size[2]], size: [-size[0], -size[2]]},
|
||||
{face: 'down', from: [size[2]+size[0]*2, 0], size: [-size[0], size[2]]},
|
||||
{face: 'south', from: [size[2]*2 + size[0], size[2]], size: [size[0], size[1]]},
|
||||
{face: 'north', from: [size[2], size[2]], size: [size[0], size[1]]},
|
||||
]
|
||||
|
||||
if (cube.mirror_uv) {
|
||||
face_list.forEach(function(f) {
|
||||
f.from[0] += f.size[0]
|
||||
f.size[0] *= -1
|
||||
})
|
||||
//East+West
|
||||
|
||||
var p = {}
|
||||
|
||||
p.from = face_list[0].from.slice()
|
||||
p.size = face_list[0].size.slice()
|
||||
|
||||
face_list[0].from = face_list[1].from.slice()
|
||||
face_list[0].size = face_list[1].size.slice()
|
||||
|
||||
face_list[1].from = p.from.slice()
|
||||
face_list[1].size = p.size.slice()
|
||||
|
||||
}
|
||||
face_list.forEach(function(f, fIndex) {
|
||||
|
||||
if (cube.faces[f.face].texture === null) return;
|
||||
|
||||
var uv= [
|
||||
f.from[0] + cube.uv_offset[0],
|
||||
f.from[1] + cube.uv_offset[1],
|
||||
f.from[0] + f.size[0] + cube.uv_offset[0],
|
||||
f.from[1] + f.size[1] + cube.uv_offset[1]
|
||||
]
|
||||
uv.forEach(function(s, si) {
|
||||
uv[si] *= 1
|
||||
})
|
||||
|
||||
cube.faces[f.face].uv[0] = uv[0]
|
||||
cube.faces[f.face].uv[1] = uv[1]
|
||||
cube.faces[f.face].uv[2] = uv[2]
|
||||
cube.faces[f.face].uv[3] = uv[3]
|
||||
|
||||
//Fight Bleeding
|
||||
for (var si = 0; si < 2; si++) {
|
||||
let margin = 1/64;
|
||||
if (uv[si] > uv[si+2]) {
|
||||
margin = -margin
|
||||
}
|
||||
uv[si] += margin
|
||||
uv[si+2] -= margin
|
||||
}
|
||||
|
||||
stretch = 1;
|
||||
frame = 0;
|
||||
let tex = cube.faces[f.face].getTexture();
|
||||
if (tex instanceof Texture && tex.frameCount !== 1) {
|
||||
stretch = tex.frameCount
|
||||
if (animation === true && tex.currentFrame) {
|
||||
frame = tex.currentFrame
|
||||
}
|
||||
}
|
||||
|
||||
Canvas.updateUVFace(mesh.geometry.attributes.uv, fIndex, {uv: uv}, frame, stretch)
|
||||
})
|
||||
|
||||
} else {
|
||||
|
||||
var stretch = 1
|
||||
var frame = 0
|
||||
|
||||
Canvas.face_order.forEach((face, fIndex) => {
|
||||
|
||||
if (cube.faces[face].texture === null) return;
|
||||
|
||||
stretch = 1;
|
||||
frame = 0;
|
||||
let tex = cube.faces[face].getTexture();
|
||||
if (tex instanceof Texture && tex.frameCount !== 1) {
|
||||
stretch = tex.frameCount
|
||||
if (animation === true && tex.currentFrame) {
|
||||
frame = tex.currentFrame
|
||||
}
|
||||
}
|
||||
Canvas.updateUVFace(mesh.geometry.attributes.uv, fIndex, cube.faces[face], frame, stretch)
|
||||
})
|
||||
|
||||
}
|
||||
mesh.geometry.attributes.uv.needsUpdate = true;
|
||||
return mesh.geometry
|
||||
return Cube.preview_controller.updateUV(cube, animation);
|
||||
},
|
||||
updateUVFace(vertex_uvs, index, face, frame = 0, stretch = 1) {
|
||||
stretch *= -1;
|
||||
|
@ -176,13 +176,14 @@ const TextureGenerator = {
|
||||
},
|
||||
//constructors
|
||||
boxUVCubeTemplate: function(obj, min_size) {
|
||||
this.x = obj.size(0, true) || min_size;
|
||||
this.y = obj.size(1, 'template') || min_size;
|
||||
this.z = obj.size(2, true) || min_size;
|
||||
let floor_uv = Format.box_uv_float_size != true;
|
||||
this.x = Math.round(obj.size(0, floor_uv)) || min_size;
|
||||
this.y = Math.round(obj.size(1, floor_uv)) || min_size;
|
||||
this.z = Math.round(obj.size(2, floor_uv)) || min_size;
|
||||
this.posx = obj.uv_offset[0];
|
||||
this.posy = obj.uv_offset[1];
|
||||
this.obj = obj;
|
||||
this.template_size = (obj.size(2, true) + obj.size(1, 'template'))+ (obj.size(2, true) + obj.size(0, true))*2;
|
||||
this.template_size = (obj.size(2, floor_uv) + obj.size(1, floor_uv))+ (obj.size(2, floor_uv) + obj.size(0, floor_uv))*2;
|
||||
|
||||
this.height = this.z + this.y;
|
||||
this.width = 2* (this.x + this.z);
|
||||
@ -621,7 +622,7 @@ const TextureGenerator = {
|
||||
}
|
||||
|
||||
if (!cube.box_uv) {
|
||||
var size = cube.size(undefined, true);
|
||||
var size = cube.size(undefined, Format.box_uv_float_size != true);
|
||||
size.forEach((n, i) => {
|
||||
size[i] = n;
|
||||
})
|
||||
|
@ -284,7 +284,7 @@ const UVEditor = {
|
||||
let elements = UVEditor.getMappableElements();
|
||||
elements.forEach(element => {
|
||||
if (element instanceof Cube && element.box_uv) {
|
||||
let size = element.size(undefined, true)
|
||||
let size = element.size(undefined, Format.box_uv_float_size != true)
|
||||
min_x = Math.min(min_x, element.uv_offset[0]);
|
||||
min_y = Math.min(min_y, element.uv_offset[1]);
|
||||
max_x = Math.max(max_x, element.uv_offset[0] + (size[0] + size[2]) * 2);
|
||||
@ -552,7 +552,7 @@ const UVEditor = {
|
||||
|
||||
value = limitNumber(value, minimum, limit)
|
||||
value = limitNumber(value + size, minimum, limit) - size
|
||||
obj.uv_offset[axis] = value
|
||||
obj.uv_offset[axis] = Math.round(value);
|
||||
}
|
||||
obj.preview_controller.updateUV(obj);
|
||||
})
|
||||
@ -2475,7 +2475,7 @@ Interface.definePanels(function() {
|
||||
})
|
||||
})
|
||||
} else if (element.box_uv) {
|
||||
let size = element.size(undefined, true);
|
||||
let size = element.size(undefined, Format.box_uv_float_size != true);
|
||||
let uv_size = [
|
||||
size[2] + size[0] + (size[1] ? size[2] : 0) + size[0],
|
||||
size[2] + size[1],
|
||||
@ -2505,8 +2505,8 @@ Interface.definePanels(function() {
|
||||
})
|
||||
})
|
||||
} else if (element.box_uv) {
|
||||
element.uv_offset[0] += diff_x;
|
||||
element.uv_offset[1] += diff_y;
|
||||
element.uv_offset[0] = Math.floor(element.uv_offset[0] + diff_x);
|
||||
element.uv_offset[1] = Math.floor(element.uv_offset[1] + diff_y);
|
||||
} else {
|
||||
this.selected_faces.forEach(key => {
|
||||
if (element.faces[key] && element instanceof Cube) {
|
||||
@ -3221,10 +3221,10 @@ Interface.definePanels(function() {
|
||||
:class="{unselected: display_uv === 'all_elements' && !mappable_elements.includes(element)}"
|
||||
:style="{left: toPixels(element.uv_offset[0]), top: toPixels(element.uv_offset[1])}"
|
||||
>
|
||||
<div class="uv_fill" v-if="element.size(1, true) > 0" :style="{left: '-1px', top: toPixels(element.size(2, true), -1), width: toPixels(element.size(2, true)*2 + element.size(0, true)*2, 2), height: toPixels(element.size(1, true), 2)}" />
|
||||
<div class="uv_fill" v-if="element.size(0, true) > 0" :style="{left: toPixels(element.size(2, true), -1), top: '-1px', width: toPixels(element.size(0, true)*2, 2), height: toPixels(element.size(2, true), 2), borderBottom: element.size(1, true) > 0 ? 'none' : undefined}" />
|
||||
<div :style="{left: toPixels(element.size(2, true), -1), top: element.size(0, true) > 0 ? '-1px' : toPixels(element.size(2, true), -1), width: toPixels(element.size(0, true), 2), height: toPixels( (element.size(0, true) > 0 ? element.size(2, true) : 0) + element.size(1, true), 2), borderRight: element.size(0, true) == 0 ? 'none' : undefined}" />
|
||||
<div v-if="element.size(1, true) > 0 && element.size(0, true) > 0" :style="{left: toPixels(element.size(2, true)*2 + element.size(0, true), -1), top: toPixels(element.size(2, true), -1), width: toPixels(element.size(0, true), 2), height: toPixels(element.size(1, true), 2)}" />
|
||||
<div class="uv_fill" v-if="element.size(1, 'box_uv') > 0" :style="{left: '-1px', top: toPixels(element.size(2, 'box_uv'), -1), width: toPixels(element.size(2, 'box_uv')*2 + element.size(0, 'box_uv')*2, 2), height: toPixels(element.size(1, 'box_uv'), 2)}" />
|
||||
<div class="uv_fill" v-if="element.size(0, 'box_uv') > 0" :style="{left: toPixels(element.size(2, 'box_uv'), -1), top: '-1px', width: toPixels(element.size(0, 'box_uv')*2, 2), height: toPixels(element.size(2, 'box_uv'), 2), borderBottom: element.size(1, 'box_uv') > 0 ? 'none' : undefined}" />
|
||||
<div :style="{left: toPixels(element.size(2, 'box_uv'), -1), top: element.size(0, 'box_uv') > 0 ? '-1px' : toPixels(element.size(2, 'box_uv'), -1), width: toPixels(element.size(0, 'box_uv'), 2), height: toPixels( (element.size(0, 'box_uv') > 0 ? element.size(2, 'box_uv') : 0) + element.size(1, 'box_uv'), 2), borderRight: element.size(0, 'box_uv') == 0 ? 'none' : undefined}" />
|
||||
<div v-if="element.size(1, 'box_uv') > 0 && element.size(0, 'box_uv') > 0" :style="{left: toPixels(element.size(2, 'box_uv')*2 + element.size(0, 'box_uv'), -1), top: toPixels(element.size(2, 'box_uv'), -1), width: toPixels(element.size(0, 'box_uv'), 2), height: toPixels(element.size(1, 'box_uv'), 2)}" />
|
||||
</div>
|
||||
|
||||
<template v-if="element.type == 'mesh'">
|
||||
|
Loading…
Reference in New Issue
Block a user