mirror of
https://github.com/JulianGro/overte.git
synced 2025-05-01 15:32:32 +02:00
revert revert
This commit is contained in:
parent
542ad2ed62
commit
d3e7e4c791
1 changed files with 95 additions and 60 deletions
|
@ -1,25 +1,58 @@
|
||||||
(function() {
|
(function() {
|
||||||
|
|
||||||
|
var utilsPath = Script.resolvePath("../utils.js");
|
||||||
|
Script.include(utilsPath);
|
||||||
|
var avatarModelURL;
|
||||||
|
|
||||||
DressingRoom = function() {
|
DressingRoom = function() {
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
DressingRoom.prototype = {
|
DressingRoom.prototype = {
|
||||||
preload: function(entityID) {
|
preload: function(entityID) {
|
||||||
print('PRELOAD DRESSING ROOM')
|
print('PRELOAD DRESSING ROOM');
|
||||||
this.entityID = entityID;
|
this.entityID = entityID;
|
||||||
|
avatarModelURL = getAvatarFBX();
|
||||||
},
|
},
|
||||||
enterEntity: function() {
|
enterEntity: function() {
|
||||||
print('ENTER DRESSING ROOM')
|
print('ENTER DRESSING ROOM');
|
||||||
|
avatarModelURL = getAvatarFBX();
|
||||||
makeDoppelgangerForMyAvatar();
|
makeDoppelgangerForMyAvatar();
|
||||||
subscribeToWearableMessages();
|
subscribeToWearableMessages();
|
||||||
subscribeToFreezeMessages();
|
// subscribeToFreezeMessages();
|
||||||
|
this.setOccupied();
|
||||||
|
var doppelProps = Entities.getEntityProperties(this.entityID);
|
||||||
|
Entities.editEntity(doppelgangers[0], {
|
||||||
|
dimensions: doppelProps.naturalDimensions,
|
||||||
|
});
|
||||||
},
|
},
|
||||||
leaveEntity: function() {
|
leaveEntity: function() {
|
||||||
print('EXIT DRESSING ROOM!')
|
print('EXIT DRESSING ROOM!');
|
||||||
|
this.setUnoccupied();
|
||||||
cleanup();
|
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
|
// doppelganger.js
|
||||||
//
|
//
|
||||||
|
@ -31,30 +64,26 @@
|
||||||
// Distributed under the Apache License, Version 2.0.
|
// Distributed under the Apache License, Version 2.0.
|
||||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
// 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 MIRROR_JOINT_DATA = true;
|
||||||
var MIRRORED_ENTITY_SCRIPT_URL = Script.resolvePath('mirroredEntity.js');
|
var MIRRORED_ENTITY_SCRIPT_URL = Script.resolvePath('mirroredEntity.js');
|
||||||
var FREEZE_TOGGLER_SCRIPT_URL = Script.resolvePath('freezeToggler.js?' + Math.random(0, 1000))
|
var FREEZE_TOGGLER_SCRIPT_URL = Script.resolvePath('freezeToggler.js?' + Math.random(0, 1000))
|
||||||
var THROTTLE = false;
|
var THROTTLE = true;
|
||||||
var THROTTLE_RATE = 100;
|
var THROTTLE_RATE = 100;
|
||||||
var doppelgangers = [];
|
var doppelgangers = [];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function Doppelganger(avatar) {
|
function Doppelganger(avatar) {
|
||||||
this.initialProperties = {
|
this.initialProperties = {
|
||||||
name: 'Hifi-Doppelganger',
|
name: 'Hifi-Doppelganger',
|
||||||
type: 'Model',
|
type: 'Model',
|
||||||
modelURL: TEST_MODEL_URL,
|
modelURL: avatarModelURL,
|
||||||
// dimensions: getAvatarDimensions(avatar),
|
// dimensions: getAvatarDimensions(avatar),
|
||||||
position: putDoppelgangerAcrossFromAvatar(this, avatar),
|
position: matchBasePosition(),
|
||||||
rotation: rotateDoppelgangerTowardAvatar(this, avatar),
|
rotation: matchBaseRotation(),
|
||||||
collisionsWillMove: false,
|
collisionsWillMove: false,
|
||||||
ignoreForCollisions: false,
|
ignoreForCollisions: false,
|
||||||
script: FREEZE_TOGGLER_SCRIPT_URL,
|
// script: FREEZE_TOGGLER_SCRIPT_URL,
|
||||||
userData: JSON.stringify({
|
userData: JSON.stringify({
|
||||||
grabbableKey: {
|
grabbableKey: {
|
||||||
grabbable: false,
|
grabbable: false,
|
||||||
|
@ -63,11 +92,36 @@
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
this.id = createDoppelgangerEntity(this);
|
this.id = createDoppelgangerEntity(this.initialProperties);
|
||||||
this.avatar = avatar;
|
this.avatar = avatar;
|
||||||
return this;
|
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) {
|
function getJointData(avatar) {
|
||||||
var allJointData = [];
|
var allJointData = [];
|
||||||
var jointNames = MyAvatar.jointNames;
|
var jointNames = MyAvatar.jointNames;
|
||||||
|
@ -86,14 +140,16 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function setJointData(doppelganger, relativeXforms) {
|
function setJointData(doppelganger, relativeXforms) {
|
||||||
|
print('setting joint data for ' + doppelganger.id)
|
||||||
var jointRotations = [];
|
var jointRotations = [];
|
||||||
var i, l = relativeXforms.length;
|
var i, l = relativeXforms.length;
|
||||||
for (i = 0; i < l; i++) {
|
for (i = 0; i < l; i++) {
|
||||||
jointRotations.push(relativeXforms[i].rot);
|
jointRotations.push(relativeXforms[i].rot);
|
||||||
}
|
}
|
||||||
var setJointSuccess = Entities.setAbsoluteJointRotationsInObjectFrame(doppelganger.id, jointRotations);
|
var setJointSuccess = Entities.setAbsoluteJointRotationsInObjectFrame(doppelganger.id, jointRotations);
|
||||||
// print('SUCCESS SETTING JOINTS?' + setJointSuccess + "for " +doppelganger.id)
|
print('JOINT ROTATIONS:: ' + JSON.stringify(jointRotations));
|
||||||
return true;
|
print('SUCCESS SETTING JOINTS?' + setJointSuccess + "for " + doppelganger.id)
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// maps joint names to their mirrored joint
|
// maps joint names to their mirrored joint
|
||||||
|
@ -344,16 +400,12 @@
|
||||||
return new Doppelganger(avatar);
|
return new Doppelganger(avatar);
|
||||||
}
|
}
|
||||||
|
|
||||||
function createDoppelgangerEntity(doppelganger) {
|
function createDoppelgangerEntity(initialProperties) {
|
||||||
return Entities.addEntity(doppelganger.initialProperties);
|
return Entities.addEntity(initialProperties);
|
||||||
}
|
}
|
||||||
|
|
||||||
function putDoppelgangerAcrossFromAvatar(doppelganger, avatar) {
|
function matchBasePosition() {
|
||||||
var avatarRot = Quat.fromPitchYawRollDegrees(0, avatar.bodyYaw, 0.0);
|
|
||||||
var position;
|
|
||||||
|
|
||||||
var ids = Entities.findEntities(MyAvatar.position, 20);
|
var ids = Entities.findEntities(MyAvatar.position, 20);
|
||||||
var hasBase = false;
|
|
||||||
for (var i = 0; i < ids.length; i++) {
|
for (var i = 0; i < ids.length; i++) {
|
||||||
var entityID = ids[i];
|
var entityID = ids[i];
|
||||||
var props = Entities.getEntityProperties(entityID, "name");
|
var props = Entities.getEntityProperties(entityID, "name");
|
||||||
|
@ -362,18 +414,12 @@
|
||||||
var details = Entities.getEntityProperties(entityID, ["position", "dimensions"]);
|
var details = Entities.getEntityProperties(entityID, ["position", "dimensions"]);
|
||||||
details.position.y += getAvatarFootOffset();
|
details.position.y += getAvatarFootOffset();
|
||||||
details.position.y += details.dimensions.y / 2;
|
details.position.y += details.dimensions.y / 2;
|
||||||
position = details.position;
|
print('JBP BASE POSITION ' + JSON.stringify(details.position))
|
||||||
hasBase = true;
|
return details.position;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasBase === false) {
|
|
||||||
position = Vec3.sum(avatar.position, Vec3.multiply(1.5, Quat.getFront(avatarRot)));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return position;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getAvatarFootOffset() {
|
function getAvatarFootOffset() {
|
||||||
var data = getJointData();
|
var data = getJointData();
|
||||||
|
@ -404,14 +450,7 @@
|
||||||
return offset
|
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 ids = Entities.findEntities(MyAvatar.position, 20);
|
||||||
var hasBase = false;
|
var hasBase = false;
|
||||||
for (var i = 0; i < ids.length; i++) {
|
for (var i = 0; i < ids.length; i++) {
|
||||||
|
@ -420,30 +459,22 @@
|
||||||
var name = props.name;
|
var name = props.name;
|
||||||
if (name === "Hifi-Dressing-Room-Base") {
|
if (name === "Hifi-Dressing-Room-Base") {
|
||||||
var details = Entities.getEntityProperties(entityID, "rotation");
|
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() {
|
function connectDoppelgangerUpdates() {
|
||||||
Script.update.connect(updateDoppelganger);
|
Script.update.connect(updateDoppelganger);
|
||||||
isConnected = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function disconnectDoppelgangerUpdates() {
|
function disconnectDoppelgangerUpdates() {
|
||||||
|
|
||||||
if (isConnected === true) {
|
|
||||||
print('SHOULD DISCONNECT')
|
|
||||||
Script.update.disconnect(updateDoppelganger);
|
Script.update.disconnect(updateDoppelganger);
|
||||||
}
|
}
|
||||||
isConnected = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
var sinceLastUpdate = 0;
|
var sinceLastUpdate = 0;
|
||||||
|
|
||||||
|
@ -472,12 +503,16 @@
|
||||||
absoluteXforms = mirroredAbsoluteXforms;
|
absoluteXforms = mirroredAbsoluteXforms;
|
||||||
}
|
}
|
||||||
var relativeXforms = buildRelativeXformsFromAbsoluteXforms(absoluteXforms);
|
var relativeXforms = buildRelativeXformsFromAbsoluteXforms(absoluteXforms);
|
||||||
|
// print('DOPPELGANGERS:::: ' + doppelgangers.length);
|
||||||
|
// print('first doppel id:: ' + doppelgangers[0].id);
|
||||||
doppelgangers.forEach(function(doppelganger) {
|
doppelgangers.forEach(function(doppelganger) {
|
||||||
setJointData(doppelganger, relativeXforms);
|
setJointData(doppelganger, relativeXforms);
|
||||||
});
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function makeDoppelgangerForMyAvatar() {
|
function makeDoppelgangerForMyAvatar() {
|
||||||
|
doppelgangers = [];
|
||||||
var doppelganger = createDoppelganger(MyAvatar);
|
var doppelganger = createDoppelganger(MyAvatar);
|
||||||
doppelgangers.push(doppelganger);
|
doppelgangers.push(doppelganger);
|
||||||
connectDoppelgangerUpdates();
|
connectDoppelgangerUpdates();
|
||||||
|
@ -515,7 +550,6 @@
|
||||||
}
|
}
|
||||||
if (parsedMessage.action === 'unfreeze') {
|
if (parsedMessage.action === 'unfreeze') {
|
||||||
print('ACTUAL UNFREEZE')
|
print('ACTUAL UNFREEZE')
|
||||||
|
|
||||||
connectDoppelgangerUpdates();
|
connectDoppelgangerUpdates();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -657,14 +691,15 @@
|
||||||
|
|
||||||
|
|
||||||
function cleanup() {
|
function cleanup() {
|
||||||
if (isConnected === true) {
|
|
||||||
disconnectDoppelgangerUpdates();
|
Script.update.disconnect(updateDoppelganger);
|
||||||
}
|
|
||||||
|
|
||||||
doppelgangers.forEach(function(doppelganger) {
|
doppelgangers.forEach(function(doppelganger) {
|
||||||
print('DOPPELGANGER' + doppelganger.id)
|
print('DELETING DOPPELGANGER' + doppelganger.id)
|
||||||
Entities.deleteEntity(doppelganger.id);
|
Entities.deleteEntity(doppelganger.id);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
doppelgangers = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
return new DressingRoom();
|
return new DressingRoom();
|
||||||
|
|
Loading…
Reference in a new issue