mirror of
https://github.com/JannisX11/blockbench.git
synced 2024-12-15 05:01:38 +08:00
fa98a3f28d
Rename mesh "Line" to "Edge" Fix dialog title offset in text prompt dialog Fix plugin install registration not working in web app Fix modded entity models not exporting after conversion, closes #1124
122 lines
3.7 KiB
JavaScript
122 lines
3.7 KiB
JavaScript
class Property {
|
|
constructor(target_class, type = 'boolean', name, options = 0) {
|
|
if (!target_class.properties) {
|
|
target_class.properties = {};
|
|
}
|
|
target_class.properties[name] = this;
|
|
|
|
this.class = target_class;
|
|
this.name = name;
|
|
this.type = type;
|
|
|
|
if (options.default != undefined) {
|
|
this.default = options.default;
|
|
} else {
|
|
switch (this.type) {
|
|
case 'string': this.default = ''; break;
|
|
case 'molang': this.default = '0'; break;
|
|
case 'number': this.default = 0; break;
|
|
case 'boolean': this.default = false; break;
|
|
case 'array': this.default = []; break;
|
|
case 'instance': this.default = null; break;
|
|
case 'vector': this.default = [0, 0, 0]; break;
|
|
case 'vector2': this.default = [0, 0]; break;
|
|
}
|
|
}
|
|
switch (this.type) {
|
|
case 'string': this.isString = true; break;
|
|
case 'molang': this.isMolang = true; break;
|
|
case 'number': this.isNumber = true; break;
|
|
case 'boolean': this.isBoolean = true; break;
|
|
case 'array': this.isArray = true; break;
|
|
case 'instance': this.isInstance = true; break;
|
|
case 'vector': this.isVector = true; break;
|
|
case 'vector2': this.isVector2 = true; break;
|
|
}
|
|
|
|
if (this.isMolang) {
|
|
Object.defineProperty(target_class.prototype, `${name}_string`, {
|
|
get() {
|
|
return typeof this[name] == 'number' ? trimFloatNumber(this[name]) || '0' : this[name];
|
|
},
|
|
set(val) {
|
|
this[name] = val;
|
|
}
|
|
})
|
|
}
|
|
|
|
if (typeof options.merge == 'function') this.merge = options.merge;
|
|
if (typeof options.reset == 'function') this.reset = options.reset;
|
|
if (typeof options.merge_validation == 'function') this.merge_validation = options.merge_validation;
|
|
if (options.condition) this.condition = options.condition;
|
|
if (options.exposed == false) this.exposed = false;
|
|
if (options.export == false) this.export = false;
|
|
if (options.label) this.label = options.label;
|
|
if (options.description) this.description = options.description;
|
|
if (options.options) this.options = options.options;
|
|
}
|
|
delete() {
|
|
delete this.class.properties[this.name];
|
|
}
|
|
getDefault(instance) {
|
|
if (typeof this.default == 'function') {
|
|
return this.default(instance);
|
|
} else {
|
|
return this.default;
|
|
}
|
|
}
|
|
merge(instance, data) {
|
|
if (data[this.name] == undefined || !Condition(this.condition, instance)) return;
|
|
|
|
if (this.isString) {
|
|
Merge.string(instance, data, this.name, this.merge_validation)
|
|
}
|
|
else if (this.isNumber) {
|
|
Merge.number(instance, data, this.name)
|
|
}
|
|
else if (this.isMolang) {
|
|
Merge.molang(instance, data, this.name)
|
|
}
|
|
else if (this.isBoolean) {
|
|
Merge.boolean(instance, data, this.name, this.merge_validation)
|
|
}
|
|
else if (this.isArray || this.isVector || this.isVector2) {
|
|
if (data[this.name] instanceof Array) {
|
|
if (instance[this.name] instanceof Array == false) {
|
|
instance[this.name] = [];
|
|
}
|
|
instance[this.name].replace(data[this.name]);
|
|
}
|
|
}
|
|
else if (this.isInstance) {
|
|
if (typeof data[this.name] === 'object') {
|
|
instance[this.name] =data[this.name];
|
|
}
|
|
}
|
|
}
|
|
copy(instance, target) {
|
|
if (!Condition(this.condition, instance)) return;
|
|
|
|
if (this.isArray || this.isVector || this.isVector2) {
|
|
if (instance[this.name] instanceof Array) {
|
|
target[this.name] = instance[this.name].slice();
|
|
}
|
|
} else {
|
|
target[this.name] = instance[this.name];
|
|
}
|
|
}
|
|
reset(instance, force) {
|
|
if (instance[this.name] == undefined && !Condition(this.condition, instance) && !force) return;
|
|
var dft = this.getDefault(instance)
|
|
|
|
if (this.isArray || this.isVector || this.isVector2) {
|
|
if (instance[this.name] instanceof Array == false) {
|
|
instance[this.name] = [];
|
|
}
|
|
instance[this.name].replace(dft || []);
|
|
} else {
|
|
instance[this.name] = dft;
|
|
}
|
|
}
|
|
}
|