extracted GameRules.FieldLoader from UnitInfo.cs

This commit is contained in:
Bob
2009-10-13 19:17:43 +13:00
parent 9ba0a632e2
commit e86b0cdaa0
3 changed files with 48 additions and 31 deletions

View File

@@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenRa.FileFormats;
namespace OpenRa.Game.GameRules
{
static class FieldLoader
{
public static void Load( UnitInfo.BaseInfo self, IniSection ini )
{
foreach( var x in ini )
{
var field = self.GetType().GetField( x.Key );
if( field.FieldType == typeof( int ) )
field.SetValue( self, int.Parse( x.Value ) );
else if( field.FieldType == typeof( float ) )
field.SetValue( self, float.Parse( x.Value ) );
else if( field.FieldType == typeof( string ) )
field.SetValue( self, x.Value.ToLowerInvariant() );
else if( field.FieldType.IsEnum )
field.SetValue( self, Enum.Parse( field.FieldType, x.Value ) );
else if( field.FieldType == typeof( bool ) )
field.SetValue( self, ParseYesNo( x.Value ) );
else
do { } while( false );
}
}
static bool ParseYesNo( string p )
{
p = p.ToLowerInvariant();
if( p == "yes" ) return true;
if( p == "true" ) return true;
if( p == "no" ) return false;
if( p == "false" ) return false;
throw new InvalidOperationException();
}
}
}

View File

@@ -10,16 +10,6 @@ namespace OpenRa.Game.GameRules
{
public class UnitInfo
{
static bool ParseYesNo( string p )
{
p = p.ToLowerInvariant();
if( p == "yes" ) return true;
if( p == "true" ) return true;
if( p == "no" ) return false;
if( p == "false" ) return false;
throw new InvalidOperationException();
}
static Func<string, IniSection, BaseInfo> BindInfoCtor<T>()
where T : BaseInfo
{
@@ -92,27 +82,7 @@ namespace OpenRa.Game.GameRules
{
Name = name.ToLowerInvariant();
foreach( var x in ini )
{
var field = this.GetType().GetField( x.Key );
if( field.FieldType == typeof( int ) )
field.SetValue( this, int.Parse( x.Value ) );
else if( field.FieldType == typeof( float ) )
field.SetValue( this, float.Parse( x.Value ) );
else if( field.FieldType == typeof( string ) )
field.SetValue( this, x.Value.ToLowerInvariant() );
else if( field.FieldType == typeof( ArmorType ) )
field.SetValue( this, Enum<ArmorType>.Parse(x.Value) );
else if( field.FieldType == typeof( bool ) )
field.SetValue( this, ParseYesNo( x.Value ) );
else
do { } while( false );
}
FieldLoader.Load( this, ini );
}
}

View File

@@ -72,6 +72,7 @@
<ItemGroup>
<Compile Include="Actor.cs" />
<Compile Include="Controller.cs" />
<Compile Include="GameRules\FieldLoader.cs" />
<Compile Include="GameRules\Footprint.cs" />
<Compile Include="GameRules\Rules.cs" />
<Compile Include="GameRules\UnitInfo.cs" />