mirror of
https://github.com/lubosz/overte.git
synced 2025-04-25 01:23:57 +02:00
Added disable hand touch for entityID
This commit is contained in:
parent
84dac94379
commit
82a3b73de8
3 changed files with 50 additions and 5 deletions
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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");
|
||||
|
|
Loading…
Reference in a new issue