Merge pull request #4396 from Mailaender/reject-move-fix

Fixed RejectsOrders for "Move"
This commit is contained in:
Chris Forbes
2013-12-30 22:00:39 -08:00
3 changed files with 16 additions and 5 deletions

View File

@@ -138,7 +138,8 @@ namespace OpenRA.Widgets
void ApplyOrders(World world, int2 xy, MouseInput mi) void ApplyOrders(World world, int2 xy, MouseInput mi)
{ {
if (world.OrderGenerator == null) return; if (world.OrderGenerator == null)
return;
var pos = worldRenderer.Position(xy); var pos = worldRenderer.Position(xy);
var orders = world.OrderGenerator.Order(world, pos.ToCPos(), mi).ToArray(); var orders = world.OrderGenerator.Order(world, pos.ToCPos(), mi).ToArray();
@@ -149,6 +150,9 @@ namespace OpenRA.Widgets
foreach (var order in orders) foreach (var order in orders)
{ {
var o = order; var o = order;
if (o == null)
continue;
if (!flashed) if (!flashed)
{ {
if (o.TargetActor != null) if (o.TargetActor != null)

View File

@@ -158,7 +158,12 @@ namespace OpenRA
// Find an actor with a phrase to say // Find an actor with a phrase to say
foreach (var o in orders) foreach (var o in orders)
{ {
if (o.Subject.Destroyed) continue; if (o == null)
continue;
if (o.Subject.Destroyed)
continue;
foreach (var v in o.Subject.TraitsImplementing<IOrderVoice>()) foreach (var v in o.Subject.TraitsImplementing<IOrderVoice>())
if (Sound.PlayVoice(v.VoicePhraseForOrder(o.Subject, o), if (Sound.PlayVoice(v.VoicePhraseForOrder(o.Subject, o),
o.Subject, o.Subject.Owner.Country.Race)) o.Subject, o.Subject.Owner.Country.Race))

View File

@@ -251,7 +251,7 @@ namespace OpenRA.Mods.RA.Move
self.World.ScreenMap.Remove(self); self.World.ScreenMap.Remove(self);
} }
public IEnumerable<IOrderTargeter> Orders { get { yield return new MoveOrderTargeter(Info); } } public IEnumerable<IOrderTargeter> Orders { get { yield return new MoveOrderTargeter(self, Info); } }
// Note: Returns a valid order even if the unit can't move to the target // Note: Returns a valid order even if the unit can't move to the target
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued) public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
@@ -504,10 +504,12 @@ namespace OpenRA.Mods.RA.Move
class MoveOrderTargeter : IOrderTargeter class MoveOrderTargeter : IOrderTargeter
{ {
readonly MobileInfo unitType; readonly MobileInfo unitType;
readonly bool rejectMove;
public MoveOrderTargeter(MobileInfo unitType) public MoveOrderTargeter(Actor self, MobileInfo unitType)
{ {
this.unitType = unitType; this.unitType = unitType;
this.rejectMove = !self.AcceptsOrder("Move");
} }
public string OrderID { get { return "Move"; } } public string OrderID { get { return "Move"; } }
@@ -516,7 +518,7 @@ namespace OpenRA.Mods.RA.Move
public bool CanTarget(Actor self, Target target, List<Actor> othersAtTarget, TargetModifiers modifiers, ref string cursor) public bool CanTarget(Actor self, Target target, List<Actor> othersAtTarget, TargetModifiers modifiers, ref string cursor)
{ {
if (!target.IsValidFor(self)) if (rejectMove || !target.IsValidFor(self))
return false; return false;
var location = target.CenterPosition.ToCPos(); var location = target.CenterPosition.ToCPos();