unhardcode and self-document render sequences

This commit is contained in:
Matthias Mailänder
2015-04-06 21:12:07 +02:00
parent cd9589eaa0
commit 7157cc0a9f
9 changed files with 48 additions and 23 deletions

View File

@@ -18,6 +18,8 @@ namespace OpenRA.Mods.Common.Traits
{
public class RenderSimpleInfo : RenderSpritesInfo, IRenderActorPreviewSpritesInfo, IQuantizeBodyOrientationInfo, ILegacyEditorRenderInfo, Requires<IBodyOrientationInfo>
{
public readonly string Sequence = "idle";
public override object Create(ActorInitializer init) { return new RenderSimple(init, this); }
public virtual IEnumerable<IActorPreview> RenderPreviewSprites(ActorPreviewInitializer init, RenderSpritesInfo rs, string image, int facings, PaletteReference p)
@@ -26,13 +28,13 @@ namespace OpenRA.Mods.Common.Traits
var facing = ifacing != null ? init.Contains<FacingInit>() ? init.Get<FacingInit, int>() : ifacing.GetInitialFacing() : 0;
var anim = new Animation(init.World, image, () => facing);
anim.PlayRepeating("idle");
anim.PlayRepeating(Sequence);
yield return new SpriteActorPreview(anim, WVec.Zero, 0, p, rs.Scale);
}
public virtual int QuantizedBodyFacings(ActorInfo ai, SequenceProvider sequenceProvider, string race)
{
return sequenceProvider.GetSequence(GetImage(ai, sequenceProvider, race), "idle").Facings;
return sequenceProvider.GetSequence(GetImage(ai, sequenceProvider, race), Sequence).Facings;
}
public string EditorPalette { get { return Palette; } }
@@ -43,9 +45,13 @@ namespace OpenRA.Mods.Common.Traits
{
public readonly Animation DefaultAnimation;
readonly RenderSimpleInfo info;
public RenderSimple(ActorInitializer init, RenderSimpleInfo info, Func<int> baseFacing)
: base(init, info)
{
this.info = info;
DefaultAnimation = new Animation(init.World, GetImage(init.Self), baseFacing);
Add("", DefaultAnimation);
}
@@ -53,7 +59,7 @@ namespace OpenRA.Mods.Common.Traits
public RenderSimple(ActorInitializer init, RenderSimpleInfo info)
: this(init, info, MakeFacingFunc(init.Self))
{
DefaultAnimation.PlayRepeating(NormalizeSequence(init.Self, "idle"));
DefaultAnimation.PlayRepeating(NormalizeSequence(init.Self, info.Sequence));
}
public int2 SelectionSize(Actor self) { return AutoSelectionSize(self); }
@@ -67,7 +73,7 @@ namespace OpenRA.Mods.Common.Traits
{
if (DefaultAnimation.HasSequence(name))
DefaultAnimation.PlayThen(NormalizeSequence(self, name),
() => DefaultAnimation.PlayRepeating(NormalizeSequence(self, "idle")));
() => DefaultAnimation.PlayRepeating(NormalizeSequence(self, info.Sequence)));
}
}
}