mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 10:58:22 +02:00
remove isActive, fix contains, maybe fix green box issue
This commit is contained in:
parent
c8532a1ac5
commit
ccd5ef80b3
7 changed files with 43 additions and 32 deletions
|
@ -8663,7 +8663,7 @@ void Application::notifyPacketVersionMismatch() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::checkSkeleton() const {
|
void Application::checkSkeleton() const {
|
||||||
if (getMyAvatar()->getSkeletonModel()->isActive() && !getMyAvatar()->getSkeletonModel()->hasSkeleton()) {
|
if (getMyAvatar()->getSkeletonModel()->isLoaded() && !getMyAvatar()->getSkeletonModel()->hasSkeleton()) {
|
||||||
qCDebug(interfaceapp) << "MyAvatar model has no skeleton";
|
qCDebug(interfaceapp) << "MyAvatar model has no skeleton";
|
||||||
|
|
||||||
QString message = "Your selected avatar body has no skeleton.\n\nThe default body will be loaded...";
|
QString message = "Your selected avatar body has no skeleton.\n\nThe default body will be loaded...";
|
||||||
|
|
|
@ -1246,7 +1246,7 @@ glm::quat Avatar::getAbsoluteJointRotationInObjectFrame(int index) const {
|
||||||
}
|
}
|
||||||
case CAMERA_MATRIX_INDEX: {
|
case CAMERA_MATRIX_INDEX: {
|
||||||
glm::quat rotation;
|
glm::quat rotation;
|
||||||
if (_skeletonModel && _skeletonModel->isActive()) {
|
if (_skeletonModel && _skeletonModel->isLoaded()) {
|
||||||
int headJointIndex = getJointIndex("Head");
|
int headJointIndex = getJointIndex("Head");
|
||||||
if (headJointIndex >= 0) {
|
if (headJointIndex >= 0) {
|
||||||
_skeletonModel->getAbsoluteJointRotationInRigFrame(headJointIndex, rotation);
|
_skeletonModel->getAbsoluteJointRotationInRigFrame(headJointIndex, rotation);
|
||||||
|
@ -1298,7 +1298,7 @@ glm::vec3 Avatar::getAbsoluteJointTranslationInObjectFrame(int index) const {
|
||||||
}
|
}
|
||||||
case CAMERA_MATRIX_INDEX: {
|
case CAMERA_MATRIX_INDEX: {
|
||||||
glm::vec3 translation;
|
glm::vec3 translation;
|
||||||
if (_skeletonModel && _skeletonModel->isActive()) {
|
if (_skeletonModel && _skeletonModel->isLoaded()) {
|
||||||
int headJointIndex = getJointIndex("Head");
|
int headJointIndex = getJointIndex("Head");
|
||||||
if (headJointIndex >= 0) {
|
if (headJointIndex >= 0) {
|
||||||
_skeletonModel->getAbsoluteJointTranslationInRigFrame(headJointIndex, translation);
|
_skeletonModel->getAbsoluteJointTranslationInRigFrame(headJointIndex, translation);
|
||||||
|
@ -1427,7 +1427,7 @@ void Avatar::withValidJointIndicesCache(std::function<void()> const& worker) con
|
||||||
QWriteLocker writeLock(&_modelJointIndicesCacheLock);
|
QWriteLocker writeLock(&_modelJointIndicesCacheLock);
|
||||||
if (!_modelJointsCached) {
|
if (!_modelJointsCached) {
|
||||||
_modelJointIndicesCache.clear();
|
_modelJointIndicesCache.clear();
|
||||||
if (_skeletonModel && _skeletonModel->isActive()) {
|
if (_skeletonModel && _skeletonModel->isLoaded()) {
|
||||||
_modelJointIndicesCache = _skeletonModel->getHFMModel().jointIndices;
|
_modelJointIndicesCache = _skeletonModel->getHFMModel().jointIndices;
|
||||||
_modelJointsCached = true;
|
_modelJointsCached = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -176,7 +176,7 @@ void SkeletonModel::simulate(float deltaTime, bool fullUpdate) {
|
||||||
updateRenderItems();
|
updateRenderItems();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isActive() || !_owningAvatar->isMyAvatar()) {
|
if (!isLoaded() || !_owningAvatar->isMyAvatar()) {
|
||||||
return; // only simulate for own avatar
|
return; // only simulate for own avatar
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -255,19 +255,19 @@ bool SkeletonModel::getRightHandPosition(glm::vec3& position) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SkeletonModel::getHeadPosition(glm::vec3& headPosition) const {
|
bool SkeletonModel::getHeadPosition(glm::vec3& headPosition) const {
|
||||||
return isActive() && getJointPositionInWorldFrame(_rig.indexOfJoint("Head"), headPosition);
|
return isLoaded() && getJointPositionInWorldFrame(_rig.indexOfJoint("Head"), headPosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SkeletonModel::getNeckPosition(glm::vec3& neckPosition) const {
|
bool SkeletonModel::getNeckPosition(glm::vec3& neckPosition) const {
|
||||||
return isActive() && getJointPositionInWorldFrame(_rig.indexOfJoint("Neck"), neckPosition);
|
return isLoaded() && getJointPositionInWorldFrame(_rig.indexOfJoint("Neck"), neckPosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SkeletonModel::getLocalNeckPosition(glm::vec3& neckPosition) const {
|
bool SkeletonModel::getLocalNeckPosition(glm::vec3& neckPosition) const {
|
||||||
return isActive() && getJointPosition(_rig.indexOfJoint("Neck"), neckPosition);
|
return isLoaded() && getJointPosition(_rig.indexOfJoint("Neck"), neckPosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SkeletonModel::getEyeModelPositions(glm::vec3& firstEyePosition, glm::vec3& secondEyePosition) const {
|
bool SkeletonModel::getEyeModelPositions(glm::vec3& firstEyePosition, glm::vec3& secondEyePosition) const {
|
||||||
if (!isActive()) {
|
if (!isLoaded()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -361,7 +361,7 @@ void SkeletonModel::renderBoundingCollisionShapes(RenderArgs* args, gpu::Batch&
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SkeletonModel::hasSkeleton() {
|
bool SkeletonModel::hasSkeleton() {
|
||||||
return isActive() ? _rig.indexOfJoint("Hips") != -1 : false;
|
return isLoaded() ? _rig.indexOfJoint("Hips") != -1 : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SkeletonModel::onInvalidate() {
|
void SkeletonModel::onInvalidate() {
|
||||||
|
|
|
@ -44,10 +44,10 @@ public:
|
||||||
bool getIsJointOverridden(int jointIndex) const;
|
bool getIsJointOverridden(int jointIndex) const;
|
||||||
|
|
||||||
/// Returns the index of the left hand joint, or -1 if not found.
|
/// Returns the index of the left hand joint, or -1 if not found.
|
||||||
int getLeftHandJointIndex() const { return isActive() ? _rig.indexOfJoint("LeftHand") : -1; }
|
int getLeftHandJointIndex() const { return isLoaded() ? _rig.indexOfJoint("LeftHand") : -1; }
|
||||||
|
|
||||||
/// Returns the index of the right hand joint, or -1 if not found.
|
/// Returns the index of the right hand joint, or -1 if not found.
|
||||||
int getRightHandJointIndex() const { return isActive() ? _rig.indexOfJoint("RightHand") : -1; }
|
int getRightHandJointIndex() const { return isLoaded() ? _rig.indexOfJoint("RightHand") : -1; }
|
||||||
|
|
||||||
bool getLeftGrabPosition(glm::vec3& position) const;
|
bool getLeftGrabPosition(glm::vec3& position) const;
|
||||||
bool getRightGrabPosition(glm::vec3& position) const;
|
bool getRightGrabPosition(glm::vec3& position) const;
|
||||||
|
|
|
@ -90,7 +90,7 @@ bool RenderableModelEntityItem::needsUpdateModelBounds() const {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_dimensionsInitialized || !model->isActive()) {
|
if (!_dimensionsInitialized || !model->isLoaded()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -699,10 +699,23 @@ int RenderableModelEntityItem::avatarJointIndex(int modelJointIndex) {
|
||||||
|
|
||||||
bool RenderableModelEntityItem::contains(const glm::vec3& point) const {
|
bool RenderableModelEntityItem::contains(const glm::vec3& point) const {
|
||||||
auto model = getModel();
|
auto model = getModel();
|
||||||
if (model && _collisionGeometryResource && _collisionGeometryResource->isLoaded() && _collisionGeometryResource->isHFMModelLoaded() && EntityItem::contains(point)) {
|
if (model && model->isLoaded()) {
|
||||||
glm::mat4 worldToHFMMatrix = model->getWorldToHFMMatrix();
|
auto shapeType = getShapeType();
|
||||||
glm::vec3 hfmPoint = worldToHFMMatrix * glm::vec4(point, 1.0f);
|
if (shapeType == SHAPE_TYPE_COMPOUND || shapeType == SHAPE_TYPE_SIMPLE_COMPOUND) {
|
||||||
return _collisionGeometryResource->getHFMModel().convexHullContains(hfmPoint);
|
if (_collisionGeometryResource && _collisionGeometryResource->isLoaded() && _collisionGeometryResource->isHFMModelLoaded() && EntityItem::contains(point)) {
|
||||||
|
glm::mat4 worldToHFMMatrix = model->getWorldToHFMMatrix();
|
||||||
|
glm::vec3 hfmPoint = worldToHFMMatrix * glm::vec4(point, 1.0f);
|
||||||
|
return _collisionGeometryResource->getHFMModel().convexHullContains(hfmPoint);
|
||||||
|
}
|
||||||
|
} else if (shapeType >= SHAPE_TYPE_SIMPLE_HULL && shapeType <= SHAPE_TYPE_STATIC_MESH) {
|
||||||
|
if (EntityItem::contains(point)) {
|
||||||
|
glm::mat4 worldToHFMMatrix = model->getWorldToHFMMatrix();
|
||||||
|
glm::vec3 hfmPoint = worldToHFMMatrix * glm::vec4(point, 1.0f);
|
||||||
|
return model->getHFMModel().convexHullContains(hfmPoint);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return EntityItem::contains(point);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -919,13 +932,13 @@ void RenderableModelEntityItem::locationChanged(bool tellPhysics, bool tellChild
|
||||||
|
|
||||||
int RenderableModelEntityItem::getJointIndex(const QString& name) const {
|
int RenderableModelEntityItem::getJointIndex(const QString& name) const {
|
||||||
auto model = getModel();
|
auto model = getModel();
|
||||||
return (model && model->isActive()) ? model->getRig().indexOfJoint(name) : -1;
|
return (model && model->isLoaded()) ? model->getRig().indexOfJoint(name) : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList RenderableModelEntityItem::getJointNames() const {
|
QStringList RenderableModelEntityItem::getJointNames() const {
|
||||||
QStringList result;
|
QStringList result;
|
||||||
auto model = getModel();
|
auto model = getModel();
|
||||||
if (model && model->isActive()) {
|
if (model && model->isLoaded()) {
|
||||||
const Rig& rig = model->getRig();
|
const Rig& rig = model->getRig();
|
||||||
int jointCount = rig.getJointStateCount();
|
int jointCount = rig.getJointStateCount();
|
||||||
for (int jointIndex = 0; jointIndex < jointCount; jointIndex++) {
|
for (int jointIndex = 0; jointIndex < jointCount; jointIndex++) {
|
||||||
|
@ -1012,7 +1025,7 @@ void RenderableModelEntityItem::copyAnimationJointDataToModel() {
|
||||||
});
|
});
|
||||||
|
|
||||||
if (changed) {
|
if (changed) {
|
||||||
locationChanged(true, true);
|
locationChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1215,6 +1228,7 @@ void ModelEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEntityPoint
|
||||||
model = std::make_shared<Model>(nullptr, entity.get(), _created);
|
model = std::make_shared<Model>(nullptr, entity.get(), _created);
|
||||||
connect(model.get(), &Model::requestRenderUpdate, this, &ModelEntityRenderer::requestRenderUpdate);
|
connect(model.get(), &Model::requestRenderUpdate, this, &ModelEntityRenderer::requestRenderUpdate);
|
||||||
connect(model.get(), &Model::setURLFinished, this, [&](bool didVisualGeometryRequestSucceed) {
|
connect(model.get(), &Model::setURLFinished, this, [&](bool didVisualGeometryRequestSucceed) {
|
||||||
|
_didLastVisualGeometryRequestSucceed = didVisualGeometryRequestSucceed;
|
||||||
const render::ScenePointer& scene = AbstractViewStateInterface::instance()->getMain3DScene();
|
const render::ScenePointer& scene = AbstractViewStateInterface::instance()->getMain3DScene();
|
||||||
render::Transaction transaction;
|
render::Transaction transaction;
|
||||||
transaction.updateItem<PayloadProxyInterface>(_renderItemID, [&](PayloadProxyInterface& self) {
|
transaction.updateItem<PayloadProxyInterface>(_renderItemID, [&](PayloadProxyInterface& self) {
|
||||||
|
@ -1235,7 +1249,6 @@ void ModelEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEntityPoint
|
||||||
emit DependencyManager::get<scriptable::ModelProviderFactory>()->
|
emit DependencyManager::get<scriptable::ModelProviderFactory>()->
|
||||||
modelAddedToScene(entity->getEntityItemID(), NestableType::Entity, model);
|
modelAddedToScene(entity->getEntityItemID(), NestableType::Entity, model);
|
||||||
}
|
}
|
||||||
_didLastVisualGeometryRequestSucceed = didVisualGeometryRequestSucceed;
|
|
||||||
entity->_originalTexturesRead = false;
|
entity->_originalTexturesRead = false;
|
||||||
entity->_needsJointSimulation = true;
|
entity->_needsJointSimulation = true;
|
||||||
entity->_needsToRescaleModel = true;
|
entity->_needsToRescaleModel = true;
|
||||||
|
|
|
@ -338,7 +338,7 @@ bool Model::findRayIntersectionAgainstSubMeshes(const glm::vec3& origin, const g
|
||||||
bool intersectedSomething = false;
|
bool intersectedSomething = false;
|
||||||
|
|
||||||
// if we aren't active, we can't pick yet...
|
// if we aren't active, we can't pick yet...
|
||||||
if (!isActive()) {
|
if (!isLoaded()) {
|
||||||
return intersectedSomething;
|
return intersectedSomething;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -493,7 +493,7 @@ bool Model::findParabolaIntersectionAgainstSubMeshes(const glm::vec3& origin, co
|
||||||
bool intersectedSomething = false;
|
bool intersectedSomething = false;
|
||||||
|
|
||||||
// if we aren't active, we can't pick yet...
|
// if we aren't active, we can't pick yet...
|
||||||
if (!isActive()) {
|
if (!isLoaded()) {
|
||||||
return intersectedSomething;
|
return intersectedSomething;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1168,7 +1168,7 @@ void Model::renderDebugMeshBoxes(gpu::Batch& batch, bool forward) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Extents Model::getBindExtents() const {
|
Extents Model::getBindExtents() const {
|
||||||
if (!isActive()) {
|
if (!isLoaded()) {
|
||||||
return Extents();
|
return Extents();
|
||||||
}
|
}
|
||||||
const Extents& bindExtents = getHFMModel().bindExtents;
|
const Extents& bindExtents = getHFMModel().bindExtents;
|
||||||
|
@ -1182,7 +1182,7 @@ glm::vec3 Model::getNaturalDimensions() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
Extents Model::getMeshExtents() const {
|
Extents Model::getMeshExtents() const {
|
||||||
if (!isActive()) {
|
if (!isLoaded()) {
|
||||||
return Extents();
|
return Extents();
|
||||||
}
|
}
|
||||||
const Extents& extents = getHFMModel().meshExtents;
|
const Extents& extents = getHFMModel().meshExtents;
|
||||||
|
@ -1196,7 +1196,7 @@ Extents Model::getMeshExtents() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
Extents Model::getUnscaledMeshExtents() const {
|
Extents Model::getUnscaledMeshExtents() const {
|
||||||
if (!isActive()) {
|
if (!isLoaded()) {
|
||||||
return Extents();
|
return Extents();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1228,7 +1228,7 @@ void Model::setJointTranslation(int index, bool valid, const glm::vec3& translat
|
||||||
}
|
}
|
||||||
|
|
||||||
int Model::getParentJointIndex(int jointIndex) const {
|
int Model::getParentJointIndex(int jointIndex) const {
|
||||||
return (isActive() && jointIndex != -1) ? getHFMModel().joints.at(jointIndex).parentIndex : -1;
|
return (isLoaded() && jointIndex != -1) ? getHFMModel().joints.at(jointIndex).parentIndex : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Model::setTextures(const QVariantMap& textures) {
|
void Model::setTextures(const QVariantMap& textures) {
|
||||||
|
@ -1329,7 +1329,7 @@ QStringList Model::getJointNames() const {
|
||||||
Q_RETURN_ARG(QStringList, result));
|
Q_RETURN_ARG(QStringList, result));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
return isActive() ? getHFMModel().getJointNames() : QStringList();
|
return isLoaded() ? getHFMModel().getJointNames() : QStringList();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Model::setScaleToFit(bool scaleToFit, const glm::vec3& dimensions, bool forceRescale) {
|
void Model::setScaleToFit(bool scaleToFit, const glm::vec3& dimensions, bool forceRescale) {
|
||||||
|
@ -1345,7 +1345,7 @@ void Model::setScaleToFit(bool scaleToFit, float largestDimension, bool forceRes
|
||||||
// mesh, and so we can't do the needed calculations for scaling to fit to a single largest dimension. In this
|
// mesh, and so we can't do the needed calculations for scaling to fit to a single largest dimension. In this
|
||||||
// case we will record that we do want to do this, but we will stick our desired single dimension into the
|
// case we will record that we do want to do this, but we will stick our desired single dimension into the
|
||||||
// first element of the vec3 for the non-fixed aspect ration dimensions
|
// first element of the vec3 for the non-fixed aspect ration dimensions
|
||||||
if (!isActive()) {
|
if (!isLoaded()) {
|
||||||
_scaleToFit = scaleToFit;
|
_scaleToFit = scaleToFit;
|
||||||
if (scaleToFit) {
|
if (scaleToFit) {
|
||||||
_scaleToFitDimensions = glm::vec3(largestDimension, FAKE_DIMENSION_PLACEHOLDER, FAKE_DIMENSION_PLACEHOLDER);
|
_scaleToFitDimensions = glm::vec3(largestDimension, FAKE_DIMENSION_PLACEHOLDER, FAKE_DIMENSION_PLACEHOLDER);
|
||||||
|
@ -1426,7 +1426,7 @@ void Model::simulate(float deltaTime, bool fullUpdate) {
|
||||||
fullUpdate = updateGeometry() || fullUpdate || (_scaleToFit && !_scaledToFit)
|
fullUpdate = updateGeometry() || fullUpdate || (_scaleToFit && !_scaledToFit)
|
||||||
|| (_snapModelToRegistrationPoint && !_snappedToRegistrationPoint);
|
|| (_snapModelToRegistrationPoint && !_snappedToRegistrationPoint);
|
||||||
|
|
||||||
if (isActive() && fullUpdate) {
|
if (isLoaded() && fullUpdate) {
|
||||||
onInvalidate();
|
onInvalidate();
|
||||||
|
|
||||||
// check for scale to fit
|
// check for scale to fit
|
||||||
|
|
|
@ -183,8 +183,6 @@ public:
|
||||||
const HFMModel& getHFMModel() const { assert(isLoaded()); return _renderGeometry->getHFMModel(); }
|
const HFMModel& getHFMModel() const { assert(isLoaded()); return _renderGeometry->getHFMModel(); }
|
||||||
const MaterialMapping& getMaterialMapping() const { assert(isLoaded()); return _renderGeometry->getMaterialMapping(); }
|
const MaterialMapping& getMaterialMapping() const { assert(isLoaded()); return _renderGeometry->getMaterialMapping(); }
|
||||||
|
|
||||||
bool isActive() const { return isLoaded(); }
|
|
||||||
|
|
||||||
bool didVisualGeometryRequestFail() const { return _visualGeometryRequestFailed; }
|
bool didVisualGeometryRequestFail() const { return _visualGeometryRequestFailed; }
|
||||||
|
|
||||||
glm::mat4 getWorldToHFMMatrix() const;
|
glm::mat4 getWorldToHFMMatrix() const;
|
||||||
|
|
Loading…
Reference in a new issue