Add a new INotifyCrushed interface

This commit is contained in:
abcdefg30
2016-01-22 10:56:04 +01:00
parent e343803810
commit 8b59ce4dc2
5 changed files with 70 additions and 48 deletions

View File

@@ -20,24 +20,25 @@ namespace OpenRA.Mods.RA.Traits
public readonly bool AvoidFriendly = true;
public readonly HashSet<string> DetonateClasses = new HashSet<string>();
public object Create(ActorInitializer init) { return new Mine(init, this); }
public object Create(ActorInitializer init) { return new Mine(this); }
}
class Mine : ICrushable
class Mine : ICrushable, INotifyCrushed
{
readonly Actor self;
readonly MineInfo info;
public Mine(ActorInitializer init, MineInfo info)
public Mine(MineInfo info)
{
self = init.Self;
this.info = info;
}
public void WarnCrush(Actor crusher) { }
void INotifyCrushed.WarnCrush(Actor self, Actor crusher, HashSet<string> crushClasses) { }
public void OnCrush(Actor crusher)
void INotifyCrushed.OnCrush(Actor self, Actor crusher, HashSet<string> crushClasses)
{
if (!CrushableBy(crushClasses, crusher.Owner))
return;
if (crusher.Info.HasTraitInfo<MineImmuneInfo>() || (self.Owner.Stances[crusher.Owner] == Stance.Ally && info.AvoidFriendly))
return;