Added disable hand touch for entityID

This commit is contained in:
luiscuenca 2018-07-17 07:06:48 -07:00
parent 84dac94379
commit 82a3b73de8
3 changed files with 50 additions and 5 deletions

View file

@ -272,6 +272,14 @@ void MyAvatar::requestEnableHandTouch() {
emit shouldDisableHandTouchChanged(_disableHandTouchCount > 0);
}
void MyAvatar::disableHandTouchForID(const QString& entityID) {
emit disableHandTouchForIDChanged(entityID, true);
}
void MyAvatar::enableHandTouchForID(const QString& entityID) {
emit disableHandTouchForIDChanged(entityID, false);
}
void MyAvatar::registerMetaTypes(ScriptEnginePointer engine) {
QScriptValue value = engine->newQObject(this, QScriptEngine::QtOwnership, QScriptEngine::ExcludeDeleteLater | QScriptEngine::ExcludeChildObjects);
engine->globalObject().setProperty("MyAvatar", value);

View file

@ -513,6 +513,16 @@ public:
* @function MyAvatar.requestDisableHandTouch
*/
Q_INVOKABLE void requestDisableHandTouch();
/**jsdoc
* @function MyAvatar.disableHandTouchForID
* @param {string} entityId
*/
Q_INVOKABLE void disableHandTouchForID(const QString& entityId);
/**jsdoc
* @function MyAvatar.enableHandTouchForID
* @param {string} entityId
*/
Q_INVOKABLE void enableHandTouchForID(const QString& entityId);
bool useAdvancedMovementControls() const { return _useAdvancedMovementControls.get(); }
void setUseAdvancedMovementControls(bool useAdvancedMovementControls)
@ -1406,6 +1416,14 @@ signals:
*/
void shouldDisableHandTouchChanged(bool shouldDisable);
/**jsdoc
* @function MyAvatar.handTouchForIDChanged
* @param {string} entityID
* @param {boolean} disable
* @returns {Signal}
*/
void disableHandTouchForIDChanged(const QString& entityID, bool disable);
private slots:
void leaveDomain();

View file

@ -19,8 +19,9 @@
var handTouchEnabled = true;
var MSECONDS_AFTER_LOAD = 2000;
var updateFingerWithIndex = 0;
// Keys to access finger data
var untouchableEntities = [];
// Keys to access finger data
var fingerKeys = ["pinky", "ring", "middle", "index", "thumb"];
// Additionally close the hands to achieve a grabbing effect
@ -623,6 +624,7 @@
RayPick.setPrecisionPicking(rayPicks[side][finger], true);
}
}
function activateNextRay(side, index) {
var nextIndex = (index < fingerKeys.length-1) ? index + 1 : 0;
for (var i = 0; i < fingerKeys.length; i++) {
@ -683,7 +685,11 @@
// Update the intersection of only one finger at a time
var finger = fingerKeys[updateFingerWithIndex];
var grabbables = Entities.findEntities(spherePos, dist);
var nearbyEntities = Entities.findEntities(spherePos, dist);
// Filter the entities that are allowed to be touched
var touchableEntities = nearbyEntities.filter(function (id) {
return untouchableEntities.indexOf(id) == -1;
});
var intersection;
if (rayPicks[side][finger] !== undefined) {
intersection = RayPick.getPrevRayPickResult(rayPicks[side][finger]);
@ -692,8 +698,8 @@
var animationSteps = defaultAnimationSteps;
var newFingerData = dataDefault[side][finger];
var isAbleToGrab = false;
if (grabbables.length > 0) {
RayPick.setIncludeItems(rayPicks[side][finger], grabbables);
if (touchableEntities.length > 0) {
RayPick.setIncludeItems(rayPicks[side][finger], touchableEntities);
if (intersection === undefined) {
return;
@ -864,6 +870,19 @@
handTouchEnabled = !shouldDisable;
});
MyAvatar.disableHandTouchForIDChanged.connect(function (entityID, disable) {
var entityIndex = untouchableEntities.indexOf(entityID);
if (disable) {
if (entityIndex == -1) {
untouchableEntities.push(entityID);
}
} else {
if (entityIndex != -1) {
untouchableEntities.splice(entityIndex, 1);
}
}
});
MyAvatar.onLoadComplete.connect(function () {
// Sometimes the rig is not ready when this signal is trigger
console.log("avatar loaded");