From e780e46d5f23f97c36b2be961be26c3acb484c3e Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Mon, 4 Apr 2016 19:56:25 -0700 Subject: [PATCH] most of a music box --- .../cuckooClockMinuteHandEntityScript.js | 13 +- .../Home/growingPlant/wrapper.js | 1 - .../DomainContent/Home/musicBox/lid.js | 246 ++++++++---------- .../DomainContent/Home/musicBox/wrapper.js | 196 ++++++++------ .../Home/whiteboard/eraserEntityScript.js | 24 +- .../Home/whiteboard/markerEntityScript.js | 28 +- 6 files changed, 266 insertions(+), 242 deletions(-) diff --git a/unpublishedScripts/DomainContent/Home/cuckooClock/cuckooClockMinuteHandEntityScript.js b/unpublishedScripts/DomainContent/Home/cuckooClock/cuckooClockMinuteHandEntityScript.js index bd0e7cd46a..d55e5f5495 100644 --- a/unpublishedScripts/DomainContent/Home/cuckooClock/cuckooClockMinuteHandEntityScript.js +++ b/unpublishedScripts/DomainContent/Home/cuckooClock/cuckooClockMinuteHandEntityScript.js @@ -21,7 +21,6 @@ }; - function startUpdate() { print("EBL Start CLOCK Update") //when the baton is claimed; @@ -101,7 +100,6 @@ } }, - update: function() { if (iOwn === false) { @@ -122,20 +120,14 @@ var seconds = date.getSeconds(); var minutes = date.getMinutes(); - if (seconds === 0 && minutes === 0) { - _this.popCuckooOut(); - } - // if (seconds % 30 === 0) { - // _this.popCuckooOut(); - // } - - if(minutes%15===0){ + if (minutes % 15 === 0 && seconds === 0) { _this.popCuckooOut(); } }, popCuckooOut: function() { + _this.checkTime = false; // We are at the top of the hour! _this.position = Entities.getEntityProperties(_this.entityID, "position").position; print("EBL POP CUCKOO CLOCK!!!!!!!!!!!"); @@ -155,7 +147,6 @@ currentFrame: 0 } }); - _this.checkTime = false; Script.setTimeout(function() { _this.checkTime = true; }, _this.TIME_CHECK_REFRACTORY_PERIOD); diff --git a/unpublishedScripts/DomainContent/Home/growingPlant/wrapper.js b/unpublishedScripts/DomainContent/Home/growingPlant/wrapper.js index 4184afe89b..d8da03c423 100644 --- a/unpublishedScripts/DomainContent/Home/growingPlant/wrapper.js +++ b/unpublishedScripts/DomainContent/Home/growingPlant/wrapper.js @@ -74,7 +74,6 @@ Plant = function(spawnPosition, spawnRotation) { }); var WATER_CAN_MODEL_URL = "atp:/growingPlant/waterCan.fbx"; - var WATER_CAN_COLLIISION_HULL_URL = "atp:/growingPlant/can.obj"; var waterCanPosition = Vec3.sum(plantPosition, Vec3.multiply(0.6, Quat.getRight(orientation))); var waterCanRotation = orientation; diff --git a/unpublishedScripts/DomainContent/Home/musicBox/lid.js b/unpublishedScripts/DomainContent/Home/musicBox/lid.js index 572e25ea52..e3d74fcb01 100644 --- a/unpublishedScripts/DomainContent/Home/musicBox/lid.js +++ b/unpublishedScripts/DomainContent/Home/musicBox/lid.js @@ -10,32 +10,39 @@ } var MUSIC_URL = Script.resolvePath('http://hifi-content.s3.amazonaws.com/DomainContent/Home/musicBox/music_converted.wav'); - var SHUT_SOUND_URL = Script.resolvePath('http://hifi-content.s3.amazonaws.com/DomainContent/Home/Sounds/book_fall.L.wav'); - var OPEN_SOUND_URL = Script.resolvePath('http://public.highfidelity.io/sounds/Switches%20and%20sliders/lamp_switch_2.wav'); - var BASE_ANIMATION_URL = 'http://hifi-content.s3.amazonaws.com/DomainContent/Home/musicBox/MusicBoxAnimated2.fbx'; + // var SHUT_SOUND_URL = Script.resolvePath('http://hifi-content.s3.amazonaws.com/DomainContent/Home/Sounds/book_fall.L.wav'); + // var OPEN_SOUND_URL = Script.resolvePath('http://public.highfidelity.io/sounds/Switches%20and%20sliders/lamp_switch_2.wav'); + var SHUT_SOUND_URL = Script.resolvePath('atp:/openSound.wav'); + var OPEN_SOUND_URL = Script.resolvePath('atp:/closeSound.wav'); Lid.prototype = { musicInjector: null, - playingByClick: false, preload: function(entityID) { - _this.entityID = entityID; - _this.music = SoundCache.getSound(MUSIC_URL); - _this.shutSound = SoundCache.getSound(SHUT_SOUND_URL); - _this.openSound = SoundCache.getSound(OPEN_SOUND_URL); - _this.musicIsPlaying = false; - _this.shut = true; - _this.shutSoundInjector = { + this.entityID = entityID; + this.music = SoundCache.getSound(MUSIC_URL); + this.shutSound = SoundCache.getSound(SHUT_SOUND_URL); + this.openSound = SoundCache.getSound(OPEN_SOUND_URL); + + print('OPEN SOUND?? ' + this.openSound) + this.musicIsPlaying = false; + this.shut = true; + this.shutSoundInjector = { isPlaying: false }; - _this.musicInjector = null; - _this.openSoundInjector = { + this.musicInjector = null; + this.openSoundInjector = { isPlaying: false } - _this.getBase(); + this.getParts(); + this.props = Entities.getEntityProperties(this.entityID); + }, + + updateSoundPositionWhileBaseIsHeld: function() { + }, startNearTrigger: function() { - this.getBase(); + this.getParts(); }, continueNearTrigger: function() { @@ -59,9 +66,9 @@ }, stopMusic: function() { + this.musicIsPlaying = false; if (this.musicInjector !== null) { this.musicInjector.stop(); - this.musicIsPlaying = false; } }, @@ -77,10 +84,12 @@ loop: false } this.openSoundInjector = Audio.playSound(this.openSound, audioOptions); + print('this oppen soundinejctopr' + JSON.stringify(this.openSoundInjector)) } }, playShutSound: function() { + print('shut injector' + JSON.stringify(this.shutSoundInjector)); if (this.shutSoundInjector.isPlaying !== true) { var properties = Entities.getEntityProperties(this.entityID); @@ -114,10 +123,10 @@ //this might be z now that its roll - var constraint = finalRotation.x + var constraint = finalRotation.z var MIN_LID_ROTATION = 0; - var MAX_LID_ROTAITON = 75; + var MAX_LID_ROTATION = 75; //handle sound on open, close, and actually play the song if (constraint > 20 && this.musicIsPlaying === false) { @@ -132,10 +141,14 @@ print('play open sound!!') this.shut = false; this.playOpenSound(); + this.startHat(); + this.startKey(); } else if (constraint <= 0 && this.shut === false) { print('play shut sound!!') this.shut = true; this.playShutSound(); + this.stopKey(); + this.stopHat(); } //handle scaling the lid angle to the animation frame @@ -144,147 +157,88 @@ //scale for going up down, and then spin when fully open ;) - var currentFrame = scaleValue(constraint, MIN_LID_ROTATION, MAX_LID_ROTAITON, 0, 30) - - var animation; - - if (finalRotation.x === 75) { - animation = { - loop: true, - firstFrame: 30, - lastFrame: 90, - running: true, - animationFPS: 30, - } - } else { - animation = { - url: BASE_ANIMATION_URL, - running: false, - currentFrame: currentFrame, - firstFrame: 0, - lastFrame: 30 - } - } + var hatHeight = scaleValue(constraint, MIN_LID_ROTATION, MAX_LID_ROTATION, 0, 0.04); Entities.editEntity(this.entityID, { rotation: Quat.fromPitchYawRollDegrees(finalRotation.x, finalRotation.y, finalRotation.z) }) - Entities.editEntity(this.base, { - animation: animation + var VERTICAL_OFFSET = 0.025; + var FORWARD_OFFSET = 0.0; + var LATERAL_OFFSET = 0.0; + + var hatOffset = getOffsetFromCenter(VERTICAL_OFFSET, FORWARD_OFFSET, LATERAL_OFFSET) + var upOffset = Vec3.sum({ + x: 0, + y: hatHeight, + z: 0 + }, hatOffset) + Entities.editEntity(this.hat, { + position: upOffset }) }, - clickDownOnEntity: function() { - this.getBase(); - if (this.playingByClick === false) { - this.playingByClick = true; - this.playByClick(); - } else { - this.playingByClick = false; - this.stopByClick(); - } - }, + getParts: function() { + var properties = Entities.getEntityProperties(this.entityID); + var results = Entities.findEntities(properties.position, 2); + results.forEach(function(result) { - clickReleaseOnEntity: function() { + var props = Entities.getEntityProperties(result); - - }, - - playByClick: function() { - - //turn music on - this.playMusic(); - var animation; - //play frames 0 to 30 and - animation = { - url: BASE_ANIMATION_URL, - running: true, - firstFrame: 0, - lastFrame: 30, - animationFPS: 30 - }; - Entities.editEntity(this.base, { - animation: animation - }); - // rotate the lid, - - //then hold at 30-90 - Script.setTimeout(function() { - animation = { - running: true, - firstFrame: 30, - lastFrame: 90, - animationFPS: 30, - loop: true, + if (props.name === 'home_music_box_base') { + print('FOUND BASE'); + _this.base = result; + _this.baseProps = props; } - Entities.editEntity(_this.base, { - animation: animation - }); - }, 1000); - }, - - stopByClick: function() { - - var animation; - //play frames 90-120 then stop animating - - animation = { - running: true, - firstFrame: 90, - lastFrame: 120, - animationFPS: 30 - }; - Entities.editEntity(this.base, { - animation: animation - }); - Script.setTimeout(function() { - //turn music off - _this.stopMusic(); - animation = { - currentFrame: 120, - firstFrame: 120, - lastFrame: 120, - loop: false, - animationFPS: 0, - running: false + if (props.name === 'home_music_box_key') { + print('FOUND KEY') + _this.key = result; + _this.keyProps = props; } - Entities.editEntity(_this.base, { - animation: animation - }); - print('should stop') - }, 1000) + if (props.name === 'home_music_box_hat') { + print('FOUND HAT') + _this.hat = result; + _this.hatProps = props; + } + + }) }, - playThroughToClose: function() { - + startHat: function() { + Entities.editEntity(this.hat, { + angularDamping: 0, + angularVelocity: { + x: 0, + y: 0.785398, + z: 0, + } + }) }, - getBase: function() { - var props = Entities.getEntityProperties(this.entityID); - var data = JSON.parse(props.userData); - var base = data["hifiHomeKey"].musicBoxBase; - print('base is: ' + base); - this.base = base; + startKey: function() { + Entities.editEntity(this.key, { + angularDamping: 0, + angularVelocity: { + x: 0, + y: 0, + z: 0.785398, + } + }) }, - rotateHat: function() { - + stopHat: function() { + Entities.editEntity(this.hat, { + angularDamping: 0.5, + }); }, - rotateKey: function() { - - }, - - raiseHat: function() { - - }, - - lowerHat: function() { - + stopKey: function() { + Entities.editEntity(this.key, { + angularDamping: 0.5, + }); }, unload: function() { @@ -298,6 +252,26 @@ return min2 + (max2 - min2) * ((value - min1) / (max1 - min1)); } + function getOffsetFromCenter(VERTICAL_OFFSET, FORWARD_OFFSET, LATERAL_OFFSET) { + + var properties = Entities.getEntityProperties(_this.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 + }; + + return new Lid(); }) \ No newline at end of file diff --git a/unpublishedScripts/DomainContent/Home/musicBox/wrapper.js b/unpublishedScripts/DomainContent/Home/musicBox/wrapper.js index 4398583809..94a73bc483 100644 --- a/unpublishedScripts/DomainContent/Home/musicBox/wrapper.js +++ b/unpublishedScripts/DomainContent/Home/musicBox/wrapper.js @@ -60,65 +60,32 @@ HomeMusicBox = function(spawnPosition, spawnRotation) { var LID_SCRIPT_URL = Script.resolvePath('lid.js?' + Math.random()); - var LID_MODEL_URL = 'http://hifi-content.s3.amazonaws.com/DomainContent/Home/musicBox/MusicBoxLid.fbx'; - var BASE_MODEL_URL = 'http://hifi-content.s3.amazonaws.com/DomainContent/Home/musicBox/MusicBoxAnimated2.fbx'; - var BASE_ANIMATION_URL = 'http://hifi-content.s3.amazonaws.com/DomainContent/Home/musicBox/MusicBoxAnimated2.fbx'; var base, lid, hat, key; - function createBase() { - var baseProperties = { - name: 'hifi-home-music-box-base', - type: 'Model', - modelURL: BASE_MODEL_URL, - position: BASE_POSITION, - dimensions: BASE_DIMENSIONS, - animation: { - url: BASE_ANIMATION_URL, - running: false, - currentFrame: 0, - firstFrame: 0, - lastFrame: 120, - loop: false - }, - userData: JSON.stringify({ - 'hifiHomeKey': { - 'reset': true - } - }), - } - - base = Entities.addEntity(baseProperties); - createLid(base); - }; - - function createLid(baseID) { var baseProps = Entities.getEntityProperties(baseID); - var frontVector = Quat.getFront(baseProps.rotation); - var rightVector = Quat.getRight(baseProps.rotation); - var backVector = Vec3.multiply(-1, frontVector); - var backOffset = 0.0125; - var backPosition = baseProps.position; - var backPosition = Vec3.sum(baseProps.position, Vec3.multiply(backOffset, backVector)); - backPosition.y = backPosition.y += (BASE_DIMENSIONS.y / 2) + var VERTICAL_OFFSET = 0.05; + var FORWARD_OFFSET = 0; + var LATERAL_OFFSET = -0.070; + + var startPosition = getOffsetFromCenter(VERTICAL_OFFSET, FORWARD_OFFSET, LATERAL_OFFSET); - print('backPosition' + JSON.stringify(backPosition)); var lidProperties = { - name: 'hifi-home-music-box-lid', + name: 'home_music_box_lid', type: 'Model', - modelURL: LID_MODEL_URL, + modelURL: 'atp:/MB_Lid.fbx', dimensions: LID_DIMENSIONS, - position: baseProps.position, + position: startPosition, + parentID: baseID, registrationPoint: LID_REGISTRATION_POINT, dynamic: false, script: LID_SCRIPT_URL, collidesWith: 'myAvatar,otherAvatar', userData: JSON.stringify({ 'hifiHomeKey': { - 'reset': true, - 'musicBoxBase': baseID + 'reset': true }, grabConstraintsKey: { callback: 'rotateLid', @@ -132,8 +99,8 @@ HomeMusicBox = function(spawnPosition, spawnRotation) { min: 0, max: 75, startingAxis: 'y', - startingPoint: backPosition.y, - distanceToMax: backPosition.y + 0.35 + startingPoint: startPosition.y, + distanceToMax: startPosition.y + 0.35 } } }, @@ -142,69 +109,134 @@ HomeMusicBox = function(spawnPosition, spawnRotation) { disableReleaseVelocity: true } }) - } + }; lid = Entities.addEntity(lidProperties); - createKey(baseID) - createHat(baseID) + createKey(baseID); + createHat(baseID); }; function createHat(baseID) { + var VERTICAL_OFFSET = 0.025; + var FORWARD_OFFSET = 0.0; + var LATERAL_OFFSET = 0.0; + var properties = { - name: 'hifi-home-music-box-hat', - type: 'Box', + modelURL: "atp:/MB_Hat.fbx", + name: 'home_music_box_hat', + type: 'Model', + position: getOffsetFromCenter(VERTICAL_OFFSET, FORWARD_OFFSET, LATERAL_OFFSET), parentID: baseID, dimensions: { - x: 0.1, - y: 0.1, - z: 0.1 + x: 0.0786, + y: 0.0549, + z: 0.0810 }, - } + dynamic: true, + angularDamping: 1, + angularVelocity: { + x: 0, + y: 0.785398, + z: 0, + }, + userData: JSON.stringify({ + 'hifiHomeKey': { + 'reset': true + }, + 'musicBoxKey': { + 'startPosition': getOffsetFromCenter(VERTICAL_OFFSET, FORWARD_OFFSET, LATERAL_OFFSET) + } + }) + }; + hat = Entities.addEntity(properties); - } + }; function createKey(baseID) { - var properties = { - name: 'hifi-home-music-box-key', - type: 'Box', - parentID: baseID, - dimensions: { - x: 0.1, - y: 0.1, - z: 0.1 - }, - } - key = Entities.addEntity(properties); + var VERTICAL_OFFSET = 0.0; + var FORWARD_OFFSET = 0.11; + var LATERAL_OFFSET = 0.0; - } + var properties = { + modelURL: "atp:/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 = { - name: 'hifi-home-music-box-base', - type: 'Box', - dimensions: { - x: 0.1, - y: 0.1, - z: 0.1 - }, - } - base = Entities.addEntity(properties); - } + var properties = { + modelURL: "atp:/MB_Box.fbx", + name: 'home_music_box_base', + type: 'Model', + position: BASE_POSITION, + dimensions: { + x: 0.1661, + y: 0.0928, + z: 0.2022 + }, + userData: JSON.stringify({ + 'hifiHomeKey': { + 'reset': 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; - createBase(); - - + createBaseBox(); return this; } \ No newline at end of file diff --git a/unpublishedScripts/DomainContent/Home/whiteboard/eraserEntityScript.js b/unpublishedScripts/DomainContent/Home/whiteboard/eraserEntityScript.js index 1164d2d67d..9740c7380b 100644 --- a/unpublishedScripts/DomainContent/Home/whiteboard/eraserEntityScript.js +++ b/unpublishedScripts/DomainContent/Home/whiteboard/eraserEntityScript.js @@ -67,9 +67,24 @@ }); // Once user releases eraser, wait a bit then put marker back to its original position and rotation - Script.setTimeout(function() { + // Script.setTimeout(function() { + // var userData = getEntityUserData(_this.entityID); + // Entities.editEntity(_this.entityID, { + // position: userData.originalPosition, + // rotation: userData.originalRotation, + // velocity: { + // x: 0, + // y: -0.01, + // z: 0 + // } + // }); + // }, _this.ERASER_RESET_WAIT_TIME); + }, + collisionWithEntity: function(myID, otherID, collision) { + var otherProps = Entities.getEntityProperties(otherID); + if (otherProps.name === 'home_model_homeset') { var userData = getEntityUserData(_this.entityID); - Entities.editEntity(_this.entityID, { + Entities.editEntity(_this.entityID) { position: userData.originalPosition, rotation: userData.originalRotation, velocity: { @@ -77,12 +92,11 @@ y: -0.01, z: 0 } - }); - }, _this.ERASER_RESET_WAIT_TIME); + } + } }, - preload: function(entityID) { _this.entityID = entityID; _this.searchSphere = Overlays.addOverlay('sphere', { diff --git a/unpublishedScripts/DomainContent/Home/whiteboard/markerEntityScript.js b/unpublishedScripts/DomainContent/Home/whiteboard/markerEntityScript.js index 01245f0696..6440044964 100644 --- a/unpublishedScripts/DomainContent/Home/whiteboard/markerEntityScript.js +++ b/unpublishedScripts/DomainContent/Home/whiteboard/markerEntityScript.js @@ -49,7 +49,7 @@ _this.equipped = true; _this.hand = params[0] == "left" ? 0 : 1; _this.markerColor = getEntityUserData(_this.entityID).markerColor; - // search for whiteboards + // search for whiteboards var markerPosition = Entities.getEntityProperties(_this.entityID, "position").position; var entities = Entities.findEntities(markerPosition, 10); entities.forEach(function(entity) { @@ -68,9 +68,25 @@ }); // Once user releases marker, wait a bit then put marker back to its original position and rotation - Script.setTimeout(function() { + // Script.setTimeout(function() { + // var userData = getEntityUserData(_this.entityID); + // Entities.editEntity(_this.entityID, { + // position: userData.originalPosition, + // rotation: userData.originalRotation, + // velocity: { + // x: 0, + // y: -0.01, + // z: 0 + // } + // }); + // }, _this.MARKER_RESET_WAIT_TIME); + }, + + collisionWithEntity: function(myID, otherID, collision) { + var otherProps = Entities.getEntityProperties(otherID); + if (otherProps.name === 'home_model_homeset') { var userData = getEntityUserData(_this.entityID); - Entities.editEntity(_this.entityID, { + Entities.editEntity(_this.entityID) { position: userData.originalPosition, rotation: userData.originalRotation, velocity: { @@ -78,11 +94,9 @@ y: -0.01, z: 0 } - }); - }, _this.MARKER_RESET_WAIT_TIME); + } + } }, - - continueEquip: function() { // cast a ray from marker and see if it hits anything var markerProps = Entities.getEntityProperties(_this.entityID, ["position", "rotation"]);