示例#1
0
QStringList GlobalConfig::fetch(const QString &baseURL)
{
    m_baseURL = baseURL;
    if(!m_baseURL.endsWith('/'))
      m_baseURL += '/';

    QStringList configFiles;
    QUrl url(m_baseURL + "config.txt");

    if (url.scheme() == "file")
    {
        QFileInfo cfr(url.toLocalFile());
        if (cfr.exists())
        {
            configFiles << cfr.absoluteFilePath();
        }
        else
        {
            qCritical() << "local config file does not exist" <<  cfr.absoluteFilePath();    
        }
        return configFiles;
    }
    // remote config file
    else if (url.scheme() == "http" || url.scheme() == "ftp")
    {
        QFileInfo cfr(Settings::instance().downloadDir()+"/config-remote.txt");
        qDebug() << "Check if a copy of the remote config file is available at" << cfr.absoluteFilePath() << (cfr.exists() ? "... found" : "... not found");
        if (cfr.exists())
        {
            configFiles << cfr.absoluteFilePath();
        }
        else
        {
            QFileInfo cfi(Settings::instance().downloadDir()+"/config.txt");
            bool ret = Downloader::instance()->fetch(url,cfi.absoluteFilePath());
            qDebug() << "download remote config file from" <<  url << "to" << cfi.absoluteFilePath() << "..." << (ret ? "okay" : "failure") ;
            if (ret)
                configFiles << cfi.absoluteFilePath();
            else 
                return configFiles;
        }

        QFileInfo fi(Settings::instance().downloadDir()+"/config-local.txt");
        qDebug() << "Check if a local config file is available at" << fi.absoluteFilePath() << (fi.exists() ? "... found" : "... not found");
        if (fi.exists())
            configFiles << fi.absoluteFilePath();

    }
    qDebug() << "using config file(s)" << configFiles;
    
    return configFiles;
}
示例#2
0
const LLMatrix4 &LLViewerCamera::getModelview() const
{
	LLMatrix4 cfr(OGL_TO_CFR_ROTATION);
	getMatrixToLocal(mModelviewMatrix);
	mModelviewMatrix *= cfr;
	return mModelviewMatrix;
}
//m_objectType
bool CGameData::LoadAssetFile(std::string filename){
  CLog *pLog = CLog::Instance();
  
  //read assets.dat file
  CFileReader cfr(filename);
  if(cfr.IsValid() == false)
    return false; //file is invalid or contains no usable data

  //validate asset data and add to appropriate vectors
  std::string parameter;
  std::string assetType;
  GAME_OBJECT_TYPE got;

  for(int i = 0; i < cfr.GetNumberOfLines(); ++i){

    if(cfr.GetNumberOfTermsFromLine(i) > 1){
      assetType = cfr.GetTerm(cfr.GetLineFromFile(i), 1);
      
      //ignore these asset types
      if(assetType == "graphicfile" || assetType == "sprite" || assetType == "mesh" || assetType == "soundfile"){
        //do nothing..ignore these assets
      }
    
      //this should be a game object type
      else{
        if(cfr.GetNumberOfTermsFromLine(i) == 6){ // need 6 parameters to be valid
          got.name = cfr.GetTerm(cfr.GetLineFromFile(i), 1);
          parameter = cfr.GetTerm(cfr.GetLineFromFile(i), 2);
          got.objectID = atoi(parameter.c_str());
          parameter = cfr.GetTerm(cfr.GetLineFromFile(i), 3);
          got.spriteID = atoi(parameter.c_str());
          parameter = cfr.GetTerm(cfr.GetLineFromFile(i), 4);
          got.badSpriteID = atoi(parameter.c_str());
          parameter = cfr.GetTerm(cfr.GetLineFromFile(i), 5);
          got.layer = atoi(parameter.c_str());
          parameter = cfr.GetTerm(cfr.GetLineFromFile(i), 6);
          got.radius = atof(parameter.c_str());
          //pLog->Log("Object added",got.name, got.objectID);
          m_objectType.push_back(got);
        }        
      }
    }
  }
  
  //log results of load
//  pLog->Log("Number of game object types",  m_objectType.size());

  return true;
}
bool CAudioManager::LoadAssetFile(std::string filename){
  CLog *pLog = CLog::Instance();

  //read assets.dat file
  CFileReader cfr(filename);
  if(cfr.IsValid() == false)
    return false; //file is invalid or contains no usable data

  //validate asset data and add to appropriate vectors
  std::string parameter;
  std::string assetType;
  SOUND_FILE_DATA     tempSound;

  for(int i = 0; i < cfr.GetNumberOfLines(); ++i){

    //process only lines with 2 or more terms
    if(cfr.GetNumberOfTermsFromLine(i) > 1){
      assetType = cfr.GetTerm(cfr.GetLineFromFile(i), 1);
     
      if(assetType == "soundfile" && cfr.GetNumberOfTermsFromLine(i) == 4){
        parameter = cfr.GetTerm(cfr.GetLineFromFile(i), 2);//sound ID
        tempSound.soundID = atoi(parameter.c_str());
        parameter = cfr.GetTerm(cfr.GetLineFromFile(i), 3);//filename
        tempSound.filename = parameter;
        parameter = cfr.GetTerm(cfr.GetLineFromFile(i), 4);//description
        tempSound.description = parameter;
        m_assetSoundData.push_back(tempSound);
        pLog->Log("****** soundfile added *******");
        pLog->Log("soundID", tempSound.soundID);
        pLog->Log("filename", tempSound.filename);
        pLog->Log("description", tempSound.description);        
      }
    }
  }

  //load sound information
  for(int i = 0; i < m_assetSoundData.size(); ++i){
    LoadSample(m_assetSoundData[i].soundID,
               "assets\\sounds\\" + m_assetSoundData[i].filename);
    pLog->Log("Loaded into memory", m_assetSoundData[i].filename);
  }

  return true;
}
void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
{
	if (pass == -1)
	{
		for (S32 i = 1; i < getNumPasses(); i++)
		{ //skip foot shadows
			prerender();
			beginRenderPass(i);
			renderAvatars(single_avatar, i);
			endRenderPass(i);
		}

		return;
	}

	if (mDrawFace.empty() && !single_avatar)
	{
		return;
	}

	LLVOAvatar *avatarp;

	if (single_avatar)
	{
		avatarp = single_avatar;
	}
	else
	{
		const LLFace *facep = mDrawFace[0];
		if (!facep->getDrawable())
		{
			return;
		}
		avatarp = (LLVOAvatar *)facep->getDrawable()->getVObj().get();
	}

    if (avatarp->isDead() || avatarp->mDrawable.isNull())
	{
		return;
	}

	if (!single_avatar && !avatarp->isFullyLoaded())
	{
		if (pass == 0 && (!gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_PARTICLES) || LLViewerPartSim::getMaxPartCount() <= 0))
		{
			// debug code to draw a sphere in place of avatar
			gGL.getTexUnit(0)->bind(LLViewerFetchedTexture::sWhiteImagep);
			gGL.setColorMask(true, true);
			LLVector3 pos = avatarp->getPositionAgent();
			gGL.color4f(1.0f, 1.0f, 1.0f, 0.7f);

			gGL.pushMatrix();
			gGL.translatef((F32)(pos.mV[VX]), (F32)(pos.mV[VY]), (F32)(pos.mV[VZ]));
			gGL.scalef(0.15f, 0.15f, 0.3f);

			gSphere.renderGGL();

			gGL.popMatrix();
			gGL.setColorMask(true, false);
		}
		// don't render please
		return;
	}

	BOOL impostor = avatarp->isImpostor() && !single_avatar;

	if (impostor && pass != 0)
	{ //don't draw anything but the impostor for impostored avatars
		return;
	}
	
	if (pass == 0 && !impostor && LLPipeline::sUnderWaterRender)
	{ //don't draw foot shadows under water
		return;
	}

	if (pass == 0)
	{
		if (!LLPipeline::sReflectionRender)
		{
			LLVOAvatar::sNumVisibleAvatars++;
		}

		if (impostor)
		{
			if (LLPipeline::sRenderDeferred && !LLPipeline::sReflectionRender &&
				avatarp->mImpostor.isComplete()) 
			{
				if (normal_channel > -1)
				{
					avatarp->mImpostor.bindTexture(2, normal_channel);
				}
				if (specular_channel > -1)
				{
					avatarp->mImpostor.bindTexture(1, specular_channel);
				}
			}
			avatarp->renderImpostor(LLColor4U(255,255,255,255), sDiffuseChannel);
		}
		return;
	}

	if (single_avatar && avatarp->mSpecialRenderMode >= 1) // 1=anim preview, 2=image preview,  3=morph view
	{
		gPipeline.enableLightsAvatarEdit(LLColor4(.5f, .5f, .5f, 1.f));
	}
	
	if (pass == 1)
	{
		// render rigid meshes (eyeballs) first
		avatarp->renderRigid();
		return;
	}
	
	if (pass == 3)
	{
		if (is_deferred_render)
		{
			renderDeferredRiggedSimple(avatarp);
		}
		else
		{
			renderRiggedSimple(avatarp);
		}
		return;
	}

	if (pass == 4)
	{
		if (is_deferred_render)
		{
			renderDeferredRiggedBump(avatarp);
		}
		else
		{
			renderRiggedFullbright(avatarp);
		}

		return;
	}

	if (pass == 5)
	{
		renderRiggedShinySimple(avatarp);
		return;
	}

	if (pass == 6)
	{
		renderRiggedFullbrightShiny(avatarp);
		return;
	}

	if (pass >= 7 && pass < 9)
	{
		LLGLEnable blend(GL_BLEND);

		gGL.setColorMask(true, true);
		gGL.blendFunc(LLRender::BF_SOURCE_ALPHA,
					  LLRender::BF_ONE_MINUS_SOURCE_ALPHA,
					  LLRender::BF_ZERO,
					  LLRender::BF_ONE_MINUS_SOURCE_ALPHA);

		if (pass == 7)
		{
			renderRiggedAlpha(avatarp);
			return;
		}

		if (pass == 8)
		{
			renderRiggedFullbrightAlpha(avatarp);
			return;
		}
	}

	if (pass == 9)
	{
		LLGLEnable blend(GL_BLEND);
		LLGLDisable test(GL_ALPHA_TEST);
		gGL.flush();

		LLGLEnable polyOffset(GL_POLYGON_OFFSET_FILL);
		glPolygonOffset(-1.0f, -1.0f);
		gGL.setSceneBlendType(LLRender::BT_ADD);

		LLGLDepthTest depth(GL_TRUE, GL_FALSE);
		gGL.setColorMask(false, true);

		renderRiggedGlow(avatarp);
		gGL.setColorMask(true, false);
		gGL.setSceneBlendType(LLRender::BT_ALPHA);
		return;
	}

	if (sShaderLevel > 0)
	{
		gAvatarMatrixParam = sVertexProgram->mUniform[LLViewerShaderMgr::AVATAR_MATRIX];
	}
    
	if (sShaderLevel >= SHADER_LEVEL_CLOTH)
	{
		LLMatrix4 rot_mat;
		LLViewerCamera::getInstance()->getMatrixToLocal(rot_mat);
		LLMatrix4 cfr(OGL_TO_CFR_ROTATION);
		rot_mat *= cfr;
		
		LLVector4 wind;
		wind.setVec(avatarp->mWindVec);
		wind.mV[VW] = 0;
		wind = wind * rot_mat;
		wind.mV[VW] = avatarp->mWindVec.mV[VW];

		sVertexProgram->vertexAttrib4fv(LLViewerShaderMgr::AVATAR_WIND, wind.mV);
		F32 phase = -1.f * (avatarp->mRipplePhase);

		F32 freq = 7.f + (noise1(avatarp->mRipplePhase) * 2.f);
		LLVector4 sin_params(freq, freq, freq, phase);
		sVertexProgram->vertexAttrib4fv(LLViewerShaderMgr::AVATAR_SINWAVE, sin_params.mV);

		LLVector4 gravity(0.f, 0.f, -CLOTHING_GRAVITY_EFFECT, 0.f);
		gravity = gravity * rot_mat;
		sVertexProgram->vertexAttrib4fv(LLViewerShaderMgr::AVATAR_GRAVITY, gravity.mV);
	}

	if (!single_avatar || avatarp == single_avatar)
	{
		avatarp->renderSkinned(AVATAR_RENDER_PASS_SINGLE);
	}
}
void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
{
	LLFastTimer t(FTM_RENDER_AVATARS);

	if (pass == -1)
	{
		for (S32 i = 1; i < getNumPasses(); i++)
		{ //skip foot shadows
			prerender();
			beginRenderPass(i);
			renderAvatars(single_avatar, i);
			endRenderPass(i);
		}

		return;
	}

	if (mDrawFace.empty() && !single_avatar)
	{
		return;
	}

	LLVOAvatar *avatarp;

	if (single_avatar)
	{
		avatarp = single_avatar;
	}
	else
	{
		const LLFace *facep = mDrawFace[0];
		if (!facep->getDrawable())
		{
			return;
		}
		avatarp = (LLVOAvatar *)facep->getDrawable()->getVObj().get();
	}

    if (avatarp->isDead() || avatarp->mDrawable.isNull())
	{
		return;
	}

	if (!single_avatar && !avatarp->isFullyLoaded() )
	{
		if (pass==0 && (!gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_PARTICLES) || LLViewerPartSim::getMaxPartCount() <= 0))
		{
			// debug code to draw a sphere in place of avatar
			gGL.getTexUnit(0)->bind(LLViewerFetchedTexture::sWhiteImagep);
			gGL.setColorMask(true, true);
			LLVector3 pos = avatarp->getPositionAgent();
			gGL.color4f(1.0f, 1.0f, 1.0f, 0.7f);
			
			gGL.pushMatrix();	 
			gGL.translatef((F32)(pos.mV[VX]),	 
						   (F32)(pos.mV[VY]),	 
							(F32)(pos.mV[VZ]));	 
			 gGL.scalef(0.15f, 0.15f, 0.3f);

			 gSphere.renderGGL();

			 gGL.popMatrix();
			 gGL.setColorMask(true, false);
		}
		// don't render please
		return;
	}

	BOOL impostor = avatarp->isImpostor() && !single_avatar;

	if (impostor && pass != 0)
	{ //don't draw anything but the impostor for impostored avatars
		return;
	}
	
	if (pass == 0 && !impostor && LLPipeline::sUnderWaterRender)
	{ //don't draw foot shadows under water
		return;
	}

	if (pass == 0)
	{
		if (!LLPipeline::sReflectionRender)
		{
			LLVOAvatar::sNumVisibleAvatars++;
		}

		if (impostor)
		{
			if (LLPipeline::sRenderDeferred && !LLPipeline::sReflectionRender && avatarp->mImpostor.isComplete()) 
			{
				if (normal_channel > -1)
				{
					avatarp->mImpostor.bindTexture(2, normal_channel);
				}
				if (specular_channel > -1)
				{
					avatarp->mImpostor.bindTexture(1, specular_channel);
				}
			}
			avatarp->renderImpostor(LLColor4U(255,255,255,255), sDiffuseChannel);
		}
		//else if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_FOOT_SHADOWS) && !LLPipeline::sRenderDeferred)
		//{
		//	avatarp->renderFootShadows();	
		//}
		return;
	}

	llassert(LLPipeline::sImpostorRender || !avatarp->isVisuallyMuted());

	/*if (single_avatar && avatarp->mSpecialRenderMode >= 1) // 1=anim preview, 2=image preview,  3=morph view
	{
		gPipeline.enableLightsAvatarEdit(LLColor4(.5f, .5f, .5f, 1.f));
	}*/
	
	if (pass == 1)
	{
		// render rigid meshes (eyeballs) first
		avatarp->renderRigid();
		return;
	}

	if (pass == 3)
	{
		if (is_deferred_render)
		{
			renderDeferredRiggedSimple(avatarp);
		}
		else
		{
			renderRiggedSimple(avatarp);
			if (LLPipeline::sRenderDeferred)
			{ //render "simple" materials
				renderRigged(avatarp, RIGGED_MATERIAL);
				renderRigged(avatarp, RIGGED_MATERIAL_ALPHA_MASK);
				renderRigged(avatarp, RIGGED_MATERIAL_ALPHA_EMISSIVE);
				renderRigged(avatarp, RIGGED_NORMMAP);
				renderRigged(avatarp, RIGGED_NORMMAP_MASK);
				renderRigged(avatarp, RIGGED_NORMMAP_EMISSIVE);	
				renderRigged(avatarp, RIGGED_SPECMAP);
				renderRigged(avatarp, RIGGED_SPECMAP_MASK);
				renderRigged(avatarp, RIGGED_SPECMAP_EMISSIVE);
				renderRigged(avatarp, RIGGED_NORMSPEC);
				renderRigged(avatarp, RIGGED_NORMSPEC_MASK);
				renderRigged(avatarp, RIGGED_NORMSPEC_EMISSIVE);
			}
		}
		return;
	}

	if (pass == 4)
	{
		if (is_deferred_render)
		{
			renderDeferredRiggedBump(avatarp);
		}
		else
		{
			renderRiggedFullbright(avatarp);
		}

		return;
	}

	if (is_deferred_render && pass >= 5 && pass <= 21)
	{
		S32 p = pass-5;
		if (p != 1 &&
			p != 5 &&
			p != 9 &&
			p != 13)
		{
			renderDeferredRiggedMaterial(avatarp, p);
		}
		return;
	}
	if (pass == 5)
	{
		renderRiggedShinySimple(avatarp);
		return;
	}

	if (pass == 6)
	{
		renderRiggedFullbrightShiny(avatarp);
		return;
	}

	if (pass >= 7 && pass < 13)
	{
		if (pass == 7)
		{
			renderRiggedAlpha(avatarp);
			if (LLPipeline::sRenderDeferred && !is_post_deferred_render)
			{ //render transparent materials under water
				LLGLEnable blend(GL_BLEND);
				gGL.setColorMask(true, true);
				gGL.blendFunc(LLRender::BF_SOURCE_ALPHA,
								LLRender::BF_ONE_MINUS_SOURCE_ALPHA,
								LLRender::BF_ZERO,
								LLRender::BF_ONE_MINUS_SOURCE_ALPHA);
				renderRigged(avatarp, RIGGED_MATERIAL_ALPHA);
				renderRigged(avatarp, RIGGED_SPECMAP_BLEND);
				renderRigged(avatarp, RIGGED_NORMMAP_BLEND);
				renderRigged(avatarp, RIGGED_NORMSPEC_BLEND);
				gGL.setSceneBlendType(LLRender::BT_ALPHA);
				gGL.setColorMask(true, false);
			}
			return;
		}

		if (pass == 8)
		{
			renderRiggedFullbrightAlpha(avatarp);
			return;
		}
		if (LLPipeline::sRenderDeferred && is_post_deferred_render)
		{
			S32 p = 0;
			switch (pass)
			{
			case 9: p = 1; break;
			case 10: p = 5; break;
			case 11: p = 9; break;
			case 12: p = 13; break;
			}
			{
				LLGLEnable blend(GL_BLEND);
				renderDeferredRiggedMaterial(avatarp, p);
			}
			return;
		}
		else if (pass == 9)
		{
			renderRiggedGlow(avatarp);
			return;
		}
	}

	if (pass == 13)
	{
		renderRiggedGlow(avatarp);

		return;
	}
	
	if ((sShaderLevel >= SHADER_LEVEL_CLOTH))
	{
		LLMatrix4 rot_mat;
		LLViewerCamera::getInstance()->getMatrixToLocal(rot_mat);
		LLMatrix4 cfr(OGL_TO_CFR_ROTATION.getF32ptr());
		rot_mat *= cfr;
		
		LLVector4 wind;
		wind.setVec(avatarp->mWindVec);
		wind.mV[VW] = 0;
		wind = wind * rot_mat;
		wind.mV[VW] = avatarp->mWindVec.mV[VW];

		sVertexProgram->uniform4fv(LLViewerShaderMgr::AVATAR_WIND, 1, wind.mV);
		F32 phase = -1.f * (avatarp->mRipplePhase);

		F32 freq = 7.f + (noise1(avatarp->mRipplePhase) * 2.f);
		LLVector4 sin_params(freq, freq, freq, phase);
		sVertexProgram->uniform4fv(LLViewerShaderMgr::AVATAR_SINWAVE, 1, sin_params.mV);

		LLVector4 gravity(0.f, 0.f, -CLOTHING_GRAVITY_EFFECT, 0.f);
		gravity = gravity * rot_mat;
		sVertexProgram->uniform4fv(LLViewerShaderMgr::AVATAR_GRAVITY, 1, gravity.mV);
	}

	if( !single_avatar || (avatarp == single_avatar) )
	{
		avatarp->renderSkinned(AVATAR_RENDER_PASS_SINGLE);
	}
}
示例#7
0
bool GlobalConfig::isRemoteConfigAvailable()
{
    QFileInfo cfr(Settings::instance().downloadDir()+"/config-remote.txt");
    return cfr.exists();
}
BOOL QToolAlign::findSelectedManipulator(S32 x, S32 y)
{
	mHighlightedAxis = -1;
	mHighlightedDirection = 0;

	LLMatrix4 transform;
	if (LLSelectMgr::getInstance()->getSelection()->getSelectType() == SELECT_TYPE_HUD)
	{
		LLVector4 translation(mBBox.getCenterAgent());
		transform.initRotTrans(mBBox.getRotation(), translation);
		LLMatrix4 cfr(OGL_TO_CFR_ROTATION);
		transform *= cfr;
		LLMatrix4 window_scale;
		F32 zoom_level = 2.f * gAgentCamera.mHUDCurZoom;
		window_scale.initAll(LLVector3(zoom_level / LLViewerCamera::getInstance()->getAspect(), zoom_level, 0.f),
							 LLQuaternion::DEFAULT,
							 LLVector3::zero);
		transform *= window_scale;
	}
	else
	{
		transform.initAll(LLVector3(1.f, 1.f, 1.f), mBBox.getRotation(), mBBox.getCenterAgent());

		LLMatrix4 projection_matrix = LLViewerCamera::getInstance()->getProjection();
		LLMatrix4 model_matrix = LLViewerCamera::getInstance()->getModelview();

		transform *= model_matrix;
		transform *= projection_matrix;
	}


	LLRect world_view_rect = gViewerWindow->getWorldViewRectScaled();
	F32 half_width = (F32)world_view_rect.getWidth() / 2.f;
	F32 half_height = (F32)world_view_rect.getHeight() / 2.f;
	LLVector2 manip2d;
	LLVector2 mousePos((F32)x - half_width, (F32)y - half_height);
	LLVector2 delta;

	LLVector3 bbox_scale = mBBox.getMaxLocal() - mBBox.getMinLocal();
	
	for (S32 axis = VX; axis <= VZ; axis++)
	{
		for (F32 direction = -1.0; direction <= 1.0; direction += 2.0)
		{
			LLVector3 axis_vector = LLVector3(0,0,0);
			axis_vector.mV[axis] = direction * bbox_scale.mV[axis] / 2.0;
			
			LLVector4 manipulator_center = 	LLVector4(axis_vector);

			LLVector4 screen_center = manipulator_center * transform;
			screen_center /= screen_center.mV[VW];

			manip2d.setVec(screen_center.mV[VX] * half_width, screen_center.mV[VY] * half_height);

			delta = manip2d - mousePos;

			if (delta.magVecSquared() < MANIPULATOR_SELECT_SIZE * MANIPULATOR_SELECT_SIZE)
			{
				mHighlightedAxis = axis;
				mHighlightedDirection = direction;
				return TRUE;
			}

		}
	}

	return FALSE;
}
void CGameData::LoadGameLevelBU(std::string filename){
  CLog *pLog = CLog::Instance();
  
  //read assets.dat file
  CFileReader cfr(filename);
  if(cfr.IsValid() == false)
    return; //file is invalid or contains no usable data

  //validate asset data and add to appropriate vectors
  GAME_OBJECT temp;
  std::string value;
  std::string asset;
  m_level.clear();

  for(int i = 0; i < cfr.GetNumberOfLines(); ++i){
    asset = cfr.GetTerm(cfr.GetLineFromFile(i),1);
    if(asset == "mesh")
      temp.asset = C_MESH;        //mesh
    else if(asset == "splatter")
      temp.asset = C_SPLATTER;    //splatter
    else if(asset == "sprite")
      temp.asset = C_SPRITE;      //sprite
    else if(asset == "player")
      temp.asset = C_PLAYER;      //player
    else if(asset == "worldlimits")
      temp.asset = C_WORLD;       //world
    
    //mesh or splatter
    if (temp.asset == C_MESH || temp.asset == C_SPLATTER){
      value = cfr.GetTerm(cfr.GetLineFromFile(i),2);
      temp.meshID = atoi(value.c_str());
      value = cfr.GetTerm(cfr.GetLineFromFile(i),3);
      temp.meshBadID = atoi(value.c_str());
      value = cfr.GetTerm(cfr.GetLineFromFile(i),4);
      temp.x = atof(value.c_str());
      value = cfr.GetTerm(cfr.GetLineFromFile(i),5);
      temp.y = atof(value.c_str());
      value = cfr.GetTerm(cfr.GetLineFromFile(i),6);
      temp.z = atof(value.c_str());
      value = cfr.GetTerm(cfr.GetLineFromFile(i),7);
      temp.rx = atof(value.c_str());
      value = cfr.GetTerm(cfr.GetLineFromFile(i),8);
      temp.ry = atof(value.c_str());
      value = cfr.GetTerm(cfr.GetLineFromFile(i),9);
      temp.rz = atof(value.c_str());
      temp.alive = true;
      m_level.push_back(temp);
    }

    else if(temp.asset == C_SPRITE){
      value = cfr.GetTerm(cfr.GetLineFromFile(i),2);
      temp.spriteID = atoi(value.c_str());
      value = cfr.GetTerm(cfr.GetLineFromFile(i),3);
      temp.spriteBadID = atoi(value.c_str());
      value = cfr.GetTerm(cfr.GetLineFromFile(i),4);
      temp.left = atoi(value.c_str());
      value = cfr.GetTerm(cfr.GetLineFromFile(i),5);
      temp.top = atoi(value.c_str());
      temp.totalTime = 0.0;
      temp.frameCount = 0;      
      temp.alive = true;
      m_level.push_back(temp);
    }

    else if(temp.asset == C_PLAYER){
      //value = cfr.GetTerm(cfr.GetLineFromFile(i),2);
      //temp.spriteID = atoi(value.c_str());
      value = cfr.GetTerm(cfr.GetLineFromFile(i),3);
      m_playerX = atoi(value.c_str());
      value = cfr.GetTerm(cfr.GetLineFromFile(i),4);
      m_playerY = atoi(value.c_str());
      //temp.alive = true;
      //m_level.push_back(temp);
    }

    else if(temp.asset == C_WORLD){
      //pLog->Log("World found");
      value = cfr.GetTerm(cfr.GetLineFromFile(i),2);
      m_world_left = atof(value.c_str());
      value = cfr.GetTerm(cfr.GetLineFromFile(i),3);
      m_world_top = atof(value.c_str());
      value = cfr.GetTerm(cfr.GetLineFromFile(i),4);
      m_world_right = atof(value.c_str());
      value = cfr.GetTerm(cfr.GetLineFromFile(i),5);
      m_world_bottom = atof(value.c_str());

    }

  }
//pLog->Log("world top", m_world_top);
}
示例#10
0
void CGameData::LoadGameLevel(std::string filename, CGraphics &con){
  CLog *pLog = CLog::Instance();
  
  //read assets.dat file
  CFileReader cfr(filename);
  if(cfr.IsValid() == false)
    return; //file is invalid or contains no usable data

  //validate asset data and add to appropriate vectors
  GAME_OBJECT temp;
  GRAPHIC_IMAGE gi;
  GAME_OBJECT go;
  GAME_OBJECT_TYPE got;
  std::string value;
  std::string asset;
  m_level.clear();
  unsigned long size = 0;
  CGrandma tempMa;
  //CElf elf;
  //CLandscape land;
  //CCharacter character;
  srand((unsigned)time(NULL));

  for(int i = 0; i < cfr.GetNumberOfLines(); ++i){
    asset = cfr.GetTerm(cfr.GetLineFromFile(i),1);

    if(asset == "sprite")
      temp.asset = C_SPRITE;      //sprite
    else if(asset == "player")
      temp.asset = C_PLAYER;      //player
    else if(asset == "worldlimits")
      temp.asset = C_WORLD;       //world
    else if(asset == "tree1")
      temp.asset = C_TREE1; 
    else if(asset == "tree2")
      temp.asset = C_TREE2; 
    else if(asset == "tree3")
      temp.asset = C_TREE3; 
    
    //mesh or splatter
    //if (temp.asset == C_MESH || temp.asset == C_SPLATTER){
    if(asset == "mesh" || asset == "splatter"){
      if(asset == "mesh")
        temp.asset = C_MESH;        //mesh
      else if(asset == "splatter")
        temp.asset = C_SPLATTER;    //splatter      

      value = cfr.GetTerm(cfr.GetLineFromFile(i),2);
      temp.meshID = atoi(value.c_str());
      value = cfr.GetTerm(cfr.GetLineFromFile(i),3);
      temp.meshBadID = atoi(value.c_str());
      value = cfr.GetTerm(cfr.GetLineFromFile(i),4);
      temp.x = atof(value.c_str());
      value = cfr.GetTerm(cfr.GetLineFromFile(i),5);
      temp.y = atof(value.c_str());
      value = cfr.GetTerm(cfr.GetLineFromFile(i),6);
      temp.z = atof(value.c_str());
      value = cfr.GetTerm(cfr.GetLineFromFile(i),7);
      temp.rx = atof(value.c_str());
      value = cfr.GetTerm(cfr.GetLineFromFile(i),8);
      temp.ry = atof(value.c_str());
      value = cfr.GetTerm(cfr.GetLineFromFile(i),9);
      temp.rz = atof(value.c_str());
      temp.alive = true;
      m_level.push_back(temp);
    }

    //game time
    else if(asset == "time"){
      value = cfr.GetTerm(cfr.GetLineFromFile(i),2);
      m_player.m_time = atoi(value.c_str());
    }

    else if(asset == "player"){// temp.asset == C_PLAYER){
      value = cfr.GetTerm(cfr.GetLineFromFile(i),2);
      if(value == "position"){
        value = cfr.GetTerm(cfr.GetLineFromFile(i),3);
        m_playerX = atoi(value.c_str());
        m_player.go.pos.x = atoi(value.c_str());
        value = cfr.GetTerm(cfr.GetLineFromFile(i),4);
        m_playerY = atoi(value.c_str());
        m_player.go.pos.y = atoi(value.c_str());
      }
    }

    else if(asset == "grandma"){
      //m_grandma.push_back(new CGrandma);

      //look for match between level object name and game object types
      go.spriteID = -1;
      for(int j = 0; j < m_objectType.size(); ++j){
        //pLog->Log("Object", m_objectType[j].name, m_objectType[j].spriteID);

        if(m_objectType[j].name == "grandma"){

          //load game object data from file
          value = cfr.GetTerm(cfr.GetLineFromFile(i),2);
          go.pos.x = atoi(value.c_str());
          value = cfr.GetTerm(cfr.GetLineFromFile(i),3);
          go.pos.y = atoi(value.c_str());
          value = cfr.GetTerm(cfr.GetLineFromFile(i),4);
          go.mode = atoi(value.c_str());

          //load game object data from assets and sprite data
          go.spriteID = m_objectType[j].spriteID;
          go.spriteBadID = m_objectType[j].badSpriteID;
          go.objectID = m_objectType[j].objectID;
          //if(go.objectID > 15){
          //  pLog->Log("Loaded", go.objectID, go.pos.x, go.pos.y);
          //}
          go.radius = m_objectType[j].radius;
          go.layer = m_objectType[j].layer;
          gi = con.GetSprite(go.spriteID);
          go.totalTime = (double)( rand() % 1000)/1000;
          go.width = gi.width;
          go.height = gi.height;
          go.maxFrames = gi.maxFrames; //1=static, >1 is an animation
          go.updateInterval = gi.updateInterval; //how often to change frames
          go.alive = true;
          go.dying = false;
          go.angle = 0;
          if(go.maxFrames > 1)
            go.frameCount = rand() % go.maxFrames;
          else
            go.frameCount = 0;  //sets initial animation frame
          tempMa.go = go;
          m_grandma.push_back(tempMa);// [m_grandma.size() - 1].go = go;

          //pLog->Log("object added", m_pObject[m_pObject.size() - 1]->go.objectID);
          break;
        }
      }
    }
/*
    else if(asset == "ogre"){
      //m_ogregrandma.push_back(new CGrandma);

      //look for match between level object name and game object types
      go.spriteID = -1;
      for(int j = 0; j < m_objectType.size(); ++j){
        //pLog->Log("Object", m_objectType[j].name, m_objectType[j].spriteID);

        if(m_objectType[j].name == "ogre"){

          //load game object data from file
          value = cfr.GetTerm(cfr.GetLineFromFile(i),2);
          go.pos.x = atoi(value.c_str());
          value = cfr.GetTerm(cfr.GetLineFromFile(i),3);
          go.pos.y = atoi(value.c_str());
          //value = cfr.GetTerm(cfr.GetLineFromFile(i),4);
          //go.mode = atoi(value.c_str());

          //load game object data from assets and sprite data
          go.spriteID = m_objectType[j].spriteID;
          go.spriteBadID = m_objectType[j].badSpriteID;
          go.objectID = m_objectType[j].objectID;
          //if(go.objectID > 15){
          //  pLog->Log("Loaded", go.objectID, go.pos.x, go.pos.y);
          //}
          go.radius = m_objectType[j].radius;
          go.layer = m_objectType[j].layer;
          gi = con.GetSprite(go.spriteID);
          go.totalTime = (double)( rand() % 1000)/1000;
          go.width = gi.width;
          go.height = gi.height;
          go.maxFrames = gi.maxFrames; //1=static, >1 is an animation
          go.updateInterval = gi.updateInterval; //how often to change frames
          go.alive = true;
          go.dying = false;
          go.angle = 0;
          if(go.maxFrames > 1)
            go.frameCount = rand() % go.maxFrames;
          else
            go.frameCount = 0;  //sets initial animation frame
          //m_ogre.go = go;
          //m_grandma[m_grandma.size() - 1].go = go;

          //pLog->Log("object added", m_pObject[m_pObject.size() - 1]->go.objectID);
          break;
        }
      }
    }
*/
    else if(asset == "elf"){
      m_pObject.push_back(new CElf);

      //look for match between level object name and game object types
      go.spriteID = -1;
      for(int j = 0; j < m_objectType.size(); ++j){
        //pLog->Log("Object", m_objectType[j].name, m_objectType[j].spriteID);

        if(m_objectType[j].name == "elf"){

          //load game object data from file
          value = cfr.GetTerm(cfr.GetLineFromFile(i),2);
          go.pos.x = atoi(value.c_str());
          value = cfr.GetTerm(cfr.GetLineFromFile(i),3);
          go.pos.y = atoi(value.c_str());
          value = cfr.GetTerm(cfr.GetLineFromFile(i),4);
          go.speed = atof(value.c_str());

          //load game object data from assets and sprite data
          go.spriteID = m_objectType[j].spriteID;
          go.spriteBadID = m_objectType[j].badSpriteID;
          go.objectID = m_objectType[j].objectID;
          //if(go.objectID > 15){
          //  pLog->Log("Loaded", go.objectID, go.pos.x, go.pos.y);
          //}
          go.radius = m_objectType[j].radius;
          go.layer = m_objectType[j].layer;
          gi = con.GetSprite(go.spriteID);
          go.totalTime = (double)( rand() % 1000)/1000;
          go.width = gi.width;
          go.height = gi.height;
          go.maxFrames = gi.maxFrames; //1=static, >1 is an animation
          go.updateInterval = gi.updateInterval; //how often to change frames
          go.alive = true;
          go.dying = false;
          go.angle = 0;
          if(go.maxFrames > 1)
            go.frameCount = rand() % go.maxFrames;
          else
            go.frameCount = 0;  //sets initial animation frame
          m_pObject[m_pObject.size() - 1]->go = go;

          //pLog->Log("object added", m_pObject[m_pObject.size() - 1]->go.objectID);
          break;
        }
      }
    }

    else if(asset == "fairy"){
      m_pObject.push_back(new CFairy);

      //look for match between level object name and game object types
      go.spriteID = -1;
      for(int j = 0; j < m_objectType.size(); ++j){
        //pLog->Log("Object", m_objectType[j].name, m_objectType[j].spriteID);

        if(m_objectType[j].name == "fairy"){

          //load game object data from file
          value = cfr.GetTerm(cfr.GetLineFromFile(i),2);
          go.pos.x = atoi(value.c_str());
          value = cfr.GetTerm(cfr.GetLineFromFile(i),3);
          go.pos.y = atoi(value.c_str());
          value = cfr.GetTerm(cfr.GetLineFromFile(i),4);
          go.speed = atof(value.c_str());

          //load game object data from assets and sprite data
          go.spriteID = m_objectType[j].spriteID;
          go.spriteBadID = m_objectType[j].badSpriteID;
          go.objectID = m_objectType[j].objectID;
          //if(go.objectID > 15){
          //  pLog->Log("Loaded", go.objectID, go.pos.x, go.pos.y);
          //}
          go.radius = m_objectType[j].radius;
          go.layer = m_objectType[j].layer;
          gi = con.GetSprite(go.spriteID);
          go.totalTime = (double)( rand() % 1000)/1000;
          go.width = gi.width;
          go.height = gi.height;
          go.maxFrames = gi.maxFrames; //1=static, >1 is an animation
          go.updateInterval = gi.updateInterval; //how often to change frames
          go.alive = true;
          go.angle = 0;
          if(go.maxFrames > 1)
            go.frameCount = rand() % go.maxFrames;
          else
            go.frameCount = 0;  //sets initial animation frame
          m_pObject[m_pObject.size() - 1]->go = go;

          //pLog->Log("object added", m_pObject[m_pObject.size() - 1]->go.objectID);
          break;
        }
      }
    }

    else if(asset == "witch"){
      m_pObject.push_back(new CWitch);

      //look for match between level object name and game object types
      go.spriteID = -1;
      for(int j = 0; j < m_objectType.size(); ++j){
        //pLog->Log("Object", m_objectType[j].name, m_objectType[j].spriteID);

        if(m_objectType[j].name == "witch"){

          //load game object data from file
          value = cfr.GetTerm(cfr.GetLineFromFile(i),2);
          go.pos.x = atoi(value.c_str());
          value = cfr.GetTerm(cfr.GetLineFromFile(i),3);
          go.pos.y = atoi(value.c_str());
          value = cfr.GetTerm(cfr.GetLineFromFile(i),4);
          go.speed = atof(value.c_str());

          //load game object data from assets and sprite data
          go.spriteID = m_objectType[j].spriteID;
          go.spriteBadID = m_objectType[j].badSpriteID;
          go.objectID = m_objectType[j].objectID;
          //if(go.objectID > 15){
          //  pLog->Log("Loaded", go.objectID, go.pos.x, go.pos.y);
          //}
          go.radius = m_objectType[j].radius;
          go.layer = m_objectType[j].layer;
          gi = con.GetSprite(go.spriteID);
          go.totalTime = (double)( rand() % 1000)/1000;
          go.width = gi.width;
          go.height = gi.height;
          go.maxFrames = gi.maxFrames; //1=static, >1 is an animation
          go.updateInterval = gi.updateInterval; //how often to change frames
          go.alive = true;
          go.angle = 0;
          if(go.maxFrames > 1)
            go.frameCount = rand() % go.maxFrames;
          else
            go.frameCount = 0;  //sets initial animation frame

          m_pObject[m_pObject.size() - 1]->go = go;

          //pLog->Log("object added", m_pObject[m_pObject.size() - 1]->go.objectID);
          break;
        }
      }
    }

    else if(asset == "worldlimits"){ //temp.asset == C_WORLD){
      value = cfr.GetTerm(cfr.GetLineFromFile(i),2);
      m_world_left = atof(value.c_str());
      value = cfr.GetTerm(cfr.GetLineFromFile(i),3);
      m_world_top = atof(value.c_str());
      value = cfr.GetTerm(cfr.GetLineFromFile(i),4);
      m_world_right = atof(value.c_str());
      value = cfr.GetTerm(cfr.GetLineFromFile(i),5);
      m_world_bottom = atof(value.c_str());
    }

    //generic objects
    else if(cfr.GetNumberOfTermsFromLine(i) == 3){
      m_pObject.push_back(new CGeneric);
      go.pos.x = 0;
      go.pos.y = 0;
      go.pos.z = 0;

      //read name of game object
      value = cfr.GetTerm(cfr.GetLineFromFile(i),1);

      //look for match between level object name and game object types
      go.spriteID = -1;
      for(int j = 0; j < m_objectType.size(); ++j){
        if(m_objectType[j].name == value){
          
          //load game object data from file
          value = cfr.GetTerm(cfr.GetLineFromFile(i),2);
          go.pos.x = atoi(value.c_str());
          value = cfr.GetTerm(cfr.GetLineFromFile(i),3);
          go.pos.y = atoi(value.c_str());

          //load game object data from assets and sprite data
          go.spriteID = m_objectType[j].spriteID;
          go.spriteBadID = m_objectType[j].badSpriteID;
          go.objectID = m_objectType[j].objectID;
          go.radius = m_objectType[j].radius;
          go.layer = m_objectType[j].layer;
          gi = con.GetSprite(go.spriteID);
          go.totalTime = (double)( rand() % 1000)/1000;
          go.width = gi.width;
          go.height = gi.height;
          go.maxFrames = gi.maxFrames; //1=static, >1 is an animation
          go.updateInterval = gi.updateInterval; //how often to change frames
          go.alive = true;
          go.dying = false;
          go.angle = 0;
          if(go.maxFrames > 1)
            go.frameCount = rand() % go.maxFrames;
          else
            go.frameCount = 0;  //sets initial animation frame

          m_pObject[m_pObject.size() - 1]->go = go;
          //pLog->Log("object added", m_pObject[m_pObject.size() - 1]->go.objectID);
          break;
        }
      }
    }
  }
}
示例#11
0
bool NucleicAcidTools::symm_match( clipper::MiniMol& molwrk, const clipper::MiniMol& molref )
{
  clipper::Spacegroup spg1 = clipper::Spacegroup(clipper::Spacegroup::P1);
  clipper::Spacegroup spgr = molwrk.spacegroup();
  clipper::Cell       cell = molwrk.cell();

  // calculate extent of model
  clipper::Atom_list atomr = molref.atom_list();
  clipper::Range<clipper::ftype> urange, vrange, wrange;
  clipper::Coord_frac cfr( 0.0, 0.0, 0.0 );
  for ( int i = 0; i < atomr.size(); i++ ) {
    clipper::Coord_frac cf = atomr[i].coord_orth().coord_frac( cell );
    cfr += cf;
    urange.include( cf.u() );
    vrange.include( cf.v() );
    wrange.include( cf.w() );
  }
  clipper::Coord_frac cf0( urange.min(), vrange.min(), wrange.min() );
  clipper::Coord_frac cf1( urange.max(), vrange.max(), wrange.max() );
  cfr = (1.0/double(atomr.size())) * cfr;

  // calculate mask using wrk cell and ref atoms
  clipper::Resolution reso( 5.0 );
  clipper::Grid_sampling grid( spg1, cell, reso );
  clipper::Grid_range    grng( grid,  cf0,  cf1 );
  grng.add_border(4);
  clipper::NXmap<float> nxmap( cell, grid, grng ), nxflt( cell, grid, grng );
  clipper::EDcalc_mask<float> maskcalc( 2.0 );
  nxmap = 0.0;
  maskcalc( nxmap, atomr );
  MapFilterFn_g5 fn;
  clipper::MapFilter_fft<float>
    fltr( fn, 1.0, clipper::MapFilter_fft<float>::Relative );
  fltr( nxflt, nxmap );

  // now score each chain, symmetry and offset in turn
  for ( int c = 0; c < molwrk.size(); c++ ) {
    double              bestscr = 0.0;
    int                 bestsym = 0;
    clipper::Coord_frac bestoff( 0.0, 0.0, 0.0 );
    const clipper::Coord_frac cfh( 0.5, 0.5, 0.5 );
    for ( int sym = 0; sym < spgr.num_symops(); sym++ ) {
      clipper::Atom_list atomw = molwrk[c].atom_list();
      clipper::RTop_orth rtop = spgr.symop(sym).rtop_orth( cell );
      clipper::Coord_orth cow( 0.0, 0.0, 0.0 );
      for ( int a = 0; a < atomw.size(); a++ ) {
	atomw[a].transform( rtop );
	cow += atomw[a].coord_orth();
      }
      if ( atomw.size() > 0 ) cow = (1.0/double(atomw.size())) * cow;
      clipper::Coord_frac cfw = cow.coord_frac( cell );
      clipper::Coord_frac cfwt = cfw.lattice_copy_near( cfr - cfh );
      clipper::Coord_frac off0 = cfwt - cfw;

      // try offsets
      for ( double du = 0.0; du <= 1.01; du += 1.0 )
	for ( double dv = 0.0; dv < 1.01; dv += 1.0 )
	  for ( double dw = 0.0; dw < 1.01; dw += 1.0 ) {
	    clipper::Coord_frac off( rint( off0.u() ) + du,
				     rint( off0.v() ) + dv,
				     rint( off0.w() ) + dw );
	    clipper::Coord_orth ofo = off.coord_orth( cell );
	    double scr = 0.0;
	    for ( int a = 0; a < atomw.size(); a++ ) {
	      clipper::Coord_orth coa = atomw[a].coord_orth() + ofo;
	      clipper::Coord_grid cga = nxflt.coord_map( coa ).coord_grid();
	      if ( nxflt.in_map( cga ) ) scr += nxflt.get_data( cga );
	    }
	    if ( scr > bestscr ) {
	      bestscr = scr;
	      bestsym = sym;
	      bestoff = off;
	    }
	  }
    }
    // now transform using the best operator
    clipper::Coord_orth cot = bestoff.coord_orth( cell );
    clipper::RTop_orth rtop = spgr.symop(bestsym).rtop_orth( cell );
    rtop = clipper::RTop_orth( rtop.rot(), rtop.trn()+cot );
    molwrk[c].transform( rtop );
  }

  return true;
}