vint8 class_interpreter::process_command_file1(const char * simple_file_name)
{
  // We require that the file is in the directory g_code_directory/commands 
  // and we add the ".txt" extension to it.
  char * temp = vJoinPaths(g_code_directory, "commands");
  char * temp2;
  if (vStringEndsIn(simple_file_name, ".txt"))
  {
    temp2 = vCopyString(simple_file_name);
  }
  else
  {
    temp2 = vMergeStrings2(simple_file_name, ".txt");
  }
  char * file = vJoinPaths(temp, temp2);
  vdelete2(temp);
  vdelete2(temp2);

  vint8 result = process_command_file2(file);
  delete_pointer(file);
  return result;
}
ProcessedMaterial::~ProcessedMaterial()
{
   for_each( mPasses.begin(), mPasses.end(), delete_pointer() );
}
示例#3
0
void TerrainCellMaterial::init(  TerrainBlock *block,
                                 U64 activeMaterials, 
                                 bool prePassMat,
                                 bool reflectMat,
                                 bool baseOnly )
{
   // This isn't allowed for now.
   AssertFatal( !( prePassMat && reflectMat ), "TerrainCellMaterial::init - We shouldn't get prepass and reflection in the same material!" );

   mTerrain = block;
   mMaterials = activeMaterials;

   Vector<MaterialInfo*> materials;

   for ( U32 i = 0; i < 64; i++ )
   {
      if ( !( mMaterials & ((U64)1 << i ) ) )
         continue;

      TerrainMaterial *mat = block->getMaterial( i );

      MaterialInfo *info = new MaterialInfo();
      info->layerId = i;
      info->mat = mat;
      materials.push_back( info );
   }

   mCurrPass = 0;
   mPasses.clear();

   // Ok... loop till we successfully generate all 
   // the shader passes for the materials.
   while ( materials.size() > 0 || baseOnly )
   {
      mPasses.increment();

      if ( !_createPass(   &materials, 
                           &mPasses.last(), 
                           mPasses.size() == 1, 
                           prePassMat,
                           reflectMat,
                           baseOnly ) )
      {
         Con::errorf( "TerrainCellMaterial::init - Failed to create pass!" );

         // The pass failed to be generated... give up.
         mPasses.last().materials.clear();
         mPasses.clear();
         for_each( materials.begin(), materials.end(), delete_pointer() );
         return;
      }

      if ( baseOnly )
         break;
   }

   // Cleanup any remaining matinfo.
   for_each( materials.begin(), materials.end(), delete_pointer() );

   // If we have attached mats then update them too.
   if ( mPrePassMat )
      mPrePassMat->init( mTerrain, mMaterials, true, false, baseOnly );
   if ( mReflectMat )
      mReflectMat->init( mTerrain, mMaterials, false, true, baseOnly );
}