added Parachute effect + sequences + cargo for BADR

This commit is contained in:
Chris Forbes
2010-01-28 18:14:12 +13:00
parent 02ab0f5444
commit 3eee141b79
5 changed files with 90 additions and 8 deletions

View File

@@ -0,0 +1,62 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenRa.Traits;
using OpenRa.Graphics;
namespace OpenRa.Effects
{
class Parachute : IEffect
{
readonly Animation anim;
readonly Animation paraAnim;
readonly float2 location;
readonly Actor cargo;
readonly Player owner;
float altitude;
const float fallRate = .3f;
public Parachute(Player owner, string image, float2 location, int altitude, Actor cargo)
{
this.location = location;
this.altitude = altitude;
this.cargo = cargo;
this.owner = owner;
anim = new Animation(image);
anim.PlayFetchIndex("idle", () => 0);
anim.Tick();
paraAnim = new Animation("parach");
paraAnim.PlayThen("open", () => paraAnim.PlayRepeating("idle"));
}
public void Tick(World world)
{
paraAnim.Tick();
altitude -= fallRate;
if (altitude <= 0)
world.AddFrameEndTask(w =>
{
w.Remove(this);
cargo.CancelActivity();
cargo.CenterLocation = location;
cargo.Location = ((1 / 24f) * location).ToInt2();
w.Add(cargo);
});
}
public IEnumerable<Renderable> Render()
{
var pos = location - new float2(0, altitude);
yield return new Renderable(anim.Image, location - .5f * anim.Image.size, PaletteType.Shadow, 0);
yield return new Renderable(anim.Image, pos - .5f * anim.Image.size, owner.Palette, 2);
yield return new Renderable(paraAnim.Image, pos - .5f * paraAnim.Image.size, owner.Palette, 3);
}
}
}

View File

@@ -83,6 +83,7 @@
<Compile Include="Effects\GpsSatellite.cs" />
<Compile Include="Effects\InvulnEffect.cs" />
<Compile Include="Effects\MoveFlash.cs" />
<Compile Include="Effects\Parachute.cs" />
<Compile Include="Effects\RepairIndicator.cs" />
<Compile Include="Effects\SatelliteLaunch.cs" />
<Compile Include="Effects\Smoke.cs" />