Merge pull request #6945 from Phrohdoh/madtank-fix

MadTank deployed teleportation fix.
This commit is contained in:
Paul Chote
2014-11-16 17:31:46 +13:00
3 changed files with 12 additions and 2 deletions

View File

@@ -16,6 +16,8 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA.Activities
{
public interface IPreventsTeleport { bool PreventsTeleport(Actor self); }
public class Teleport : Activity
{
Actor chronosphere;
@@ -46,6 +48,10 @@ namespace OpenRA.Mods.RA.Activities
if (pc != null && !pc.CanTeleport)
return NextActivity;
foreach (var condition in self.TraitsImplementing<IPreventsTeleport>())
if (condition.PreventsTeleport(self))
return NextActivity;
var bestCell = ChooseBestDestinationCell(self, destination);
if (bestCell == null)
return NextActivity;

View File

@@ -45,7 +45,7 @@ namespace OpenRA.Mods.RA
public object Create(ActorInitializer init) { return new MadTank(init.self, this); }
}
class MadTank : IIssueOrder, IResolveOrder, IOrderVoice, ITick
class MadTank : IIssueOrder, IResolveOrder, IOrderVoice, ITick, IPreventsTeleport
{
readonly Actor self;
readonly MadTankInfo info;
@@ -131,6 +131,8 @@ namespace OpenRA.Mods.RA
driverMobile.Nudge(driver, driver, true);
}
public bool PreventsTeleport(Actor self) { return deployed; }
void StartDetonationSequence()
{
if (deployed)

View File

@@ -12,6 +12,7 @@ using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using OpenRA.Graphics;
using OpenRA.Mods.RA.Activities;
namespace OpenRA.Mods.RA
{
@@ -59,7 +60,8 @@ namespace OpenRA.Mods.RA
foreach (var t in tiles)
units.AddRange(self.World.ActorMap.GetUnitsAt(t));
return units.Distinct().Where(a => a.HasTrait<Chronoshiftable>());
return units.Distinct().Where(a => a.HasTrait<Chronoshiftable>() &&
!a.TraitsImplementing<IPreventsTeleport>().Any(condition => condition.PreventsTeleport(a)));
}
public bool SimilarTerrain(CPos xy, CPos sourceLocation)