explosions

This commit is contained in:
Chris Forbes
2009-10-20 18:47:47 +13:00
parent 7332a8f79a
commit ec60b00f31
6 changed files with 45 additions and 6 deletions

View File

@@ -59,6 +59,7 @@ namespace OpenRa.Game
{
game.world.AddFrameEndTask(w => w.Remove(this));
game.PlaySound("kaboom25.aud", false);
game.world.AddFrameEndTask(w => w.Add(new Explosion(Dest, game)));
}
}

33
OpenRa.Game/Explosion.cs Normal file
View File

@@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenRa.Game.Graphics;
using IjwFramework.Types;
using OpenRa.Game.GameRules;
namespace OpenRa.Game
{
class Explosion : IEffect
{
Animation anim;
int2 pos;
public Explosion(int2 pixelPos, Game g)
{
this.pos = pixelPos;
anim = new Animation("veh-hit3");
anim.PlayThen("idle", () => g.world.AddFrameEndTask(w => w.Remove(this)));
}
public void Tick(Game g) { anim.Tick(); }
public IEnumerable<Pair<Sprite, float2>> Render()
{
yield return Pair.New(anim.Image, pos.ToFloat2() - 0.5f * anim.Image.size);
}
public Player Owner { get { return null; } }
}
}

View File

@@ -56,7 +56,7 @@ namespace OpenRa.Game.Graphics
foreach (Actor a in game.world.Actors)
DrawSpriteList(a.Owner, rect, a.Render());
foreach (IEffect e in game.world.Bullets)
foreach (IEffect e in game.world.Effects)
DrawSpriteList(e.Owner, rect, e.Render());
uiOverlay.Draw();

View File

@@ -78,6 +78,7 @@
<Compile Include="Bullet.cs" />
<Compile Include="Controller.cs" />
<Compile Include="Cursor.cs" />
<Compile Include="Explosion.cs" />
<Compile Include="GameRules\FieldLoader.cs" />
<Compile Include="GameRules\Footprint.cs" />
<Compile Include="GameRules\InfoLoader.cs" />

View File

@@ -8,7 +8,7 @@ namespace OpenRa.Game
class World
{
List<Actor> actors = new List<Actor>();
List<IEffect> bullets = new List<IEffect>();
List<IEffect> effects = new List<IEffect>();
List<Action<World>> frameEndActions = new List<Action<World>>();
readonly Game game;
int lastTime = Environment.TickCount;
@@ -19,8 +19,8 @@ namespace OpenRa.Game
public void Add(Actor a) { actors.Add(a); ActorAdded(a); }
public void Remove(Actor a) { actors.Remove(a); ActorRemoved(a); }
public void Add(Bullet b) { bullets.Add(b); }
public void Remove(Bullet b) { bullets.Remove(b); }
public void Add(IEffect b) { effects.Add(b); }
public void Remove(IEffect b) { effects.Remove(b); }
public void AddFrameEndTask( Action<World> a ) { frameEndActions.Add( a ); }
@@ -42,7 +42,7 @@ namespace OpenRa.Game
foreach( var a in actors )
a.Tick(game);
foreach (var b in bullets)
foreach (var b in effects)
b.Tick(game);
Renderer.waterFrame += 0.00125f * timestep;
@@ -53,6 +53,6 @@ namespace OpenRa.Game
}
public IEnumerable<Actor> Actors { get { return actors; } }
public IEnumerable<IEffect> Bullets { get { return bullets; } }
public IEnumerable<IEffect> Effects { get { return effects; } }
}
}

View File

@@ -342,4 +342,8 @@
<sequence name="idle" start="0" length="1" />
</unit>
<unit name="veh-hit3">
<sequence name="idle" start="0" length="*" />
</unit>
</sequences>