Convert GpsSatellite to world coordinates.

This commit is contained in:
Paul Chote
2013-05-16 01:41:28 +12:00
parent e122797a68
commit 4b4c1b71df
2 changed files with 16 additions and 17 deletions

View File

@@ -17,28 +17,29 @@ namespace OpenRA.Mods.RA.Effects
{ {
class GpsSatellite : IEffect class GpsSatellite : IEffect
{ {
readonly float heightPerTick = 10; float2 Origin;
float2 offset; WPos Pos;
Animation anim = new Animation("sputnik"); Animation Anim = new Animation("sputnik");
public GpsSatellite(float2 offset) public GpsSatellite(WPos pos, float2 spriteOrigin)
{ {
this.offset = offset; Pos = pos;
anim.PlayRepeating("idle"); Origin = spriteOrigin;
Anim.PlayRepeating("idle");
} }
public void Tick( World world ) public void Tick( World world )
{ {
anim.Tick(); Anim.Tick();
offset.Y -= heightPerTick; Pos += new WVec(0, 0, 427);
if (offset.Y < 0) if (Pos.Z > Pos.Y)
world.AddFrameEndTask(w => w.Remove(this)); world.AddFrameEndTask(w => w.Remove(this));
} }
public IEnumerable<IRenderable> Render(WorldRenderer wr) public IEnumerable<IRenderable> Render(WorldRenderer wr)
{ {
yield return new SpriteRenderable(anim.Image, offset, wr.Palette("effect"), (int)offset.Y); yield return new SpriteRenderable(Anim.Image, Pos, 0, wr.Palette("effect"), 1f, Origin);
} }
} }
} }

View File

@@ -19,15 +19,15 @@ namespace OpenRA.Mods.RA.Effects
{ {
int frame = 0; int frame = 0;
Animation doors = new Animation("atek"); Animation doors = new Animation("atek");
float2 doorOffset = new float2(-4,0); float2 doorOrigin = new float2(16,24);
float2 pos; WPos pos;
public SatelliteLaunch(Actor a) public SatelliteLaunch(Actor a)
{ {
doors.PlayThen("active", doors.PlayThen("active",
() => a.World.AddFrameEndTask(w => w.Remove(this))); () => a.World.AddFrameEndTask(w => w.Remove(this)));
pos = a.CenterLocation.ToFloat2() + doorOffset; pos = a.CenterPosition;
} }
public void Tick( World world ) public void Tick( World world )
@@ -35,14 +35,12 @@ namespace OpenRA.Mods.RA.Effects
doors.Tick(); doors.Tick();
if (++frame == 19) if (++frame == 19)
{ world.AddFrameEndTask(w => w.Add(new GpsSatellite(pos, doorOrigin)));
world.AddFrameEndTask(w => w.Add(new GpsSatellite(pos)));
}
} }
public IEnumerable<IRenderable> Render(WorldRenderer wr) public IEnumerable<IRenderable> Render(WorldRenderer wr)
{ {
yield return new SpriteRenderable(doors.Image, pos, wr.Palette("effect"), (int)doorOffset.Y); yield return new SpriteRenderable(doors.Image, pos, 0, wr.Palette("effect"), 1f, doorOrigin);
} }
} }
} }