saving work

This commit is contained in:
Dante Ruiz 2017-11-03 17:14:27 -07:00
parent 35343da281
commit 539cf35f30
4 changed files with 74 additions and 3 deletions

View file

@ -233,7 +233,7 @@ void LaserPointer::setLaserLength(const float laserLength) {
});
}
void LaserPointer::setLockEndUUID(QUuid objectID, const bool isOverlay) {
void LaserPointer::setLockEndUUID(QUuid objectID, const bool isOverlay, const glm::mat4& offset) {
withWriteLock([&] {
_objectLockEnd = std::pair<QUuid, bool>(objectID, isOverlay);
});

View file

@ -74,7 +74,7 @@ public:
void setPrecisionPicking(const bool precisionPicking);
void setLaserLength(const float laserLength);
void setLockEndUUID(QUuid objectID, const bool isOverlay);
void setLockEndUUID(QUuid objectID, const bool isOverlay, const glm::mat4& offset = glm::mat4());
void setIgnoreItems(const QVector<QUuid>& ignoreItems) const;
void setIncludeItems(const QVector<QUuid>& includeItems) const;

View file

@ -19,6 +19,7 @@
Script.include("/~/system/libraries/controllerDispatcherUtils.js");
Script.include("/~/system/libraries/controllers.js");
Script.include("/~/system/libraries/Xform.hs");
(function() {
var PICK_WITH_HAND_RAY = true;
@ -113,10 +114,42 @@ Script.include("/~/system/libraries/controllers.js");
];
var MARGIN = 25;
function TargetObject(entityID) {
this.entityID = entityID;
this.entityProps = null;
this.parentID = null;
this.parentProps = [];
this.childrenProps = [];
this.parentsCollisionStatus = [];
this.childrenCollisionStatus = [];
this.madeDynamic = null;
this.parentEntityProps = null;
this.makeDynamic = function() {
};
this.saveCollisionStatus = function() {
};
this.restoreEntitiesProperties = function() {
};
this.getTargetEntity = function() {
var parentPropsLength = this.parentProps.length;
if (parentPropsLength !== 0) {
return this.parentProps[parentPropsLength].id;
}
return this.entityID;
};
}
function FarActionGrabEntity(hand) {
this.hand = hand;
this.grabbedThingID = null;
this.targetObject = null;
this.actionID = null; // action this script created...
this.entityToLockOnto = null;
this.entityWithContextOverlay = false;
this.contextOverlayTimer = false;
this.previousCollisionStatus = false;
@ -158,7 +191,8 @@ Script.include("/~/system/libraries/controllers.js");
LaserPointers.enableLaserPointer(laserPointerID);
LaserPointers.setRenderState(laserPointerID, mode);
if (this.distanceHolding || this.distanceRotating) {
LaserPointers.setLockEndUUID(laserPointerID, this.grabbedThingID, this.grabbedIsOverlay);
// calculate offset
LaserPointers.setLockEndUUID(laserPointerID, this.entityToLockOnto, this.grabbedIsOverlay);
} else {
LaserPointers.setLockEndUUID(laserPointerID, null, false);
}
@ -351,6 +385,7 @@ Script.include("/~/system/libraries/controllers.js");
}
this.actionID = null;
this.grabbedThingID = null;
this.entityToLockOnto = null;
};
this.updateRecommendedArea = function() {
@ -497,17 +532,24 @@ Script.include("/~/system/libraries/controllers.js");
if (rayPickInfo.type === RayPick.INTERSECTED_ENTITY) {
if (controllerData.triggerClicks[this.hand]) {
var entityID = rayPickInfo.objectID;
this.entityToLockOnto = entityID;
var targetProps = Entities.getEntityProperties(entityID, [
"dynamic", "shapeType", "position",
"rotation", "dimensions", "density",
"userData", "locked", "type"
]);
this.targetObject = new TargetObject(entityID);
if (entityID !== this.entityWithContextOverlay) {
this.destroyContextOverlay();
}
if (entityIsGrabbable(targetProps)) {
var groupRootProps = findGroupParent(controllerData, targetProps);
if (entityIsGrabbable(groupRootProps)) {
targetProps = groupRootProps;
entityID = targetProps.id;
}
if (!entityIsDistanceGrabbable(targetProps)) {
targetProps.dynamic = true;
this.previousCollisionStatus = targetProps.collisionless;

View file

@ -35,12 +35,14 @@
propsArePhysical:true,
controllerDispatcherPluginsNeedSort:true,
projectOntoXYPlane:true,
getChildrenProps:true,
projectOntoEntityXYPlane:true,
projectOntoOverlayXYPlane:true,
entityHasActions:true,
ensureDynamic:true,
findGroupParent:true,
BUMPER_ON_VALUE:true,
getEntityParents:true,
findHandChildEntities:true,
TEAR_AWAY_DISTANCE:true,
TEAR_AWAY_COUNT:true,
@ -306,6 +308,33 @@ findGroupParent = function (controllerData, targetProps) {
return targetProps;
};
getChildrenProps = function(entityID) {
var childrenProps = [];
var childrenIDs = Entities.getChildrenIDs(entityID);
for (var index = 0; index < childrenIDs.length; index++) {
var childProps = Entities.getEntityProperties(childrenIDs[index]);
childrenProps.push(childProps);
}
return childrenProps;
};
getEntityParents = function(targetProps) {
var parentProperties = [];
while (targetProps.parentID &&
targetProps.parentID !== Uuid.NULL &&
Entities.getNestableType(targetProps.parentID) == "entity") {
var parentProps = Entities.getEntityProperties(targetProps.parentID, DISPATCHER_PROPERTIES);
if (!parentProps) {
break;
}
parentProps.id = targetProps.parentID;
targetProps = parentProps;
parentProperties.push(parentProps);
}
return parentProperties;
};
findHandChildEntities = function(hand) {
// find children of avatar's hand joint