Merge branch 'master' of https://github.com/highfidelity/hifi into blocks

This commit is contained in:
Elisa Lupin-Jimenez 2017-08-08 16:55:10 -07:00
commit efd25a5e70
17 changed files with 1253 additions and 538 deletions

View file

@ -448,8 +448,68 @@ input[type=checkbox]:checked + label:hover {
border: 1.5pt solid black;
}
.shape-section, .light-section, .model-section, .web-section, .hyperlink-section, .text-section, .zone-section {
display: table;
}
.section-header, .sub-section-header, hr {
#properties-list fieldset {
position: relative;
/* 0.1px on the top is to prevent margin collapsing between this and it's first child */
margin: 21px -21px 0px -21px;
padding: 0.1px 21px 0px 21px;
border: none;
border-top: 1px rgb(90,90,90) solid;
box-shadow: 0px -1px 0px rgb(37,37,37);
}
#properties-list fieldset.fstuple, #properties-list fieldset.fsrow {
margin-top: 21px;
border: none;
box-shadow: none;
}
#properties-list > fieldset[data-collapsed="true"] + fieldset {
margin-top: 0px;
}
#properties-list > fieldset[data-collapsed="true"] > *:not(legend) {
display: none !important;
}
#properties-list legend + fieldset {
margin-top: 0px;
border: none;
box-shadow: none;
}
#properties-list > fieldset#properties-header {
margin-top: 0px;
padding-bottom: 0px;
}
#properties-list > fieldset > legend {
position: relative;
display: table;
width: 100%;
margin: 21px -21px 0 -21px;
padding: 14px 21px 0 21px;
font-family: Raleway-Regular;
font-size: 12px;
color: #afafaf;
height: 28px;
text-transform: uppercase;
outline: none;
background-color: #404040;
border: none;
border-top: 1px rgb(90,90,90) solid;
box-shadow: 0 -1px 0 rgb(37,37,37), 0 4px 4px 0 rgba(0,0,0,0.75);
}
div.section-header, .sub-section-header, hr {
display: table;
width: 100%;
margin: 21px -21px 0 -21px;
@ -462,16 +522,18 @@ input[type=checkbox]:checked + label:hover {
outline: none;
}
.section-header {
position: relative;
background: #404040 url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAqCAIAAAAbNW1vAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAmSURBVChTY1BFAgzhSIDBAQmMcoYHRwIJMCgjAQZ9JMBgBQdWVgBh5XmBV5A2FQAAAABJRU5ErkJggg==) repeat-x top left;
.column .sub-section-header {
background-image: none;
padding-top: 0;
}
.sub-section-header, .no-collapse, hr {
background: #404040 url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAjSURBVBhXY1RVVf3PgARYjIyMoEwIYHRwcEBRwQSloYCBAQCwjgPMiI7W2QAAAABJRU5ErkJggg==) repeat-x top left;
}
.section-header:first-child {
div.section-header:first-child {
margin-top: -2px;
padding-top: 0;
background: none;
@ -482,7 +544,7 @@ input[type=checkbox]:checked + label:hover {
margin-bottom: -10px;
}
.section-header span {
#properties-list > fieldset > legend span, .section-header span {
font-family: HiFi-Glyphs;
font-size: 30px;
float: right;
@ -536,6 +598,18 @@ hr {
font-size: 13px;
}
.property legend, .number legend {
display: table-cell;
vertical-align: middle;
font-family: Raleway-SemiBold;
font-size: 14px;
}
.property legend .unit, .number legend .unit {
margin-left: 8px;
font-family: Raleway-Light;
font-size: 13px;
}
.value {
display: block;
min-height: 18px;
@ -545,6 +619,11 @@ hr {
vertical-align: top;
width: 48px;
}
.value legend {
display: inline-block;
vertical-align: top;
width: 48px;
}
.value span {
font-family: FiraSans-SemiBold;
font-size: 15px;
@ -572,6 +651,13 @@ hr {
margin-top: -2px;
}
.text legend, .url legend, .number legend, .textarea legend, .rgb legend, .xyz legend, .pyr legend, .dropdown legend, .gen legend {
float: left;
margin-left: 1px;
margin-bottom: 3px;
margin-top: -2px;
}
.number > input {
clear: both;
float: left;
@ -714,6 +800,14 @@ div.refresh input[type="button"] {
display: none !important;
}
#property-color-control1 {
display: table-cell;
float: none;
}
#property-color-control1 + label {
border-left: 20px transparent solid;
}
.rgb label {
float: left;
@ -724,6 +818,15 @@ div.refresh input[type="button"] {
clear: both;
}
.rgb legend {
float: left;
margin-top: 10px;
margin-left: 21px;
}
.rgb legend + * {
clear: both;
}
.tuple div {
display: inline-block;
position: relative;
@ -813,6 +916,42 @@ tuple, .blue:focus, .tuple .z:focus, .tuple .roll:focus {
display: table-cell;
width: 50%;
}
#properties-list fieldset .two-column {
padding-top:21px;
display: flex;
}
#properties-list .two-column fieldset {
/*display: table-cell;*/
width: 50%;
margin: 0;
padding: 0;
border-top: none;
box-shadow: none;
}
#properties-list .two-column fieldset legend {
display: table;
width: 100%;
margin: 21px -21px 0px -21px;
padding: 0px 0px 0px 21px;
font-family: Raleway-Regular;
font-size: 12px;
color: #afafaf;
height: 28px;
text-transform: uppercase;
outline: none;
}
fieldset .checkbox-sub-props {
margin-top: 0;
}
fieldset .checkbox-sub-props .property:first-child {
margin-top: 0;
}
.column {
vertical-align: top;
}
@ -1154,9 +1293,11 @@ th#entity-hasScript {
}
#properties-header {
#properties-list #properties-header {
display: table-row;
height: 28px;
border-top: none;
box-shadow: none;
}
#properties-header .property {
@ -1261,3 +1402,260 @@ input#reset-to-natural-dimensions {
font-size:16px;
display:none;
}
#properties-list #collision-info > fieldset:first-of-type {
border-top: none !important;
box-shadow: none;
margin-top: 0;
}
#properties-list {
display: flex;
flex-direction: column;
}
/* ----- Order of Menu items for Primitive ----- */
#properties-list.ShapeMenu #general,
#properties-list.BoxMenu #general,
#properties-list.SphereMenu #general {
order: 1;
}
#properties-list.ShapeMenu #collision-info,
#properties-list.BoxMenu #collision-info,
#properties-list.SphereMenu #collision-info {
order: 2;
}
#properties-list.ShapeMenu #physical,
#properties-list.BoxMenu #physical,
#properties-list.SphereMenu #physical {
order: 3;
}
#properties-list.ShapeMenu #spatial,
#properties-list.BoxMenu #spatial,
#properties-list.SphereMenu #spatial {
order: 4;
}
#properties-list.ShapeMenu #behavior,
#properties-list.BoxMenu #behavior,
#properties-list.SphereMenu #behavior {
order: 5;
}
#properties-list.ShapeMenu #hyperlink,
#properties-list.BoxMenu #hyperlink,
#properties-list.SphereMenu #hyperlink {
order: 6;
}
#properties-list.ShapeMenu #light,
#properties-list.BoxMenu #light,
#properties-list.SphereMenu #light,
#properties-list.ShapeMenu #model,
#properties-list.BoxMenu #model,
#properties-list.SphereMenu #model,
#properties-list.ShapeMenu #zone,
#properties-list.BoxMenu #zone,
#properties-list.SphereMenu #zone,
#properties-list.ShapeMenu #text,
#properties-list.BoxMenu #text,
#properties-list.SphereMenu #text,
#properties-list.ShapeMenu #web,
#properties-list.BoxMenu #web,
#properties-list.SphereMenu #web {
display: none;
}
/* ----- Order of Menu items for Light ----- */
#properties-list.LightMenu #general {
order: 1;
}
#properties-list.LightMenu #light {
order: 2;
}
#properties-list.LightMenu #physical {
order: 3;
}
#properties-list.LightMenu #spatial {
order: 4;
}
#properties-list.LightMenu #behavior {
order: 5;
}
#properties-list.LightMenu #collision-info {
order: 6;
}
#properties-list.LightMenu #hyperlink {
order: 7;
}
/* sections to hide */
#properties-list.LightMenu #model,
#properties-list.LightMenu #zone,
#properties-list.LightMenu #text,
#properties-list.LightMenu #web {
display: none;
}
/* items to hide */
#properties-list.LightMenu .shape-group.shape-section.property.dropdown,
#properties-list.LightMenu color-section.color-control1 {
display: none
}
/* ----- Order of Menu items for Model ----- */
#properties-list.ModelMenu #general {
order: 1;
}
#properties-list.ModelMenu #model {
order: 2;
}
#properties-list.ModelMenu #collision-info {
order: 3;
}
#properties-list.ModelMenu #physical {
order: 4;
}
#properties-list.ModelMenu #spatial {
order: 5;
}
#properties-list.ModelMenu #behavior {
order: 6;
}
#properties-list.ModelMenu #hyperlink {
order: 7;
}
/* sections to hide */
#properties-list.ModelMenu #light,
#properties-list.ModelMenu #zone,
#properties-list.ModelMenu #text,
#properties-list.ModelMenu #web {
display: none;
}
/* items to hide */
#properties-list.ModelMenu .shape-group.shape-section.property.dropdown,
#properties-list.ModelMenu .color-section.color-control1 {
display: none
}
/* ----- Order of Menu items for Zone ----- */
#properties-list.ZoneMenu #general {
order: 1;
}
#properties-list.ZoneMenu #zone {
order: 2;
}
#properties-list.ZoneMenu #physical {
order: 3;
}
#properties-list.ZoneMenu #spatial {
order: 4;
}
#properties-list.ZoneMenu #behavior {
order: 5;
}
#properties-list.ZoneMenu #collision-info {
order: 6;
}
#properties-list.ZoneMenu #hyperlink {
order: 7;
}
/* sections to hide */
#properties-list.ZoneMenu #light,
#properties-list.ZoneMenu #model,
#properties-list.ZoneMenu #text,
#properties-list.ZoneMenu #web {
display: none;
}
/* items to hide */
#properties-list.ZoneMenu .shape-group.shape-section.property.dropdown,
#properties-list.ZoneMenu .color-section.color-control1 {
display: none
}
/* ----- Order of Menu items for Web ----- */
#properties-list.WebMenu #general {
order: 1;
}
#properties-list.WebMenu #web {
order: 2;
}
#properties-list.WebMenu #collision-info {
order: 3;
}
#properties-list.WebMenu #physical {
order: 4;
}
#properties-list.WebMenu #spatial {
order: 5;
}
#properties-list.WebMenu #behavior {
order: 6;
}
#properties-list.WebMenu #hyperlink {
order: 7;
}
/* sections to hide */
#properties-list.WebMenu #light,
#properties-list.WebMenu #model,
#properties-list.WebMenu #zone,
#properties-list.WebMenu #text {
display: none;
}
/* items to hide */
#properties-list.WebMenu .shape-group.shape-section.property.dropdown,
#properties-list.WebMenu .color-section.color-control1 {
display: none;
}
/* ----- Order of Menu items for Text ----- */
#properties-list.TextMenu #general {
order: 1;
}
#properties-list.TextMenu #text {
order: 2;
}
#properties-list.TextMenu #collision-info {
order: 3;
}
#properties-list.TextMenu #physical {
order: 4;
}
#properties-list.TextMenu #spatial {
order: 5;
}
#properties-list.TextMenu #behavior {
order: 6;
}
#properties-list.TextMenu #hyperlink {
order: 7;
}
/* sections to hide */
#properties-list.TextMenu #light,
#properties-list.TextMenu #model,
#properties-list.TextMenu #zone,
#properties-list.TextMenu #web {
display: none;
}
/* items to hide */
#properties-list.TextMenu .shape-group.shape-section.property.dropdown,
#properties-list.TextMenu .color-section.color-control1 {
display: none
}
/* Currently always hidden */
#properties-list #polyvox {
display: none;
}
.skybox-section {
display: none;
}

