void ActorEditTool::onMousePress(QMouseEvent* evt){ if(!isToolFocused()){ return; } if((evt->button() == Qt::LeftButton && mSelectingActor) || evt->button() == Qt::MiddleButton ){ wt::RaycastHitEvent res; if(mPhysics->pick(mScene->getCamera(), glm::vec2(evt->x(), evt->y()), glm::vec2(mSceneView->width(), mSceneView->height()), res, 0, wt::Physics::ePICK_BOUNDING_BOXES)){ selectActor(res.mPickedActor->getSceneActor()); } } }
ActorEditTool::ActorEditTool(SceneView* sceneView, QWidget* parent, AToolManager* toolManager) : QDialog(parent), ATool(toolManager), mSelectedActor(NULL), mState(eSTATE_NORMAL){ ui.setupUi(this); mSceneView = sceneView; connect(mSceneView, SIGNAL(onMouseDrag(MouseDragEvent)), this, SLOT(onMouseDrag(MouseDragEvent))); connect(mSceneView, SIGNAL(onMouseDown(QMouseEvent*)), this, SLOT(onMousePress(QMouseEvent*))); mScene = sceneView->getScene(); mPhysics = mScene->getPhysics(); mParticleEditDialog = new ParticleEditDialog(this, NULL); ui.lightAmbientIntensity->setValueRange(0, 100); ui.lightDiffuseIntensity->setValueRange(0, 100); ui.lightDiffuseIntensity->setSingleStep(0.01); ui.lightAmbientIntensity->setSingleStep(0.01); ui.lightAttenuation->setDecimals(4); // C ui.lightAttenuation->setSingleStep(0.001, VecEditWidget::eFIELD_X); ui.lightAttenuation->setValueRange(0, 1.0f, VecEditWidget::eFIELD_X); // L ui.lightAttenuation->setSingleStep(0.01, VecEditWidget::eFIELD_Y); ui.lightAttenuation->setValueRange(0, 50.0f, VecEditWidget::eFIELD_Y); // Q ui.lightAttenuation->setSingleStep(0.001, VecEditWidget::eFIELD_Z); ui.lightAttenuation->setValueRange(0, 1.0f, VecEditWidget::eFIELD_Z); ui.volume->setValueRange(0, 100); ui.minDistance->setValueRange(0.5, 100); ui.attenuation->setValueRange(0, 100); ui.pitch->setValueRange(0.01, 10); selectActor(NULL); }
void ActorEditTool::onNewActor(){ ActorCreationDialog::EditResult res = ActorCreationDialog::edit(this, WTE_CTX.getAssets()); wt::ASceneActor* sceneActor = NULL; glm::vec3 eyePos, eyeFw; mScene->getCamera().getTranslation(eyePos); mScene->getCamera().getForwardVector(eyeFw); if(res.ok){ if(res.type == wt::ASceneActor::eTYPE_MODELLED){ wt::ModelledActor* actor = mScene->createModelledActor(res.name.toStdString()); sceneActor = actor; } else if(res.type == wt::ASceneActor::eTYPE_PARTICLE_EFFECT){ wt::ParticleEffect* actor; actor = mScene->createParticleEffect(res.name.toStdString()); actor->create(res.particleEffect.effect); sceneActor = actor; } else if(res.type == wt::ASceneActor::eTYPE_POINT_LIGHT){ const wt::PointLight* actor; wt::PointLight::Desc desc; actor = mScene->createPointLight("", desc); sceneActor = (wt::ASceneActor*)actor; } else if(res.type == wt::ASceneActor::eTYPE_SOUND){ wt::Sound* sound = mScene->createSound(res.name.toStdString()) ; sound->setSound( WTE_CTX.getAssets()->getSoundSystem()->createSound(res.sound3D.soundBuffer) ); sound->getSound()->setRelativeToListener( false ); sound->getSound()->setLoop(true); sound->getSound()->play(); sceneActor = dynamic_cast<wt::ASceneActor*>( sound ); } else if(res.type == wt::ASceneActor::eTYPE_COLLIDER){ PhysicsDescDialog::Result pres = PhysicsDescDialog::edit(this, NULL); if(pres.accepted || pres.desc.type){ wt::math::Transform tf; tf.setTranslation(eyePos - eyeFw*10.0f); tf.getMatrix(pres.desc.pose); wt::ColliderActor* actor = dynamic_cast<wt::ColliderActor*>( mScene->createActor(wt::ASceneActor::eTYPE_COLLIDER, res.name.toStdString()) ); mPhysics->createActor(actor, pres.desc); sceneActor = dynamic_cast<wt::ASceneActor*>(actor); } } else{ WT_THROW("Unsupported actor type"); } if(sceneActor){ sceneActor->getTransformable()->setTranslation( eyePos - eyeFw*10.0f); mPhysics->createBBox(sceneActor); selectActor(sceneActor); editActor(); } } }
void ActorEditTool::onDeleteActor(){ if(mSelectedActor){ mScene->deleteActor(mSelectedActor); selectActor(NULL); } }
void ActorEditTool::onBeforeSceneUnload(){ selectActor(NULL); }
void MainWindow::emitSelectFromActors() { connect(this,SIGNAL(selectFromActors(QString,QDate,QDate)),resultTable,SLOT(selectActor(QString,QDate,QDate))); emit selectFromActors(ui->actorNameLineEditFrom->text(),ui->actorDateEditFrom->date(),ui->actorDateEditTo->date()); disconnect(this,SIGNAL(selectFromActors(QString,QDate,QDate)),resultTable,SLOT(selectActor(QString,QDate,QDate))); }