unhardcode and reference tesla zap sprite sequences

This commit is contained in:
Matthias Mailänder
2015-07-08 17:03:58 +02:00
parent a5f921e843
commit 50d5f1f161
2 changed files with 23 additions and 9 deletions

View File

@@ -20,9 +20,15 @@ namespace OpenRA.Mods.RA.Effects
class TeslaZapInfo : IProjectileInfo
{
public readonly string Image = "litning";
[SequenceReference("Image")] public readonly string BrightSequence = "bright";
[SequenceReference("Image")] public readonly string DimSequence = "dim";
public readonly string Palette = "effect";
public readonly int BrightZaps = 1;
public readonly int DimZaps = 2;
public IEffect Create(ProjectileArgs args) { return new TeslaZap(this, args); }
}
@@ -59,7 +65,8 @@ namespace OpenRA.Mods.RA.Effects
if (!initialized)
{
var pos = args.GuidedTarget.IsValidFor(args.SourceActor) ? args.GuidedTarget.CenterPosition : args.PassiveTarget;
zap = new TeslaZapRenderable(args.Source, 0, pos - args.Source, info.Image, info.BrightZaps, info.DimZaps, info.Palette);
zap = new TeslaZapRenderable(args.Source, 0, pos - args.Source,
info.Image, info.BrightSequence, info.BrightZaps, info.DimSequence, info.DimZaps, info.Palette);
}
yield return zap;

View File

@@ -35,13 +35,15 @@ namespace OpenRA.Mods.RA.Graphics
readonly WVec length;
readonly string image;
readonly string palette;
readonly string dimSequence;
readonly string brightSequence;
readonly int brightZaps, dimZaps;
WPos cachedPos;
WVec cachedLength;
IEnumerable<IFinalizedRenderable> cache;
public TeslaZapRenderable(WPos pos, int zOffset, WVec length, string image, int brightZaps, int dimZaps, string palette)
public TeslaZapRenderable(WPos pos, int zOffset, WVec length, string image, string brightSequence, int brightZaps, string dimSequence, int dimZaps, string palette)
{
this.pos = pos;
this.zOffset = zOffset;
@@ -50,6 +52,8 @@ namespace OpenRA.Mods.RA.Graphics
this.palette = palette;
this.brightZaps = brightZaps;
this.dimZaps = dimZaps;
this.dimSequence = dimSequence;
this.brightSequence = brightSequence;
cachedPos = WPos.Zero;
cachedLength = WVec.Zero;
@@ -61,17 +65,20 @@ namespace OpenRA.Mods.RA.Graphics
public int ZOffset { get { return zOffset; } }
public bool IsDecoration { get { return true; } }
public IRenderable WithPalette(PaletteReference newPalette) { return new TeslaZapRenderable(pos, zOffset, length, image, brightZaps, dimZaps, palette); }
public IRenderable WithZOffset(int newOffset) { return new TeslaZapRenderable(pos, zOffset, length, image, brightZaps, dimZaps, palette); }
public IRenderable OffsetBy(WVec vec) { return new TeslaZapRenderable(pos + vec, zOffset, length, image, brightZaps, dimZaps, palette); }
public IRenderable WithPalette(PaletteReference newPalette)
{
return new TeslaZapRenderable(pos, zOffset, length, image, brightSequence, brightZaps, dimSequence, dimZaps, palette);
}
public IRenderable WithZOffset(int newOffset) { return new TeslaZapRenderable(pos, zOffset, length, image, brightSequence, brightZaps, dimSequence, dimZaps, palette); }
public IRenderable OffsetBy(WVec vec) { return new TeslaZapRenderable(pos + vec, zOffset, length, image, brightSequence, brightZaps, dimSequence, dimZaps, palette); }
public IRenderable AsDecoration() { return this; }
public IFinalizedRenderable PrepareRender(WorldRenderer wr) { return this; }
public void RenderDebugGeometry(WorldRenderer wr) { }
public void Render(WorldRenderer wr)
{
if (wr.World.FogObscures(pos) &&
wr.World.FogObscures(pos + length))
if (wr.World.FogObscures(pos) && wr.World.FogObscures(pos + length))
return;
if (!cache.Any() || length != cachedLength || pos != cachedPos)
@@ -84,8 +91,8 @@ namespace OpenRA.Mods.RA.Graphics
public IEnumerable<IFinalizedRenderable> GenerateRenderables(WorldRenderer wr)
{
var bright = wr.World.Map.SequenceProvider.GetSequence(image, "bright");
var dim = wr.World.Map.SequenceProvider.GetSequence(image, "dim");
var bright = wr.World.Map.SequenceProvider.GetSequence(image, brightSequence);
var dim = wr.World.Map.SequenceProvider.GetSequence(image, dimSequence);
var source = wr.ScreenPosition(pos);
var target = wr.ScreenPosition(pos + length);