use LoadAttribute in WeaponInfo

This commit is contained in:
Bob
2010-08-28 15:57:08 +12:00
committed by Chris Forbes
parent 9fedeefdbc
commit 1f4991833d
2 changed files with 69 additions and 72 deletions

View File

@@ -38,6 +38,11 @@ namespace OpenRA.GameRules
return Verses[(int)(health.Armor)]; return Verses[(int)(health.Armor)];
} }
public WarheadInfo( MiniYaml yaml )
{
FieldLoader.Load( this, yaml );
}
} }
public enum ArmorType public enum ArmorType
@@ -72,49 +77,41 @@ namespace OpenRA.GameRules
public class WeaponInfo public class WeaponInfo
{ {
public readonly float Range = 0; [FieldLoader.Load] public readonly float Range = 0;
public readonly string Report = null; [FieldLoader.Load] public readonly string Report = null;
public readonly int ROF = 1; [FieldLoader.Load] public readonly int ROF = 1;
public readonly int Burst = 1; [FieldLoader.Load] public readonly int Burst = 1;
public readonly bool Charges = false; [FieldLoader.Load] public readonly bool Charges = false;
public readonly bool Underwater = false; [FieldLoader.Load] public readonly bool Underwater = false;
public readonly string[] ValidTargets = { "Ground" }; [FieldLoader.Load] public readonly string[] ValidTargets = { "Ground" };
public readonly int BurstDelay = 5; [FieldLoader.Load] public readonly int BurstDelay = 5;
public IProjectileInfo Projectile; [FieldLoader.LoadUsing( "LoadProjectile" )] public IProjectileInfo Projectile;
public List<WarheadInfo> Warheads = new List<WarheadInfo>(); [FieldLoader.LoadUsing( "LoadWarheads" )] public List<WarheadInfo> Warheads;
public WeaponInfo(string name, MiniYaml content) public WeaponInfo(string name, MiniYaml content)
{ {
foreach (var kv in content.NodesDict) FieldLoader.Load( this, content );
{ }
var key = kv.Key.Split('@')[0];
switch (key)
{
case "Range": FieldLoader.LoadField(this, "Range", content.NodesDict["Range"].Value); break;
case "ROF": FieldLoader.LoadField(this, "ROF", content.NodesDict["ROF"].Value); break;
case "Report": FieldLoader.LoadField(this, "Report", content.NodesDict["Report"].Value); break;
case "Burst": FieldLoader.LoadField(this, "Burst", content.NodesDict["Burst"].Value); break;
case "Charges": FieldLoader.LoadField(this, "Charges", content.NodesDict["Charges"].Value); break;
case "ValidTargets": FieldLoader.LoadField(this, "ValidTargets", content.NodesDict["ValidTargets"].Value); break;
case "Underwater": FieldLoader.LoadField(this, "Underwater", content.NodesDict["Underwater"].Value); break;
case "BurstDelay": FieldLoader.LoadField(this, "BurstDelay", content.NodesDict["BurstDelay"].Value); break;
case "Warhead": static object LoadProjectile( MiniYaml yaml )
{ {
var warhead = new WarheadInfo(); MiniYaml proj;
FieldLoader.Load(warhead, kv.Value); if( !yaml.NodesDict.TryGetValue( "Projectile", out proj ) )
Warheads.Add(warhead); return null;
} break; var ret = Game.CreateObject<IProjectileInfo>( proj.Value + "Info" );
FieldLoader.Load( ret, proj );
return ret;
}
// in this case, it's an implementation of IProjectileInfo static object LoadWarheads( MiniYaml yaml )
default:
{ {
Projectile = Game.CreateObject<IProjectileInfo>(key + "Info"); var ret = new List<WarheadInfo>();
FieldLoader.Load(Projectile, kv.Value); foreach( var w in yaml.Nodes )
} break; if( w.Key.Split( '@' )[ 0 ] == "Warhead" )
} ret.Add( new WarheadInfo( w.Value ) );
}
return ret;
} }
} }
} }

View File

