Merge pull request #4396 from Mailaender/reject-move-fix
Fixed RejectsOrders for "Move"
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user