more ported bits
This commit is contained in:
@@ -15,7 +15,8 @@ namespace OpenRa.Game.Effects
|
|||||||
|
|
||||||
public Corpse(Actor fromActor, int death)
|
public Corpse(Actor fromActor, int death)
|
||||||
{
|
{
|
||||||
anim = new Animation(fromActor.LegacyInfo.Image ?? fromActor.LegacyInfo.Name);
|
var info = fromActor.Info.Traits.WithInterface<RenderSimpleInfo>().First();
|
||||||
|
anim = new Animation(info.Image ?? fromActor.Info.Name);
|
||||||
anim.PlayThen("die{0}".F(death + 1),
|
anim.PlayThen("die{0}".F(death + 1),
|
||||||
() => Game.world.AddFrameEndTask(w => w.Remove(this)));
|
() => Game.world.AddFrameEndTask(w => w.Remove(this)));
|
||||||
|
|
||||||
|
|||||||
@@ -10,9 +10,13 @@ namespace OpenRa.Game.GameRules
|
|||||||
{
|
{
|
||||||
public readonly string Parent;
|
public readonly string Parent;
|
||||||
public readonly TypeDictionary Traits = new TypeDictionary();
|
public readonly TypeDictionary Traits = new TypeDictionary();
|
||||||
|
public readonly string Name;
|
||||||
|
|
||||||
public NewUnitInfo( MiniYaml node )
|
public NewUnitInfo( string name, MiniYaml node )
|
||||||
{
|
{
|
||||||
|
Name = name;
|
||||||
|
|
||||||
|
// todo: make inheritance actually work
|
||||||
MiniYaml inherit;
|
MiniYaml inherit;
|
||||||
if( node.Nodes.TryGetValue( "Inherits", out inherit ) )
|
if( node.Nodes.TryGetValue( "Inherits", out inherit ) )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ namespace OpenRa.Game
|
|||||||
|
|
||||||
NewUnitInfo = new Dictionary<string, NewUnitInfo>();
|
NewUnitInfo = new Dictionary<string, NewUnitInfo>();
|
||||||
foreach( var kv in MiniYaml.FromFile( "ra.yaml" ) )
|
foreach( var kv in MiniYaml.FromFile( "ra.yaml" ) )
|
||||||
NewUnitInfo.Add( kv.Key.ToLowerInvariant(), new NewUnitInfo( kv.Value ) );
|
NewUnitInfo.Add(kv.Key.ToLowerInvariant(), new NewUnitInfo(kv.Key.ToLowerInvariant(), kv.Value));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void LoadCategories(params string[] types)
|
static void LoadCategories(params string[] types)
|
||||||
|
|||||||
@@ -15,7 +15,8 @@ namespace OpenRa.Game.Traits
|
|||||||
|
|
||||||
float GetMaximumRange(Actor self)
|
float GetMaximumRange(Actor self)
|
||||||
{
|
{
|
||||||
return new[] { self.LegacyInfo.Primary, self.LegacyInfo.Secondary }
|
var info = self.Info.Traits.WithInterface<AttackBaseInfo>().First();
|
||||||
|
return new[] { info.PrimaryWeapon, info.SecondaryWeapon }
|
||||||
.Where(w => w != null)
|
.Where(w => w != null)
|
||||||
.Max(w => Rules.WeaponInfo[w].Range);
|
.Max(w => Rules.WeaponInfo[w].Range);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,14 +17,14 @@ namespace OpenRa.Game.Traits
|
|||||||
|
|
||||||
public LimitedAmmo(Actor self)
|
public LimitedAmmo(Actor self)
|
||||||
{
|
{
|
||||||
ammo = self.LegacyInfo.Ammo;
|
ammo = self.Info.Traits.Get<LimitedAmmoInfo>().Ammo;
|
||||||
this.self = self;
|
this.self = self;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool HasAmmo() { return ammo > 0; }
|
public bool HasAmmo() { return ammo > 0; }
|
||||||
public bool GiveAmmo()
|
public bool GiveAmmo()
|
||||||
{
|
{
|
||||||
if (ammo >= self.LegacyInfo.Ammo) return false;
|
if (ammo >= self.Info.Traits.Get<LimitedAmmoInfo>().Ammo) return false;
|
||||||
++ammo;
|
++ammo;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -33,7 +33,8 @@ namespace OpenRa.Game.Traits
|
|||||||
|
|
||||||
public IEnumerable<PipType> GetPips(Actor self)
|
public IEnumerable<PipType> GetPips(Actor self)
|
||||||
{
|
{
|
||||||
return Graphics.Util.MakeArray(self.LegacyInfo.Ammo,
|
var maxAmmo = self.Info.Traits.Get<LimitedAmmoInfo>().Ammo;
|
||||||
|
return Graphics.Util.MakeArray(maxAmmo,
|
||||||
i => ammo > i ? PipType.Green : PipType.Transparent);
|
i => ammo > i ? PipType.Green : PipType.Transparent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,8 +15,6 @@ namespace OpenRa.Game.Traits
|
|||||||
public RenderUnitMuzzleFlash(Actor self)
|
public RenderUnitMuzzleFlash(Actor self)
|
||||||
: base(self)
|
: base(self)
|
||||||
{
|
{
|
||||||
if (!self.LegacyInfo.MuzzleFlash) throw new InvalidOperationException("wtf??");
|
|
||||||
|
|
||||||
var unit = self.traits.Get<Unit>();
|
var unit = self.traits.Get<Unit>();
|
||||||
var attack = self.traits.WithInterface<AttackBase>().First();
|
var attack = self.traits.WithInterface<AttackBase>().First();
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,9 @@ namespace OpenRa.Game.Traits
|
|||||||
{
|
{
|
||||||
class RenderUnitRotorInfo : RenderUnitInfo
|
class RenderUnitRotorInfo : RenderUnitInfo
|
||||||
{
|
{
|
||||||
|
public readonly int[] PrimaryOffset = { 0, 0 };
|
||||||
|
public readonly int[] SecondaryOffset = null;
|
||||||
|
|
||||||
public override object Create(Actor self) { return new RenderUnitRotor(self); }
|
public override object Create(Actor self) { return new RenderUnitRotor(self); }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -15,21 +18,22 @@ namespace OpenRa.Game.Traits
|
|||||||
: base(self)
|
: base(self)
|
||||||
{
|
{
|
||||||
var unit = self.traits.Get<Unit>();
|
var unit = self.traits.Get<Unit>();
|
||||||
|
var info = self.Info.Traits.Get<RenderUnitRotorInfo>();
|
||||||
|
|
||||||
rotorAnim = new Animation(self.LegacyInfo.Name);
|
rotorAnim = new Animation(info.Image ?? self.Info.Name);
|
||||||
rotorAnim.PlayRepeating("rotor");
|
rotorAnim.PlayRepeating("rotor");
|
||||||
anims.Add( "rotor_1", new AnimationWithOffset(
|
anims.Add( "rotor_1", new AnimationWithOffset(
|
||||||
rotorAnim,
|
rotorAnim,
|
||||||
() => Util.GetTurretPosition( self, unit, self.LegacyInfo.RotorOffset, 0 ),
|
() => Util.GetTurretPosition( self, unit, info.PrimaryOffset, 0 ),
|
||||||
null ) );
|
null ) );
|
||||||
|
|
||||||
if (self.LegacyInfo.RotorOffset2 == null) return;
|
if (info.SecondaryOffset == null) return;
|
||||||
|
|
||||||
secondRotorAnim = new Animation( self.LegacyInfo.Name );
|
secondRotorAnim = new Animation(info.Image ?? self.Info.Name);
|
||||||
secondRotorAnim.PlayRepeating( "rotor2" );
|
secondRotorAnim.PlayRepeating( "rotor2" );
|
||||||
anims.Add( "rotor_2", new AnimationWithOffset(
|
anims.Add( "rotor_2", new AnimationWithOffset(
|
||||||
secondRotorAnim,
|
secondRotorAnim,
|
||||||
() => Util.GetTurretPosition(self, unit, self.LegacyInfo.RotorOffset2, 0),
|
() => Util.GetTurretPosition(self, unit, info.SecondaryOffset, 0),
|
||||||
null ) );
|
null ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using OpenRa.Game.Graphics;
|
using OpenRa.Game.Graphics;
|
||||||
|
|
||||||
namespace OpenRa.Game.Traits
|
namespace OpenRa.Game.Traits
|
||||||
{
|
{
|
||||||
class RenderUnitSpinnerInfo : RenderUnitInfo
|
class RenderUnitSpinnerInfo : RenderUnitInfo
|
||||||
{
|
{
|
||||||
|
public readonly int[] Offset = { 0, 0 };
|
||||||
public override object Create(Actor self) { return new RenderUnitSpinner(self); }
|
public override object Create(Actor self) { return new RenderUnitSpinner(self); }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -14,12 +16,13 @@ namespace OpenRa.Game.Traits
|
|||||||
: base(self)
|
: base(self)
|
||||||
{
|
{
|
||||||
var unit = self.traits.Get<Unit>();
|
var unit = self.traits.Get<Unit>();
|
||||||
|
var info = self.Info.Traits.Get<RenderUnitSpinnerInfo>();
|
||||||
|
|
||||||
var spinnerAnim = new Animation( self.LegacyInfo.Name );
|
var spinnerAnim = new Animation( info.Image ?? self.Info.Name );
|
||||||
spinnerAnim.PlayRepeating( "spinner" );
|
spinnerAnim.PlayRepeating( "spinner" );
|
||||||
anims.Add( "spinner", new AnimationWithOffset(
|
anims.Add( "spinner", new AnimationWithOffset(
|
||||||
spinnerAnim,
|
spinnerAnim,
|
||||||
() => Util.GetTurretPosition( self, unit, self.LegacyInfo.PrimaryOffset, 0 ),
|
() => Util.GetTurretPosition( self, unit, info.Offset, 0 ),
|
||||||
null ) );
|
null ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace OpenRa.Game.Traits
|
namespace OpenRa.Game.Traits
|
||||||
{
|
{
|
||||||
class TurretedInfo : ITraitInfo
|
class TurretedInfo : ITraitInfo
|
||||||
{
|
{
|
||||||
|
public readonly int ROT = 0;
|
||||||
|
public readonly int InitialFacing = 128;
|
||||||
|
|
||||||
public object Create(Actor self) { return new Turreted(self); }
|
public object Create(Actor self) { return new Turreted(self); }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -14,13 +18,13 @@ namespace OpenRa.Game.Traits
|
|||||||
|
|
||||||
public Turreted(Actor self)
|
public Turreted(Actor self)
|
||||||
{
|
{
|
||||||
turretFacing = self.LegacyInfo.InitialFacing;
|
turretFacing = self.Info.Traits.Get<TurretedInfo>().InitialFacing;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Tick( Actor self )
|
public void Tick( Actor self )
|
||||||
{
|
{
|
||||||
var df = desiredFacing ?? ( self.traits.Contains<Unit>() ? self.traits.Get<Unit>().Facing : turretFacing );
|
var df = desiredFacing ?? ( self.traits.Contains<Unit>() ? self.traits.Get<Unit>().Facing : turretFacing );
|
||||||
Util.TickFacing( ref turretFacing, df, self.LegacyInfo.ROT );
|
Util.TickFacing(ref turretFacing, df, self.Info.Traits.Get<TurretedInfo>().ROT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,6 +70,17 @@ namespace RulesConverter
|
|||||||
{ "Image", "Image" } }
|
{ "Image", "Image" } }
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ "RenderUnitSpinner", new PL {
|
||||||
|
{ "Image", "Image" },
|
||||||
|
{ "Offset", "PrimaryOffset" } }
|
||||||
|
},
|
||||||
|
|
||||||
|
{ "RenderUnitRotor", new PL {
|
||||||
|
{ "Image", "Image" },
|
||||||
|
{ "PrimaryOffset", "RotorOffset" },
|
||||||
|
{ "SecondaryOffset", "RotorOffset2" } }
|
||||||
|
},
|
||||||
|
|
||||||
{ "Buildable", new PL {
|
{ "Buildable", new PL {
|
||||||
{ "TechLevel", "TechLevel" },
|
{ "TechLevel", "TechLevel" },
|
||||||
{ "Tab", "$Tab" },
|
{ "Tab", "$Tab" },
|
||||||
@@ -136,8 +147,6 @@ namespace RulesConverter
|
|||||||
traitMap["RenderInfantry"] = traitMap["RenderBuilding"];
|
traitMap["RenderInfantry"] = traitMap["RenderBuilding"];
|
||||||
traitMap["RenderUnitMuzzleFlash"] = traitMap["RenderBuilding"];
|
traitMap["RenderUnitMuzzleFlash"] = traitMap["RenderBuilding"];
|
||||||
traitMap["RenderUnitReload"] = traitMap["RenderBuilding"];
|
traitMap["RenderUnitReload"] = traitMap["RenderBuilding"];
|
||||||
traitMap["RenderUnitRotor"] = traitMap["RenderBuilding"];
|
|
||||||
traitMap["RenderUnitSpinner"] = traitMap["RenderBuilding"];
|
|
||||||
traitMap["RenderUnitTurreted"] = traitMap["RenderBuilding"];
|
traitMap["RenderUnitTurreted"] = traitMap["RenderBuilding"];
|
||||||
|
|
||||||
traitMap["AttackTurreted"] = traitMap["AttackBase"];
|
traitMap["AttackTurreted"] = traitMap["AttackBase"];
|
||||||
|
|||||||
5
ra.yaml
5
ra.yaml
@@ -175,6 +175,7 @@ MRJ:
|
|||||||
ROT: 5
|
ROT: 5
|
||||||
Speed: 9
|
Speed: 9
|
||||||
RenderUnitSpinner:
|
RenderUnitSpinner:
|
||||||
|
Offset: 0,4,0,-6
|
||||||
Repairable:
|
Repairable:
|
||||||
Chronoshiftable:
|
Chronoshiftable:
|
||||||
Passenger:
|
Passenger:
|
||||||
@@ -202,6 +203,7 @@ MGG:
|
|||||||
ROT: 5
|
ROT: 5
|
||||||
Speed: 9
|
Speed: 9
|
||||||
RenderUnitSpinner:
|
RenderUnitSpinner:
|
||||||
|
Offset: 0,6,0,-3
|
||||||
Repairable:
|
Repairable:
|
||||||
Chronoshiftable:
|
Chronoshiftable:
|
||||||
Passenger:
|
Passenger:
|
||||||
@@ -624,6 +626,8 @@ TRAN:
|
|||||||
ROT: 5
|
ROT: 5
|
||||||
Speed: 12
|
Speed: 12
|
||||||
RenderUnitRotor:
|
RenderUnitRotor:
|
||||||
|
PrimaryOffset: 0,14,0,-4
|
||||||
|
SecondaryOffset: 0,-14,0,-2
|
||||||
WithShadow:
|
WithShadow:
|
||||||
Cargo:
|
Cargo:
|
||||||
PassengerTypes: Foot
|
PassengerTypes: Foot
|
||||||
@@ -653,6 +657,7 @@ HELI:
|
|||||||
ROT: 4
|
ROT: 4
|
||||||
Speed: 16
|
Speed: 16
|
||||||
RenderUnitRotor:
|
RenderUnitRotor:
|
||||||
|
PrimaryOffset: 0,0,0,-2
|
||||||
WithShadow:
|
WithShadow:
|
||||||
LimitedAmmo:
|
LimitedAmmo:
|
||||||
Ammo: 6
|
Ammo: 6
|
||||||
|
|||||||
Reference in New Issue
Block a user