mirror of
https://github.com/overte-org/overte.git
synced 2025-04-25 20:16:16 +02:00
399 lines
17 KiB
JavaScript
399 lines
17 KiB
JavaScript
//
|
|
// entityPropertyDialogBox.js
|
|
// examples
|
|
//
|
|
// Created by Brad hefta-Gaub on 10/1/14.
|
|
// Copyright 2014 High Fidelity, Inc.
|
|
//
|
|
// This script implements a class useful for building tools for editing entities.
|
|
//
|
|
// Distributed under the Apache License, Version 2.0.
|
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
|
//
|
|
|
|
EntityPropertyDialogBox = (function () {
|
|
var that = {};
|
|
|
|
var propertiesForEditedEntity;
|
|
var editEntityFormArray;
|
|
var decimals = 3;
|
|
var dimensionX;
|
|
var dimensionY;
|
|
var dimensionZ;
|
|
var rescalePercentage;
|
|
var editModelID = -1;
|
|
var previousAnimationIsPlaying;
|
|
var previousAnimationFrameIndex;
|
|
var previousAnimationSettings;
|
|
|
|
that.cleanup = function () {
|
|
};
|
|
|
|
that.openDialog = function (entityID) {
|
|
print(" Edit Properties.... about to edit properties...");
|
|
|
|
editModelID = entityID;
|
|
propertiesForEditedEntity = Entities.getEntityProperties(editModelID);
|
|
var properties = propertiesForEditedEntity;
|
|
|
|
var array = new Array();
|
|
var index = 0;
|
|
|
|
array.push({ label: "Entity Type:" + properties.type, type: "header" });
|
|
index++;
|
|
array.push({ label: "ID:", value: properties.id });
|
|
index++;
|
|
array.push({ label: "Locked:", type: "checkbox", value: properties.locked });
|
|
index++;
|
|
|
|
if (properties.type == "Model") {
|
|
array.push({ label: "Model URL:", value: properties.modelURL });
|
|
index++;
|
|
array.push({ label: "Animation URL:", value: properties.animationURL });
|
|
index++;
|
|
array.push({ label: "Animation is playing:", type: "checkbox", value: properties.animationIsPlaying });
|
|
previousAnimationIsPlaying = properties.animationIsPlaying;
|
|
index++;
|
|
array.push({ label: "Animation FPS:", value: properties.animationFPS });
|
|
index++;
|
|
array.push({ label: "Animation Frame:", value: properties.animationFrameIndex });
|
|
previousAnimationFrameIndex = properties.animationFrameIndex;
|
|
index++;
|
|
array.push({ label: "Animation Settings:", value: properties.animationSettings });
|
|
previousAnimationSettings = properties.animationSettings;
|
|
index++;
|
|
array.push({ label: "Textures:", value: properties.textures });
|
|
index++;
|
|
array.push({ label: "Original Textures:\n" + properties.originalTextures, type: "header" });
|
|
index++;
|
|
}
|
|
|
|
if (properties.type == "Text") {
|
|
array.push({ label: "Text:", value: properties.text });
|
|
index++;
|
|
array.push({ label: "Line Height:", value: properties.lineHeight });
|
|
index++;
|
|
array.push({ label: "Text Color:", type: "header" });
|
|
index++;
|
|
array.push({ label: "Red:", value: properties.textColor.red });
|
|
index++;
|
|
array.push({ label: "Green:", value: properties.textColor.green });
|
|
index++;
|
|
array.push({ label: "Blue:", value: properties.textColor.blue });
|
|
index++;
|
|
array.push({ label: "Background Color:", type: "header" });
|
|
index++;
|
|
array.push({ label: "Red:", value: properties.backgroundColor.red });
|
|
index++;
|
|
array.push({ label: "Green:", value: properties.backgroundColor.green });
|
|
index++;
|
|
array.push({ label: "Blue:", value: properties.backgroundColor.blue });
|
|
index++;
|
|
}
|
|
|
|
array.push({ label: "Position:", type: "header" });
|
|
index++;
|
|
array.push({ label: "X:", value: properties.position.x.toFixed(decimals) });
|
|
index++;
|
|
array.push({ label: "Y:", value: properties.position.y.toFixed(decimals) });
|
|
index++;
|
|
array.push({ label: "Z:", value: properties.position.z.toFixed(decimals) });
|
|
index++;
|
|
|
|
array.push({ label: "Registration X:", value: properties.registrationPoint.x.toFixed(decimals) });
|
|
index++;
|
|
array.push({ label: "Registration Y:", value: properties.registrationPoint.y.toFixed(decimals) });
|
|
index++;
|
|
array.push({ label: "Registration Z:", value: properties.registrationPoint.z.toFixed(decimals) });
|
|
index++;
|
|
|
|
array.push({ label: "Rotation:", type: "header" });
|
|
index++;
|
|
var angles = Quat.safeEulerAngles(properties.rotation);
|
|
array.push({ label: "Pitch:", value: angles.x.toFixed(decimals) });
|
|
index++;
|
|
array.push({ label: "Yaw:", value: angles.y.toFixed(decimals) });
|
|
index++;
|
|
array.push({ label: "Roll:", value: angles.z.toFixed(decimals) });
|
|
index++;
|
|
|
|
array.push({ label: "Dimensions:", type: "header" });
|
|
index++;
|
|
array.push({ label: "Width:", value: properties.dimensions.x.toFixed(decimals) });
|
|
dimensionX = index;
|
|
index++;
|
|
array.push({ label: "Height:", value: properties.dimensions.y.toFixed(decimals) });
|
|
dimensionY = index;
|
|
index++;
|
|
array.push({ label: "Depth:", value: properties.dimensions.z.toFixed(decimals) });
|
|
dimensionZ = index;
|
|
index++;
|
|
array.push({ label: "", type: "inlineButton", buttonLabel: "Reset to Natural Dimensions", name: "resetDimensions" });
|
|
index++;
|
|
array.push({ label: "Rescale Percentage:", value: 100 });
|
|
rescalePercentage = index;
|
|
index++;
|
|
array.push({ label: "", type: "inlineButton", buttonLabel: "Rescale", name: "rescaleDimensions" });
|
|
index++;
|
|
|
|
array.push({ label: "Velocity:", type: "header" });
|
|
index++;
|
|
array.push({ label: "Linear X:", value: properties.velocity.x.toFixed(decimals) });
|
|
index++;
|
|
array.push({ label: "Linear Y:", value: properties.velocity.y.toFixed(decimals) });
|
|
index++;
|
|
array.push({ label: "Linear Z:", value: properties.velocity.z.toFixed(decimals) });
|
|
index++;
|
|
array.push({ label: "Linear Damping:", value: properties.damping.toFixed(decimals) });
|
|
index++;
|
|
array.push({ label: "Angular Pitch:", value: properties.angularVelocity.x.toFixed(decimals) });
|
|
index++;
|
|
array.push({ label: "Angular Yaw:", value: properties.angularVelocity.y.toFixed(decimals) });
|
|
index++;
|
|
array.push({ label: "Angular Roll:", value: properties.angularVelocity.z.toFixed(decimals) });
|
|
index++;
|
|
array.push({ label: "Angular Damping:", value: properties.angularDamping.toFixed(decimals) });
|
|
index++;
|
|
|
|
array.push({ label: "Gravity X:", value: properties.gravity.x.toFixed(decimals) });
|
|
index++;
|
|
array.push({ label: "Gravity Y:", value: properties.gravity.y.toFixed(decimals) });
|
|
index++;
|
|
array.push({ label: "Gravity Z:", value: properties.gravity.z.toFixed(decimals) });
|
|
index++;
|
|
|
|
array.push({ label: "Collisions:", type: "header" });
|
|
index++;
|
|
array.push({ label: "Mass:", value: properties.mass.toFixed(decimals) });
|
|
index++;
|
|
array.push({ label: "Ignore for Collisions:", type: "checkbox", value: properties.ignoreForCollisions });
|
|
index++;
|
|
array.push({ label: "Collisions Will Move:", type: "checkbox", value: properties.collisionsWillMove });
|
|
index++;
|
|
|
|
array.push({ label: "Lifetime:", value: properties.lifetime.toFixed(decimals) });
|
|
index++;
|
|
|
|
array.push({ label: "Visible:", type: "checkbox", value: properties.visible });
|
|
index++;
|
|
|
|
array.push({ label: "Script:", value: properties.script });
|
|
index++;
|
|
|
|
if (properties.type == "Box" || properties.type == "Sphere") {
|
|
array.push({ label: "Color:", type: "header" });
|
|
index++;
|
|
array.push({ label: "Red:", value: properties.color.red });
|
|
index++;
|
|
array.push({ label: "Green:", value: properties.color.green });
|
|
index++;
|
|
array.push({ label: "Blue:", value: properties.color.blue });
|
|
index++;
|
|
}
|
|
|
|
if (properties.type == "Light") {
|
|
array.push({ label: "Light Properties:", type: "header" });
|
|
index++;
|
|
array.push({ label: "Is Spot Light:", value: properties.isSpotlight });
|
|
index++;
|
|
array.push({ label: "Diffuse Red:", value: properties.diffuseColor.red });
|
|
index++;
|
|
array.push({ label: "Diffuse Green:", value: properties.diffuseColor.green });
|
|
index++;
|
|
array.push({ label: "Diffuse Blue:", value: properties.diffuseColor.blue });
|
|
index++;
|
|
array.push({ label: "Ambient Red:", value: properties.ambientColor.red });
|
|
index++;
|
|
array.push({ label: "Ambient Green:", value: properties.ambientColor.green });
|
|
index++;
|
|
array.push({ label: "Ambient Blue:", value: properties.ambientColor.blue });
|
|
index++;
|
|
array.push({ label: "Specular Red:", value: properties.specularColor.red });
|
|
index++;
|
|
array.push({ label: "Specular Green:", value: properties.specularColor.green });
|
|
index++;
|
|
array.push({ label: "Specular Blue:", value: properties.specularColor.blue });
|
|
index++;
|
|
array.push({ label: "Constant Attenuation:", value: properties.constantAttenuation });
|
|
index++;
|
|
array.push({ label: "Linear Attenuation:", value: properties.linearAttenuation });
|
|
index++;
|
|
array.push({ label: "Quadratic Attenuation:", value: properties.quadraticAttenuation });
|
|
index++;
|
|
array.push({ label: "Exponent:", value: properties.exponent });
|
|
index++;
|
|
array.push({ label: "Cutoff (in degrees):", value: properties.cutoff });
|
|
index++;
|
|
}
|
|
array.push({ button: "Cancel" });
|
|
index++;
|
|
|
|
editEntityFormArray = array;
|
|
Window.nonBlockingForm("Edit Properties", array);
|
|
};
|
|
|
|
Window.inlineButtonClicked.connect(function (name) {
|
|
if (name == "resetDimensions") {
|
|
Window.reloadNonBlockingForm([
|
|
{ value: propertiesForEditedEntity.naturalDimensions.x.toFixed(decimals), oldIndex: dimensionX },
|
|
{ value: propertiesForEditedEntity.naturalDimensions.y.toFixed(decimals), oldIndex: dimensionY },
|
|
{ value: propertiesForEditedEntity.naturalDimensions.z.toFixed(decimals), oldIndex: dimensionZ }
|
|
]);
|
|
}
|
|
|
|
if (name == "rescaleDimensions") {
|
|
var peekValues = editEntityFormArray;
|
|
Window.peekNonBlockingFormResult(peekValues);
|
|
var peekX = peekValues[dimensionX].value;
|
|
var peekY = peekValues[dimensionY].value;
|
|
var peekZ = peekValues[dimensionZ].value;
|
|
var peekRescale = peekValues[rescalePercentage].value;
|
|
var rescaledX = peekX * peekRescale / 100.0;
|
|
var rescaledY = peekY * peekRescale / 100.0;
|
|
var rescaledZ = peekZ * peekRescale / 100.0;
|
|
|
|
Window.reloadNonBlockingForm([
|
|
{ value: rescaledX.toFixed(decimals), oldIndex: dimensionX },
|
|
{ value: rescaledY.toFixed(decimals), oldIndex: dimensionY },
|
|
{ value: rescaledZ.toFixed(decimals), oldIndex: dimensionZ },
|
|
{ value: 100, oldIndex: rescalePercentage }
|
|
]);
|
|
}
|
|
|
|
});
|
|
Window.nonBlockingFormClosed.connect(function() {
|
|
array = editEntityFormArray;
|
|
if (Window.getNonBlockingFormResult(array)) {
|
|
var properties = propertiesForEditedEntity;
|
|
var index = 0;
|
|
index++; // skip type header
|
|
index++; // skip id item
|
|
properties.locked = array[index++].value;
|
|
if (properties.type == "Model") {
|
|
properties.modelURL = array[index++].value;
|
|
properties.animationURL = array[index++].value;
|
|
|
|
var newAnimationIsPlaying = array[index++].value;
|
|
if (previousAnimationIsPlaying != newAnimationIsPlaying) {
|
|
properties.animationIsPlaying = newAnimationIsPlaying;
|
|
} else {
|
|
delete properties.animationIsPlaying;
|
|
}
|
|
|
|
properties.animationFPS = array[index++].value;
|
|
|
|
var newAnimationFrameIndex = array[index++].value;
|
|
if (previousAnimationFrameIndex != newAnimationFrameIndex) {
|
|
properties.animationFrameIndex = newAnimationFrameIndex;
|
|
} else {
|
|
delete properties.animationFrameIndex;
|
|
}
|
|
|
|
var newAnimationSettings = array[index++].value;
|
|
if (previousAnimationSettings != newAnimationSettings) {
|
|
properties.animationSettings = newAnimationSettings;
|
|
} else {
|
|
delete properties.animationSettings;
|
|
}
|
|
properties.textures = array[index++].value;
|
|
index++; // skip textureNames label
|
|
}
|
|
|
|
if (properties.type == "Text") {
|
|
properties.text = array[index++].value;
|
|
properties.lineHeight = array[index++].value;
|
|
|
|
index++; // skip header
|
|
properties.textColor.red = array[index++].value;
|
|
properties.textColor.green = array[index++].value;
|
|
properties.textColor.blue = array[index++].value;
|
|
|
|
index++; // skip header
|
|
properties.backgroundColor.red = array[index++].value;
|
|
properties.backgroundColor.green = array[index++].value;
|
|
properties.backgroundColor.blue = array[index++].value;
|
|
}
|
|
|
|
index++; // skip header
|
|
properties.position.x = array[index++].value;
|
|
properties.position.y = array[index++].value;
|
|
properties.position.z = array[index++].value;
|
|
properties.registrationPoint.x = array[index++].value;
|
|
properties.registrationPoint.y = array[index++].value;
|
|
properties.registrationPoint.z = array[index++].value;
|
|
|
|
index++; // skip header
|
|
var angles = Quat.safeEulerAngles(properties.rotation);
|
|
angles.x = array[index++].value;
|
|
angles.y = array[index++].value;
|
|
angles.z = array[index++].value;
|
|
properties.rotation = Quat.fromVec3Degrees(angles);
|
|
|
|
index++; // skip header
|
|
properties.dimensions.x = array[index++].value;
|
|
properties.dimensions.y = array[index++].value;
|
|
properties.dimensions.z = array[index++].value;
|
|
index++; // skip reset button
|
|
index++; // skip rescale percentage
|
|
index++; // skip rescale button
|
|
|
|
index++; // skip header
|
|
properties.velocity.x = array[index++].value;
|
|
properties.velocity.y = array[index++].value;
|
|
properties.velocity.z = array[index++].value;
|
|
properties.damping = array[index++].value;
|
|
|
|
properties.angularVelocity.x = array[index++].value;
|
|
properties.angularVelocity.y = array[index++].value;
|
|
properties.angularVelocity.z = array[index++].value;
|
|
properties.angularDamping = array[index++].value;
|
|
|
|
properties.gravity.x = array[index++].value;
|
|
properties.gravity.y = array[index++].value;
|
|
properties.gravity.z = array[index++].value;
|
|
|
|
index++; // skip header
|
|
properties.mass = array[index++].value;
|
|
properties.ignoreForCollisions = array[index++].value;
|
|
properties.collisionsWillMove = array[index++].value;
|
|
|
|
properties.lifetime = array[index++].value;
|
|
properties.visible = array[index++].value;
|
|
properties.script = array[index++].value;
|
|
|
|
if (properties.type == "Box" || properties.type == "Sphere") {
|
|
index++; // skip header
|
|
properties.color.red = array[index++].value;
|
|
properties.color.green = array[index++].value;
|
|
properties.color.blue = array[index++].value;
|
|
}
|
|
if (properties.type == "Light") {
|
|
index++; // skip header
|
|
properties.isSpotlight = array[index++].value;
|
|
properties.diffuseColor.red = array[index++].value;
|
|
properties.diffuseColor.green = array[index++].value;
|
|
properties.diffuseColor.blue = array[index++].value;
|
|
properties.ambientColor.red = array[index++].value;
|
|
properties.ambientColor.green = array[index++].value;
|
|
properties.ambientColor.blue = array[index++].value;
|
|
properties.specularColor.red = array[index++].value;
|
|
properties.specularColor.green = array[index++].value;
|
|
properties.specularColor.blue = array[index++].value;
|
|
properties.constantAttenuation = array[index++].value;
|
|
properties.linearAttenuation = array[index++].value;
|
|
properties.quadraticAttenuation = array[index++].value;
|
|
properties.exponent = array[index++].value;
|
|
properties.cutoff = array[index++].value;
|
|
}
|
|
|
|
Entities.editEntity(editModelID, properties);
|
|
if (typeof(selectionDisplay) != "undefined") {
|
|
selectionDisplay.select(editModelID, false);
|
|
}
|
|
}
|
|
modelSelected = false;
|
|
});
|
|
|
|
return that;
|
|
|
|
}());
|