Merge pull request #11308 from reaperrr/fix-11304-IsMoving

Fix IsMoving returning false when activity is a MovePart-derivative
This commit is contained in:
Paul Chote
2016-06-18 11:32:51 +01:00
committed by GitHub
3 changed files with 7 additions and 24 deletions

View File

@@ -825,7 +825,8 @@ namespace OpenRA.Mods.Common.AI
foreach (var mcv in mcvs) foreach (var mcv in mcvs)
{ {
if (mcv.IsMoving()) var mover = mcv.TraitOrDefault<IMove>();
if (mover != null && mover.IsMoving)
continue; continue;
var factType = mcv.Info.TraitInfo<TransformsInfo>().IntoActor; var factType = mcv.Info.TraitInfo<TransformsInfo>().IntoActor;

View File

@@ -432,22 +432,4 @@ namespace OpenRA.Mods.Common.Activities
} }
} }
} }
public static class ActorExtensionsForMove
{
public static bool IsMoving(this Actor self)
{
var a = self.GetCurrentActivity();
if (a == null)
return false;
// HACK: Dirty, but it suffices until we do something better:
if (a.GetType() == typeof(Move)) return true;
if (a.GetType() == typeof(MoveAdjacentTo)) return true;
if (a.GetType() == typeof(AttackMoveActivity)) return true;
// Not a move:
return false;
}
}
} }

View File

@@ -168,7 +168,7 @@ namespace OpenRA.Mods.Common.Traits
public int CalculateTilesetMovementClass(TileSet tileset) public int CalculateTilesetMovementClass(TileSet tileset)
{ {
/* collect our ability to cross *all* terraintypes, in a bitvector */ // collect our ability to cross *all* terraintypes, in a bitvector
return TilesetTerrainInfo[tileset].Select(ti => ti.Cost < int.MaxValue).ToBits(); return TilesetTerrainInfo[tileset].Select(ti => ti.Cost < int.MaxValue).ToBits();
} }
@@ -179,13 +179,13 @@ namespace OpenRA.Mods.Common.Traits
static bool IsMovingInMyDirection(Actor self, Actor other) static bool IsMovingInMyDirection(Actor self, Actor other)
{ {
if (!other.IsMoving()) return false;
var selfMobile = self.TraitOrDefault<Mobile>(); var selfMobile = self.TraitOrDefault<Mobile>();
if (selfMobile == null) return false; if (selfMobile == null)
return false;
var otherMobile = other.TraitOrDefault<Mobile>(); var otherMobile = other.TraitOrDefault<Mobile>();
if (otherMobile == null) return false; if (otherMobile == null || !otherMobile.IsMoving)
return false;
// Sign of dot-product indicates (roughly) if vectors are facing in same or opposite directions: // Sign of dot-product indicates (roughly) if vectors are facing in same or opposite directions:
var dp = CVec.Dot(selfMobile.ToCell - self.Location, otherMobile.ToCell - other.Location); var dp = CVec.Dot(selfMobile.ToCell - self.Location, otherMobile.ToCell - other.Location);