mirror of
https://github.com/AleziaKurdis/overte.git
synced 2025-04-17 00:06:47 +02:00
use strings for JS collisionGroup API
This commit is contained in:
parent
222398e5cc
commit
c52c543ab8
4 changed files with 65 additions and 9 deletions
|
@ -163,12 +163,9 @@ 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;
|
||||
// collision masks are specified by comma-separated list of group names
|
||||
// the possible list of names is: static, dynamic, kinematic, myAvatar, otherAvatar
|
||||
var COLLISION_MASK_WHILE_GRABBED = "dynamic,otherAvatar";
|
||||
|
||||
|
||||
function stateToName(state) {
|
||||
|
@ -1845,7 +1842,7 @@ function MyController(hand) {
|
|||
y: 0,
|
||||
z: 0
|
||||
},
|
||||
collisionMask: COLLISION_MASK_WHILE_GRABBED & grabbedProperties.collisionMask
|
||||
"collisionMask": COLLISION_MASK_WHILE_GRABBED
|
||||
};
|
||||
Entities.editEntity(entityID, whileHeldProperties);
|
||||
}
|
||||
|
|
|
@ -116,6 +116,59 @@ void buildStringToShapeTypeLookup() {
|
|||
addShapeType(SHAPE_TYPE_CYLINDER_Z);
|
||||
}
|
||||
|
||||
QString getCollisionGroupAsString(uint8_t group) {
|
||||
switch (group) {
|
||||
case USER_COLLISION_GROUP_DYNAMIC:
|
||||
return "dynamic";
|
||||
case USER_COLLISION_GROUP_STATIC:
|
||||
return "static";
|
||||
case USER_COLLISION_GROUP_KINEMATIC:
|
||||
return "kinematic";
|
||||
case USER_COLLISION_GROUP_MY_AVATAR:
|
||||
return "myAvatar";
|
||||
case USER_COLLISION_GROUP_OTHER_AVATAR:
|
||||
return "otherAvatar";
|
||||
};
|
||||
return "";
|
||||
}
|
||||
|
||||
uint8_t getCollisionGroupAsBitMask(const QStringRef& name) {
|
||||
if (0 == name.compare("dynamic")) {
|
||||
return USER_COLLISION_GROUP_DYNAMIC;
|
||||
} else if (0 == name.compare("static")) {
|
||||
return USER_COLLISION_GROUP_STATIC;
|
||||
} else if (0 == name.compare("kinematic")) {
|
||||
return USER_COLLISION_GROUP_KINEMATIC;
|
||||
} else if (0 == name.compare("myAvatar")) {
|
||||
return USER_COLLISION_GROUP_MY_AVATAR;
|
||||
} else if (0 == name.compare("otherAvatar")) {
|
||||
return USER_COLLISION_GROUP_OTHER_AVATAR;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
QString EntityItemProperties::getCollisionMaskAsString() const {
|
||||
QString maskString("");
|
||||
for (int i = 0; i < NUM_USER_COLLISION_GROUPS; ++i) {
|
||||
uint8_t group = 0x01 << i;
|
||||
if (group & _collisionMask) {
|
||||
maskString.append(getCollisionGroupAsString(group));
|
||||
maskString.append(',');
|
||||
}
|
||||
}
|
||||
return maskString;
|
||||
}
|
||||
|
||||
void EntityItemProperties::setCollisionMaskFromString(const QString& maskString) {
|
||||
QVector<QStringRef> groups = maskString.splitRef(',');
|
||||
uint8_t mask = 0x00;
|
||||
for (auto group : groups) {
|
||||
mask |= getCollisionGroupAsBitMask(group);
|
||||
}
|
||||
_collisionMask = mask;
|
||||
_collisionMaskChanged = true;
|
||||
}
|
||||
|
||||
QString EntityItemProperties::getShapeTypeAsString() const {
|
||||
if (_shapeType < sizeof(shapeTypeNames) / sizeof(char *))
|
||||
return QString(shapeTypeNames[_shapeType]);
|
||||
|
@ -318,7 +371,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool
|
|||
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_ANGULAR_DAMPING, angularDamping);
|
||||
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_VISIBLE, visible);
|
||||
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_IGNORE_FOR_COLLISIONS, ignoreForCollisions);
|
||||
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_COLLISION_MASK, collisionMask);
|
||||
COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_COLLISION_MASK, collisionMask, getCollisionMaskAsString());
|
||||
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_COLLISIONS_WILL_MOVE, collisionsWillMove);
|
||||
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_HREF, href);
|
||||
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_DESCRIPTION, description);
|
||||
|
@ -540,7 +593,7 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool
|
|||
COPY_PROPERTY_FROM_QSCRIPTVALUE(glowLevel, float, setGlowLevel);
|
||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(localRenderAlpha, float, setLocalRenderAlpha);
|
||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(ignoreForCollisions, bool, setIgnoreForCollisions);
|
||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(collisionMask, uint8_t, setCollisionMask);
|
||||
COPY_PROPERTY_FROM_QSCRITPTVALUE_ENUM(collisionMask, CollisionMask);
|
||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(collisionsWillMove, bool, setCollisionsWillMove);
|
||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(isSpotlight, bool, setIsSpotlight);
|
||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(intensity, float, setIntensity);
|
||||
|
|
|
@ -274,6 +274,10 @@ public:
|
|||
void setJointRotationsDirty() { _jointRotationsSetChanged = true; _jointRotationsChanged = true; }
|
||||
void setJointTranslationsDirty() { _jointTranslationsSetChanged = true; _jointTranslationsChanged = true; }
|
||||
|
||||
protected:
|
||||
QString getCollisionMaskAsString() const;
|
||||
void setCollisionMaskFromString(const QString& maskString);
|
||||
|
||||
private:
|
||||
QUuid _id;
|
||||
bool _idSet;
|
||||
|
|
|
@ -82,4 +82,6 @@ const uint8_t ENTITY_COLLISION_MASK_DEFAULT =
|
|||
|
||||
const uint8_t USER_COLLISION_MASK_AVATARS = USER_COLLISION_GROUP_MY_AVATAR | USER_COLLISION_GROUP_OTHER_AVATAR;
|
||||
|
||||
const int NUM_USER_COLLISION_GROUPS = 5;
|
||||
|
||||
#endif // hifi_PhysicsCollisionGroups_h
|
||||
|
|
Loading…
Reference in a new issue