mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 08:49:05 +02:00
Fix collision pick scale not being used
This commit is contained in:
parent
e8ce152687
commit
84a2512f31
2 changed files with 12 additions and 12 deletions
|
@ -86,23 +86,23 @@ bool CollisionPick::isLoaded() const {
|
||||||
return !_mathPick.shouldComputeShapeInfo() || (_cachedResource && _cachedResource->isLoaded());
|
return !_mathPick.shouldComputeShapeInfo() || (_cachedResource && _cachedResource->isLoaded());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CollisionPick::getShapeInfoReady() {
|
bool CollisionPick::getShapeInfoReady(const CollisionRegion& pick) {
|
||||||
if (_mathPick.shouldComputeShapeInfo()) {
|
if (_mathPick.shouldComputeShapeInfo()) {
|
||||||
if (_cachedResource && _cachedResource->isLoaded()) {
|
if (_cachedResource && _cachedResource->isLoaded()) {
|
||||||
computeShapeInfo(_mathPick, *_mathPick.shapeInfo, _cachedResource);
|
computeShapeInfo(pick, *_mathPick.shapeInfo, _cachedResource);
|
||||||
_mathPick.loaded = true;
|
_mathPick.loaded = true;
|
||||||
} else {
|
} else {
|
||||||
_mathPick.loaded = false;
|
_mathPick.loaded = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
computeShapeInfoDimensionsOnly(_mathPick, *_mathPick.shapeInfo, _cachedResource);
|
computeShapeInfoDimensionsOnly(pick, *_mathPick.shapeInfo, _cachedResource);
|
||||||
_mathPick.loaded = true;
|
_mathPick.loaded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _mathPick.loaded;
|
return _mathPick.loaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CollisionPick::computeShapeInfoDimensionsOnly(CollisionRegion& pick, ShapeInfo& shapeInfo, QSharedPointer<GeometryResource> resource) {
|
void CollisionPick::computeShapeInfoDimensionsOnly(const CollisionRegion& pick, ShapeInfo& shapeInfo, QSharedPointer<GeometryResource> resource) {
|
||||||
ShapeType type = shapeInfo.getType();
|
ShapeType type = shapeInfo.getType();
|
||||||
glm::vec3 dimensions = pick.transform.getScale();
|
glm::vec3 dimensions = pick.transform.getScale();
|
||||||
QString modelURL = (resource ? resource->getURL().toString() : "");
|
QString modelURL = (resource ? resource->getURL().toString() : "");
|
||||||
|
@ -115,7 +115,7 @@ void CollisionPick::computeShapeInfoDimensionsOnly(CollisionRegion& pick, ShapeI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CollisionPick::computeShapeInfo(CollisionRegion& pick, ShapeInfo& shapeInfo, QSharedPointer<GeometryResource> resource) {
|
void CollisionPick::computeShapeInfo(const CollisionRegion& pick, ShapeInfo& shapeInfo, QSharedPointer<GeometryResource> resource) {
|
||||||
// This code was copied and modified from RenderableModelEntityItem::computeShapeInfo
|
// This code was copied and modified from RenderableModelEntityItem::computeShapeInfo
|
||||||
// TODO: Move to some shared code area (in entities-renderer? model-networking?)
|
// TODO: Move to some shared code area (in entities-renderer? model-networking?)
|
||||||
// after we verify this is working and do a diff comparison with RenderableModelEntityItem::computeShapeInfo
|
// after we verify this is working and do a diff comparison with RenderableModelEntityItem::computeShapeInfo
|
||||||
|
@ -393,9 +393,9 @@ PickResultPointer CollisionPick::getEntityIntersection(const CollisionRegion& pi
|
||||||
// Cannot compute result
|
// Cannot compute result
|
||||||
return std::make_shared<CollisionPickResult>(pick.toVariantMap(), std::vector<ContactTestResult>(), std::vector<ContactTestResult>());
|
return std::make_shared<CollisionPickResult>(pick.toVariantMap(), std::vector<ContactTestResult>(), std::vector<ContactTestResult>());
|
||||||
}
|
}
|
||||||
getShapeInfoReady();
|
getShapeInfoReady(pick);
|
||||||
|
|
||||||
auto entityIntersections = _physicsEngine->contactTest(USER_COLLISION_MASK_ENTITIES, *pick.shapeInfo, pick.transform, USER_COLLISION_GROUP_DYNAMIC, pick.threshold);
|
auto entityIntersections = _physicsEngine->contactTest(USER_COLLISION_MASK_ENTITIES, *_mathPick.shapeInfo, pick.transform, USER_COLLISION_GROUP_DYNAMIC, pick.threshold);
|
||||||
filterIntersections(entityIntersections);
|
filterIntersections(entityIntersections);
|
||||||
return std::make_shared<CollisionPickResult>(pick, entityIntersections, std::vector<ContactTestResult>());
|
return std::make_shared<CollisionPickResult>(pick, entityIntersections, std::vector<ContactTestResult>());
|
||||||
}
|
}
|
||||||
|
@ -409,9 +409,9 @@ PickResultPointer CollisionPick::getAvatarIntersection(const CollisionRegion& pi
|
||||||
// Cannot compute result
|
// Cannot compute result
|
||||||
return std::make_shared<CollisionPickResult>(pick, std::vector<ContactTestResult>(), std::vector<ContactTestResult>());
|
return std::make_shared<CollisionPickResult>(pick, std::vector<ContactTestResult>(), std::vector<ContactTestResult>());
|
||||||
}
|
}
|
||||||
getShapeInfoReady();
|
getShapeInfoReady(pick);
|
||||||
|
|
||||||
auto avatarIntersections = _physicsEngine->contactTest(USER_COLLISION_MASK_AVATARS, *pick.shapeInfo, pick.transform, USER_COLLISION_GROUP_DYNAMIC, pick.threshold);
|
auto avatarIntersections = _physicsEngine->contactTest(USER_COLLISION_MASK_AVATARS, *_mathPick.shapeInfo, pick.transform, USER_COLLISION_GROUP_DYNAMIC, pick.threshold);
|
||||||
filterIntersections(avatarIntersections);
|
filterIntersections(avatarIntersections);
|
||||||
return std::make_shared<CollisionPickResult>(pick, std::vector<ContactTestResult>(), avatarIntersections);
|
return std::make_shared<CollisionPickResult>(pick, std::vector<ContactTestResult>(), avatarIntersections);
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,9 +62,9 @@ protected:
|
||||||
// Returns true if the resource for _mathPick.shapeInfo is loaded or if a resource is not needed.
|
// Returns true if the resource for _mathPick.shapeInfo is loaded or if a resource is not needed.
|
||||||
bool isLoaded() const;
|
bool isLoaded() const;
|
||||||
// Returns true if _mathPick.shapeInfo is valid. Otherwise, attempts to get the _mathPick ready for use.
|
// Returns true if _mathPick.shapeInfo is valid. Otherwise, attempts to get the _mathPick ready for use.
|
||||||
bool getShapeInfoReady();
|
bool getShapeInfoReady(const CollisionRegion& pick);
|
||||||
void computeShapeInfo(CollisionRegion& pick, ShapeInfo& shapeInfo, QSharedPointer<GeometryResource> resource);
|
void computeShapeInfo(const CollisionRegion& pick, ShapeInfo& shapeInfo, QSharedPointer<GeometryResource> resource);
|
||||||
void computeShapeInfoDimensionsOnly(CollisionRegion& pick, ShapeInfo& shapeInfo, QSharedPointer<GeometryResource> resource);
|
void computeShapeInfoDimensionsOnly(const CollisionRegion& pick, ShapeInfo& shapeInfo, QSharedPointer<GeometryResource> resource);
|
||||||
void filterIntersections(std::vector<ContactTestResult>& intersections) const;
|
void filterIntersections(std::vector<ContactTestResult>& intersections) const;
|
||||||
|
|
||||||
CollisionRegion _mathPick;
|
CollisionRegion _mathPick;
|
||||||
|
|
Loading…
Reference in a new issue