Add IMove interface.

Fixes Rallypoints for aircraft.
This commit is contained in:
Paul Chote
2013-08-09 23:36:01 +12:00
parent a6ee4daf58
commit 3b3e6edc90
5 changed files with 21 additions and 14 deletions

View File

@@ -143,6 +143,13 @@ namespace OpenRA.Traits
void SetVisualPosition(Actor self, WPos pos); void SetVisualPosition(Actor self, WPos pos);
} }
public interface IMove
{
Activity MoveTo(CPos cell, int nearEnough);
Activity MoveTo(CPos cell, Actor ignoredActor);
Activity MoveWithinRange(Target target, WRange range);
}
public interface INotifyBlockingMove { void OnNotifyBlockingMove(Actor self, Actor blocking); } public interface INotifyBlockingMove { void OnNotifyBlockingMove(Actor self, Actor blocking); }
public interface IFacing public interface IFacing

View File

@@ -25,7 +25,7 @@ namespace OpenRA.Mods.RA.Air
public override object Create(ActorInitializer init) { return new Helicopter(init, this); } public override object Create(ActorInitializer init) { return new Helicopter(init, this); }
} }
class Helicopter : Aircraft, ITick, IResolveOrder class Helicopter : Aircraft, ITick, IResolveOrder, IMove
{ {
public HelicopterInfo Info; public HelicopterInfo Info;
bool firstTick = true; bool firstTick = true;
@@ -149,5 +149,9 @@ namespace OpenRA.Mods.RA.Air
return (d * 1024 * 8) / (int)distSq; return (d * 1024 * 8) / (int)distSq;
} }
public Activity MoveTo(CPos cell, int nearEnough) { return new HeliFly(cell); }
public Activity MoveTo(CPos cell, Actor ignoredActor) { return new HeliFly(cell); }
public Activity MoveWithinRange(Target target, WRange range) { return new HeliFly(target.CenterPosition); }
} }
} }

View File

@@ -21,7 +21,7 @@ namespace OpenRA.Mods.RA.Air
public override object Create(ActorInitializer init) { return new Plane(init, this); } public override object Create(ActorInitializer init) { return new Plane(init, this); }
} }
public class Plane : Aircraft, IResolveOrder, ITick, ISync public class Plane : Aircraft, IResolveOrder, IMove, ITick, ISync
{ {
public readonly PlaneInfo Info; public readonly PlaneInfo Info;
[Sync] public WPos RTBPathHash; [Sync] public WPos RTBPathHash;
@@ -89,5 +89,9 @@ namespace OpenRA.Mods.RA.Air
UnReserve(); UnReserve();
} }
} }
public Activity MoveTo(CPos cell, int nearEnough) { return Fly.ToCell(cell); }
public Activity MoveTo(CPos cell, Actor ignoredActor) { return Fly.ToCell(cell); }
public Activity MoveWithinRange(Target target, WRange range) { return Fly.ToPos(target.CenterPosition); }
} }
} }

View File

@@ -144,7 +144,7 @@ namespace OpenRA.Mods.RA.Move
public int GetInitialFacing() { return InitialFacing; } public int GetInitialFacing() { return InitialFacing; }
} }
public class Mobile : IIssueOrder, IResolveOrder, IOrderVoice, IPositionable, IFacing, ISync public class Mobile : IIssueOrder, IResolveOrder, IOrderVoice, IPositionable, IMove, IFacing, ISync
{ {
public readonly Actor self; public readonly Actor self;
public readonly MobileInfo Info; public readonly MobileInfo Info;

View File

@@ -94,19 +94,11 @@ namespace OpenRA.Mods.RA
if (rp == null) if (rp == null)
return exitLocation; return exitLocation;
var mobile = newUnit.TraitOrDefault<Mobile>(); var move = newUnit.TraitOrDefault<IMove>();
if (mobile != null) if (move != null)
{ {
newUnit.QueueActivity(new AttackMove.AttackMoveActivity( newUnit.QueueActivity(new AttackMove.AttackMoveActivity(
newUnit, mobile.MoveTo(rp.rallyPoint, rp.nearEnough))); newUnit, move.MoveTo(rp.rallyPoint, rp.nearEnough)));
return rp.rallyPoint;
}
// TODO: don't talk about HeliFly here.
var helicopter = newUnit.TraitOrDefault<Helicopter>();
if (helicopter != null)
{
newUnit.QueueActivity(new HeliFly(rp.rallyPoint));
return rp.rallyPoint; return rp.rallyPoint;
} }