mirror of
https://github.com/Armored-Dragon/overte.git
synced 2025-03-11 16:13:16 +01:00
use collision masks to prevent grab-bootstrap
This commit is contained in:
parent
6c49d81475
commit
00e5d040a2
1 changed files with 13 additions and 9 deletions
|
@ -106,7 +106,7 @@ var GRABBABLE_PROPERTIES = [
|
|||
"position",
|
||||
"rotation",
|
||||
"gravity",
|
||||
"ignoreForCollisions",
|
||||
"collisionMask",
|
||||
"collisionsWillMove",
|
||||
"locked",
|
||||
"name"
|
||||
|
@ -117,7 +117,6 @@ var GRAB_USER_DATA_KEY = "grabKey"; // shared with grab.js
|
|||
|
||||
var DEFAULT_GRABBABLE_DATA = {
|
||||
grabbable: true,
|
||||
invertSolidWhileHeld: false
|
||||
};
|
||||
|
||||
|
||||
|
@ -164,6 +163,14 @@ var POINT_HAND_STATES = [STATE_NEAR_TRIGGER, STATE_CONTINUE_NEAR_TRIGGER, STATE_
|
|||
var FAR_GRASP_HAND_STATES = [STATE_DISTANCE_HOLDING, STATE_CONTINUE_DISTANCE_HOLDING];
|
||||
// otherwise grasp
|
||||
|
||||
var COLLISION_GROUP_STATIC = 0x01; // bit 0
|
||||
var COLLISION_GROUP_DYNAMIC = 0x02; // bit 1
|
||||
var COLLISION_GROUP_KINEMATIC = 0x04; // bit 2
|
||||
var COLLISION_GROUP_MY_AVATAR = 0x08; // bit 3
|
||||
var COLLISION_GROUP_OTHER_AVATAR = 0x10; // bit 4
|
||||
var COLLISION_MASK_WHILE_GRABBED = COLLISION_GROUP_DYNAMIC | COLLISION_GROUP_OTHER_AVATAR;
|
||||
|
||||
|
||||
function stateToName(state) {
|
||||
switch (state) {
|
||||
case STATE_OFF:
|
||||
|
@ -1823,7 +1830,6 @@ function MyController(hand) {
|
|||
|
||||
this.activateEntity = function(entityID, grabbedProperties) {
|
||||
var grabbableData = getEntityCustomData(GRABBABLE_DATA_KEY, entityID, DEFAULT_GRABBABLE_DATA);
|
||||
var invertSolidWhileHeld = grabbableData["invertSolidWhileHeld"];
|
||||
var data = getEntityCustomData(GRAB_USER_DATA_KEY, entityID, {});
|
||||
data["activated"] = true;
|
||||
data["avatarId"] = MyAvatar.sessionUUID;
|
||||
|
@ -1831,18 +1837,16 @@ function MyController(hand) {
|
|||
// zero gravity and set ignoreForCollisions in a way that lets us put them back, after all grabs are done
|
||||
if (data["refCount"] == 1) {
|
||||
data["gravity"] = grabbedProperties.gravity;
|
||||
data["ignoreForCollisions"] = grabbedProperties.ignoreForCollisions;
|
||||
data["collisionMask"] = grabbedProperties.collisionMask;
|
||||
data["collisionsWillMove"] = grabbedProperties.collisionsWillMove;
|
||||
var whileHeldProperties = {
|
||||
gravity: {
|
||||
x: 0,
|
||||
y: 0,
|
||||
z: 0
|
||||
}
|
||||
},
|
||||
collisionMask: COLLISION_MASK_WHILE_GRABBED & grabbedProperties.collisionMask
|
||||
};
|
||||
if (invertSolidWhileHeld) {
|
||||
whileHeldProperties["ignoreForCollisions"] = !grabbedProperties.ignoreForCollisions;
|
||||
}
|
||||
Entities.editEntity(entityID, whileHeldProperties);
|
||||
}
|
||||
|
||||
|
@ -1857,7 +1861,7 @@ function MyController(hand) {
|
|||
if (data["refCount"] < 1) {
|
||||
Entities.editEntity(entityID, {
|
||||
gravity: data["gravity"],
|
||||
ignoreForCollisions: data["ignoreForCollisions"],
|
||||
collisionMask: data["collisionMask"],
|
||||
collisionsWillMove: data["collisionsWillMove"]
|
||||
});
|
||||
data = null;
|
||||
|
|
Loading…
Reference in a new issue