ModelReferential copy constructor

This commit is contained in:
Atlante45 2014-08-05 12:03:16 -07:00
parent 9999c88d84
commit 283beab05d
2 changed files with 28 additions and 12 deletions

View file

@ -16,8 +16,26 @@
#include "ModelReferential.h" #include "ModelReferential.h"
ModelReferential::ModelReferential(Referential* referential, AvatarData* avatar) : Referential(MODEL, avatar) { ModelReferential::ModelReferential(Referential* referential, ModelTree* tree, AvatarData* avatar) :
Referential(MODEL, avatar),
_tree(tree) {
unpackExtraData(reinterpret_cast<unsigned char*>(referential->getExtraData().data()),
referential->getExtraData().size());
if (!isValid()) {
qDebug() << "ModelReferential::copyConstructo(): Not Valid";
return;
}
const ModelItem* item = _tree->findModelByID(_modelID);
if (item != NULL) {
_refScale = item->getRadius();
_refRotation = item->getModelRotation();
_refPosition = item->getPosition() * (float)TREE_SCALE;
}
_scale = referential->getScale();
_rotation = referential->getRotation();
_translation = referential->getTranslation();
} }
ModelReferential::ModelReferential(uint32_t modelID, ModelTree* tree, AvatarData* avatar) : ModelReferential::ModelReferential(uint32_t modelID, ModelTree* tree, AvatarData* avatar) :
@ -26,8 +44,8 @@ _modelID(modelID),
_tree(tree) _tree(tree)
{ {
const ModelItem* item = _tree->findModelByID(_modelID); const ModelItem* item = _tree->findModelByID(_modelID);
if (!_isValid || item == NULL) { if (!isValid() || item == NULL) {
qDebug() << "Not Validd"; qDebug() << "ModelReferential::constructor(): Not Valid";
_isValid = false; _isValid = false;
return; return;
} }
@ -44,9 +62,8 @@ _tree(tree)
void ModelReferential::update() { void ModelReferential::update() {
const ModelItem* item = _tree->findModelByID(_modelID); const ModelItem* item = _tree->findModelByID(_modelID);
if (item == NULL || _avatar == NULL) { if (!isValid() || item == NULL || _avatar == NULL) {
qDebug() << "Not Valid"; //qDebug() << "ModelReferential::update(): Not Valid";
_isValid = false;
return; return;
} }
@ -58,13 +75,12 @@ void ModelReferential::update() {
} }
if (item->getModelRotation() != _refRotation) { if (item->getModelRotation() != _refRotation) {
_refRotation = item->getModelRotation(); _refRotation = item->getModelRotation();
_avatar->setOrientation(_refRotation * _rotation); _avatar->setOrientation(_refRotation * _rotation, true);
somethingChanged = true; somethingChanged = true;
} }
if (item->getPosition() != _refPosition || somethingChanged) { if (item->getPosition() != _refPosition || somethingChanged) {
_refPosition = item->getPosition(); _refPosition = item->getPosition();
_avatar->setPosition(_refPosition * (float)TREE_SCALE + _refRotation * (_translation * _refScale)); _avatar->setPosition(_refPosition * (float)TREE_SCALE + _refRotation * (_translation * _refScale), true);
//qDebug() << "Ref: " << item->getLastUpdated() << " " << item->getLastEdited();
somethingChanged = true; somethingChanged = true;
} }
} }
@ -87,7 +103,7 @@ JointReferential::JointReferential(uint32_t jointIndex, uint32_t modelID, ModelT
const ModelItem* item = _tree->findModelByID(_modelID); const ModelItem* item = _tree->findModelByID(_modelID);
const Model* model = getModel(item); const Model* model = getModel(item);
if (!_isValid || model == NULL || _jointIndex >= model->getJointStateCount()) { if (!_isValid || model == NULL || _jointIndex >= model->getJointStateCount()) {
qDebug() << "Not Validd"; qDebug() << "Not Valid";
_isValid = false; _isValid = false;
return; return;
} }

View file

@ -19,7 +19,7 @@ class Model;
class ModelReferential : public Referential { class ModelReferential : public Referential {
public: public:
ModelReferential(Referential* ref, AvatarData* avatar); ModelReferential(Referential* ref, ModelTree* tree, AvatarData* avatar);
ModelReferential(uint32_t modelID, ModelTree* tree, AvatarData* avatar); ModelReferential(uint32_t modelID, ModelTree* tree, AvatarData* avatar);
virtual void update(); virtual void update();