@@ -2,7 +2,7 @@ Colt45:
ROF: 5 ROF: 5
Range: 5.75 Range: 5.75
Report: GUN5 Report: GUN5
Bullet: Projectile: Bullet
Speed: 100 Speed: 100
Warhead: Warhead:
Spread: 1 Spread: 1
@@ -16,7 +16,7 @@ ZSU-23:
Range: 6 Range: 6
Report: AACANON3 Report: AACANON3
ValidTargets: Air ValidTargets: Air
Bullet: Projectile: Bullet
Speed: 100 Speed: 100
Warhead: Warhead:
Spread: 3 Spread: 3
@@ -28,7 +28,7 @@ Vulcan:
ROF: 30 ROF: 30
Range: 6 Range: 6
Report: GUN13 Report: GUN13
Bullet: Projectile: Bullet
Speed: 100 Speed: 100
Warhead@1: Warhead@1:
Spread: 3 Spread: 3
@@ -79,7 +79,7 @@ Maverick:
Burst: 2 Burst: 2
BurstDelay: 7 BurstDelay: 7
ValidTargets: Ground ValidTargets: Ground
Missile: Projectile: Missile
Speed: 30 Speed: 30
Arm: 2 Arm: 2
High: true High: true
@@ -102,7 +102,7 @@ Maverick:
FireballLauncher: FireballLauncher:
ROF: 45 ROF: 45
Range: 4 Range: 4
Bullet: Projectile: Bullet
Speed: 12 Speed: 12
Trail: fb2 Trail: fb2
Image: FB1 Image: FB1
@@ -119,7 +119,7 @@ FireballLauncher:
Flamer: Flamer:
ROF: 50 ROF: 50
Range: 5 Range: 5
Bullet: Projectile: Bullet
Speed: 12 Speed: 12
Trail: fb2 Trail: fb2
Image: FB1 Image: FB1
@@ -137,7 +137,7 @@ ChainGun:
ROF: 3 ROF: 3
Range: 5 Range: 5
Report: GUN13 Report: GUN13
Bullet: Projectile: Bullet
Speed: 100 Speed: 100
Warhead: Warhead:
Spread: 3 Spread: 3
@@ -151,7 +151,7 @@ Pistol:
ROF: 7 ROF: 7
Range: 3 Range: 3
Report: GUN27 Report: GUN27
Bullet: Projectile: Bullet
Speed: 100 Speed: 100
Warhead: Warhead:
Spread: 3 Spread: 3
@@ -164,7 +164,7 @@ M1Carbine:
ROF: 20 ROF: 20
Range: 5 Range: 5
Report: GUN11 Report: GUN11
Bullet: Projectile: Bullet
Speed: 100 Speed: 100
Warhead: Warhead:
Spread: 3 Spread: 3
@@ -178,7 +178,7 @@ Dragon:
Range: 5 Range: 5
Report: MISSILE6 Report: MISSILE6
ValidTargets: Ground ValidTargets: Ground
Missile: Projectile: Missile
Speed: 25 Speed: 25
Arm: 2 Arm: 2
High: true High: true
@@ -204,7 +204,7 @@ Hellfire:
Range: 4 Range: 4
Report: MISSILE6 Report: MISSILE6
ValidTargets: Ground, Air ValidTargets: Ground, Air
Missile: Projectile: Missile
Speed: 30 Speed: 30
Arm: 2 Arm: 2
High: true High: true
@@ -228,7 +228,7 @@ Grenade:
ROF: 60 ROF: 60
Range: 4 Range: 4
Report: grenade1 Report: grenade1
Bullet: Projectile: Bullet
Speed: 5 Speed: 5
High: true High: true
Angle: .1 Angle: .1
@@ -248,7 +248,7 @@ Grenade:
ROF: 10 ROF: 10
Range: 4 Range: 4
Report: CANNON2 Report: CANNON2
Bullet: Projectile: Bullet
Speed: 50 Speed: 50
Image: 120MM Image: 120MM
Warhead: Warhead:
@@ -264,7 +264,7 @@ Grenade:
ROF: 50 ROF: 50
Range: 4.75 Range: 4.75
Report: CANNON1 Report: CANNON1
Bullet: Projectile: Bullet
Speed: 40 Speed: 40
Image: 120MM Image: 120MM
Warhead: Warhead:
@@ -282,7 +282,7 @@ Grenade:
Report: CANNON1 Report: CANNON1
Burst: 2 Burst: 2
BurstDelay: 4 BurstDelay: 4
Bullet: Projectile: Bullet
Speed: 40 Speed: 40
Image: 120MM Image: 120MM
Warhead: Warhead:
@@ -299,7 +299,7 @@ Grenade:
Range: 4.75 Range: 4.75
Report: CANNON1 Report: CANNON1
Burst: 2 Burst: 2
Bullet: Projectile: Bullet
Speed: 40 Speed: 40
Image: 120MM Image: 120MM
Warhead: Warhead:
@@ -315,7 +315,7 @@ TurretGun:
ROF: 30 ROF: 30
Range: 7 Range: 7
Report: TURRET1 Report: TURRET1
Bullet: Projectile: Bullet
Speed: 40 Speed: 40
Image: 120MM Image: 120MM
Warhead: Warhead:
@@ -333,7 +333,7 @@ MammothTusk:
Report: MISSILE6 Report: MISSILE6
Burst: 2 Burst: 2
ValidTargets: Ground, Air ValidTargets: Ground, Air
Missile: Projectile: Missile
Speed: 30 Speed: 30
Arm: 2 Arm: 2
High: true High: true
@@ -357,7 +357,7 @@ MammothTusk:
ROF: 85 ROF: 85
Range: 14 Range: 14
Report: TANK5 Report: TANK5
Bullet: Projectile: Bullet
Speed: 12 Speed: 12
High: true High: true
Angle: .1 Angle: .1
@@ -377,7 +377,7 @@ M60mg:
Range: 4 Range: 4
Report: PILLBOX1 Report: PILLBOX1
Burst: 5 Burst: 5
Bullet: Projectile: Bullet
Speed: 100 Speed: 100
Warhead: Warhead:
Spread: 3 Spread: 3
@@ -390,7 +390,7 @@ M60mg:
Napalm: Napalm:
ROF: 20 ROF: 20
Range: 4.5 Range: 4.5
Bullet: Projectile: Bullet
Image: BOMBLET Image: BOMBLET
Speed: 5 Speed: 5
High: yes High: yes
@@ -433,7 +433,7 @@ TeslaZap:
Charges: true Charges: true
Range: 8.5 Range: 8.5
Report: TESLA1 Report: TESLA1
TeslaZap: Projectile: TeslaZap
Warhead: Warhead:
Spread: 1 Spread: 1
Verses: 100%,100%,100%,100%,100% Verses: 100%,100%,100%,100%,100%
@@ -445,7 +445,7 @@ Nike:
Range: 7.5 Range: 7.5
Report: MISSILE1 Report: MISSILE1
ValidTargets: Air ValidTargets: Air
Missile: Projectile: Missile
Arm: 3 Arm: 3
High: true High: true
Shadow: false Shadow: false
@@ -468,7 +468,7 @@ RedEye:
Range: 7.5 Range: 7.5
Report: MISSILE1 Report: MISSILE1
ValidTargets: Air ValidTargets: Air
Missile: Projectile: Missile
Arm: 3 Arm: 3
High: true High: true
Shadow: false Shadow: false
@@ -491,7 +491,7 @@ RedEye:
Range: 16 Range: 16
Burst: 2 Burst: 2
Report: TURRET1 Report: TURRET1
Bullet: Projectile: Bullet
Speed: 12 Speed: 12
High: true High: true
Angle: .1 Angle: .1
@@ -513,7 +513,7 @@ SubMissile:
Range: 16 Range: 16
Burst: 2 Burst: 2
Report: MISSILE6 Report: MISSILE6
Bullet: Projectile: Bullet
Speed: 6 Speed: 6
High: true High: true
Angle: .4 Angle: .4
@@ -536,7 +536,7 @@ Stinger:
Range: 9 Range: 9
Report: MISSILE6 Report: MISSILE6
ValidTargets: Ground, Air ValidTargets: Ground, Air
Missile: Projectile: Missile
Arm: 3 Arm: 3
High: true High: true
Shadow: false Shadow: false
@@ -564,7 +564,7 @@ TorpTube:
Underwater: yes Underwater: yes
Burst: 2 Burst: 2
BurstDelay: 1 BurstDelay: 1
Bullet: Projectile: Bullet
Image: MISSILE Image: MISSILE
Speed: 6 Speed: 6
Warhead: Warhead:
@@ -579,7 +579,7 @@ TorpTube:
ROF: 60 ROF: 60
Range: 5.5 Range: 5.5
Report: CANNON2 Report: CANNON2
Bullet: Projectile: Bullet
Speed: 25 Speed: 25
Image: 120MM Image: 120MM
Warhead: Warhead:
@@ -595,7 +595,7 @@ DepthCharge:
ROF: 60 ROF: 60
Range: 5 Range: 5
ValidTargets: Underwater ValidTargets: Underwater
Bullet: Projectile: Bullet
Speed: 5 Speed: 5
Image: BOMB Image: BOMB
Angle: .1 Angle: .1
@@ -613,7 +613,7 @@ ParaBomb:
ROF: 10 ROF: 10
Range: 4.5 Range: 4.5
Report: CHUTE1 Report: CHUTE1
GravityBomb: Projectile: GravityBomb
Image: PARABOMB Image: PARABOMB
Warhead: Warhead:
Spread: 3 Spread: 3
@@ -639,7 +639,7 @@ Heal:
ROF: 80 ROF: 80
Range: 4 Range: 4
Report: HEAL2 Report: HEAL2
Bullet: Projectile: Bullet
Speed: 100 Speed: 100
Warhead: Warhead:
Spread: 5 Spread: 5
@@ -651,7 +651,7 @@ SCUD:
ROF: 250 ROF: 250
Range: 13 Range: 13
Report: MISSILE1 Report: MISSILE1
Bullet: Projectile: Bullet
Speed: 10 Speed: 10
Arm: 10 Arm: 10
High: true High: true
@@ -742,7 +742,7 @@ PortaTesla:
Report: TESLA1 Report: TESLA1
# Report: SHKTROP1 # Report: SHKTROP1
Charges: yes Charges: yes
TeslaZap: Projectile: TeslaZap
Warhead: Warhead:
Spread: 1 Spread: 1
Verses: 100%,100%,100%,100%,100% Verses: 100%,100%,100%,100%,100%
@@ -754,7 +754,7 @@ TTankZap:
Range: 7 Range: 7
Report: TESLA1 Report: TESLA1
Charges: yes Charges: yes
TeslaZap: Projectile: TeslaZap
Warhead: Warhead:
Spread: 1 Spread: 1
Verses: 100%,100%,100%,100%,100% Verses: 100%,100%,100%,100%,100%