Display a blocked cursor when not allowed to MoveIntoShroud.
This commit is contained in:
committed by
abcdefg30
parent
b27289106d
commit
ebb982789e
@@ -39,11 +39,12 @@ namespace OpenRA.Mods.Common.Traits
|
||||
|
||||
class AttackMove : INotifyCreated, ITick, IResolveOrder, IOrderVoice, INotifyIdle, ISync
|
||||
{
|
||||
public readonly AttackMoveInfo Info;
|
||||
|
||||
[Sync] public CPos _targetLocation { get { return TargetLocation.HasValue ? TargetLocation.Value : CPos.Zero; } }
|
||||
public CPos? TargetLocation = null;
|
||||
|
||||
readonly IMove move;
|
||||
readonly AttackMoveInfo info;
|
||||
|
||||
ConditionManager conditionManager;
|
||||
int attackMoveToken = ConditionManager.InvalidConditionToken;
|
||||
@@ -53,7 +54,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
public AttackMove(Actor self, AttackMoveInfo info)
|
||||
{
|
||||
move = self.Trait<IMove>();
|
||||
this.info = info;
|
||||
Info = info;
|
||||
}
|
||||
|
||||
void INotifyCreated.Created(Actor self)
|
||||
@@ -70,24 +71,24 @@ namespace OpenRA.Mods.Common.Traits
|
||||
var attackActive = activity != null && !assaultMoving;
|
||||
var assaultActive = activity != null && assaultMoving;
|
||||
|
||||
if (attackActive && attackMoveToken == ConditionManager.InvalidConditionToken && !string.IsNullOrEmpty(info.AttackMoveScanCondition))
|
||||
attackMoveToken = conditionManager.GrantCondition(self, info.AttackMoveScanCondition);
|
||||
if (attackActive && attackMoveToken == ConditionManager.InvalidConditionToken && !string.IsNullOrEmpty(Info.AttackMoveScanCondition))
|
||||
attackMoveToken = conditionManager.GrantCondition(self, Info.AttackMoveScanCondition);
|
||||
else if (!attackActive && attackMoveToken != ConditionManager.InvalidConditionToken)
|
||||
attackMoveToken = conditionManager.RevokeCondition(self, attackMoveToken);
|
||||
|
||||
if (assaultActive && assaultMoveToken == ConditionManager.InvalidConditionToken && !string.IsNullOrEmpty(info.AssaultMoveScanCondition))
|
||||
assaultMoveToken = conditionManager.GrantCondition(self, info.AssaultMoveScanCondition);
|
||||
if (assaultActive && assaultMoveToken == ConditionManager.InvalidConditionToken && !string.IsNullOrEmpty(Info.AssaultMoveScanCondition))
|
||||
assaultMoveToken = conditionManager.GrantCondition(self, Info.AssaultMoveScanCondition);
|
||||
else if (!assaultActive && assaultMoveToken != ConditionManager.InvalidConditionToken)
|
||||
assaultMoveToken = conditionManager.RevokeCondition(self, assaultMoveToken);
|
||||
}
|
||||
|
||||
string IOrderVoice.VoicePhraseForOrder(Actor self, Order order)
|
||||
{
|
||||
if (!info.MoveIntoShroud && !self.Owner.Shroud.IsExplored(order.TargetLocation))
|
||||
if (!Info.MoveIntoShroud && !self.Owner.Shroud.IsExplored(order.TargetLocation))
|
||||
return null;
|
||||
|
||||
if (order.OrderString == "AttackMove" || order.OrderString == "AssaultMove")
|
||||
return info.Voice;
|
||||
return Info.Voice;
|
||||
|
||||
return null;
|
||||
}
|
||||
@@ -114,7 +115,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
if (!order.Queued)
|
||||
self.CancelActivity();
|
||||
|
||||
if (!info.MoveIntoShroud && !self.Owner.Shroud.IsExplored(order.TargetLocation))
|
||||
if (!Info.MoveIntoShroud && !self.Owner.Shroud.IsExplored(order.TargetLocation))
|
||||
return;
|
||||
|
||||
TargetLocation = move.NearestMoveableCell(order.TargetLocation);
|
||||
@@ -166,7 +167,15 @@ namespace OpenRA.Mods.Common.Traits
|
||||
public override string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
|
||||
{
|
||||
var prefix = mi.Modifiers.HasModifier(Modifiers.Ctrl) ? "assaultmove" : "attackmove";
|
||||
return world.Map.Contains(cell) ? prefix : prefix + "-blocked";
|
||||
|
||||
if (world.Map.Contains(cell))
|
||||
{
|
||||
var explored = subjects.First().Actor.Owner.Shroud.IsExplored(cell);
|
||||
var blocked = !explored && subjects.Any(a => !a.Trait.Info.MoveIntoShroud);
|
||||
return blocked ? prefix + "-blocked" : prefix;
|
||||
}
|
||||
|
||||
return prefix + "-blocked";
|
||||
}
|
||||
|
||||
public override bool InputOverridesSelection(World world, int2 xy, MouseInput mi)
|
||||
|
||||
Reference in New Issue
Block a user