bib is removed from smudge on building death

This commit is contained in:
Chris Forbes
2009-10-29 22:31:41 +13:00
parent db7b653daf
commit 7a5d75c393
3 changed files with 24 additions and 5 deletions

View File

@@ -10,7 +10,7 @@ using OpenRa.Game;
namespace OpenRa.Game.Traits namespace OpenRa.Game.Traits
{ {
class RenderBuilding : RenderSimple class RenderBuilding : RenderSimple, INotifyRemoved
{ {
const int SmallBibStart = 1; const int SmallBibStart = 1;
const int LargeBibStart = 5; const int LargeBibStart = 5;
@@ -19,7 +19,11 @@ namespace OpenRa.Game.Traits
: base(self) : base(self)
{ {
anim.PlayThen("make", () => anim.PlayRepeating("idle")); anim.PlayThen("make", () => anim.PlayRepeating("idle"));
DoBib(self, false);
}
void DoBib(Actor self, bool isRemove)
{
// at this point, we already know where we are, so we can safely place the bib in the smudge // at this point, we already know where we are, so we can safely place the bib in the smudge
var buildingInfo = (UnitInfo.BuildingInfo)self.unitInfo; var buildingInfo = (UnitInfo.BuildingInfo)self.unitInfo;
if (buildingInfo.Bib) if (buildingInfo.Bib)
@@ -31,6 +35,12 @@ namespace OpenRa.Game.Traits
for (int i = 0; i < 2 * size; i++) for (int i = 0; i < 2 * size; i++)
{ {
var p = self.Location + new int2(i % size, i / size + bibOffset); var p = self.Location + new int2(i % size, i / size + bibOffset);
if (isRemove)
{
if (Game.map.MapTiles[p.X, p.Y].smudge == (byte)(i + startIndex))
Game.map.MapTiles[p.X, p.Y].smudge = 0;
}
else
Game.map.MapTiles[p.X, p.Y].smudge = (byte)(i + startIndex); Game.map.MapTiles[p.X, p.Y].smudge = (byte)(i + startIndex);
} }
} }
@@ -40,5 +50,7 @@ namespace OpenRa.Game.Traits
{ {
yield return Pair.New(anim.Image, 24f * (float2)self.Location); yield return Pair.New(anim.Image, 24f * (float2)self.Location);
} }
public void Removed(Actor self) { DoBib(self, true); }
} }
} }

View File

@@ -10,4 +10,5 @@ namespace OpenRa.Game.Traits
interface ITick { void Tick(Actor self); } interface ITick { void Tick(Actor self); }
interface IRender { IEnumerable<Pair<Sprite, float2>> Render(Actor self); } interface IRender { IEnumerable<Pair<Sprite, float2>> Render(Actor self); }
interface IOrder { Order Order(Actor self, int2 xy, bool lmb, Actor underCursor); } interface IOrder { Order Order(Actor self, int2 xy, bool lmb, Actor underCursor); }
interface INotifyRemoved { void Removed(Actor self); }
} }

View File

@@ -2,6 +2,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Windows.Forms; using System.Windows.Forms;
using OpenRa.Game.Graphics; using OpenRa.Game.Graphics;
using OpenRa.Game.Traits;
namespace OpenRa.Game namespace OpenRa.Game
{ {
@@ -22,7 +23,12 @@ namespace OpenRa.Game
public void AddFrameEndTask( Action<World> a ) { frameEndActions.Add( a ); } public void AddFrameEndTask( Action<World> a ) { frameEndActions.Add( a ); }
public event Action<Actor> ActorAdded = _ => { }; public event Action<Actor> ActorAdded = _ => { };
public event Action<Actor> ActorRemoved = a => { a.Health = 0; }; /* make sure everyone sees it as dead */ public event Action<Actor> ActorRemoved = a =>
{
a.Health = 0; /* make sure everyone sees it as dead */
foreach (var nr in a.traits.WithInterface<INotifyRemoved>())
nr.Removed(a);
};
public void ResetTimer() public void ResetTimer()
{ {