overte/unpublishedScripts/DomainContent/Home/musicBox/wrapper.js

239 lines
No EOL
6 KiB
JavaScript

//
//
// Created by The Content Team 4/10/216
// Copyright 2016 High Fidelity, Inc.
//
//
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
HomeMusicBox = function(spawnPosition, spawnRotation) {
var SHOULD_CLEANUP = false;
var WHITE = {
red: 255,
green: 255,
blue: 255
};
var RED = {
red: 255,
green: 0,
blue: 0
};
var GREEN = {
red: 0,
green: 255,
blue: 0
};
var BLUE = {
red: 0,
green: 0,
blue: 255
};
var center = Vec3.sum(Vec3.sum(MyAvatar.position, {
x: 0,
y: 0.5,
z: 0
}), Vec3.multiply(1, Quat.getFront(Camera.getOrientation())));
var BASE_DIMENSIONS = {
x: 0.1661,
y: 0.1010,
z: 0.2256
};
var BASE_POSITION = center;
var LID_DIMENSIONS = {
x: 0.1435,
y: 0.0246,
z: 0.1772
};
var LID_OFFSET = {
x: 0,
y: BASE_DIMENSIONS.y / 2,
z: 0
};
var LID_REGISTRATION_POINT = {
x: 0,
y: 0.5,
z: 0.5
}
var LID_SCRIPT_URL = Script.resolvePath('atp:/musicBox/lid.js');
var BASE_SCRIPT_URL = Script.resolvePath('atp:/musicBox/baseBox.js');
var base, lid, hat, key;
function createLid(baseID) {
var baseProps = Entities.getEntityProperties(baseID);
var VERTICAL_OFFSET = 0.05;
var FORWARD_OFFSET = 0;
var LATERAL_OFFSET = -0.070;
var startPosition = getOffsetFromCenter(VERTICAL_OFFSET, FORWARD_OFFSET, LATERAL_OFFSET);
var lidProperties = {
name: 'home_music_box_lid',
type: 'Model',
modelURL: 'atp:/musicBox/MB_Lid.fbx',
dimensions: LID_DIMENSIONS,
position: startPosition,
parentID: baseID,
registrationPoint: LID_REGISTRATION_POINT,
dynamic: true,
script: LID_SCRIPT_URL,
collidesWith: 'myAvatar,otherAvatar',
userData: JSON.stringify({
'hifiHomeKey': {
'reset': true
},
grabbableKey: {
wantsTrigger: true,
disableReleaseVelocity: true
}
})
};
lid = Entities.addEntity(lidProperties);
createKey(baseID);
createHat(baseID);
};
function createHat(baseID) {
var VERTICAL_OFFSET = 0.025;
var FORWARD_OFFSET = 0.0;
var LATERAL_OFFSET = 0.0;
var properties = {
modelURL: "atp:/musicBox/MB_Hat.fbx",
name: 'home_music_box_hat',
type: 'Model',
position: getOffsetFromCenter(VERTICAL_OFFSET, FORWARD_OFFSET, LATERAL_OFFSET),
parentID: baseID,
dimensions: {
x: 0.0786,
y: 0.0549,
z: 0.0810
},
angularDamping: 1,
angularVelocity: {
x: 0,
y: 0.785398,
z: 0,
},
userData: JSON.stringify({
'hifiHomeKey': {
'reset': true
}
})
};
hat = Entities.addEntity(properties);
};
function createKey(baseID) {
var VERTICAL_OFFSET = 0.0;
var FORWARD_OFFSET = 0.11;
var LATERAL_OFFSET = 0.0;
var properties = {
modelURL: "atp:/musicBox/MB_Key.fbx",
name: 'home_music_box_key',
type: 'Model',
parentID: baseID,
angularDamping: 1,
angularVelocity: {
x: 0,
y: 0,
z: 0.785398,
},
position: getOffsetFromCenter(VERTICAL_OFFSET, FORWARD_OFFSET, LATERAL_OFFSET),
dimensions: {
x: 0.0057,
y: 0.0482,
z: 0.0435
},
userData: JSON.stringify({
'hifiHomeKey': {
'reset': true
}
})
};
key = Entities.addEntity(properties);
};
function createBaseBox() {
var properties = {
modelURL: "atp:/musicBox/MB_Box.fbx",
name: 'home_music_box_base',
type: 'Model',
position: BASE_POSITION,
dynamic: true,
shapeType: 'compound',
compoundShapeURL: 'atp:/musicBox/boxHull3.obj',
dimensions: {
x: 0.1661,
y: 0.0928,
z: 0.2022
},
script: BASE_SCRIPT_URL,
userData: JSON.stringify({
'hifiHomeKey': {
'reset': true
},
grabbableKey: {
disableReleaseVelocity: true
}
})
}
base = Entities.addEntity(properties);
createLid(base);
};
function cleanup() {
Entities.deleteEntity(base);
Entities.deleteEntity(lid);
Entities.deleteEntity(key);
Entities.deleteEntity(hat);
};
function getOffsetFromCenter(VERTICAL_OFFSET, FORWARD_OFFSET, LATERAL_OFFSET) {
var properties = Entities.getEntityProperties(base);
var upVector = Quat.getUp(properties.rotation);
var frontVector = Quat.getFront(properties.rotation);
var rightVector = Quat.getRight(properties.rotation);
var upOffset = Vec3.multiply(upVector, VERTICAL_OFFSET);
var frontOffset = Vec3.multiply(frontVector, FORWARD_OFFSET);
var rightOffset = Vec3.multiply(rightVector, LATERAL_OFFSET);
var finalOffset = Vec3.sum(properties.position, upOffset);
finalOffset = Vec3.sum(finalOffset, frontOffset);
finalOffset = Vec3.sum(finalOffset, rightOffset);
return finalOffset
};
this.cleanup = cleanup;
createBaseBox();
return this;
}