From b4a4f276eabd394f40e6c69e7d0b1874454ce063 Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Thu, 24 Mar 2016 14:33:58 -0700 Subject: [PATCH 01/13] logs etc --- .../DomainContent/Home/dressingRoom/dressingRoom.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js b/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js index da0db81a5a..2ced759c3f 100644 --- a/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js +++ b/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js @@ -73,7 +73,6 @@ var doppelgangers = []; - function Doppelganger(avatar) { this.initialProperties = { name: 'Hifi-Doppelganger', @@ -93,7 +92,7 @@ }) }; - this.id = createDoppelgangerEntity(this); + this.id = createDoppelgangerEntity(this.initialProperties); this.avatar = avatar; return this; } @@ -250,7 +249,7 @@ RightHandPinky3: "RightHandPinky2", RightHandPinky4: "RightHandPinky3", LeftShoulder: "Spine3", - LeftArm: "LeftShoulder", + LeftArm: "LeftShoulder", LeftForeArm: "LeftArm", LeftHand: "LeftForeArm", LeftHandThumb1: "LeftHand", @@ -399,8 +398,8 @@ return new Doppelganger(avatar); } - function createDoppelgangerEntity(doppelganger) { - return Entities.addEntity(doppelganger.initialProperties); + function createDoppelgangerEntity(initialProperties) { + return Entities.addEntity(initialProperties); } function matchBasePosition() { @@ -694,6 +693,7 @@ function cleanup() { + if (isConnected === true) { disconnectDoppelgangerUpdates(); } @@ -702,6 +702,8 @@ print('DOPPELGANGER' + doppelganger.id) Entities.deleteEntity(doppelganger.id); }); + + doppelgangers = []; } return new DressingRoom(); From 8eb0f51f56f54bfb647b09d60e8941f58346ed3a Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Thu, 24 Mar 2016 15:23:15 -0700 Subject: [PATCH 02/13] testing --- .../DomainContent/Home/dressingRoom/dressingRoom.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js b/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js index 2ced759c3f..3b7e018ecf 100644 --- a/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js +++ b/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js @@ -508,6 +508,8 @@ absoluteXforms = mirroredAbsoluteXforms; } var relativeXforms = buildRelativeXformsFromAbsoluteXforms(absoluteXforms); + print('DOPPELGANGERS:::: ' + doppelgangers.length); + print('DOPPELGANGERS:::: ' + JSON.stringify(doppelgangers)); setJointData(doppelgangers[0], relativeXforms); } From aba879442881d7a9ace67cc455c80750b6044915 Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Thu, 24 Mar 2016 15:25:59 -0700 Subject: [PATCH 03/13] freezer --- .../DomainContent/Home/dressingRoom/freezeToggler.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/unpublishedScripts/DomainContent/Home/dressingRoom/freezeToggler.js b/unpublishedScripts/DomainContent/Home/dressingRoom/freezeToggler.js index 6b83a606da..1f167fdccc 100644 --- a/unpublishedScripts/DomainContent/Home/dressingRoom/freezeToggler.js +++ b/unpublishedScripts/DomainContent/Home/dressingRoom/freezeToggler.js @@ -67,8 +67,6 @@ preload: function(entityID) { this.entityID = entityID; - this.initialProperties = Entities.getEntityProperties(this.entityID); - this.userData = JSON.parse(this.initialProperties.userData); }, }; From 4f1fc296e6230e9fb7ae2ba64e89180985c30320 Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Thu, 24 Mar 2016 15:31:32 -0700 Subject: [PATCH 04/13] werk --- .../DomainContent/Home/dressingRoom/dressingRoom.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js b/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js index 3b7e018ecf..de7c10a3e5 100644 --- a/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js +++ b/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js @@ -249,7 +249,7 @@ RightHandPinky3: "RightHandPinky2", RightHandPinky4: "RightHandPinky3", LeftShoulder: "Spine3", - LeftArm: "LeftShoulder", + LeftArm: "LeftShoulder", LeftForeArm: "LeftArm", LeftHand: "LeftForeArm", LeftHandThumb1: "LeftHand", @@ -448,7 +448,6 @@ return offset } - function matchBaseRotation() { var ids = Entities.findEntities(MyAvatar.position, 20); var hasBase = false; @@ -464,7 +463,6 @@ } } - var isConnected = false; function connectDoppelgangerUpdates() { @@ -509,8 +507,10 @@ } var relativeXforms = buildRelativeXformsFromAbsoluteXforms(absoluteXforms); print('DOPPELGANGERS:::: ' + doppelgangers.length); - print('DOPPELGANGERS:::: ' + JSON.stringify(doppelgangers)); - setJointData(doppelgangers[0], relativeXforms); + print('DOPPELGANGERS:::: ' + JSON.stringify(doppelgangers)); + doppelgangers.forEach(function(doppelganger) { + setJointData(doppelganger, relativeXforms); + }) } From 392a4c33131ae9fa2bd419f47b5818c329f94a34 Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Thu, 24 Mar 2016 15:54:03 -0700 Subject: [PATCH 05/13] testing --- .../DomainContent/Home/dressingRoom/dressingRoom.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js b/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js index de7c10a3e5..d9ce822669 100644 --- a/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js +++ b/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js @@ -140,6 +140,7 @@ } function setJointData(doppelganger, relativeXforms) { + print('setting joint data for ' + doppelganger.id) var jointRotations = []; var i, l = relativeXforms.length; for (i = 0; i < l; i++) { @@ -507,7 +508,7 @@ } var relativeXforms = buildRelativeXformsFromAbsoluteXforms(absoluteXforms); print('DOPPELGANGERS:::: ' + doppelgangers.length); - print('DOPPELGANGERS:::: ' + JSON.stringify(doppelgangers)); + print('first doppel id:: ' + doppelgangers[0].id); doppelgangers.forEach(function(doppelganger) { setJointData(doppelganger, relativeXforms); }) From 74648b6a25b5ba2a4aa2668143fc6754642babcb Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Thu, 24 Mar 2016 15:58:23 -0700 Subject: [PATCH 06/13] throttle --- .../DomainContent/Home/dressingRoom/dressingRoom.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js b/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js index d9ce822669..83514a75a6 100644 --- a/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js +++ b/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js @@ -68,7 +68,7 @@ var MIRROR_JOINT_DATA = true; var MIRRORED_ENTITY_SCRIPT_URL = Script.resolvePath('mirroredEntity.js'); var FREEZE_TOGGLER_SCRIPT_URL = Script.resolvePath('freezeToggler.js?' + Math.random(0, 1000)) - var THROTTLE = false; + var THROTTLE = true; var THROTTLE_RATE = 100; var doppelgangers = []; From 1ad3e1ae9803509edf7ef48766308daf04c7bba8 Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Thu, 24 Mar 2016 16:00:04 -0700 Subject: [PATCH 07/13] list joints --- .../DomainContent/Home/dressingRoom/dressingRoom.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js b/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js index 83514a75a6..f6d52cbb7c 100644 --- a/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js +++ b/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js @@ -147,8 +147,9 @@ jointRotations.push(relativeXforms[i].rot); } var setJointSuccess = Entities.setAbsoluteJointRotationsInObjectFrame(doppelganger.id, jointRotations); + print('JOINT ROTATIONS:: ' + JSON.stringify(jointRotations)); print('SUCCESS SETTING JOINTS?' + setJointSuccess + "for " + doppelganger.id) - return true; + return; } // maps joint names to their mirrored joint From 6bed4d4e8eb9aefa64528eaa722c4d1dbe31cade Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Thu, 24 Mar 2016 16:50:49 -0700 Subject: [PATCH 08/13] thangz --- .../Home/dressingRoom/dressingRoom.js | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js b/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js index f6d52cbb7c..0d4a2de3e4 100644 --- a/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js +++ b/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js @@ -19,7 +19,7 @@ avatarModelURL = getAvatarFBX(); makeDoppelgangerForMyAvatar(); subscribeToWearableMessages(); - subscribeToFreezeMessages(); + // subscribeToFreezeMessages(); this.setOccupied(); var doppelProps = Entities.getEntityProperties(this.entityID); Entities.editEntity(doppelgangers[0], { @@ -465,20 +465,15 @@ } } - var isConnected = false; + function connectDoppelgangerUpdates() { Script.update.connect(updateDoppelganger); - isConnected = true; + } function disconnectDoppelgangerUpdates() { - - if (isConnected === true) { - print('SHOULD DISCONNECT') - Script.update.disconnect(updateDoppelganger); - } - isConnected = false; + Script.update.disconnect(updateDoppelganger); } var sinceLastUpdate = 0; @@ -698,9 +693,9 @@ function cleanup() { - if (isConnected === true) { - disconnectDoppelgangerUpdates(); - } + + disconnectDoppelgangerUpdates(); + doppelgangers.forEach(function(doppelganger) { print('DOPPELGANGER' + doppelganger.id) From adc0637001bb131d446b29256fb5c1315b174df8 Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Thu, 24 Mar 2016 16:52:58 -0700 Subject: [PATCH 09/13] still trying --- .../DomainContent/Home/dressingRoom/dressingRoom.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js b/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js index 0d4a2de3e4..e397f7507e 100644 --- a/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js +++ b/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js @@ -83,7 +83,7 @@ rotation: matchBaseRotation(), collisionsWillMove: false, ignoreForCollisions: false, - script: FREEZE_TOGGLER_SCRIPT_URL, + // script: FREEZE_TOGGLER_SCRIPT_URL, userData: JSON.stringify({ grabbableKey: { grabbable: false, @@ -550,7 +550,6 @@ } if (parsedMessage.action === 'unfreeze') { print('ACTUAL UNFREEZE') - connectDoppelgangerUpdates(); } From fa9f9887196cd1268cef610d513ddcadc8a3ed0d Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Thu, 24 Mar 2016 16:53:36 -0700 Subject: [PATCH 10/13] hifi --- .../DomainContent/Home/dressingRoom/dressingRoom.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js b/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js index e397f7507e..d2f9ee53c7 100644 --- a/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js +++ b/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js @@ -692,12 +692,10 @@ function cleanup() { - - disconnectDoppelgangerUpdates(); - + Script.update.disconnect(updateDoppelganger); doppelgangers.forEach(function(doppelganger) { - print('DOPPELGANGER' + doppelganger.id) + print('DELETING DOPPELGANGER' + doppelganger.id) Entities.deleteEntity(doppelganger.id); }); From 542ad2ed628d8ea9dd45c31ab054b3d57fa9b190 Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Thu, 24 Mar 2016 16:59:04 -0700 Subject: [PATCH 11/13] test revert --- .../Home/dressingRoom/dressingRoom.js | 155 +++++++----------- 1 file changed, 60 insertions(+), 95 deletions(-) diff --git a/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js b/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js index d2f9ee53c7..49a236fc18 100644 --- a/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js +++ b/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js @@ -1,58 +1,25 @@ (function() { - var utilsPath = Script.resolvePath("../utils.js"); - Script.include(utilsPath); - var avatarModelURL; - DressingRoom = function() { return this } DressingRoom.prototype = { preload: function(entityID) { - print('PRELOAD DRESSING ROOM'); + print('PRELOAD DRESSING ROOM') this.entityID = entityID; - avatarModelURL = getAvatarFBX(); }, enterEntity: function() { - print('ENTER DRESSING ROOM'); - avatarModelURL = getAvatarFBX(); + print('ENTER DRESSING ROOM') makeDoppelgangerForMyAvatar(); subscribeToWearableMessages(); - // subscribeToFreezeMessages(); - this.setOccupied(); - var doppelProps = Entities.getEntityProperties(this.entityID); - Entities.editEntity(doppelgangers[0], { - dimensions: doppelProps.naturalDimensions, - }); + subscribeToFreezeMessages(); }, leaveEntity: function() { - print('EXIT DRESSING ROOM!'); - this.setUnoccupied(); + print('EXIT DRESSING ROOM!') cleanup(); - }, - checkIfOccupied: function() { - var data = getEntityCustomData('hifi-home-dressing-room', this.entityID, { - occupied: false - }); - return data.occupied; - }, - setOccupied: function() { - setEntityCustomData('hifi-home-dressing-room', this.entityID, { - occupied: true - }); - }, - setUnoccupied: function() { - setEntityCustomData('hifi-home-dressing-room', this.entityID, { - occupied: false - }); - }, - unload: function() { - this.setUnoccupied(); - cleanup(); - }, + } }; - // // doppelganger.js // @@ -64,26 +31,30 @@ // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // + // To-Do: mirror joints, rotate avatar fully, automatically get avatar fbx, make sure dimensions for avatar are right when u bring it in + + var TEST_MODEL_URL = 'https://s3.amazonaws.com/hifi-public/ozan/avatars/albert/albert/albert.fbx'; var MIRROR_JOINT_DATA = true; var MIRRORED_ENTITY_SCRIPT_URL = Script.resolvePath('mirroredEntity.js'); var FREEZE_TOGGLER_SCRIPT_URL = Script.resolvePath('freezeToggler.js?' + Math.random(0, 1000)) - var THROTTLE = true; + var THROTTLE = false; var THROTTLE_RATE = 100; var doppelgangers = []; + function Doppelganger(avatar) { this.initialProperties = { name: 'Hifi-Doppelganger', type: 'Model', - modelURL: avatarModelURL, + modelURL: TEST_MODEL_URL, // dimensions: getAvatarDimensions(avatar), - position: matchBasePosition(), - rotation: matchBaseRotation(), + position: putDoppelgangerAcrossFromAvatar(this, avatar), + rotation: rotateDoppelgangerTowardAvatar(this, avatar), collisionsWillMove: false, ignoreForCollisions: false, - // script: FREEZE_TOGGLER_SCRIPT_URL, + script: FREEZE_TOGGLER_SCRIPT_URL, userData: JSON.stringify({ grabbableKey: { grabbable: false, @@ -92,36 +63,11 @@ }) }; - this.id = createDoppelgangerEntity(this.initialProperties); + this.id = createDoppelgangerEntity(this); this.avatar = avatar; return this; } - function getAvatarFBX() { - var skeletonURL = MyAvatar.skeletonModelURL; - var req = new XMLHttpRequest(); - req.open("GET", skeletonURL, false); - req.send(); - - var fst = req.responseText; - - var fbxURL; - - var split = fst.split('\n'); - split.forEach(function(line) { - if (line.indexOf('filename') > -1) { - var innerSplit = line.split(" "); - innerSplit.forEach(function(inner) { - if (inner.indexOf('.fbx') > -1) { - fbxURL = inner; - } - }) - } - }); - - return fbxURL - } - function getJointData(avatar) { var allJointData = []; var jointNames = MyAvatar.jointNames; @@ -140,16 +86,14 @@ } function setJointData(doppelganger, relativeXforms) { - print('setting joint data for ' + doppelganger.id) var jointRotations = []; var i, l = relativeXforms.length; for (i = 0; i < l; i++) { jointRotations.push(relativeXforms[i].rot); } var setJointSuccess = Entities.setAbsoluteJointRotationsInObjectFrame(doppelganger.id, jointRotations); - print('JOINT ROTATIONS:: ' + JSON.stringify(jointRotations)); - print('SUCCESS SETTING JOINTS?' + setJointSuccess + "for " + doppelganger.id) - return; + // print('SUCCESS SETTING JOINTS?' + setJointSuccess + "for " +doppelganger.id) + return true; } // maps joint names to their mirrored joint @@ -400,12 +344,16 @@ return new Doppelganger(avatar); } - function createDoppelgangerEntity(initialProperties) { - return Entities.addEntity(initialProperties); + function createDoppelgangerEntity(doppelganger) { + return Entities.addEntity(doppelganger.initialProperties); } - function matchBasePosition() { + function putDoppelgangerAcrossFromAvatar(doppelganger, avatar) { + var avatarRot = Quat.fromPitchYawRollDegrees(0, avatar.bodyYaw, 0.0); + var position; + var ids = Entities.findEntities(MyAvatar.position, 20); + var hasBase = false; for (var i = 0; i < ids.length; i++) { var entityID = ids[i]; var props = Entities.getEntityProperties(entityID, "name"); @@ -414,12 +362,18 @@ var details = Entities.getEntityProperties(entityID, ["position", "dimensions"]); details.position.y += getAvatarFootOffset(); details.position.y += details.dimensions.y / 2; - print('JBP BASE POSITION ' + JSON.stringify(details.position)) - return details.position; + position = details.position; + hasBase = true; } } - } + if (hasBase === false) { + position = Vec3.sum(avatar.position, Vec3.multiply(1.5, Quat.getFront(avatarRot))); + + } + + return position; + } function getAvatarFootOffset() { var data = getJointData(); @@ -450,7 +404,14 @@ return offset } - function matchBaseRotation() { + + function getAvatarDimensions(avatar) { + return dimensions; + } + + function rotateDoppelgangerTowardAvatar(doppelganger, avatar) { + var avatarRot = Quat.fromPitchYawRollDegrees(0, avatar.bodyYaw, 0.0); + var ids = Entities.findEntities(MyAvatar.position, 20); var hasBase = false; for (var i = 0; i < ids.length; i++) { @@ -459,21 +420,29 @@ var name = props.name; if (name === "Hifi-Dressing-Room-Base") { var details = Entities.getEntityProperties(entityID, "rotation"); - print('JBP DOPPELGANGER ROTATION SET TO BASE:: ' + JSON.stringify(details.rotation)) - return details.rotation; + avatarRot = details.rotation; } } + if (hasBase === false) { + avatarRot = Vec3.multiply(-1, avatarRot); + } + return avatarRot; } - + var isConnected = false; function connectDoppelgangerUpdates() { Script.update.connect(updateDoppelganger); - + isConnected = true; } function disconnectDoppelgangerUpdates() { - Script.update.disconnect(updateDoppelganger); + + if (isConnected === true) { + print('SHOULD DISCONNECT') + Script.update.disconnect(updateDoppelganger); + } + isConnected = false; } var sinceLastUpdate = 0; @@ -503,16 +472,12 @@ absoluteXforms = mirroredAbsoluteXforms; } var relativeXforms = buildRelativeXformsFromAbsoluteXforms(absoluteXforms); - print('DOPPELGANGERS:::: ' + doppelgangers.length); - print('first doppel id:: ' + doppelgangers[0].id); doppelgangers.forEach(function(doppelganger) { setJointData(doppelganger, relativeXforms); - }) - + }); } function makeDoppelgangerForMyAvatar() { - doppelgangers = []; var doppelganger = createDoppelganger(MyAvatar); doppelgangers.push(doppelganger); connectDoppelgangerUpdates(); @@ -550,6 +515,7 @@ } if (parsedMessage.action === 'unfreeze') { print('ACTUAL UNFREEZE') + connectDoppelgangerUpdates(); } @@ -691,15 +657,14 @@ function cleanup() { - - Script.update.disconnect(updateDoppelganger); + if (isConnected === true) { + disconnectDoppelgangerUpdates(); + } doppelgangers.forEach(function(doppelganger) { - print('DELETING DOPPELGANGER' + doppelganger.id) + print('DOPPELGANGER' + doppelganger.id) Entities.deleteEntity(doppelganger.id); }); - - doppelgangers = []; } return new DressingRoom(); From d3e7e4c791aad854cbaba62bb2423693f33db28c Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Thu, 24 Mar 2016 17:01:43 -0700 Subject: [PATCH 12/13] revert revert --- .../Home/dressingRoom/dressingRoom.js | 155 +++++++++++------- 1 file changed, 95 insertions(+), 60 deletions(-) diff --git a/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js b/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js index 49a236fc18..8b8d8ca312 100644 --- a/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js +++ b/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js @@ -1,25 +1,58 @@ (function() { + var utilsPath = Script.resolvePath("../utils.js"); + Script.include(utilsPath); + var avatarModelURL; + DressingRoom = function() { return this } DressingRoom.prototype = { preload: function(entityID) { - print('PRELOAD DRESSING ROOM') + print('PRELOAD DRESSING ROOM'); this.entityID = entityID; + avatarModelURL = getAvatarFBX(); }, enterEntity: function() { - print('ENTER DRESSING ROOM') + print('ENTER DRESSING ROOM'); + avatarModelURL = getAvatarFBX(); makeDoppelgangerForMyAvatar(); subscribeToWearableMessages(); - subscribeToFreezeMessages(); + // subscribeToFreezeMessages(); + this.setOccupied(); + var doppelProps = Entities.getEntityProperties(this.entityID); + Entities.editEntity(doppelgangers[0], { + dimensions: doppelProps.naturalDimensions, + }); }, leaveEntity: function() { - print('EXIT DRESSING ROOM!') + print('EXIT DRESSING ROOM!'); + this.setUnoccupied(); cleanup(); - } + }, + checkIfOccupied: function() { + var data = getEntityCustomData('hifi-home-dressing-room', this.entityID, { + occupied: false + }); + return data.occupied; + }, + setOccupied: function() { + setEntityCustomData('hifi-home-dressing-room', this.entityID, { + occupied: true + }); + }, + setUnoccupied: function() { + setEntityCustomData('hifi-home-dressing-room', this.entityID, { + occupied: false + }); + }, + unload: function() { + this.setUnoccupied(); + cleanup(); + }, }; + // // doppelganger.js // @@ -31,30 +64,26 @@ // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // - // To-Do: mirror joints, rotate avatar fully, automatically get avatar fbx, make sure dimensions for avatar are right when u bring it in - - var TEST_MODEL_URL = 'https://s3.amazonaws.com/hifi-public/ozan/avatars/albert/albert/albert.fbx'; var MIRROR_JOINT_DATA = true; var MIRRORED_ENTITY_SCRIPT_URL = Script.resolvePath('mirroredEntity.js'); var FREEZE_TOGGLER_SCRIPT_URL = Script.resolvePath('freezeToggler.js?' + Math.random(0, 1000)) - var THROTTLE = false; + var THROTTLE = true; var THROTTLE_RATE = 100; var doppelgangers = []; - function Doppelganger(avatar) { this.initialProperties = { name: 'Hifi-Doppelganger', type: 'Model', - modelURL: TEST_MODEL_URL, + modelURL: avatarModelURL, // dimensions: getAvatarDimensions(avatar), - position: putDoppelgangerAcrossFromAvatar(this, avatar), - rotation: rotateDoppelgangerTowardAvatar(this, avatar), + position: matchBasePosition(), + rotation: matchBaseRotation(), collisionsWillMove: false, ignoreForCollisions: false, - script: FREEZE_TOGGLER_SCRIPT_URL, + // script: FREEZE_TOGGLER_SCRIPT_URL, userData: JSON.stringify({ grabbableKey: { grabbable: false, @@ -63,11 +92,36 @@ }) }; - this.id = createDoppelgangerEntity(this); + this.id = createDoppelgangerEntity(this.initialProperties); this.avatar = avatar; return this; } + function getAvatarFBX() { + var skeletonURL = MyAvatar.skeletonModelURL; + var req = new XMLHttpRequest(); + req.open("GET", skeletonURL, false); + req.send(); + + var fst = req.responseText; + + var fbxURL; + + var split = fst.split('\n'); + split.forEach(function(line) { + if (line.indexOf('filename') > -1) { + var innerSplit = line.split(" "); + innerSplit.forEach(function(inner) { + if (inner.indexOf('.fbx') > -1) { + fbxURL = inner; + } + }) + } + }); + + return fbxURL + } + function getJointData(avatar) { var allJointData = []; var jointNames = MyAvatar.jointNames; @@ -86,14 +140,16 @@ } function setJointData(doppelganger, relativeXforms) { + print('setting joint data for ' + doppelganger.id) var jointRotations = []; var i, l = relativeXforms.length; for (i = 0; i < l; i++) { jointRotations.push(relativeXforms[i].rot); } var setJointSuccess = Entities.setAbsoluteJointRotationsInObjectFrame(doppelganger.id, jointRotations); - // print('SUCCESS SETTING JOINTS?' + setJointSuccess + "for " +doppelganger.id) - return true; + print('JOINT ROTATIONS:: ' + JSON.stringify(jointRotations)); + print('SUCCESS SETTING JOINTS?' + setJointSuccess + "for " + doppelganger.id) + return; } // maps joint names to their mirrored joint @@ -344,16 +400,12 @@ return new Doppelganger(avatar); } - function createDoppelgangerEntity(doppelganger) { - return Entities.addEntity(doppelganger.initialProperties); + function createDoppelgangerEntity(initialProperties) { + return Entities.addEntity(initialProperties); } - function putDoppelgangerAcrossFromAvatar(doppelganger, avatar) { - var avatarRot = Quat.fromPitchYawRollDegrees(0, avatar.bodyYaw, 0.0); - var position; - + function matchBasePosition() { var ids = Entities.findEntities(MyAvatar.position, 20); - var hasBase = false; for (var i = 0; i < ids.length; i++) { var entityID = ids[i]; var props = Entities.getEntityProperties(entityID, "name"); @@ -362,19 +414,13 @@ var details = Entities.getEntityProperties(entityID, ["position", "dimensions"]); details.position.y += getAvatarFootOffset(); details.position.y += details.dimensions.y / 2; - position = details.position; - hasBase = true; + print('JBP BASE POSITION ' + JSON.stringify(details.position)) + return details.position; } } - - if (hasBase === false) { - position = Vec3.sum(avatar.position, Vec3.multiply(1.5, Quat.getFront(avatarRot))); - - } - - return position; } + function getAvatarFootOffset() { var data = getJointData(); var upperLeg, lowerLeg, foot, toe, toeTop; @@ -404,14 +450,7 @@ return offset } - - function getAvatarDimensions(avatar) { - return dimensions; - } - - function rotateDoppelgangerTowardAvatar(doppelganger, avatar) { - var avatarRot = Quat.fromPitchYawRollDegrees(0, avatar.bodyYaw, 0.0); - + function matchBaseRotation() { var ids = Entities.findEntities(MyAvatar.position, 20); var hasBase = false; for (var i = 0; i < ids.length; i++) { @@ -420,29 +459,21 @@ var name = props.name; if (name === "Hifi-Dressing-Room-Base") { var details = Entities.getEntityProperties(entityID, "rotation"); - avatarRot = details.rotation; + print('JBP DOPPELGANGER ROTATION SET TO BASE:: ' + JSON.stringify(details.rotation)) + return details.rotation; } } - if (hasBase === false) { - avatarRot = Vec3.multiply(-1, avatarRot); - } - return avatarRot; } - var isConnected = false; + function connectDoppelgangerUpdates() { Script.update.connect(updateDoppelganger); - isConnected = true; + } function disconnectDoppelgangerUpdates() { - - if (isConnected === true) { - print('SHOULD DISCONNECT') - Script.update.disconnect(updateDoppelganger); - } - isConnected = false; + Script.update.disconnect(updateDoppelganger); } var sinceLastUpdate = 0; @@ -472,12 +503,16 @@ absoluteXforms = mirroredAbsoluteXforms; } var relativeXforms = buildRelativeXformsFromAbsoluteXforms(absoluteXforms); + // print('DOPPELGANGERS:::: ' + doppelgangers.length); + // print('first doppel id:: ' + doppelgangers[0].id); doppelgangers.forEach(function(doppelganger) { setJointData(doppelganger, relativeXforms); - }); + }) + } function makeDoppelgangerForMyAvatar() { + doppelgangers = []; var doppelganger = createDoppelganger(MyAvatar); doppelgangers.push(doppelganger); connectDoppelgangerUpdates(); @@ -515,7 +550,6 @@ } if (parsedMessage.action === 'unfreeze') { print('ACTUAL UNFREEZE') - connectDoppelgangerUpdates(); } @@ -657,14 +691,15 @@ function cleanup() { - if (isConnected === true) { - disconnectDoppelgangerUpdates(); - } + + Script.update.disconnect(updateDoppelganger); doppelgangers.forEach(function(doppelganger) { - print('DOPPELGANGER' + doppelganger.id) + print('DELETING DOPPELGANGER' + doppelganger.id) Entities.deleteEntity(doppelganger.id); }); + + doppelgangers = []; } return new DressingRoom(); From 623cf1fb7ac7f5bebfad1e774a979bc88aaa4c0a Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Thu, 24 Mar 2016 18:10:55 -0700 Subject: [PATCH 13/13] back to reality --- .../Home/dressingRoom/dressingRoom.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js b/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js index 8b8d8ca312..dbadbf6cd5 100644 --- a/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js +++ b/unpublishedScripts/DomainContent/Home/dressingRoom/dressingRoom.js @@ -2,7 +2,7 @@ var utilsPath = Script.resolvePath("../utils.js"); Script.include(utilsPath); - var avatarModelURL; + var avatarModelURL ='https://s3.amazonaws.com/hifi-public/ozan/avatars/albert/albert/albert.fbx'; DressingRoom = function() { return this @@ -12,19 +12,19 @@ preload: function(entityID) { print('PRELOAD DRESSING ROOM'); this.entityID = entityID; - avatarModelURL = getAvatarFBX(); + // avatarModelURL = getAvatarFBX(); }, enterEntity: function() { print('ENTER DRESSING ROOM'); - avatarModelURL = getAvatarFBX(); + // avatarModelURL = getAvatarFBX(); makeDoppelgangerForMyAvatar(); subscribeToWearableMessages(); // subscribeToFreezeMessages(); this.setOccupied(); var doppelProps = Entities.getEntityProperties(this.entityID); - Entities.editEntity(doppelgangers[0], { - dimensions: doppelProps.naturalDimensions, - }); + // Entities.editEntity(doppelgangers[0], { + // dimensions: doppelProps.naturalDimensions, + // }); }, leaveEntity: function() { print('EXIT DRESSING ROOM!'); @@ -68,7 +68,7 @@ var MIRROR_JOINT_DATA = true; var MIRRORED_ENTITY_SCRIPT_URL = Script.resolvePath('mirroredEntity.js'); var FREEZE_TOGGLER_SCRIPT_URL = Script.resolvePath('freezeToggler.js?' + Math.random(0, 1000)) - var THROTTLE = true; + var THROTTLE = false; var THROTTLE_RATE = 100; var doppelgangers = []; @@ -147,7 +147,7 @@ jointRotations.push(relativeXforms[i].rot); } var setJointSuccess = Entities.setAbsoluteJointRotationsInObjectFrame(doppelganger.id, jointRotations); - print('JOINT ROTATIONS:: ' + JSON.stringify(jointRotations)); + // print('JOINT ROTATIONS:: ' + JSON.stringify(jointRotations)); print('SUCCESS SETTING JOINTS?' + setJointSuccess + "for " + doppelganger.id) return; }