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

View File

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