File diff suppressed because it is too large Load diff

View file

@ -488,6 +488,7 @@ function loaded() {
openEventBridge(function() {
var allSections = [];
var elPropertiesList = document.getElementById("properties-list");
var elID = document.getElementById("property-id");
var elType = document.getElementById("property-type");
var elTypeIcon = document.getElementById("type-icon");
@ -574,7 +575,8 @@ function loaded() {
var elJSONEditor = document.getElementById("userdata-editor");
var elNewJSONEditor = document.getElementById('userdata-new-editor');
var elColorSections = document.querySelectorAll(".color-section");
var elColor = document.getElementById("property-color");
var elColorControl1 = document.getElementById("property-color-control1");
var elColorControl2 = document.getElementById("property-color-control2");
var elColorRed = document.getElementById("property-color-red");
var elColorGreen = document.getElementById("property-color-green");
var elColorBlue = document.getElementById("property-color-blue");
@ -688,7 +690,10 @@ function loaded() {
data = JSON.parse(data);
if (data.type == "server_script_status") {
elServerScriptError.value = data.errorInfo;
elServerScriptError.style.display = data.errorInfo ? "block" : "none";
// If we just set elServerScriptError's diplay to block or none, we still end up with
//it's parent contributing 21px bottom padding even when elServerScriptError is display:none.
// So set it's parent to block or none
elServerScriptError.parentElement.style.display = data.errorInfo ? "block" : "none";
if (data.statusRetrieved === false) {
elServerScriptStatus.innerText = "Failed to retrieve status";
} else if (data.isRunning) {
@ -714,6 +719,7 @@ function loaded() {
elTypeIcon.style.display = "none";
elType.innerHTML = "<i>No selection</i>";
elID.value = "";
elPropertiesList.className = '';
disableProperties();
} else if (data.selections && data.selections.length > 1) {
deleteJSONEditor();
@ -742,6 +748,7 @@ function loaded() {
elType.innerHTML = type + " (" + data.selections.length + ")";
elTypeIcon.innerHTML = ICON_FOR_TYPE[type];
elTypeIcon.style.display = "inline-block";
elPropertiesList.className = '';
elID.value = "";
@ -758,6 +765,7 @@ function loaded() {
lastEntityID = '"' + properties.id + '"';
elID.value = properties.id;
elPropertiesList.className = properties.type + 'Menu';
elType.innerHTML = properties.type;
elTypeIcon.innerHTML = ICON_FOR_TYPE[properties.type];
elTypeIcon.style.display = "inline-block";
@ -892,48 +900,20 @@ function loaded() {
elHyperlinkHref.value = properties.href;
elDescription.value = properties.description;
for (var i = 0; i < allSections.length; i++) {
for (var j = 0; j < allSections[i].length; j++) {
allSections[i][j].style.display = 'none';
}
}
for (var i = 0; i < elHyperlinkSections.length; i++) {
elHyperlinkSections[i].style.display = 'table';
}
if (properties.type == "Shape" || properties.type == "Box" || properties.type == "Sphere") {
for (var i = 0; i < elShapeSections.length; i++) {
elShapeSections[i].style.display = 'table';
}
elShape.value = properties.shape;
setDropdownText(elShape);
} else {
for (var i = 0; i < elShapeSections.length; i++) {
elShapeSections[i].style.display = 'none';
}
}
if (properties.type == "Shape" || properties.type == "Box" || properties.type == "Sphere" || properties.type == "ParticleEffect") {
for (var i = 0; i < elColorSections.length; i++) {
elColorSections[i].style.display = 'table';
}
elColorRed.value = properties.color.red;
elColorGreen.value = properties.color.green;
elColorBlue.value = properties.color.blue;
elColor.style.backgroundColor = "rgb(" + properties.color.red + "," + properties.color.green + "," + properties.color.blue + ")";
} else {
for (var i = 0; i < elColorSections.length; i++) {
elColorSections[i].style.display = 'none';
}
elColorControl1.style.backgroundColor = elColorControl2.style.backgroundColor = "rgb(" + properties.color.red + "," + properties.color.green + "," + properties.color.blue + ")";
}
if (properties.type == "Model") {
for (var i = 0; i < elModelSections.length; i++) {
elModelSections[i].style.display = 'table';
}
elModelURL.value = properties.modelURL;
elShapeType.value = properties.shapeType;
setDropdownText(elShapeType);
@ -951,20 +931,9 @@ function loaded() {
elModelOriginalTextures.value = properties.originalTextures;
setTextareaScrolling(elModelOriginalTextures);
} else if (properties.type == "Web") {
for (var i = 0; i < elWebSections.length; i++) {
elWebSections[i].style.display = 'table';
}
for (var i = 0; i < elHyperlinkSections.length; i++) {
elHyperlinkSections[i].style.display = 'none';
}
elWebSourceURL.value = properties.sourceUrl;
elWebDPI.value = properties.dpi;
} else if (properties.type == "Text") {
for (var i = 0; i < elTextSections.length; i++) {
elTextSections[i].style.display = 'table';
}
elTextText.value = properties.text;
elTextLineHeight.value = properties.lineHeight.toFixed(4);
elTextFaceCamera.checked = properties.faceCamera;
@ -976,10 +945,6 @@ function loaded() {
elTextBackgroundColorGreen.value = properties.backgroundColor.green;
elTextBackgroundColorBlue.value = properties.backgroundColor.blue;
} else if (properties.type == "Light") {
for (var i = 0; i < elLightSections.length; i++) {
elLightSections[i].style.display = 'table';
}
elLightSpotLight.checked = properties.isSpotlight;
elLightColor.style.backgroundColor = "rgb(" + properties.color.red + "," + properties.color.green + "," + properties.color.blue + ")";
@ -992,10 +957,6 @@ function loaded() {
elLightExponent.value = properties.exponent.toFixed(2);
elLightCutoff.value = properties.cutoff.toFixed(2);
} else if (properties.type == "Zone") {
for (var i = 0; i < elZoneSections.length; i++) {
elZoneSections[i].style.display = 'table';
}
elZoneStageSunModelEnabled.checked = properties.stage.sunModelEnabled;
elZoneKeyLightColor.style.backgroundColor = "rgb(" + properties.keyLight.color.red + "," + properties.keyLight.color.green + "," + properties.keyLight.color.blue + ")";
elZoneKeyLightColorRed.value = properties.keyLight.color.red;
@ -1032,10 +993,6 @@ function loaded() {
showElements(document.getElementsByClassName('skybox-section'), elZoneBackgroundMode.value == 'skybox');
} else if (properties.type == "PolyVox") {
for (var i = 0; i < elPolyVoxSections.length; i++) {
elPolyVoxSections[i].style.display = 'table';
}
elVoxelVolumeSizeX.value = properties.voxelVolumeSize.x.toFixed(2);
elVoxelVolumeSizeY.value = properties.voxelVolumeSize.y.toFixed(2);
elVoxelVolumeSizeZ.value = properties.voxelVolumeSize.z.toFixed(2);
@ -1235,20 +1192,41 @@ function loaded() {
elColorRed.addEventListener('change', colorChangeFunction);
elColorGreen.addEventListener('change', colorChangeFunction);
elColorBlue.addEventListener('change', colorChangeFunction);
colorPickers.push($('#property-color').colpick({
colorPickers.push($('#property-color-control1').colpick({
colorScheme: 'dark',
layout: 'hex',
color: '000000',
onShow: function(colpick) {
$('#property-color').attr('active', 'true');
$('#property-color-control1').attr('active', 'true');
},
onHide: function(colpick) {
$('#property-color').attr('active', 'false');
$('#property-color-control1').attr('active', 'false');
},
onSubmit: function(hsb, hex, rgb, el) {
$(el).css('background-color', '#' + hex);
$(el).colpickHide();
emitColorPropertyUpdate('color', rgb.r, rgb.g, rgb.b);
// Keep the companion control in sync
elColorControl2.style.backgroundColor = "rgb(" + rgb.r + "," + rgb.g + "," + rgb.b + ")";
}
}));
colorPickers.push($('#property-color-control2').colpick({
colorScheme: 'dark',
layout: 'hex',
color: '000000',
onShow: function(colpick) {
$('#property-color-control2').attr('active', 'true');
},
onHide: function(colpick) {
$('#property-color-control2').attr('active', 'false');
},
onSubmit: function(hsb, hex, rgb, el) {
$(el).css('background-color', '#' + hex);
$(el).colpickHide();
emitColorPropertyUpdate('color', rgb.r, rgb.g, rgb.b);
// Keep the companion control in sync
elColorControl1.style.backgroundColor = "rgb(" + rgb.r + "," + rgb.g + "," + rgb.b + ")";
}
}));
@ -1512,11 +1490,9 @@ function loaded() {
var elCollapsible = document.getElementsByClassName("section-header");
var toggleCollapsedEvent = function(event) {
var element = event.target;
if (element.nodeName !== "DIV") {
element = element.parentNode;
}
var isCollapsed = element.getAttribute("collapsed") !== "true";
var element = event.target.parentNode.parentNode;
var isCollapsed = element.dataset.collapsed !== "true";
element.dataset.collapsed = isCollapsed ? "true" : false
element.setAttribute("collapsed", isCollapsed ? "true" : "false");
element.getElementsByTagName("span")[0].textContent = isCollapsed ? "L" : "M";
};

View file

@ -0,0 +1,66 @@
// createParentator.js
//
// Script Type: Entity Spawner
// Created by Jeff Moyes on 6/30/2017
// Copyright 2017 High Fidelity, Inc.
//
// This script creates a gun-looking item that, when tapped on an entity, and then a second entity, sets the second entity as the paernt of the first
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
var scriptURL = Script.resolvePath('parentator.js');
var MODEL_URL = Script.resolvePath('resources/Parent-Tool-Production.fbx');
var COLLISION_HULL_URL = Script.resolvePath('resources/Parent-Tool-CollisionHull.obj');
// the fbx model needs to be rotated from where it would naturally face when it first initializes
var ROT_Y_180 = {x: 0, y: 1, z: 0, w: 0};
var START_ROTATION = Quat.normalize(Quat.multiply(Camera.getOrientation(), ROT_Y_180));
var START_POSITION = Vec3.sum(Vec3.sum(MyAvatar.position, { x: 0, y: 0.5, z: 0 }), Vec3.multiply(0.7, Quat.getForward(Camera.getOrientation())));
var parentator = Entities.addEntity({
name: "Parent-ator",
type: "Model",
modelURL: MODEL_URL,
shapeType: 'compound',
compoundShapeURL: COLLISION_HULL_URL,
dynamic: true,
damping: 0.9,
script: scriptURL,
dimensions: {
x: 0.1270,
y: 0.2715,
z: 0.4672
},
position: START_POSITION,
rotation: START_ROTATION,
userData: JSON.stringify({
"grabbableKey": {"grabbable": true},
"equipHotspots": [
{
"position": {"x": 0.0, "y": 0.0, "z": -0.170 },
"radius": 0.15,
"joints":{
"RightHand":[
{"x":0.05, "y":0.25, "z":0.03},
{"x":-0.5, "y":-0.5, "z":-0.5, "w":0.5}
],
"LeftHand":[
{"x":-0.05, "y":0.25, "z":0.03},
{"x":-0.5, "y":0.5, "z":0.5, "w":0.5}
]
}
}
]
})
});
function cleanUp() {
Entities.deleteEntity(parentator);
}
Script.scriptEnding.connect(cleanUp);

View file

@ -0,0 +1,152 @@
// parentator.js
//
// Script Type: Entity
// Created by Jeff Moyes on 6/30/2017
// Copyright 2017 High Fidelity, Inc.
//
// This script allows users to parent one object to another via the "parent-ator" entity
// (which looks like a purple gun-like object). The user:
// 1) equips their avatar with this parent-ator,
// 2) taps the end of the parent-ator on an entity (which becomes the child entity), and
// 3) taps the end of the parent-ator on a second entity (which becomes the parent entity)
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
(function() {
var MESSAGE_0_TEXTURE_URL = Script.resolvePath( 'resources/message-0-off.png' );
var MESSAGE_1_TEXTURE_URL = Script.resolvePath( 'resources/message-1-start.png' );
var MESSAGE_2_TEXTURE_URL = Script.resolvePath( 'resources/message-2-noperms.png' );
var MESSAGE_3_TEXTURE_URL = Script.resolvePath( 'resources/message-3-tryagain.png' );
var MESSAGE_4_TEXTURE_URL = Script.resolvePath( 'resources/message-4-setparent.png' );
var MESSAGE_5_TEXTURE_URL = Script.resolvePath( 'resources/message-5-success.png' );
var SOUND_1_URL = Script.resolvePath( 'resources/parent-tool-sound1.wav' );
var SOUND_2_URL = Script.resolvePath( 'resources/parent-tool-sound2.wav' );
var SOUND_ERROR_URL = Script.resolvePath( 'resources/parent-tool-sound-error.wav' );
var SOUND_SUCCESS_URL = Script.resolvePath( 'resources/parent-tool-sound-success.wav' );
var SOUND_1, SOUND_2, SOUND_ERROR, SOUND_SUCCESS;
var childEntityID, parentEntityID;
var active = false;
function Parentator() {
return;
}
Parentator.prototype.turnOff = function() {
childEntityID = 0;
parentEntityID = 0;
this.active = false;
Entities.editEntity( this.entityID, { textures: JSON.stringify({ "texture-message": MESSAGE_0_TEXTURE_URL }) });
}
Parentator.prototype.turnOn = function() {
childEntityID = 0;
parentEntityID = 0;
this.active = true;
if (Entities.canRez()) {
Entities.editEntity( this.entityID, { textures: JSON.stringify({ "texture-message": MESSAGE_1_TEXTURE_URL }) });
this.playSoundAtCurrentPosition( SOUND_1 );
} else {
Entities.editEntity( this.entityID, { textures: JSON.stringify({ "texture-message": MESSAGE_2_TEXTURE_URL }) });
this.playSoundAtCurrentPosition( SOUND_ERROR );
}
}
Parentator.prototype.preload = function( entityID ) {
this.entityID = entityID;
SOUND_1 = SoundCache.getSound( SOUND_1_URL );
SOUND_2 = SoundCache.getSound( SOUND_2_URL );
SOUND_ERROR = SoundCache.getSound( SOUND_ERROR_URL );
SOUND_SUCCESS = SoundCache.getSound( SOUND_SUCCESS_URL );
// Makue sure it's off
this.turnOff();
}
Parentator.prototype.startEquip = function( args ) {
this.hand = args[0];
this.turnOn();
}
Parentator.prototype.releaseEquip = function( args ) {
this.hand = undefined;
this.turnOff();
}
Parentator.prototype.collisionWithEntity = function( parentatorID, collidedID, collisionInfo ) {
if ( this.active ) {
// We don't want to be able to select Lights, Zone, and Particles but they are not collidable anyway so we don't have to worry about them
var collidedEntityProperties = Entities.getEntityProperties( collidedID );
if ( !Entities.canRez() ) {
Entities.editEntity( this.entityID, { textures: JSON.stringify({ "texture-message": MESSAGE_2_TEXTURE_URL }) });
this.playSoundAtCurrentPosition( SOUND_ERROR );
}
// User has just reclicked the first entity (or it's 'bounced')
if ( childEntityID == collidedID ) {
return;
}
if ( collidedEntityProperties.locked ) {
Entities.editEntity( this.entityID, { textures: JSON.stringify({ "texture-message": MESSAGE_3_TEXTURE_URL }) });
this.playSoundAtCurrentPosition( SOUND_ERROR );
return;
}
// If no entity has been chosen
if ( childEntityID == 0 ) {
childEntityID = collidedID;
// if there is a parentID, remove it
if ( collidedEntityProperties.parentID != "{00000000-0000-0000-0000-000000000000}" ) {
Entities.editEntity( collidedID, { parentID: "{00000000-0000-0000-0000-000000000000}" });
}
if ( collidedEntityProperties.dynamic ) {
Entities.editEntity( collidedID, { dynamic: false });
}
Entities.editEntity( this.entityID, { textures: JSON.stringify({ "texture-message": MESSAGE_4_TEXTURE_URL }) });
this.playSoundAtCurrentPosition( SOUND_2 );
} else {
parentEntityID = collidedID;
this.setParent();
}
}
}
Parentator.prototype.setParent = function() {
var _this = this;
Entities.editEntity( childEntityID, { parentID: parentEntityID });
Entities.editEntity( this.entityID, { textures: JSON.stringify({ "texture-message": MESSAGE_5_TEXTURE_URL }) });
this.playSoundAtCurrentPosition( SOUND_SUCCESS );
Script.setTimeout( function() {
_this.turnOn(); // reset
}, 5000 );
}
Parentator.prototype.playSoundAtCurrentPosition = function( sound ) {
var audioProperties = {
volume: 0.3,
position: Entities.getEntityProperties( this.entityID ).position,
localOnly: true
}
Audio.playSound( sound, audioProperties );
}
Parentator.prototype.unload = function () {
Entities.deleteEntity( this.entityID );
}
// entity scripts always need to return a newly constructed object of our type
return new Parentator();
});

View file

@ -0,0 +1,38 @@
# Blender v2.78 (sub 5) OBJ File: 'untitled.blend'
# www.blender.org
mtllib Parent-Tool-CollisionHull.mtl
o Cube.001
v -0.153045 -0.072355 0.173769
v -0.153045 0.040882 0.173769
v -0.067387 0.040882 0.029156
v -0.067387 -0.072355 0.029156
v 0.062301 0.040882 0.029156
v 0.062301 -0.072355 0.029156
v 0.147960 -0.072355 0.173769
v 0.147960 0.040882 0.173769
v 0.147960 0.026770 0.337324
v 0.147960 -0.047896 0.337324
v -0.153045 0.026770 0.337324
v -0.153045 -0.047896 0.337324
vn -0.8604 0.0000 -0.5096
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 -0.9890 0.1479
vn 0.0000 0.9963 0.0860
vn 0.0000 1.0000 0.0000
vn 0.0000 -1.0000 -0.0000
vn 0.8604 0.0000 -0.5096
vn -1.0000 -0.0000 0.0000
usemtl None
s 1
f 1//1 2//1 3//1 4//1
f 4//2 3//2 5//2 6//2
f 7//3 8//3 9//3 10//3
f 10//4 9//4 11//4 12//4
f 1//5 7//5 10//5 12//5
f 8//6 2//6 11//6 9//6
f 5//7 3//7 2//7 8//7
f 4//8 6//8 7//8 1//8
f 6//9 5//9 8//9 7//9
f 12//10 11//10 2//10 1//10

Binary file not shown.

After

Width:  |  Height:  |  Size: 5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB