mirror of
https://github.com/overte-org/overte.git
synced 2025-04-20 03:24:00 +02:00
fix bug: second collision event with bad data
This commit is contained in:
parent
b7cd8827f9
commit
8cf7aee009
3 changed files with 14 additions and 3 deletions
|
@ -1060,7 +1060,10 @@ void EntityTreeRenderer::entityCollisionWithEntity(const EntityItemID& idA, cons
|
|||
playEntityCollisionSound(entityB, collision);
|
||||
emit collisionWithEntity(idB, idA, collision);
|
||||
if (_entitiesScriptEngine) {
|
||||
_entitiesScriptEngine->callEntityScriptMethod(idB, "collisionWithEntity", idA, collision);
|
||||
// since we're swapping A and B we need to send the inverted collision
|
||||
Collision invertedCollision(collision);
|
||||
invertedCollision.invert();
|
||||
_entitiesScriptEngine->callEntityScriptMethod(idB, "collisionWithEntity", idA, invertedCollision);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -742,6 +742,12 @@ void collisionFromScriptValue(const QScriptValue &object, Collision& collision)
|
|||
// TODO: implement this when we know what it means to accept collision events from JS
|
||||
}
|
||||
|
||||
void Collision::invert() {
|
||||
std::swap(idA, idB);
|
||||
contactPoint += penetration;
|
||||
penetration *= -1.0f;
|
||||
}
|
||||
|
||||
QScriptValue quuidToScriptValue(QScriptEngine* engine, const QUuid& uuid) {
|
||||
if (uuid.isNull()) {
|
||||
return QScriptValue::NullValue;
|
||||
|
|
|
@ -142,11 +142,13 @@ public:
|
|||
const glm::vec3& cPenetration, const glm::vec3& velocityChange)
|
||||
: type(cType), idA(cIdA), idB(cIdB), contactPoint(cPoint), penetration(cPenetration), velocityChange(velocityChange) { }
|
||||
|
||||
void invert(); // swap A and B
|
||||
|
||||
ContactEventType type;
|
||||
QUuid idA;
|
||||
QUuid idB;
|
||||
glm::vec3 contactPoint;
|
||||
glm::vec3 penetration;
|
||||
glm::vec3 contactPoint; // on B in world-frame
|
||||
glm::vec3 penetration; // from B towards A in world-frame
|
||||
glm::vec3 velocityChange;
|
||||
};
|
||||
Q_DECLARE_METATYPE(Collision)
|
||||
|
|
Loading…
Reference in a new issue