// // // 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; }