generic info loader, projectiles
This commit is contained in:
32
OpenRa.Game/GameRules/InfoLoader.cs
Normal file
32
OpenRa.Game/GameRules/InfoLoader.cs
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using OpenRa.FileFormats;
|
||||||
|
using OpenRa.Game.Graphics;
|
||||||
|
using IjwFramework.Types;
|
||||||
|
|
||||||
|
namespace OpenRa.Game.GameRules
|
||||||
|
{
|
||||||
|
class InfoLoader<T>
|
||||||
|
{
|
||||||
|
readonly Dictionary<string, T> infos = new Dictionary<string, T>();
|
||||||
|
|
||||||
|
public InfoLoader(IniFile rules, params Pair<string, Func<string,T>>[] srcs)
|
||||||
|
{
|
||||||
|
foreach (var src in srcs)
|
||||||
|
foreach (var s in Util.ReadAllLines(FileSystem.Open(src.First)))
|
||||||
|
{
|
||||||
|
var name = s.Split(',')[0];
|
||||||
|
var t = src.Second(name.ToLowerInvariant());
|
||||||
|
FieldLoader.Load(t, rules.GetSection(name));
|
||||||
|
infos[name.ToLowerInvariant()] = t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public T this[string name]
|
||||||
|
{
|
||||||
|
get { return infos[name.ToLowerInvariant()]; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
34
OpenRa.Game/GameRules/ProjectileInfo.cs
Normal file
34
OpenRa.Game/GameRules/ProjectileInfo.cs
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace OpenRa.Game.GameRules
|
||||||
|
{
|
||||||
|
class ProjectileInfo
|
||||||
|
{
|
||||||
|
public readonly bool AA = false;
|
||||||
|
public readonly bool AG = false;
|
||||||
|
public readonly bool ASW = false;
|
||||||
|
public readonly bool Animates = false;
|
||||||
|
public readonly bool Arcing = false;
|
||||||
|
public readonly int Arm = 0;
|
||||||
|
public readonly bool Degenerates = false;
|
||||||
|
public readonly bool Dropping = false;
|
||||||
|
public readonly int Frames = 1;
|
||||||
|
public readonly bool Gigundo = false;
|
||||||
|
public readonly bool High = false;
|
||||||
|
public readonly string Image = null;
|
||||||
|
public readonly bool Inaccurate = false;
|
||||||
|
public readonly bool Inviso = false;
|
||||||
|
public readonly bool Parachuted = false;
|
||||||
|
public readonly bool Proximity = false;
|
||||||
|
public readonly int ROT = 0;
|
||||||
|
public readonly bool Ranged = false;
|
||||||
|
public readonly bool Rotates = false;
|
||||||
|
public readonly bool Shadow = true;
|
||||||
|
public readonly bool Translucent = false;
|
||||||
|
public readonly bool UnderWater = false;
|
||||||
|
public readonly int RangeLimit = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,23 +3,36 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using OpenRa.FileFormats;
|
using OpenRa.FileFormats;
|
||||||
using OpenRa.Game.GameRules;
|
using OpenRa.Game.GameRules;
|
||||||
|
using IjwFramework.Types;
|
||||||
|
|
||||||
namespace OpenRa.Game
|
namespace OpenRa.Game
|
||||||
{
|
{
|
||||||
static class Rules
|
static class Rules
|
||||||
{
|
{
|
||||||
public static UnitInfoLoader UnitInfo;
|
public static InfoLoader<UnitInfo> UnitInfo;
|
||||||
public static WeaponInfoLoader WeaponInfo;
|
public static InfoLoader<WeaponInfo> WeaponInfo;
|
||||||
public static WarheadInfoLoader WarheadInfo;
|
public static InfoLoader<WarheadInfo> WarheadInfo;
|
||||||
|
public static InfoLoader<ProjectileInfo> ProjectileInfo;
|
||||||
public static Footprint Footprint;
|
public static Footprint Footprint;
|
||||||
|
|
||||||
// TODO: load rules from the map, where appropriate.
|
// TODO: load rules from the map, where appropriate.
|
||||||
public static void LoadRules()
|
public static void LoadRules()
|
||||||
{
|
{
|
||||||
var rulesIni = new IniFile( FileSystem.Open( "rules.ini" ) );
|
var rulesIni = new IniFile(FileSystem.Open("rules.ini"));
|
||||||
UnitInfo = new UnitInfoLoader( rulesIni );
|
|
||||||
WeaponInfo = new WeaponInfoLoader( rulesIni );
|
UnitInfo = new InfoLoader<UnitInfo>(rulesIni,
|
||||||
WarheadInfo = new WarheadInfoLoader(rulesIni);
|
Pair.New<string,Func<string,UnitInfo>>( "buildings.txt", s => new UnitInfo.BuildingInfo(s)),
|
||||||
|
Pair.New<string, Func<string,UnitInfo>>("infantry.txt", s => new UnitInfo.InfantryInfo(s)),
|
||||||
|
Pair.New<string,Func<string,UnitInfo>>( "vehicles.txt", s => new UnitInfo.VehicleInfo(s)));
|
||||||
|
|
||||||
|
WeaponInfo = new InfoLoader<WeaponInfo>(rulesIni,
|
||||||
|
Pair.New<string,Func<string,WeaponInfo>>("weapons.txt", _ => new WeaponInfo()));
|
||||||
|
WarheadInfo = new InfoLoader<WarheadInfo>(rulesIni,
|
||||||
|
Pair.New<string,Func<string,WarheadInfo>>("warheads.txt", _ => new WarheadInfo()));
|
||||||
|
|
||||||
|
ProjectileInfo = new InfoLoader<ProjectileInfo>(rulesIni,
|
||||||
|
Pair.New<string, Func<string, ProjectileInfo>>("projectiles.txt", _ => new ProjectileInfo()));
|
||||||
|
|
||||||
Footprint = new Footprint(FileSystem.Open("footprint.txt"));
|
Footprint = new Footprint(FileSystem.Open("footprint.txt"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,44 +7,6 @@ using IjwFramework.Types;
|
|||||||
|
|
||||||
namespace OpenRa.Game.GameRules
|
namespace OpenRa.Game.GameRules
|
||||||
{
|
{
|
||||||
public class UnitInfoLoader
|
|
||||||
{
|
|
||||||
static Func<string, IniSection, UnitInfo> BindInfoCtor<T>()
|
|
||||||
where T : UnitInfo
|
|
||||||
{
|
|
||||||
var ctor = typeof( T ).GetConstructor( new[] { typeof( string ), typeof( IniSection ) } );
|
|
||||||
return ( s, i ) => (UnitInfo)ctor.Invoke( new object[] { s, i } );
|
|
||||||
}
|
|
||||||
|
|
||||||
readonly Dictionary<string, UnitInfo> unitInfos = new Dictionary<string, UnitInfo>();
|
|
||||||
|
|
||||||
public UnitInfoLoader( IniFile rules )
|
|
||||||
{
|
|
||||||
var srcs = new[]
|
|
||||||
{
|
|
||||||
Pair.New( "buildings.txt", BindInfoCtor<UnitInfo.BuildingInfo>() ),
|
|
||||||
Pair.New( "infantry.txt", BindInfoCtor<UnitInfo.InfantryInfo>() ),
|
|
||||||
Pair.New( "vehicles.txt", BindInfoCtor<UnitInfo.VehicleInfo>() ),
|
|
||||||
};
|
|
||||||
|
|
||||||
foreach( var src in srcs )
|
|
||||||
foreach( var s in Util.ReadAllLines( FileSystem.Open( src.First ) ) )
|
|
||||||
{
|
|
||||||
var unitName = s.Split( ',' )[ 0 ];
|
|
||||||
unitInfos.Add( unitName.ToLowerInvariant(),
|
|
||||||
src.Second( unitName, rules.GetSection( unitName ) ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public UnitInfo this[ string unitName ]
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return unitInfos[ unitName.ToLowerInvariant() ];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class UnitInfo
|
public class UnitInfo
|
||||||
{
|
{
|
||||||
public enum ArmorType
|
public enum ArmorType
|
||||||
@@ -81,22 +43,14 @@ namespace OpenRa.Game.GameRules
|
|||||||
public readonly int Strength = 1;
|
public readonly int Strength = 1;
|
||||||
public readonly int TechLevel = -1;
|
public readonly int TechLevel = -1;
|
||||||
|
|
||||||
public UnitInfo( string name, IniSection ini )
|
public UnitInfo(string name) { Name = name; }
|
||||||
{
|
|
||||||
Name = name.ToLowerInvariant();
|
|
||||||
|
|
||||||
FieldLoader.Load( this, ini );
|
|
||||||
}
|
|
||||||
|
|
||||||
public class MobileInfo : UnitInfo
|
public class MobileInfo : UnitInfo
|
||||||
{
|
{
|
||||||
public readonly int Passengers = 0;
|
public readonly int Passengers = 0;
|
||||||
public readonly int Speed = 0;
|
public readonly int Speed = 0;
|
||||||
|
|
||||||
public MobileInfo( string name, IniSection ini )
|
public MobileInfo(string name) : base(name) { }
|
||||||
: base( name, ini )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class InfantryInfo : MobileInfo
|
public class InfantryInfo : MobileInfo
|
||||||
@@ -107,10 +61,7 @@ namespace OpenRa.Game.GameRules
|
|||||||
public readonly bool Infiltrate = false;
|
public readonly bool Infiltrate = false;
|
||||||
public readonly bool IsCanine = false;
|
public readonly bool IsCanine = false;
|
||||||
|
|
||||||
public InfantryInfo( string name, IniSection ini )
|
public InfantryInfo(string name) : base(name) { }
|
||||||
: base( name, ini )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class VehicleInfo : MobileInfo
|
public class VehicleInfo : MobileInfo
|
||||||
@@ -119,10 +70,7 @@ namespace OpenRa.Game.GameRules
|
|||||||
public readonly bool Tracked = false;
|
public readonly bool Tracked = false;
|
||||||
public readonly bool NoMovingFire = false;
|
public readonly bool NoMovingFire = false;
|
||||||
|
|
||||||
public VehicleInfo( string name, IniSection ini )
|
public VehicleInfo(string name) : base(name) { }
|
||||||
: base( name, ini )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class BuildingInfo : UnitInfo
|
public class BuildingInfo : UnitInfo
|
||||||
@@ -138,10 +86,7 @@ namespace OpenRa.Game.GameRules
|
|||||||
public readonly bool Unsellable = false;
|
public readonly bool Unsellable = false;
|
||||||
public readonly bool WaterBound = false;
|
public readonly bool WaterBound = false;
|
||||||
|
|
||||||
public BuildingInfo( string name, IniSection ini )
|
public BuildingInfo(string name) : base(name) { }
|
||||||
: base( name, ini )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -7,29 +7,6 @@ using OpenRa.Game.Graphics;
|
|||||||
|
|
||||||
namespace OpenRa.Game.GameRules
|
namespace OpenRa.Game.GameRules
|
||||||
{
|
{
|
||||||
class WarheadInfoLoader
|
|
||||||
{
|
|
||||||
readonly Dictionary<string, WarheadInfo> warheadInfos = new Dictionary<string, WarheadInfo>();
|
|
||||||
|
|
||||||
public WarheadInfoLoader(IniFile rules)
|
|
||||||
{
|
|
||||||
foreach (var s in Util.ReadAllLines(FileSystem.Open("warheads.txt")))
|
|
||||||
{
|
|
||||||
var unitName = s.Split(',')[0];
|
|
||||||
warheadInfos.Add(unitName.ToLowerInvariant(),
|
|
||||||
new WarheadInfo(rules.GetSection(unitName)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public WarheadInfo this[string unitName]
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return warheadInfos[unitName.ToLowerInvariant()];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class WarheadInfo
|
class WarheadInfo
|
||||||
{
|
{
|
||||||
public readonly int Spread = 1;
|
public readonly int Spread = 1;
|
||||||
@@ -39,10 +16,5 @@ namespace OpenRa.Game.GameRules
|
|||||||
public readonly bool Ore = false;
|
public readonly bool Ore = false;
|
||||||
public readonly int Explosion = 0;
|
public readonly int Explosion = 0;
|
||||||
public readonly int InfDeath = 0;
|
public readonly int InfDeath = 0;
|
||||||
|
|
||||||
public WarheadInfo(IniSection ini)
|
|
||||||
{
|
|
||||||
FieldLoader.Load(this, ini);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,29 +6,6 @@ using OpenRa.Game.Graphics;
|
|||||||
|
|
||||||
namespace OpenRa.Game.GameRules
|
namespace OpenRa.Game.GameRules
|
||||||
{
|
{
|
||||||
class WeaponInfoLoader
|
|
||||||
{
|
|
||||||
readonly Dictionary<string, WeaponInfo> weaponInfos = new Dictionary<string, WeaponInfo>();
|
|
||||||
|
|
||||||
public WeaponInfoLoader( IniFile rules )
|
|
||||||
{
|
|
||||||
foreach( var s in Util.ReadAllLines( FileSystem.Open( "weapons.txt" ) ) )
|
|
||||||
{
|
|
||||||
var unitName = s.Split( ',' )[ 0 ];
|
|
||||||
weaponInfos.Add( unitName.ToLowerInvariant(),
|
|
||||||
new WeaponInfo( rules.GetSection( unitName ) ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public WeaponInfo this[ string unitName ]
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return weaponInfos[ unitName.ToLowerInvariant() ];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class WeaponInfo
|
class WeaponInfo
|
||||||
{
|
{
|
||||||
public readonly string Anim = null;
|
public readonly string Anim = null;
|
||||||
@@ -44,10 +21,5 @@ namespace OpenRa.Game.GameRules
|
|||||||
public readonly bool Supress = false;
|
public readonly bool Supress = false;
|
||||||
public readonly bool TurboBoost = false;
|
public readonly bool TurboBoost = false;
|
||||||
public readonly string Warhead = null;
|
public readonly string Warhead = null;
|
||||||
|
|
||||||
public WeaponInfo( IniSection ini )
|
|
||||||
{
|
|
||||||
FieldLoader.Load( this, ini );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -78,6 +78,8 @@
|
|||||||
<Compile Include="Controller.cs" />
|
<Compile Include="Controller.cs" />
|
||||||
<Compile Include="GameRules\FieldLoader.cs" />
|
<Compile Include="GameRules\FieldLoader.cs" />
|
||||||
<Compile Include="GameRules\Footprint.cs" />
|
<Compile Include="GameRules\Footprint.cs" />
|
||||||
|
<Compile Include="GameRules\InfoLoader.cs" />
|
||||||
|
<Compile Include="GameRules\ProjectileInfo.cs" />
|
||||||
<Compile Include="GameRules\Rules.cs" />
|
<Compile Include="GameRules\Rules.cs" />
|
||||||
<Compile Include="GameRules\UnitInfo.cs" />
|
<Compile Include="GameRules\UnitInfo.cs" />
|
||||||
<Compile Include="GameRules\WarheadInfo.cs" />
|
<Compile Include="GameRules\WarheadInfo.cs" />
|
||||||
|
|||||||
18
projectiles.txt
Normal file
18
projectiles.txt
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
Invisible
|
||||||
|
LeapDog
|
||||||
|
Cannon
|
||||||
|
Ack
|
||||||
|
Torpedo
|
||||||
|
FROG
|
||||||
|
HeatSeeker
|
||||||
|
LaserGuided
|
||||||
|
AAMissile
|
||||||
|
Lobbed
|
||||||
|
Catapult
|
||||||
|
Bomblet
|
||||||
|
Ballistic
|
||||||
|
Parachute
|
||||||
|
GPSSatellite
|
||||||
|
NukeUp
|
||||||
|
NukeDown
|
||||||
|
Fireball
|
||||||
8
warheads.txt
Normal file
8
warheads.txt
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
SA
|
||||||
|
HE
|
||||||
|
AP
|
||||||
|
Fire
|
||||||
|
HollowPoint
|
||||||
|
Super
|
||||||
|
Organic
|
||||||
|
Nuke
|
||||||
Reference in New Issue
Block a user