Change traits to use RenderSprites directly.
This commit is contained in:
@@ -45,7 +45,7 @@ namespace OpenRA.Editor
|
||||
|
||||
public static ActorTemplate RenderActor(ActorInfo info, TileSet tileset, Palette p)
|
||||
{
|
||||
var image = RenderSimple.GetImage(info);
|
||||
var image = RenderSprites.GetImage(info);
|
||||
|
||||
using (var s = FileSystem.OpenWithExts(image, tileset.Extensions))
|
||||
{
|
||||
|
||||
@@ -15,7 +15,7 @@ using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.RA.Render
|
||||
{
|
||||
class RenderGunboatInfo : RenderUnitInfo
|
||||
class RenderGunboatInfo : RenderSimpleInfo
|
||||
{
|
||||
public override object Create(ActorInitializer init) { return new RenderGunboat(init.self); }
|
||||
}
|
||||
@@ -26,8 +26,13 @@ namespace OpenRA.Mods.RA.Render
|
||||
string lastDir = "left";
|
||||
string lastDamage = "";
|
||||
|
||||
static Func<int> TurretFacingFunc(Actor self)
|
||||
{
|
||||
return () => self.HasTrait<Turreted>() ? self.TraitsImplementing<Turreted>().First().turretFacing : 0;
|
||||
}
|
||||
|
||||
public RenderGunboat(Actor self)
|
||||
: base(self, () => self.HasTrait<Turreted>() ? self.TraitsImplementing<Turreted>().First().turretFacing : 0)
|
||||
: base(self, TurretFacingFunc(self))
|
||||
{
|
||||
facing = self.Trait<IFacing>();
|
||||
anim.Play("left");
|
||||
|
||||
@@ -13,7 +13,7 @@ using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.Cnc
|
||||
{
|
||||
class WithFireInfo : ITraitInfo, Requires<RenderSimpleInfo>
|
||||
class WithFireInfo : ITraitInfo, Requires<RenderSpritesInfo>
|
||||
{
|
||||
public readonly WVec Offset = new WVec(299,-640,0);
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace OpenRA.Mods.Cnc
|
||||
{
|
||||
public WithFire(Actor self, WithFireInfo info)
|
||||
{
|
||||
var rs = self.Trait<RenderSimple>();
|
||||
var rs = self.Trait<RenderSprites>();
|
||||
var roof = new Animation(rs.GetImage(self));
|
||||
roof.PlayThen("fire-start", () => roof.PlayRepeating("fire-loop"));
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.Cnc
|
||||
{
|
||||
public class WithRoofInfo : ITraitInfo, Requires<RenderSimpleInfo>
|
||||
public class WithRoofInfo : ITraitInfo, Requires<RenderSpritesInfo>
|
||||
{
|
||||
public object Create(ActorInitializer init) { return new WithRoof(init.self); }
|
||||
}
|
||||
@@ -22,7 +22,7 @@ namespace OpenRA.Mods.Cnc
|
||||
{
|
||||
public WithRoof(Actor self)
|
||||
{
|
||||
var rs = self.Trait<RenderSimple>();
|
||||
var rs = self.Trait<RenderSprites>();
|
||||
var roof = new Animation(rs.GetImage(self), () => self.Trait<IFacing>().Facing);
|
||||
roof.Play("roof");
|
||||
rs.anims.Add("roof", new AnimationWithOffset(roof, null, null, 1024));
|
||||
|
||||
@@ -13,7 +13,7 @@ using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.Cnc
|
||||
{
|
||||
class DeadBuildingStateInfo : ITraitInfo, Requires<HealthInfo>, Requires<RenderSimpleInfo>
|
||||
class DeadBuildingStateInfo : ITraitInfo, Requires<HealthInfo>, Requires<RenderSpritesInfo>
|
||||
{
|
||||
public readonly int LingerTime = 20;
|
||||
|
||||
@@ -23,12 +23,12 @@ namespace OpenRA.Mods.Cnc
|
||||
class DeadBuildingState : INotifyKilled
|
||||
{
|
||||
DeadBuildingStateInfo info;
|
||||
RenderSimple rs;
|
||||
RenderSprites rs;
|
||||
|
||||
public DeadBuildingState(Actor self, DeadBuildingStateInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
rs = self.Trait<RenderSimple>();
|
||||
rs = self.Trait<RenderSprites>();
|
||||
self.Trait<Health>().RemoveOnDeath = !rs.anim.HasSequence("dead");
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.RA
|
||||
{
|
||||
class BurnsInfo : ITraitInfo, Requires<RenderSimpleInfo>
|
||||
class BurnsInfo : ITraitInfo, Requires<RenderSpritesInfo>
|
||||
{
|
||||
public readonly string Anim = "1";
|
||||
public readonly int Damage = 1;
|
||||
@@ -34,7 +34,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
var anim = new Animation("fire", () => 0);
|
||||
anim.PlayRepeating(Info.Anim);
|
||||
self.Trait<RenderSimple>().anims.Add("fire",
|
||||
self.Trait<RenderSprites>().anims.Add("fire",
|
||||
new AnimationWithOffset(anim, () => info.Offset, null));
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ using OpenRA.Mods.RA.Buildings;
|
||||
|
||||
namespace OpenRA.Mods.RA
|
||||
{
|
||||
class CrateInfo : ITraitInfo, Requires<RenderSimpleInfo>
|
||||
class CrateInfo : ITraitInfo, Requires<RenderSpritesInfo>
|
||||
{
|
||||
public readonly int Lifetime = 5; // Seconds
|
||||
public readonly string[] TerrainTypes = { };
|
||||
@@ -116,7 +116,7 @@ namespace OpenRA.Mods.RA
|
||||
PxPosition = Util.CenterOfCell(cell);
|
||||
|
||||
var seq = self.World.GetTerrainInfo(cell).IsWater ? "water" : "land";
|
||||
var rs = self.Trait<RenderSimple>();
|
||||
var rs = self.Trait<RenderSprites>();
|
||||
if (seq != rs.anim.CurrentSequence.Name)
|
||||
rs.anim.PlayRepeating(seq);
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ namespace OpenRA.Mods.RA.Render
|
||||
foreach (var r in p)
|
||||
yield return r;
|
||||
|
||||
var anim = new Animation(RenderSimple.GetImage(building), () => 0);
|
||||
var anim = new Animation(RenderSprites.GetImage(building), () => 0);
|
||||
anim.PlayRepeating("idle-top");
|
||||
yield return new SpriteRenderable(anim.Image, WPos.Zero + Origin, 0, pr, 1f);
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ namespace OpenRA.Mods.RA.Render
|
||||
public AnimationState State { get; private set; }
|
||||
|
||||
public RenderInfantry(Actor self, RenderInfantryInfo info)
|
||||
: base(self, RenderSimple.MakeFacingFunc(self))
|
||||
: base(self, MakeFacingFunc(self))
|
||||
{
|
||||
Info = info;
|
||||
anim.PlayFetchIndex(NormalizeInfantrySequence(self, "stand"), () => 0);
|
||||
|
||||
@@ -22,10 +22,7 @@ namespace OpenRA.Mods.RA.Render
|
||||
public class RenderUnit : RenderSimple
|
||||
{
|
||||
public RenderUnit(Actor self)
|
||||
: base(self, RenderSimple.MakeFacingFunc(self))
|
||||
{
|
||||
anim.PlayRepeating("idle");
|
||||
}
|
||||
: base(self) { }
|
||||
|
||||
public void PlayCustomAnimation(Actor self, string newAnim, Action after)
|
||||
{
|
||||
|
||||
@@ -17,7 +17,7 @@ using OpenRA.Mods.RA;
|
||||
|
||||
namespace OpenRA.Mods.RA.Render
|
||||
{
|
||||
class WithMuzzleFlashInfo : ITraitInfo, Requires<RenderSimpleInfo>, Requires<AttackBaseInfo>
|
||||
class WithMuzzleFlashInfo : ITraitInfo, Requires<RenderSpritesInfo>, Requires<AttackBaseInfo>
|
||||
{
|
||||
public object Create(ActorInitializer init) { return new WithMuzzleFlash(init.self); }
|
||||
}
|
||||
@@ -29,7 +29,7 @@ namespace OpenRA.Mods.RA.Render
|
||||
|
||||
public WithMuzzleFlash(Actor self)
|
||||
{
|
||||
var render = self.Trait<RenderSimple>();
|
||||
var render = self.Trait<RenderSprites>();
|
||||
var facing = self.TraitOrDefault<IFacing>();
|
||||
|
||||
var arms = self.TraitsImplementing<Armament>();
|
||||
|
||||
@@ -14,7 +14,7 @@ using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.RA.Render
|
||||
{
|
||||
public class WithRotorInfo : ITraitInfo, Requires<RenderSimpleInfo>
|
||||
public class WithRotorInfo : ITraitInfo, Requires<RenderSpritesInfo>, Requires<LocalCoordinatesModelInfo>
|
||||
{
|
||||
[Desc("Position relative to body")]
|
||||
public readonly WVec Offset = WVec.Zero;
|
||||
@@ -28,12 +28,13 @@ namespace OpenRA.Mods.RA.Render
|
||||
public Animation rotorAnim;
|
||||
public WithRotor(Actor self, WithRotorInfo info)
|
||||
{
|
||||
var rs = self.Trait<RenderSimple>();
|
||||
var rs = self.Trait<RenderSprites>();
|
||||
var coords = self.Trait<ILocalCoordinatesModel>();
|
||||
|
||||
rotorAnim = new Animation(rs.GetImage(self));
|
||||
rotorAnim.PlayRepeating("rotor");
|
||||
rs.anims.Add(info.Id, new AnimationWithOffset(rotorAnim,
|
||||
() => rs.LocalToWorld(info.Offset.Rotate(rs.QuantizeOrientation(self, self.Orientation))),
|
||||
() => coords.LocalToWorld(info.Offset.Rotate(coords.QuantizeOrientation(self, self.Orientation))),
|
||||
null, p => WithTurret.ZOffsetFromCenter(self, p, 1)));
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.RA.Render
|
||||
{
|
||||
public class WithSmokeInfo : ITraitInfo, Requires<RenderSimpleInfo>
|
||||
public class WithSmokeInfo : ITraitInfo, Requires<RenderSpritesInfo>
|
||||
{
|
||||
public object Create(ActorInitializer init) { return new WithSmoke(init.self); }
|
||||
}
|
||||
@@ -25,7 +25,7 @@ namespace OpenRA.Mods.RA.Render
|
||||
|
||||
public WithSmoke(Actor self)
|
||||
{
|
||||
var rs = self.Trait<RenderSimple>();
|
||||
var rs = self.Trait<RenderSprites>();
|
||||
|
||||
anim = new Animation("smoke_m");
|
||||
rs.anims.Add("smoke", new AnimationWithOffset(anim, null, () => !isSmoking));
|
||||
|
||||
@@ -14,7 +14,7 @@ using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.RA.Render
|
||||
{
|
||||
class WithSpinnerInfo : ITraitInfo, Requires<RenderSimpleInfo>
|
||||
class WithSpinnerInfo : ITraitInfo, Requires<RenderSpritesInfo>, Requires<LocalCoordinatesModelInfo>
|
||||
{
|
||||
[Desc("Sequence name to use")]
|
||||
public readonly string Sequence = "spinner";
|
||||
@@ -29,11 +29,13 @@ namespace OpenRA.Mods.RA.Render
|
||||
{
|
||||
public WithSpinner(Actor self, WithSpinnerInfo info)
|
||||
{
|
||||
var rs = self.Trait<RenderSimple>();
|
||||
var rs = self.Trait<RenderSprites>();
|
||||
var coords = self.Trait<ILocalCoordinatesModel>();
|
||||
|
||||
var spinner = new Animation(rs.GetImage(self));
|
||||
spinner.PlayRepeating(info.Sequence);
|
||||
rs.anims.Add("spinner_{0}".F(info.Sequence), new AnimationWithOffset(spinner,
|
||||
() => rs.LocalToWorld(info.Offset.Rotate(rs.QuantizeOrientation(self, self.Orientation))),
|
||||
() => coords.LocalToWorld(info.Offset.Rotate(coords.QuantizeOrientation(self, self.Orientation))),
|
||||
null, p => WithTurret.ZOffsetFromCenter(self, p, 1)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.RA.Render
|
||||
{
|
||||
class WithTurretInfo : ITraitInfo, Requires<RenderSimpleInfo>, Requires<TurretedInfo>
|
||||
class WithTurretInfo : ITraitInfo, Requires<RenderSpritesInfo>, Requires<TurretedInfo>, Requires<LocalCoordinatesModelInfo>
|
||||
{
|
||||
[Desc("Sequence name to use")]
|
||||
public readonly string Sequence = "turret";
|
||||
@@ -37,7 +37,8 @@ namespace OpenRA.Mods.RA.Render
|
||||
class WithTurret : ITick
|
||||
{
|
||||
WithTurretInfo info;
|
||||
RenderSimple rs;
|
||||
RenderSprites rs;
|
||||
ILocalCoordinatesModel coords;
|
||||
AttackBase ab;
|
||||
Turreted t;
|
||||
IEnumerable<Armament> arms;
|
||||
@@ -46,7 +47,9 @@ namespace OpenRA.Mods.RA.Render
|
||||
public WithTurret(Actor self, WithTurretInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
rs = self.Trait<RenderSimple>();
|
||||
rs = self.Trait<RenderSprites>();
|
||||
coords = self.Trait<ILocalCoordinatesModel>();
|
||||
|
||||
ab = self.TraitOrDefault<AttackBase>();
|
||||
t = self.TraitsImplementing<Turreted>()
|
||||
.First(tt => tt.Name == info.Turret);
|
||||
@@ -69,9 +72,9 @@ namespace OpenRA.Mods.RA.Render
|
||||
|
||||
var recoil = arms.Aggregate(WRange.Zero, (a,b) => a + b.Recoil);
|
||||
var localOffset = new WVec(-recoil, WRange.Zero, WRange.Zero);
|
||||
var bodyOrientation = rs.QuantizeOrientation(self, self.Orientation);
|
||||
var turretOrientation = rs.QuantizeOrientation(self, t.LocalOrientation(self));
|
||||
return t.Position(self) + rs.LocalToWorld(localOffset.Rotate(turretOrientation).Rotate(bodyOrientation));
|
||||
var bodyOrientation = coords.QuantizeOrientation(self, self.Orientation);
|
||||
var turretOrientation = coords.QuantizeOrientation(self, t.LocalOrientation(self));
|
||||
return t.Position(self) + coords.LocalToWorld(localOffset.Rotate(turretOrientation).Rotate(bodyOrientation));
|
||||
}
|
||||
|
||||
public void Tick(Actor self)
|
||||
|
||||
@@ -126,7 +126,7 @@ namespace OpenRA.Mods.RA
|
||||
var tooltip = target.TraitsImplementing<IToolTip>().FirstOrDefault();
|
||||
disguisedAsName = tooltip.Name();
|
||||
disguisedAsPlayer = tooltip.Owner();
|
||||
disguisedAsSprite = target.Trait<RenderSimple>().GetImage(target);
|
||||
disguisedAsSprite = target.Trait<RenderSprites>().GetImage(target);
|
||||
}
|
||||
|
||||
void DropDisguise()
|
||||
|
||||
@@ -14,7 +14,7 @@ using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.RA
|
||||
{
|
||||
class NukePowerInfo : SupportPowerInfo
|
||||
class NukePowerInfo : SupportPowerInfo, Requires<LocalCoordinatesModelInfo>
|
||||
{
|
||||
[WeaponReference]
|
||||
public readonly string MissileWeapon = "";
|
||||
@@ -25,7 +25,14 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
class NukePower : SupportPower
|
||||
{
|
||||
public NukePower(Actor self, NukePowerInfo info) : base(self, info) { }
|
||||
ILocalCoordinatesModel coords;
|
||||
|
||||
public NukePower(Actor self, NukePowerInfo info)
|
||||
: base(self, info)
|
||||
{
|
||||
coords = self.Trait<ILocalCoordinatesModel>();
|
||||
}
|
||||
|
||||
public override IOrderGenerator OrderGenerator(string order, SupportPowerManager manager)
|
||||
{
|
||||
Sound.PlayToPlayer(manager.self.Owner, Info.SelectTargetSound);
|
||||
@@ -42,7 +49,7 @@ namespace OpenRA.Mods.RA
|
||||
var rb = self.Trait<RenderSimple>();
|
||||
rb.PlayCustomAnim(self, "active");
|
||||
self.World.AddFrameEndTask(w => w.Add(
|
||||
new NukeLaunch(self.Owner, self, npi.MissileWeapon, self.CenterPosition + rb.LocalToWorld(npi.SpawnOffset), order.TargetLocation)));
|
||||
new NukeLaunch(self.Owner, self, npi.MissileWeapon, self.CenterPosition + coords.LocalToWorld(npi.SpawnOffset), order.TargetLocation)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.RA
|
||||
{
|
||||
class ThrowsParticleInfo : ITraitInfo, Requires<RenderSimpleInfo>
|
||||
class ThrowsParticleInfo : ITraitInfo, Requires<RenderSimpleInfo>, Requires<LocalCoordinatesModelInfo>
|
||||
{
|
||||
public readonly string Anim = null;
|
||||
|
||||
@@ -54,6 +54,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
var self = init.self;
|
||||
var rs = self.Trait<RenderSimple>();
|
||||
var coords = self.Trait<ILocalCoordinatesModel>();
|
||||
|
||||
// TODO: Carry orientation over from the parent instead of just facing
|
||||
var bodyFacing = init.Contains<FacingInit>() ? init.Get<FacingInit,int>() : 0;
|
||||
@@ -63,7 +64,7 @@ namespace OpenRA.Mods.RA
|
||||
var throwRotation = WRot.FromFacing(Game.CosmeticRandom.Next(1024));
|
||||
var throwOffset = new WVec((int)(Game.CosmeticRandom.Gauss1D(1)*info.ThrowRange.Range), 0, 0).Rotate(throwRotation);
|
||||
|
||||
initialPos = pos = info.Offset.Rotate(rs.QuantizeOrientation(self, WRot.FromFacing(bodyFacing)));
|
||||
initialPos = pos = info.Offset.Rotate(coords.QuantizeOrientation(self, WRot.FromFacing(bodyFacing)));
|
||||
finalPos = initialPos + throwOffset;
|
||||
|
||||
// Facing rotation
|
||||
|
||||
Reference in New Issue
Block a user