Add IMove interface.
Fixes Rallypoints for aircraft.
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user