content/hifi-content/milad/ROLC/Organize/Projects/Hifi-Scripts/opera/boxMaker.js
2022-02-14 02:04:11 +01:00

1127 lines
42 KiB
JavaScript

if (typeof Object.assign !== 'function') {
// Must be writable: true, enumerable: false, configurable: true
Object.defineProperty(Object, "assign", {
value: function assign(target, varArgs) { // .length of function is 2
'use strict';
if (target == null) { // TypeError if undefined or null
throw new TypeError('Cannot convert undefined or null to object');
}
var to = Object(target);
for (var index = 1; index < arguments.length; index++) {
var nextSource = arguments[index];
if (nextSource != null) { // Skip over if undefined or null
for (var nextKey in nextSource) {
// Avoid bugs when hasOwnProperty is shadowed
if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
to[nextKey] = nextSource[nextKey];
}
}
}
}
return to;
},
writable: true,
configurable: true
});
}
(function(){
var userData = JSON.stringify({
grabbableKey: {
cloneable: false,
kinematic: false,
grabbable: false
}
});
// var TWEEN = Script.require('./tween.js');
var DEBUG = true;
var KEEP = false;
function log(describer, obj) {
if (!DEBUG) {return;}
if (typeof obj !== "string" || typeof obj !== "number") {obj = JSON.stringify(obj);}
print("\n### " + describer + " ::: " + obj );
}
// make vector from array
function mkVFA(array){
var props = {};
if (array.length === 1){
props.x = array[0];
props.y = array[0];
props.z = array[0];
} else {
props.x = array[0];
props.y = array[1];
props.z = array[2];
}
return props;
}
// make Quat from Array
function mkQFA(array){
var vec = mkVFA(array);
var quat = Quat.fromVec3Degrees(vec);
return quat;
}
// make color from array
function mkCFA(array){
var props = {};
if (array.length === 1){
props.red = array[0];
props.green = array[0];
props.blue = array[0];
} else {
props.red = array[0];
props.green = array[1];
props.blue = array[2];
}
return props;
}
// make props for box
function mkAFV(vector){
var array = [];
array[0] = vector.x;
array[1] = vector.y;
array[2] = vector.z;
return array;
}
var defaultPropObj = {
position: mkVFA([0,0,0]),
dimensions: mkVFA([1,1,1]),
rotation: mkQFA([0,0,0]),
registrationPoint: mkVFA([0.5,0.5,0.5]),
offset: mkVFA([0,0,0]),
color: mkCFA([25,25,25]),
lifetime: -1,
userData: userData
};
// delete any invalid key/value
function delUndefined(obj){
var keys = Object.keys(obj);
keys.forEach(function(key){
if (!obj[key] || obj[key] === "") {delete obj[key];}
});
return obj;
}
function mkProps(position, dimensions, rotation, registration, offset, color, name){
if (Array.isArray(position)) {position = mkVFA(position);}
if (position === "av") {position = MyAvatar.position;}
if (Array.isArray(dimensions)) {dimensions = mkVFA(dimensions);}
if (Array.isArray(rotation)) {rotation = mkQFA(rotation);}
if (Array.isArray(registration)) {registration = mkVFA(registration);}
if (Array.isArray(offset)) {offset = mkVFA(offset);}
if (Array.isArray(color)) {color = mkCFA(color);}
log("!!!position", position);
var newProps = {
name: name,
position: Vec3.sum(position, offset),
dimensions: dimensions,
rotation: rotation,
registrationPoint: registration,
color: color,
lifetime: -1,
userData: userData
};
var finalObj = Object.assign({},defaultPropObj, delUndefined(newProps));
// log("finalObj",finalObj);
return finalObj;
}
function mkBox(position, dimensions, rotation, registration, offset, color, name){
var boxProps = {
type: "Box",
lifetime: -1,
userData: userData
};
var finalProps = Object.assign({}, boxProps, mkProps(position, dimensions, rotation, registration, offset, color, name));
return Entities.addEntity(finalProps);
}
function mkBoxProps(props){
position = props[0];
dimensions = props[1];
rotation = props[2];
registration = props[3];
offset = props[4];
color = props[5];
name = props[6];
var boxProps = {
type: "Box"
// userData: userData2
};
var finalProps = Object.assign({}, boxProps, mkProps(position, dimensions, rotation, registration, offset, color, name));
log("FINAL PROPS!!!!", finalProps);
return finalProps;
}
function mkboxNoShader(position, dimensions, rotation, registration, offset, color, name){
var boxProps = {
type: "Box",
dynamic: false,
collisionless: true,
id: parentID,
visible: false
// userData: userData
};
var finalProps = Object.assign({}, boxProps, mkProps(position, dimensions, rotation, registration, offset, color, name));
parentID = Entities.addEntity(finalProps);
return parentID;
}
function mkZone(position, dimensions, rotation, registration, offset, color, name){
var zoneProps = {
// parentID: parentID,
type: "Zone",
name: "zone",
keyLight: {
ambientIntensity: 5.5,
ambientURL: "",
color: {
blue: 255,
green: 255,
red: 255
},
direction: {
x: 0.3411870300769806,
y: -0.9396926164627075,
z: -0.023858120664954185
},
intensity: 10
},
stage: {
altitude: 0.029999999329447746,
automaticHourDay: 0,
day: 60,
hour: 12,
latitude: 37.777000427246094,
longitude: 122.40699768066406,
sunModelEnabled: 0
},
direction: mkVFA([0,-1,0]),
lifetime: -1,
userData: userData,
script: Script.resolvePath('./zoneReverb.js?' + Date.now())
};
var finalProps = Object.assign({}, zoneProps, mkProps(position, dimensions, rotation, registration, offset, color, name));
return Entities.addEntity(finalProps);
}
function BoxMakerGroup(){
return {
currentIDs: [],
name: "",
addEntity: function(entityID){
this.currentIDs.push(entityID);
},
removeEntity: function(id){
log("in remove entity");
var index = -1;
for (var i = 0; i < this.currentIDs.length; i++){
log("this.currentIDs[i]", this.currentIDs[i]);
log("id", id);
if (this.currentIDs[i] === id) {
index = i;
break;
}
}
log("index", index);
print(index);
if (index > -1) {
this.currentIDs.splice(index,1);
Entities.deleteEntity(id);
}
},
changeName: function(name){
log("name in change name", name);
this.name = name;
var zoneProps = this.getZone();
log("zoneProps", zoneProps);
var userData = JSON.parse(zoneProps.userData);
userData.name = name;
Entities.editEntity(zoneProps.id, {
userData: JSON.stringify(userData)
});
},
deleteAllEntities: function(){
while (this.currentIDs.length > 0){
this.removeEntity(this.currentIDs[0]);
}
},
getFloor: function(){
return this.getAllProps().filter(function(props){
return props.name === "floor";
})[0].position;
},
getZone: function(){
return this.getAllProps().filter(function(props){
log("props.name:", props.name);
return props.name === "Zone";
})[0];
},
getProps: function(index, id){
log("in get props");
if (typeof index === "number"){
log("in index get props");
return Entities.getEntityProperties(this.currentIDs[index]);
}
if (id){
log("in id get props");
return Entities.getEntityProperties(id);
}
},
getAllProps: function(){
// log("in get all props");
// log("this.curretIds", this.currentIDs);
var array = this.currentIDs.map(function(id){
// log("id", id)
var props = this.getProps(null,id);
// log("props", props)
return props;
}, this);
// log("array", array);
return array;
},
editProps: function(index, id, props){
// log("editing props");
// log("index", index);
// log("id", id);
// log("props", props);
if (typeof index === "number"){
// log("this.currentIDs[index]", this.currentIDs[index])
// log("props",props);
// log("index", index);
// log("this.currentIDs", this.currentIDs)
// var boxProps = entitiesGroup.getProps(index).rotation;
// log("boxPropsPosition", boxProps);
Entities.editEntity(this.currentIDs[index], props);
// boxProps = entitiesGroup.getProps(index).rotation;
// log("boxPropsPosition", boxProps);
}
if (id){
Entities.editEntity(id, props);
}
},
makeParent: function(pID){
print("in make Parent");
this.currentIDs.slice(1).forEach(function(id){
print("id", id);
Entities.editEntity(id,{
parentID: pID
});
});
},
lastId: function(){
return this.currentIDs.length-1;
},
spin: function(amount){
var id = this.currentIDs[0];
Entities.editEntity(id, {
angularVelocity: {x:amount, y:amount, z: amount}
});
},
speed: function(speed){
log("speed", speed);
var newSpeed = lerp (0,127,0.0,2.0,speed);
var newUserData = JSON.parse(userDataToUse);
log("newUserData",newUserData);
newUserData.ProceduralEntity.uniforms.speed = newSpeed;
props = {userData: JSON.stringify(newUserData)};
// log("props",props);
this.currentIDs.forEach(function(id) {Entities.editEntity(id, props);});
// log("newProps", this.getProps(1).userData);
},
emit: function(emit){
log("emit", emit);
var newEmit = lerp (0,127,0.0,1.0,emit);
var newUserData = JSON.parse(userDataToUse);
log("newUserData",newUserData);
newUserData.ProceduralEntity.uniforms.uEmit = newEmit;
props = {userData: JSON.stringify(newUserData)};
// log("props",props);
this.currentIDs.forEach(function(id) {Entities.editEntity(id, props);});
// log("newProps", this.getProps(1).userData);
},
specular: function(specular){
log("specular", specular);
var newSpecular = lerp (0,127,0.0,1.0,specular);
var newUserData = JSON.parse(userDataToUse);
log("newUserData",newUserData);
newUserData.ProceduralEntity.uniforms.speed = newSpecular;
props = {userData: JSON.stringify(newUserData)};
// log("props",props);
this.currentIDs.forEach(function(id) {Entities.editEntity(id, props);});
// log("newProps", this.getProps(1).userData);
},
shine: function(shine){
log("shine", shine);
var newShine = lerp (0,127,0.0,255.0,shine);
var newUserData = JSON.parse(userDataToUse);
log("newUserData",newUserData);
newUserData.ProceduralEntity.uniforms.speed = newShine;
props = {userData: JSON.stringify(newUserData)};
// log("props",props);
this.currentIDs.forEach(function(id) {Entities.editEntity(id, props);});
// log("newProps", this.getProps(1).userData);
},
boxLength:1,
boxWidth:1,
boxHeight:1,
boxThickness:1,
position: mkVFA([0,0,0]),
distanceApart: [0,0,0],
length: function(length){
this.boxLength = length;
var boxProps = makeNewBoxProps(this.boxLength, this.boxWidth, this.boxHeight,this.boxThickness, this.distanceApart);
log("boxProps", boxProps);
var propsGroup = makePropsForBox(0,boxProps);
log("propsGroup", propsGroup);
propsGroup.forEach(function(props,index){
var actuallPropsToSend = mkBoxProps(props);
log("props",props);
log("actualPropsToSend", actuallPropsToSend);
this.editProps(index,null,actuallPropsToSend);
},this);
},
width: function(width){
this.boxWidth = width;
var boxProps = makeNewBoxProps(this.boxLength, this.boxWidth, this.boxHeight,this.boxThickness, this.distanceApart);
log("boxProps", boxProps);
var propsGroup = makePropsForBox(0,boxProps);
log("propsGroup", propsGroup);
propsGroup.forEach(function(props,index){
var actuallPropsToSend = mkBoxProps(props);
log("props",props);
log("actualPropsToSend", actuallPropsToSend);
this.editProps(index,null,actuallPropsToSend);
},this);
},
height: function(height){
this.boxHeight = height;
var boxProps = makeNewBoxProps(this.boxLength, this.boxWidth, this.boxHeight,this.boxThickness, this.distanceApart);
log("boxProps", boxProps);
var propsGroup = makePropsForBox(0,boxProps);
log("propsGroup", propsGroup);
propsGroup.forEach(function(props,index){
var actuallPropsToSend = mkBoxProps(props);
log("props",props);
log("actualPropsToSend", actuallPropsToSend);
this.editProps(index,null,actuallPropsToSend);
},this);
},
thickness: function(thickness){
this.boxThickness = thickness;
var boxProps = makeNewBoxProps(this.boxLength, this.boxWidth, this.boxHeight,this.boxThickness, this.distanceApart);
log("boxProps", boxProps);
var propsGroup = makePropsForBox(0,boxProps);
log("propsGroup", propsGroup);
propsGroup.forEach(function(props,index){
var actuallPropsToSend = mkBoxProps(props);
log("props",props);
log("actualPropsToSend", actuallPropsToSend);
this.editProps(index,null,actuallPropsToSend);
},this);
},
getPosition: function(normPosition){
return getNormPosition(normPosition, mkAFV(this.position),[this.boxLength, this.boxHeight, this.boxWidth]);
},
makeSphere: function(pos, goTo, roomName){
log("roomName in makeSphere", roomName);
log("****goTo", goTo);
// var posToGet = this.getPosition(pos);
var posToGet = pos;
log("$$$ posToGet", posToGet);
var ent = Entities.addEntity({
type: "Sphere",
lifetime: -1,
userData: userData,
position: posToGet,
dimensions: mkVFA([1,1,1]),
script: "( function () { return { enterEntity: function () { MyAvatar.position = " + JSON.stringify(goTo) + " ;}}});"
});
this.addEntity(ent);
var textEnt = Entities.addEntity(textEntityProps(roomName, ent));
this.addEntity(textEnt);
}
};
}
function textEntityProps(text, parentID){
log("text in text entity props", text);
var parentPos = Entities.getEntityProperties(parentID, ["position"]).position;
log("parentPos", parentPos);
var pos = Vec3.sum(parentPos, mkVFA([0,1,0]));
log("pos in textEntity Props", pos);
var lengthOfChar = 0.07;
var lengthOfSign = lengthOfChar * text.length;
var props = {
type: "Text",
text: text,
lifetime: -1,
userData: userData,
dimensions: mkVFA([lengthOfSign,0.5,0.1]),
rotation: MyAvatar.orientation,
position: pos,
parentID: parentID
}
log("&*&* text props", props);
return props;
}
/*
var entitiesGroup = {
currentIDs: [],
name: "",
addEntity: function(entityID){
this.currentIDs.push(entityID);
},
removeEntity: function(id){
log("in remove entity");
var index = -1;
for (var i = 0; i < this.currentIDs.length; i++){
log("this.currentIDs[i]", this.currentIDs[i]);
log("id", id);
if (this.currentIDs[i] === id) {
index = i;
break;
}
}
log("index", index);
print(index);
if (index > -1) {
this.currentIDs.splice(index,1);
Entities.deleteEntity(id);
}
},
changeName: function(name){
this.name = name;
}
deleteAllEntities: function(){
while (this.currentIDs.length > 0){
this.removeEntity(this.currentIDs[0]);
}
},
getProps: function(index, id){
log("in get props")
if (typeof index == "number"){
log("in index get props");
return Entities.getEntityProperties(this.currentIDs[index]);
}
if (id){
log("in id get props");
return Entities.getEntityProperties(id);
}
},
getAllProps: function(){
log("in get all props")
log("this.curretIds", this.currentIDs);
var array = this.currentIDs.map(function(id){
// log("id", id)
var props = this.getProps(null,id);
// log("props", props)
return props;
}, this)
log("array", array);
return array;
},
editProps: function(index, id, props){
// log("editing props");
// log("index", index);
// log("id", id);
// log("props", props);
if (typeof index === "number"){
// log("this.currentIDs[index]", this.currentIDs[index])
// log("props",props);
// log("index", index);
// log("this.currentIDs", this.currentIDs)
// var boxProps = entitiesGroup.getProps(index).rotation;
// log("boxPropsPosition", boxProps);
Entities.editEntity(this.currentIDs[index], props);
// boxProps = entitiesGroup.getProps(index).rotation;
// log("boxPropsPosition", boxProps);
}
if (id){
Entities.editEntity(id, props);
}
},
makeParent: function(pID){
print("in make Parent");
this.currentIDs.slice(1).forEach(function(id){
print("id", id);
Entities.editEntity(id,{
parentID: pID
})
})
},
lastId: function(){
return this.currentIDs.length-1;
},
spin: function(amount){
var id = this.currentIDs[0];
Entities.editEntity(id, {
angularVelocity: {x:amount, y:amount, z: amount}
});
},
speed: function(speed){
log("speed", speed);
var newSpeed = lerp (0,127,0.0,2.0,speed);
var newUserData = JSON.parse(userDataToUse);
log("newUserData",newUserData);
newUserData.ProceduralEntity.uniforms.speed = newSpeed
props = {userData: JSON.stringify(newUserData)};
// log("props",props);
this.currentIDs.forEach(function(id) {Entities.editEntity(id, props)});
// log("newProps", this.getProps(1).userData);
},
emit: function(emit){
log("emit", emit);
var newEmit = lerp (0,127,0.0,1.0,emit);
var newUserData = JSON.parse(userDataToUse);
log("newUserData",newUserData);
newUserData.ProceduralEntity.uniforms.uEmit = newEmit
props = {userData: JSON.stringify(newUserData)};
// log("props",props);
this.currentIDs.forEach(function(id) {Entities.editEntity(id, props)});
// log("newProps", this.getProps(1).userData);
},
specular: function(specular){
log("specular", specular);
var newSpecular = lerp (0,127,0.0,1.0,specular);
var newUserData = JSON.parse(userDataToUse);
log("newUserData",newUserData);
newUserData.ProceduralEntity.uniforms.speed = newSpecular
props = {userData: JSON.stringify(newUserData)};
// log("props",props);
this.currentIDs.forEach(function(id) {Entities.editEntity(id, props)});
// log("newProps", this.getProps(1).userData);
},
shine: function(shine){
log("shine", shine);
var newShine = lerp (0,127,0.0,255.0,shine);
var newUserData = JSON.parse(userDataToUse);
log("newUserData",newUserData);
newUserData.ProceduralEntity.uniforms.speed = newShine
props = {userData: JSON.stringify(newUserData)};
// log("props",props);
this.currentIDs.forEach(function(id) {Entities.editEntity(id, props)});
// log("newProps", this.getProps(1).userData);
},
boxLength:1,
boxWidth:1,
boxHeight:1,
boxThickness:1,
distanceApart: [0,0,0],
length: function(length){
this.boxLength = length;
var boxProps = makeNewBoxProps(this.boxLength, this.boxWidth, this.boxHeight,this.boxThickness, this.distanceApart);
log("boxProps", boxProps)
var propsGroup = makePropsForBox(0,boxProps);
log("propsGroup", propsGroup);
propsGroup.forEach(function(props,index){
var actuallPropsToSend = mkBoxProps(props);
log("props",props);
log("actualPropsToSend", actuallPropsToSend)
this.editProps(index,null,actuallPropsToSend);
},this)
},
width: function(width){
this.boxWidth = width;
var boxProps = makeNewBoxProps(this.boxLength, this.boxWidth, this.boxHeight,this.boxThickness, this.distanceApart);
log("boxProps", boxProps)
var propsGroup = makePropsForBox(0,boxProps);
log("propsGroup", propsGroup);
propsGroup.forEach(function(props,index){
var actuallPropsToSend = mkBoxProps(props);
log("props",props);
log("actualPropsToSend", actuallPropsToSend)
this.editProps(index,null,actuallPropsToSend);
},this)
},
height: function(height){
this.boxHeight = height;
var boxProps = makeNewBoxProps(this.boxLength, this.boxWidth, this.boxHeight,this.boxThickness, this.distanceApart);
log("boxProps", boxProps)
var propsGroup = makePropsForBox(0,boxProps);
log("propsGroup", propsGroup);
propsGroup.forEach(function(props,index){
var actuallPropsToSend = mkBoxProps(props);
log("props",props);
log("actualPropsToSend", actuallPropsToSend)
this.editProps(index,null,actuallPropsToSend);
},this)
},
thickness: function(thickness){
this.boxThickness = thickness;
var boxProps = makeNewBoxProps(this.boxLength, this.boxWidth, this.boxHeight,this.boxThickness, this.distanceApart);
log("boxProps", boxProps)
var propsGroup = makePropsForBox(0,boxProps);
log("propsGroup", propsGroup);
propsGroup.forEach(function(props,index){
var actuallPropsToSend = mkBoxProps(props);
log("props",props);
log("actualPropsToSend", actuallPropsToSend)
this.editProps(index,null,actuallPropsToSend);
},this)
}
};
*/
function getNormPosition(normP, realP, dimensions){
// log("!@#")
// log("normP", normP);
// log("realP", realP);
// log("dimensions", dimensions);
var xHalfDis = dimensions[0] / 2;
var xMinMax = [realP[0] - xHalfDis, realP[0] + xHalfDis];
var yHalfDis = dimensions[1] / 2;
var yMinMax = [realP[0] - yHalfDis, realP[0] + yHalfDis];
var zHalfDis = dimensions[2] / 2;
var zMinMax = [realP[0] - zHalfDis, realP[0] + zHalfDis];
// log("xMinMax", xMinMax);
// log("yMinMax", yMinMax);
// log("zMinMax", zMinMax);
var unitX = normP[0] * dimensions[0];
var unitY = normP[1] * dimensions[1];
var unitZ = normP[2] * dimensions[2];
// log("unitX", unitX);
// log("unitY", unitY);
// log("unitZ", unitZ);
var newX = xMinMax[0] + unitX;
var newY = yMinMax[0] + unitY;
var newZ = zMinMax[0] + unitZ;
// log("newX", newX);
// log("newY", newY);
// log("newZ", newZ);
var finalPosition = mkVFA([newX, newY, newZ]);
// log("finalPosition", finalPosition);
return finalPosition;
}
var boxes = {
currentBoxes: [],
audioZones: [],
addBoxes: function(box, name){
log("((()))")
log("name in add boxes", name);
box.changeName(name);
this.currentBoxes.push(box);
},
removeBox: function(idx){
log("boxes:: in remove entity");
// var index = -1;
// for (var i = 0; i < this.currentBoxes.length; i++){
// log("this.currentBoxes[i]", this.currentBoxes[i]);
// log("id", id);
// if (this.currentBoxes[i] === id) {
// index = i;
// break;
// }
// }
// log("index", index);
// print(index);
if (idx > -1) {
this.currentBoxes[idx].deleteAllEntities();
this.currentBoxes.splice(idx,1);
}
},
removeAllBoxes: function(){
while (this.currentBoxes.length > 0){
this.removeBox(0);
}
},
makeSigns: function(){
log("in Make Signs");
for (var i = 0; i < this.currentBoxes.length; i++){
var count = -2;
for (var j = 0; j < this.currentBoxes.length; j++){
if (i === j) {
log("the same, continuing")
continue;
}
var pos = Vec3.sum(this.currentBoxes[i].position, mkVFA([count,1,3]))
// getNormPosition(normPosition, mkAFV(position),[this.boxLength, this.boxHeight, this.boxWidth]);
this.currentBoxes[i].makeSphere(pos, this.currentBoxes[j].position, this.currentBoxes[j].name);
count+=2;
}
}
},
getAudioZone: function(idx){
var position = this.currentBoxes[idx].position;
var length = this.currentBoxes[idx].boxLength;
var height = this.currentBoxes[idx].boxHeight;
var width = this.currentBoxes[idx].boxWidth;
log("position", position);
log("length", length);
log("height", height);
log("width", width);
var startx = position.x - length / 2;
var endX = position.x + length / 2;
var starty = position.y - height / 2;
var endy = position.y + height / 2;
var startz = position.z - width / 2;
var endz = position.z + width / 2;
var zone = {
startx: startx,
endX : endX,
starty: starty,
endy: endy,
startz: startz,
endz: endz
};
log("ZONE:", zone)
return zone;
},
getAudioZones: function(){
this.currentBoxes.forEach(function(box, idx){
this.audioZones.push(this.getAudioZone(idx));
}, this)
},
printAudioZones: function(){
return JSON.stringify(this.audioZones);
}
}
function changeSpeed(newSpeed){
entitiesGroup.speed(newSpeed);
}
function changeEmit(newSpeed){
entitiesGroup.emit(newSpeed);
}
function changeSpecular(newSpeed){
entitiesGroup.specular(newSpeed);
}
function changeShine(newSpeed){
entitiesGroup.shine(newSpeed);
}
function changeLength(length){
entitiesGroup.length(length);
}
function changeWidth(width){
entitiesGroup.width(width);
}
function changeHeight(height){
entitiesGroup.height(height);
}
function changeThickness(thickness){
entitiesGroup.thickness(thickness);
}
function spin(amount){
entitiesGroup.spin(amount);
}
function multScAr(scalar,array){
log("scalar", scalar);
log("array", array);
// if (scalar === 0) return [0,0,0];
var newArray = array.map(function(index){
return index * scalar;
});
log("new Array", newArray);
return newArray;
}
function addScAr(scalar,array){
log("scalar", scalar);
log("array", array);
if (scalar === 0) {return [0,0,0];}
var newArray = array.map(function(index){
return index + scalar;
});
log("new Array", newArray);
return newArray;
}
function howManyTimes(num,functionCallBack, passInProps){
var counter = 0;
while (counter < num){
functionCallBack(counter,passInProps);
counter++;
}
}
function sumArrays(array1, array2){
// log("array1",array1);
// log("array2",array2);
var array3 = [];
array3[0] = array1[0] + array2[0];
array3[1] = array1[1] + array2[1];
array3[2] = array1[2] + array2[2];
return array3;
}
function makePropsForBox(currentCounter, props){
var distanceApart = props.distanceApart;
var length = props.length;
var width = props.width;
var height = props.height;
var wallThickness = props.wallThickness;
var lengthWithOffset = length + wallThickness;
var offsetFromCounter = multScAr(currentCounter,distanceApart);
var floor =[
"av",
[lengthWithOffset, wallThickness/2, width + wallThickness*2],
[ 0, 0, 0],
[0.5,1.0,0.5],
sumArrays([0,-height/2,0],offsetFromCounter),
[50, 250, 250],
"floor"
];
var ceiling = [
"av",
[lengthWithOffset, wallThickness/2, width + wallThickness*2],
[ 0, 0, 0],
[0.5,0.0,0.5],
sumArrays([0,height/2,0],offsetFromCounter),
[250, 50, 250],
"ceiling"
];
var wall1 = [
"av",
// [lengthWithOffset, width, height + width],
[length, height, wallThickness],
[0, 0, 0],
[0.5 ,0.5, 0.0],
// sumArrays([0, -length/2, length/2], offsetFromCounter),
sumArrays([0, 0, width/2], offsetFromCounter),
[250, 0, 90],
"wall1"
];
var wall2 = [
"av",
[length, height, wallThickness],
[0, 0, 0],
[0.5 ,0.5, 1.0],
sumArrays([0, 0, -width/2], offsetFromCounter),
[0, 170, 90],
"wall2"
];
var wall3 = [
"av",
[wallThickness/2, height, width + wallThickness*2],
[0, 0, 0],
[0.0 ,0.5, 0.5],
sumArrays([ -lengthWithOffset/2, 0, 0], offsetFromCounter),
[150, 170, 0],
"wall3"
];
var wall4 = [
"av",
[wallThickness/2, height, width + wallThickness*2],
[0, 0, 0],
[1.0 ,0.5, 0.5],
sumArrays([ lengthWithOffset/2, 0, 0], offsetFromCounter),
[150, 170, 80],
"wall4"
];
var zone = [
"av",
[length, height, width],
[0, 0, 0],
[0.5 ,0.5, 0.5],
sumArrays([0, 0, 0], offsetFromCounter),
[50, 0, 255],
"Zone"
];
var propsGroup = [floor, ceiling, wall1, wall2, wall3, wall4, zone];
return propsGroup;
}
function makeBoxes(currentCounter, props){
var position = props.position;
var distanceApart = props.distanceApart;
var length = props.length;
var width = props.width;
var height = props.height;
var wallThickness = props.wallThickness;
var lengthWithOffset = length + wallThickness;
var offsetFromCounter = multScAr(currentCounter,distanceApart);
// log("offsetFromCounter", offsetFromCounter)
// position, dimensions, rotations, registration, offset, color, name
var newBox = new BoxMakerGroup();
log("newBox",newBox);
// newBox.addEntity(mkboxNoShader(
// position,
// [length, height, width],
// [0, 0, 0],
// [0.5 ,0.5, 0.5],
// sumArrays([0, 0, 0], offsetFromCounter),
// [50, 0, 255],
// // "Parent"));
newBox.boxLength = length;
newBox.boxWidth = width;
newBox.boxHeight = height;
newBox.position = position === "av" ? MyAvatar.position : position;
newBox.addEntity(mkBox(
position,
[lengthWithOffset, wallThickness/2, width + wallThickness*2],
[ 0, 0, 0],
[0.5,1.0,0.5],
sumArrays([0,-height/2,0],offsetFromCounter),
[50, 250, 250],
"floor"));
newBox.addEntity(mkBox(
position,
[lengthWithOffset, wallThickness/2, width + wallThickness*2],
[ 0, 0, 0],
[0.5,0.0,0.5],
sumArrays([0,height/2,0],offsetFromCounter),
[250, 50, 250],
"ceiling"));
newBox.addEntity(mkBox(
position,
// [lengthWithOffset, width, height + width],
[length, height, wallThickness],
[0, 0, 0],
[0.5 ,0.5, 0.0],
// sumArrays([0, -length/2, length/2], offsetFromCounter),
sumArrays([0, 0, width/2], offsetFromCounter),
[250, 0, 90],
"wall1"));
newBox.addEntity(mkBox(
position,
[length, height, wallThickness],
[0, 0, 0],
[0.5 ,0.5, 1.0],
sumArrays([0, 0, -width/2], offsetFromCounter),
[0, 170, 90],
"wall2"));
newBox.addEntity(mkBox(
position,
[wallThickness/2, height, width + wallThickness*2],
[0, 0, 0],
[0.0 ,0.5, 0.5],
sumArrays([ -lengthWithOffset/2, 0, 0], offsetFromCounter),
[150, 170, 0],
"wall3"));
newBox.addEntity(mkBox(
position,
[wallThickness/2, height, width + wallThickness*2],
[0, 0, 0],
[1.0 ,0.5, 0.5],
sumArrays([ lengthWithOffset/2, 0, 0], offsetFromCounter),
[150, 170, 80],
"wall4"));
newBox.addEntity(mkZone(
position,
[length, height, width],
[0, 0, 0],
[0.5 ,0.5, 0.5],
sumArrays([0, 0, 0], offsetFromCounter),
[50, 0, 255],
"Zone"));
// newBox.makeSphere([0.5,0.3,0.7]);
return newBox;
}
var length = 10;
var width = 10;
var height = 10; var wallThickness = 0.1;
var distanceApart = [0.2,0.2,0.4];
var propsToMakeBox = {
length: length,
width: width,
height: height,
wallThickness: wallThickness,
distanceApart: sumArrays([length,width,height],distanceApart)
};
function makeNewBoxProps(length, width, height, wallThickness, distanceApart, position){
log("distanceApart:::::",distanceApart);
return {
length: length,
width: width,
height: height,
wallThickness: wallThickness,
distanceApart: sumArrays([length,width,height],distanceApart),
position: position
};
}
// howManyTimes(1, makeBoxes, propsToMakeBox);
// log("@@@myPosition", MyAvatar.position);
boxes.addBoxes(makeBoxes(0, makeNewBoxProps(10, 10, 7, 0.5, [0,0,0], "av")), "room1:small");
// log("box 0 floor:", boxes.currentBoxes[0].getFloor());
var vecToAdd = mkVFA([positionFinder(10,22, 3),0,0]);
var newPosition = Vec3.sum(MyAvatar.position,vecToAdd);
boxes.addBoxes(makeBoxes(0, makeNewBoxProps(22, 22, 15, 0.5, [0,0,0], newPosition)), "room2:med");
// log("box 1 floor:", boxes.currentBoxes[1].getFloor());
var vecToAdd = mkVFA([positionFinder(22,30, 3),0,0]);
var newPosition = Vec3.sum(newPosition,vecToAdd);
boxes.addBoxes(makeBoxes(0, makeNewBoxProps(30, 30, 18, 0.5, [0,0,0], newPosition)), "room3:large");
// log("box 2 floor:", boxes.currentBoxes[2].getFloor());
var vecToAdd = mkVFA([positionFinder(30,40, 3),0,0]);
var newPosition = Vec3.sum(newPosition,vecToAdd);
boxes.addBoxes(makeBoxes(0, makeNewBoxProps(40, 40, 27, 0.5, [0,0,0], newPosition)), "room4:yuge");
// log("box 3 floor:", boxes.currentBoxes[3].getFloor());
boxes.makeSigns();
// var newPosition = Vec3.sum(newPosition, mkVFA(positionFinder(8,15),0,0));
// boxes.addBoxes(makeBoxes(0, makeNewBoxProps(20, 20, 20, 0.5, "", newPosition)));
// var newPosition = Vec3.sum(newPosition, mkVFA(positionFinder(8,15),0,0));
// boxes.addBoxes(makeBoxes(0, makeNewBoxProps(30, 30, 30, 0.5, "", newPosition)));
boxes.getAudioZones();
print(boxes.printAudioZones());
function positionFinder(a, b, gap){
var aHalf = a/2;
var bHalf = b/2;
var newDistance = aHalf + bHalf + gap;
log("&&&new distance", newDistance);
return newDistance;
}
function lerp(InputLow, InputHigh, OutputLow, OutputHigh, Input) {
return ((Input - InputLow) / (InputHigh - InputLow)) * (OutputHigh - OutputLow) + OutputLow;
}
// lerp (0,127,0,360,eventData.velocity);
Script.scriptEnding.connect(function(){
if (!KEEP){
boxes.removeAllBoxes();
}
});
}());