mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 17:58:45 +02:00
end of the road
This commit is contained in:
parent
4613c10fe9
commit
fc0c24ab65
1 changed files with 675 additions and 686 deletions
|
@ -522,10 +522,10 @@
|
|||
connectDoppelgangerUpdates();
|
||||
}
|
||||
|
||||
function subscribeToWearableMessages() {
|
||||
Messages.subscribe('Hifi-Doppelganger-Wearable');
|
||||
Messages.messageReceived.connect(handleWearableMessages);
|
||||
}
|
||||
// function subscribeToWearableMessages() {
|
||||
// Messages.subscribe('Hifi-Doppelganger-Wearable');
|
||||
// Messages.messageReceived.connect(handleWearableMessages);
|
||||
// }
|
||||
|
||||
function subscribeToFreezeMessages() {
|
||||
Messages.subscribe('Hifi-Doppelganger-Freeze');
|
||||
|
@ -561,136 +561,31 @@
|
|||
|
||||
var wearablePairs = [];
|
||||
|
||||
function handleWearableMessages(channel, message, sender) {
|
||||
if (channel !== 'Hifi-Doppelganger-Wearable' || 'Hifi-Doppelganger-Wearable-Avatar') {
|
||||
return;
|
||||
}
|
||||
|
||||
if (sender !== MyAvatar.sessionUUID) {
|
||||
return;
|
||||
}
|
||||
|
||||
var parsedMessage = null;
|
||||
// function getMirrorEntityForBaseEntity(baseEntity) {
|
||||
// var result = wearablePairs.filter(function(obj) {
|
||||
// return obj.baseEntity === baseEntity;
|
||||
// });
|
||||
// if (result.length === 0) {
|
||||
// return false;
|
||||
// } else {
|
||||
// return result[0].mirrorEntity
|
||||
// }
|
||||
// }
|
||||
|
||||
try {
|
||||
parsedMessage = JSON.parse(message);
|
||||
} catch (e) {
|
||||
print('error parsing wearable message');
|
||||
}
|
||||
print('parsed message!!!')
|
||||
// function getBaseEntityForMirrorEntity(mirrorEntity) {
|
||||
// var result = wearablePairs.filter(function(obj) {
|
||||
// return obj.mirrorEntity === mirrorEntity;
|
||||
// });
|
||||
// if (result.length === 0) {
|
||||
// return false;
|
||||
// } else {
|
||||
// return result[0].baseEntity
|
||||
// }
|
||||
// }
|
||||
|
||||
if (channel === 'Hifi-Doppelganger-Wearable') {
|
||||
mirrorEntitiesForDoppelganger(doppelgangers[0], parsedMessage);
|
||||
}
|
||||
if (channel === 'Hifi-Doppelganger-Wearable') {
|
||||
mirrorEntitiesForAvatar(parsedMessge);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function mirrorEntitiesForDoppelganger(doppelganger, parsedMessage) {
|
||||
var doppelgangerProps = Entities.getEntityProperties(doppelganger.id);
|
||||
|
||||
var action = parsedMessage.action;
|
||||
print('IN MIRROR ENTITIES CALL' + action)
|
||||
|
||||
var baseEntity = parsedMessage.baseEntity;
|
||||
|
||||
var wearableProps = Entities.getEntityProperties(baseEntity);
|
||||
|
||||
print('WEARABLE PROPS::')
|
||||
delete wearableProps.id;
|
||||
delete wearableProps.created;
|
||||
delete wearableProps.age;
|
||||
delete wearableProps.ageAsText;
|
||||
//delete wearableProps.position;
|
||||
// add to dg
|
||||
// add to avatar
|
||||
// moved item on dg
|
||||
// moved item on avatar
|
||||
// remove item from dg
|
||||
// remove item from avatar
|
||||
|
||||
var joint = wearableProps.parentJointIndex;
|
||||
if (action === 'add') {
|
||||
print('IN DOPPELGANGER ADD');
|
||||
|
||||
wearableProps.parentID = doppelganger.id;
|
||||
wearableProps.parentJointIndex = joint;
|
||||
|
||||
//create a new one
|
||||
wearableProps.script = MIRRORED_ENTITY_SCRIPT_URL;
|
||||
wearableProps.name = 'Hifi-Doppelganger-Mirrored-Entity';
|
||||
wearableProps.userData = JSON.stringify({
|
||||
doppelgangerKey: {
|
||||
baseEntity: baseEntity,
|
||||
doppelganger: doppelganger.id
|
||||
}
|
||||
})
|
||||
var mirrorEntity = Entities.addEntity(wearableProps);
|
||||
|
||||
var mirrorEntityProps = Entities.getEntityProperties(mirrorEntity)
|
||||
print('MIRROR PROPS::' + JSON.stringify(mirrorEntityProps))
|
||||
var wearablePair = {
|
||||
baseEntity: baseEntity,
|
||||
mirrorEntity: mirrorEntity
|
||||
}
|
||||
|
||||
wearablePairs.push(wearablePair);
|
||||
}
|
||||
|
||||
if (action === 'update') {
|
||||
wearableProps.parentID = doppelganger.id;
|
||||
|
||||
var mirrorEntity = getMirrorEntityForBaseEntity(baseEntity);
|
||||
// print('MIRROR ENTITY, newPosition' + mirrorEntity + ":::" + JSON.stringify(newPosition))
|
||||
Entities.editEntity(mirrorEntity, wearableProps)
|
||||
}
|
||||
|
||||
if (action === 'remove') {
|
||||
Entities.deleteEntity(getMirrorEntityForBaseEntity(baseEntity))
|
||||
wearablePairs = wearablePairs.filter(function(obj) {
|
||||
return obj.baseEntity !== baseEntity;
|
||||
});
|
||||
}
|
||||
|
||||
if (action === 'updateBase') {
|
||||
//this gets called when the mirrored entity gets grabbed. now we move the
|
||||
var mirrorEntityProperties = Entities.getEntityProperties(message.mirrorEntity)
|
||||
var doppelgangerToMirrorEntity = Vec3.subtract(doppelgangerProps.position, mirrorEntityProperties.position);
|
||||
var newPosition = Vec3.sum(MyAvatar.position, doppelgangerToMirrorEntity);
|
||||
|
||||
delete mirrorEntityProperties.id;
|
||||
delete mirrorEntityProperties.created;
|
||||
delete mirrorEntityProperties.age;
|
||||
delete mirrorEntityProperties.ageAsText;
|
||||
mirrorEntityProperties.position = newPosition;
|
||||
mirrorEntityProperties.parentID = MyAvatar.sessionUUID;
|
||||
Entities.editEntity(message.baseEntity, mirrorEntityProperties);
|
||||
}
|
||||
}
|
||||
|
||||
function getMirrorEntityForBaseEntity(baseEntity) {
|
||||
var result = wearablePairs.filter(function(obj) {
|
||||
return obj.baseEntity === baseEntity;
|
||||
});
|
||||
if (result.length === 0) {
|
||||
return false;
|
||||
} else {
|
||||
return result[0].mirrorEntity
|
||||
}
|
||||
}
|
||||
|
||||
function getBaseEntityForMirrorEntity(mirrorEntity) {
|
||||
var result = wearablePairs.filter(function(obj) {
|
||||
return obj.mirrorEntity === mirrorEntity;
|
||||
});
|
||||
if (result.length === 0) {
|
||||
return false;
|
||||
} else {
|
||||
return result[0].baseEntity
|
||||
}
|
||||
}
|
||||
|
||||
var wearable;
|
||||
|
||||
|
@ -731,6 +626,96 @@
|
|||
wearable = Entities.addEntity(properties);
|
||||
}
|
||||
|
||||
|
||||
function updateEntityOnAvatar(entityOnAvatar, entityOnDoppelganger) {
|
||||
//this updates an entity on the avatar when you move one on the doppelganger.
|
||||
|
||||
//copy doppelganger entity properties to avatar but replace its parent with our avatar id. delete some things before we do that
|
||||
|
||||
var entityOnAvatarProps = Entities.getEntityProperties(entityOnDoppelganger)
|
||||
|
||||
delete entityOnAvatarProps.id;
|
||||
delete entityOnAvatarProps.created;
|
||||
delete entityOnAvatarProps.age;
|
||||
delete entityOnAvatarProps.ageAsText;
|
||||
|
||||
entityOnAvatarProps.parentID = MyAvatar.id;
|
||||
Entities.editEntity(entityOnAvatar, entityOnAvatarProps);
|
||||
}
|
||||
|
||||
function removeEntityFromAvatar(entityOnAvatar) {
|
||||
Entities.deleteEntity(entityOnAvatar);
|
||||
}
|
||||
|
||||
function addEntityToDoppelganger(entityToAdd,bestJointIndex) {
|
||||
|
||||
var entityToAddProps = Entities.getEntityProperties(entityToAdd);
|
||||
|
||||
entityToAddProps.parentID = doppelgangers[0].id;
|
||||
entityToAddProps.parentJointIndex =bestJointIndex;
|
||||
Entities.addEntity(entityToAddProps);
|
||||
|
||||
}
|
||||
|
||||
function updateEntityOnDoppelganger(entityOnAvatar, entityOnDoppelganger) {
|
||||
//this updates an entity on the doppelganger when you move one on the avatar.
|
||||
|
||||
//copy avatar entity properties to doppelganger but replace its parent with our doppelganger id. delete some things before we do that
|
||||
|
||||
var entityOnDoppelgangerProps = Entities.getEntityProperties(entityOnAvatar)
|
||||
|
||||
delete entityOnDoppelgangerProps.id;
|
||||
delete entityOnDoppelgangerProps.created;
|
||||
delete entityOnDoppelgangerProps.age;
|
||||
delete entityOnDoppelgangerProps.ageAsText;
|
||||
|
||||
entityOnDoppelgangerProps.parentID = doppelgangers[0].id;
|
||||
Entities.editEntity(entityOnDoppelganger, entityOnDoppelgangerProps);
|
||||
|
||||
}
|
||||
|
||||
function removeEntityFromDoppelganger(entityOnDoppelganger) {
|
||||
Entities.deleteEntity(entityOnDoppelganger);
|
||||
}
|
||||
|
||||
function checkIfWearableOnDoppelganger(grabbedEntity) {
|
||||
// when you drop an entity near a doppelganger...
|
||||
var allowedJoints = getEntityCustomData('wearable', grabbedEntity, DEFAULT_WEARABLE_DATA).joints;
|
||||
|
||||
var props = Entities.getEntityProperties(grabbedEntity, ["position", "parentID"]);
|
||||
//if the thing doesn't have a parent
|
||||
if (props.parentID === NULL_UUID) {
|
||||
var bestJointName = "";
|
||||
var bestJointIndex = -1;
|
||||
var bestJointDistance = 0;
|
||||
for (var jointName in allowedJoints) {
|
||||
//do this for the model
|
||||
var jointIndex = Entities.getJointIndex(doppelganger.id, jointName);
|
||||
var jointPosition = Entities.getJointPosition(doppelganger.id, jointIndex);
|
||||
var distanceFromJoint = Vec3.distance(jointPosition, props.position);
|
||||
if (distanceFromJoint < 0.4) {
|
||||
if (bestJointIndex == -1 || distanceFromJoint < bestJointDistance) {
|
||||
bestJointName = jointName;
|
||||
bestJointIndex = jointIndex;
|
||||
bestJointDistance = distanceFromJoint;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (bestJointIndex !== -1) {
|
||||
//this was dropped close to a valid joint on the doppelganger.
|
||||
addEntityToDoppelganger(grabbedEntity,bestJointIndex)
|
||||
} else {
|
||||
//this was dropped far from a valid joint on the doppelganger
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function handleReleaseMessagesFromGrabScript() {
|
||||
var grabbedEntity;
|
||||
checkIfWearableOnDoppelganger(grabbedEntity);
|
||||
}
|
||||
|
||||
function cleanup() {
|
||||
|
||||
Script.update.disconnect(updateDoppelganger);
|
||||
|
@ -746,5 +731,9 @@
|
|||
Entities.deleteEntity(wearable);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
return new DressingRoom();
|
||||
});
|
Loading…
Reference in a new issue