Beispiel #1
0
	const Vec3 GetDirection() const
	{
		if (mOverridingCamera){
			return mOverridingCamera->GetDirection();
		}
		return mTransformation.GetMatrix().Column(1);
	}
	void EditThisParticle(const char* file){
		if (mEditingParticle)
			mEditingParticle->StopImmediate();

		bool numeric = IsNumeric(file);
		std::string fullpath;
		if (numeric)
		{
			fullpath = FindParticleNameWithID("data/particles", StringConverter::ParseInt(file));
		}
		else
		{
			fullpath = file;
			fullpath += ".particle";
		}


		ParticleEmitterPtr pnew = 0;
		if (strcmp(file, "0"))
			pnew = GetParticleEmitter(fullpath.c_str());

		auto& renderer = Renderer::GetInstance();
		if (pnew)
		{

			mEditingParticle = pnew;
			Logger::Log(FB_DEFAULT_LOG_ARG, FormatString("Editing : %s", fullpath.c_str()).c_str());			
			auto rt = renderer.GetMainRenderTarget();
			assert(rt);
			if (!mOriginalCamera){
				mOriginalCamera = rt->ReplaceCamera(mOverridingCamera);
				*mOverridingCamera = *mOriginalCamera;
			}
			mEditingParticle->SetPosition(mOverridingCamera->GetPosition() + mOverridingCamera->GetDirection() * 4.f);
			mEditingParticle->Active(true);
			mOverridingCamera->SetTarget(mEditingParticle);
			mOverridingCamera->SetEnalbeInput(true);
		}
		else if (strcmp(file, "0") == 0)
		{
			mEditingParticle->StopImmediate();
			mEditingParticle = 0;
			auto rt = renderer.GetMainRenderTarget();
			assert(rt);
			if (mOriginalCamera){
				rt->ReplaceCamera(mOriginalCamera);
				mOriginalCamera = 0;
			}
			Logger::Log(FB_ERROR_LOG_ARG, "Exit particle editor");			
		}
		else
		{
			Logger::Log(FB_ERROR_LOG_ARG, FormatString("Cannot find the particle %s", fullpath.c_str()).c_str());			
		}
	}
//----------------------------------------------------------------------------
void ConvexRegionManager::Draw (Renderer& rkRenderer)
{
    CameraPtr spCamera = rkRenderer.GetCamera();
    Vector3f kEye = spCamera->GetLocation();
    if ( m_bUseEyePlusNear )
        kEye += spCamera->GetFrustumNear()*spCamera->GetDirection();

    ConvexRegion* pkRegion = GetContainingRegion(kEye);

    if ( pkRegion )
    {
        // inside the set of regions, start drawing with region of camera
        pkRegion->Draw(rkRenderer);
    }
    else
    {
        // outside the set of regions, draw the outside scene (if it exists)
        if ( GetOutside() )
            GetOutside()->Draw(rkRenderer);
    }

}