end of the road

This commit is contained in:
James B. Pollack 2016-03-25 19:26:01 -07:00
parent 4613c10fe9
commit fc0c24ab65

View file

@ -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();
});