void EmberEntityModelAction::activate(EntityMapping::ChangeContext& context) { Model::Model* model = Model::ModelRepresentationManager::getSingleton().getModelForEntity(mEntity); if (!model || model->getDefinition()->getName() != mModelName) { mEntity.setGraphicalRepresentation(0); model = Model::Model::createModel(mScene.getSceneManager(), mModelName, mEntity.getId()); model->setVisible(mEntity.isVisible()); //if the model definition isn't valid, use a placeholder if (!model->getDefinition()->isValid()) { S_LOG_FAILURE( "Could not find " << mModelName << ", using placeholder."); //add a placeholder model Model::ModelDefinitionPtr modelDef = model->getDefinition(); modelDef->createSubModelDefinition("3d_objects/primitives/models/box.mesh")->createPartDefinition("main")->setShow(true); modelDef->setValid(true); modelDef->reloadAllInstances(); } Model::ModelRepresentation* representation = new Model::ModelRepresentation(mEntity, *model, mScene, mMapping); mEntity.setGraphicalRepresentation(representation); representation->initFromModel(); } }
void EntityCreatorCreationInstance::setModel(const std::string& modelName) { if (mModel) { if (mModel->getDefinition()->getName() == modelName) { return; } else { //Reset the model mount to start with. delete mModelMount; mModelMount = 0; mModel->_getManager()->destroyMovableObject(mModel); } } mModel = Model::Model::createModel(mWorld.getSceneManager(), modelName); mModel->Reloaded.connect(sigc::mem_fun(*this, &EntityCreatorCreationInstance::model_Reloaded)); //if the model definition isn't valid, use a placeholder if (!mModel->getDefinition()->isValid()) { S_LOG_FAILURE("Could not find " << modelName << ", using placeholder."); //add a placeholder model Model::ModelDefinitionPtr modelDef = mModel->getDefinition(); modelDef->createSubModelDefinition("3d_objects/primitives/models/box.mesh")->createPartDefinition("main")->setShow(true); modelDef->setValid(true); modelDef->reloadAllInstances(); } mModelMount = new Model::ModelMount(*mModel, new SceneNodeProvider(*mEntityNode, mModel)); mModelMount->reset(); initFromModel(); // Setting inital position and orientation if (mPos.isValid()) { mEntityNode->setPosition(Convert::toOgre(mPos)); } mEntityNode->setOrientation(Convert::toOgre(mInitialOrientation)); }