bib is removed from smudge on building death
This commit is contained in:
@@ -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,7 +35,13 @@ 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);
|
||||||
Game.map.MapTiles[p.X, p.Y].smudge = (byte)(i + startIndex);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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); }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
using System;
|
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
|
||||||
{
|
{
|
||||||
@@ -21,8 +22,13 @@ 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()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user