//////////////////////////////////////////////////////////////////////
// feature_Factory::ProcessTDF() //                \author Logan Jones
//////////////////////////////////                     \date 2/13/2002
//               
//====================================================================
// Parameters:
//  void* hFile               - 
//  LPCTSTR strHostDirectory  - 
//  LPCTSTR strFileName       - 
//  game_LoadFacilitator Load - 
//
// Return: BOOL - 
//
BOOL feature_Factory::ProcessTDF( void* hFile, LPCTSTR strHostDirectory, LPCTSTR strFileName, game_LoadFacilitator Load )
{
	DWORD				FileSize;
	BYTE*				FileBuffer;
	util_TxtParse		Parser;
	Parse_Info			Info;
	BOOL				bWorking;
	char				FeatureName[32];
	FeatureFileInfo_t	FeatureInfo;

// Macros used in filling the strucure with info from the file
#define STRING_MEMBER( NAME ) CASE( #NAME ) \
	strcpy( FeatureInfo.NAME, Info.Value );
#define INT_MEMBER( NAME ) CASE( #NAME ) \
		FeatureInfo.NAME = atol( Info.Value ); \

	// Sanity check
	if( hFile==NULL ) return FALSE;

	// Get the file
	FileSize = theFileTree.DumpFileToBuffer( static_cast<app_FileTree::HFILEENTRY>(hFile), &FileBuffer );

	// Begin working on the TDF
	bWorking = Parser.Begin( FileBuffer, FileSize, &Info );
	while( bWorking )
	{
		// Find the next feature
		while( bWorking )
		{
			if( (Info.Type==PARSE_Header)&&(Parser.Locale()==0) ) break;
			bWorking = Parser.Continue( &Info );
		}

		// Check if this feature is in the list
		if( IsInToLoadList(Info.Value) )
		{
			strcpy( FeatureName, Info.Value );
			theApp.Console.Comment( CT_LOAD, "Loading feature \"%s\"", FeatureName );
			Load.Progress( 90.0f * m_FeatureTypes.size() / m_ToLoadCount );

			// Initialize and fill the feature info structure
			ZeroMemory( &FeatureInfo, sizeof(FeatureFileInfo_t) );
			bWorking = Parser.Continue( &Info );
			if( bWorking && Info.Type==PARSE_LevelUp )
				for( ;bWorking && Parser.Locale()>0; bWorking=Parser.Continue( &Info ) )
					if( (Info.Type==PARSE_VarVal)&&(Parser.Locale()==1) )
						STRING_SWITCH( Info.Variable )
							STRING_MEMBER( World ) 
							STRING_MEMBER( Description ) 
							STRING_MEMBER( Category ) 
							INT_MEMBER( FootPrintX ) 
							INT_MEMBER(	FootPrintZ ) 
							INT_MEMBER(	Height ) 
							STRING_MEMBER( Object ) 
							STRING_MEMBER( FileName )
							STRING_MEMBER( SeqName ) 
							STRING_MEMBER( SeqNameShad ) 
							STRING_MEMBER( SeqNameReclamate ) 
							STRING_MEMBER( FeatureReclamate ) 
							STRING_MEMBER( SeqNameBurn ) 
							STRING_MEMBER( FeatureBurnt ) 
							STRING_MEMBER( SeqNameDie ) 
							STRING_MEMBER( FeatureDead ) 
							INT_MEMBER(	Energy ) 
							INT_MEMBER(	Metal ) 
							INT_MEMBER(	BurnMin ) 
							INT_MEMBER(	BurnMax ) 
							INT_MEMBER(	SparkTime ) 
							INT_MEMBER(	SpreadChance ) 
							STRING_MEMBER( BurnWeapon ) 
							INT_MEMBER(	AnimTrans ) 
							INT_MEMBER(	ShadTrans ) 
							INT_MEMBER(	Animating ) 
							INT_MEMBER(	Flamable ) 
							INT_MEMBER(	Reclaimable ) 
							INT_MEMBER(	Reproduce ) 
							INT_MEMBER(	ReproduceArea ) 
							INT_MEMBER(	Blocking ) 
							INT_MEMBER(	HitDensity ) 
							INT_MEMBER(	Damage ) 
							INT_MEMBER(	Geothermal ) 
							INT_MEMBER(	Indestructible ) 
							INT_MEMBER(	NoDisplayInfo ) 
							INT_MEMBER(	Permanent ) 
						END_STRING_SWITCH

			// Add the feature
			AddFeatureType( FeatureName, &FeatureInfo );

		} // end if( IsInToLoadList )
		else bWorking = Parser.Continue( &Info );

	} // end while( bWorking )

	return TRUE;
}
Exemple #2
0
  FLOAT_MEMBER (Hardware.DownstreamExtrusionMultiplier, "DownstreamExtrusionMultiplier", 1.0, false),

  // Volume
  { OFFSET (Hardware.Volume.x), T_FLOAT, "mfVolumeX", "Hardware.Volume.X", 200, false },
  { OFFSET (Hardware.Volume.y), T_FLOAT, "mfVolumeY", "Hardware.Volume.Y", 200, false },
  { OFFSET (Hardware.Volume.z), T_FLOAT, "mfVolumeZ", "Hardware.Volume.Z", 140, false },
  // PrintMargin
  { OFFSET (Hardware.PrintMargin.x), T_FLOAT, "PrintMarginX", "Hardware.PrintMargin.X", 10, false },
  { OFFSET (Hardware.PrintMargin.y), T_FLOAT, "PrintMarginY", "Hardware.PrintMargin.Y", 10, false },
  { OFFSET (Hardware.PrintMargin.z), T_FLOAT, "PrintMarginZ", "Hardware.PrintMargin.Z", 0, false },

  FLOAT_MEMBER  (Hardware.ExtrudedMaterialWidth, "ExtrudedMaterialWidth", 0.7, false),
  { OFFSET (Hardware.PortName), T_STRING, "Hardware.PortName", NULL, 0, DEFAULT_COM_PORT, false },
  { OFFSET (Hardware.SerialSpeed), T_INT, "Hardware.SerialSpeed", NULL, 19200, false }, /* 57600 ? */
  BOOL_MEMBER   (Hardware.ValidateConnection, "ValidateConnection", true, false),
  INT_MEMBER    (Hardware.KeepLines, "KeepLines", 1000, false),
  INT_MEMBER    (Hardware.ReceivingBufferSize, "ReceivingBufferSize", 4, false),

  // Slicing
  BOOL_MEMBER  (Slicing.UseIncrementalEcode, "UseIncrementalEcode", true, false),
  BOOL_MEMBER  (Slicing.Use3DGcode, "Use3DGcode", false, false),
  BOOL_MEMBER  (Slicing.EnableAntiooze, "EnableAntiooze", false, false),
  FLOAT_MEMBER (Slicing.AntioozeDistance, "AntioozeDistance", 4.5, false),
  FLOAT_MEMBER (Slicing.AntioozeSpeed, "AntioozeSpeed", 1000.0, false),

  FLOAT_MEMBER  (Slicing.InfillDistance, "InfillDistance", 2.0, false),
  FLOAT_MEMBER  (Slicing.InfillRotation, "InfillRotation", 45.0, false),
  FLOAT_MEMBER  (Slicing.InfillRotationPrLayer, "InfillRotationPrLayer", 90.0, false),
  FLOAT_MEMBER  (Slicing.AltInfillDistance, "AltInfillDistance", 2.0, false),
  STRING_MEMBER (Slicing.AltInfillLayersText, "AltInfillLayersText", "", false),