Пример #1
0
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());
		}
	}
}
Пример #2
0
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);
}
Пример #3
0
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();
		}
	}
}
Пример #4
0
void ActorEditTool::onDeleteActor(){
	if(mSelectedActor){
		mScene->deleteActor(mSelectedActor);
		selectActor(NULL);
	}
}
Пример #5
0
void ActorEditTool::onBeforeSceneUnload(){
	selectActor(NULL);
}
Пример #6
0
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)));
}