diff --git a/OpenRA.Game/Actor.cs b/OpenRA.Game/Actor.cs
index 771421e96e..d0741bf33c 100644
--- a/OpenRA.Game/Actor.cs
+++ b/OpenRA.Game/Actor.cs
@@ -528,10 +528,16 @@ namespace OpenRA
notify(this, readOnlyConditionCache);
}
- /// Grants a specified condition.
+ ///
+ /// Grants a specified condition if it is valid.
+ /// Otherwise, just returns InvalidConditionToken.
+ ///
/// The token that is used to revoke this condition.
public int GrantCondition(string condition)
{
+ if (string.IsNullOrEmpty(condition))
+ return InvalidConditionToken;
+
var token = nextConditionToken++;
conditionTokens.Add(token, condition);
UpdateConditionState(condition, token, false);
diff --git a/OpenRA.Mods.Cnc/Traits/Attack/AttackLeap.cs b/OpenRA.Mods.Cnc/Traits/Attack/AttackLeap.cs
index 44f58273f6..c8eeec49c2 100644
--- a/OpenRA.Mods.Cnc/Traits/Attack/AttackLeap.cs
+++ b/OpenRA.Mods.Cnc/Traits/Attack/AttackLeap.cs
@@ -55,8 +55,7 @@ namespace OpenRA.Mods.Cnc.Traits
public void GrantLeapCondition(Actor self)
{
- if (!string.IsNullOrEmpty(info.LeapCondition))
- leapToken = self.GrantCondition(info.LeapCondition);
+ leapToken = self.GrantCondition(info.LeapCondition);
}
public void RevokeLeapCondition(Actor self)
diff --git a/OpenRA.Mods.Cnc/Traits/ConyardChronoReturn.cs b/OpenRA.Mods.Cnc/Traits/ConyardChronoReturn.cs
index 1a2282b7d4..ea929e5a3b 100644
--- a/OpenRA.Mods.Cnc/Traits/ConyardChronoReturn.cs
+++ b/OpenRA.Mods.Cnc/Traits/ConyardChronoReturn.cs
@@ -122,7 +122,7 @@ namespace OpenRA.Mods.Cnc.Traits
void TriggerVortex()
{
- if (!string.IsNullOrEmpty(info.Condition) && conditionToken == Actor.InvalidConditionToken)
+ if (conditionToken == Actor.InvalidConditionToken)
conditionToken = self.GrantCondition(info.Condition);
triggered = true;
diff --git a/OpenRA.Mods.Cnc/Traits/Disguise.cs b/OpenRA.Mods.Cnc/Traits/Disguise.cs
index f4a717c7cf..5d91946531 100644
--- a/OpenRA.Mods.Cnc/Traits/Disguise.cs
+++ b/OpenRA.Mods.Cnc/Traits/Disguise.cs
@@ -221,7 +221,7 @@ namespace OpenRA.Mods.Cnc.Traits
if (Disguised != oldDisguiseSetting)
{
- if (Disguised && disguisedToken == Actor.InvalidConditionToken && !string.IsNullOrEmpty(info.DisguisedCondition))
+ if (Disguised && disguisedToken == Actor.InvalidConditionToken)
disguisedToken = self.GrantCondition(info.DisguisedCondition);
else if (!Disguised && disguisedToken != Actor.InvalidConditionToken)
disguisedToken = self.RevokeCondition(disguisedToken);
diff --git a/OpenRA.Mods.Cnc/Traits/MadTank.cs b/OpenRA.Mods.Cnc/Traits/MadTank.cs
index 42dfc80180..3a5b881d43 100644
--- a/OpenRA.Mods.Cnc/Traits/MadTank.cs
+++ b/OpenRA.Mods.Cnc/Traits/MadTank.cs
@@ -188,8 +188,7 @@ namespace OpenRA.Mods.Cnc.Traits
if (target.Type == TargetType.Invalid)
return true;
- if (!string.IsNullOrEmpty(mad.info.DeployedCondition))
- self.GrantCondition(mad.info.DeployedCondition);
+ self.GrantCondition(mad.info.DeployedCondition);
self.World.AddFrameEndTask(w => EjectDriver());
if (mad.info.ThumpSequence != null)
diff --git a/OpenRA.Mods.Common/Activities/Move/AttackMoveActivity.cs b/OpenRA.Mods.Common/Activities/Move/AttackMoveActivity.cs
index 2473d4dd82..0e5136c5cd 100644
--- a/OpenRA.Mods.Common/Activities/Move/AttackMoveActivity.cs
+++ b/OpenRA.Mods.Common/Activities/Move/AttackMoveActivity.cs
@@ -42,10 +42,10 @@ namespace OpenRA.Mods.Common.Activities
if (attackMove == null)
return;
- if (!isAssaultMove && !string.IsNullOrEmpty(attackMove.Info.AttackMoveCondition))
- token = self.GrantCondition(attackMove.Info.AttackMoveCondition);
- else if (isAssaultMove && !string.IsNullOrEmpty(attackMove.Info.AssaultMoveCondition))
+ if (isAssaultMove)
token = self.GrantCondition(attackMove.Info.AssaultMoveCondition);
+ else
+ token = self.GrantCondition(attackMove.Info.AttackMoveCondition);
}
public override bool Tick(Actor self)
diff --git a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs
index c908184f6d..6225d1a427 100644
--- a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs
+++ b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs
@@ -1114,7 +1114,7 @@ namespace OpenRA.Mods.Common.Traits
return;
airborne = true;
- if (!string.IsNullOrEmpty(Info.AirborneCondition) && airborneToken == Actor.InvalidConditionToken)
+ if (airborneToken == Actor.InvalidConditionToken)
airborneToken = self.GrantCondition(Info.AirborneCondition);
}
@@ -1138,7 +1138,7 @@ namespace OpenRA.Mods.Common.Traits
return;
cruising = true;
- if (!string.IsNullOrEmpty(Info.CruisingCondition) && cruisingToken == Actor.InvalidConditionToken)
+ if (cruisingToken == Actor.InvalidConditionToken)
cruisingToken = self.GrantCondition(Info.CruisingCondition);
}
diff --git a/OpenRA.Mods.Common/Traits/Attack/AttackCharges.cs b/OpenRA.Mods.Common/Traits/Attack/AttackCharges.cs
index c4aab0aa63..c303624a8d 100644
--- a/OpenRA.Mods.Common/Traits/Attack/AttackCharges.cs
+++ b/OpenRA.Mods.Common/Traits/Attack/AttackCharges.cs
@@ -54,8 +54,7 @@ namespace OpenRA.Mods.Common.Traits
var delta = charging ? info.ChargeRate : -info.DischargeRate;
ChargeLevel = (ChargeLevel + delta).Clamp(0, info.ChargeLevel);
- if (ChargeLevel > 0 && !string.IsNullOrEmpty(info.ChargingCondition)
- && chargingToken == Actor.InvalidConditionToken)
+ if (ChargeLevel > 0 && chargingToken == Actor.InvalidConditionToken)
chargingToken = self.GrantCondition(info.ChargingCondition);
if (ChargeLevel == 0 && chargingToken != Actor.InvalidConditionToken)
diff --git a/OpenRA.Mods.Common/Traits/Buildings/PrimaryBuilding.cs b/OpenRA.Mods.Common/Traits/Buildings/PrimaryBuilding.cs
index 30a47e2a0e..41b1805529 100644
--- a/OpenRA.Mods.Common/Traits/Buildings/PrimaryBuilding.cs
+++ b/OpenRA.Mods.Common/Traits/Buildings/PrimaryBuilding.cs
@@ -102,7 +102,7 @@ namespace OpenRA.Mods.Common.Traits
b.Trait.SetPrimaryProducer(b.Actor, false);
}
- if (primaryToken == Actor.InvalidConditionToken && !string.IsNullOrEmpty(Info.PrimaryCondition))
+ if (primaryToken == Actor.InvalidConditionToken)
primaryToken = self.GrantCondition(Info.PrimaryCondition);
Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", Info.SelectionNotification, self.Owner.Faction.InternalName);
diff --git a/OpenRA.Mods.Common/Traits/CaptureManager.cs b/OpenRA.Mods.Common/Traits/CaptureManager.cs
index 63083e0edb..5d49ddeb39 100644
--- a/OpenRA.Mods.Common/Traits/CaptureManager.cs
+++ b/OpenRA.Mods.Common/Traits/CaptureManager.cs
@@ -204,12 +204,10 @@ namespace OpenRA.Mods.Common.Traits
else
currentTargetDelay += 1;
- if (!string.IsNullOrEmpty(info.CapturingCondition) &&
- capturingToken == Actor.InvalidConditionToken)
+ if (capturingToken == Actor.InvalidConditionToken)
capturingToken = self.GrantCondition(info.CapturingCondition);
- if (!string.IsNullOrEmpty(targetManager.info.BeingCapturedCondition) &&
- targetManager.beingCapturedToken == Actor.InvalidConditionToken)
+ if (targetManager.beingCapturedToken == Actor.InvalidConditionToken)
targetManager.beingCapturedToken = target.GrantCondition(targetManager.info.BeingCapturedCondition);
captures = enabledCaptures
diff --git a/OpenRA.Mods.Common/Traits/Cargo.cs b/OpenRA.Mods.Common/Traits/Cargo.cs
index 1240195a39..f02c7b554b 100644
--- a/OpenRA.Mods.Common/Traits/Cargo.cs
+++ b/OpenRA.Mods.Common/Traits/Cargo.cs
@@ -262,7 +262,7 @@ namespace OpenRA.Mods.Common.Traits
if (!HasSpace(w))
return false;
- if (loadingToken == Actor.InvalidConditionToken && !string.IsNullOrEmpty(Info.LoadingCondition))
+ if (loadingToken == Actor.InvalidConditionToken)
loadingToken = self.GrantCondition(Info.LoadingCondition);
reserves.Add(a);
diff --git a/OpenRA.Mods.Common/Traits/Carryable.cs b/OpenRA.Mods.Common/Traits/Carryable.cs
index 734aeee03e..39a7a2541e 100644
--- a/OpenRA.Mods.Common/Traits/Carryable.cs
+++ b/OpenRA.Mods.Common/Traits/Carryable.cs
@@ -78,7 +78,7 @@ namespace OpenRA.Mods.Common.Traits
attached = true;
- if (carriedToken == Actor.InvalidConditionToken && !string.IsNullOrEmpty(Info.CarriedCondition))
+ if (carriedToken == Actor.InvalidConditionToken)
carriedToken = self.GrantCondition(Info.CarriedCondition);
}
@@ -102,7 +102,7 @@ namespace OpenRA.Mods.Common.Traits
state = State.Reserved;
Carrier = carrier;
- if (reservedToken == Actor.InvalidConditionToken && !string.IsNullOrEmpty(Info.ReservedCondition))
+ if (reservedToken == Actor.InvalidConditionToken)
reservedToken = self.GrantCondition(Info.ReservedCondition);
return true;
@@ -134,7 +134,7 @@ namespace OpenRA.Mods.Common.Traits
state = State.Locked;
Carrier = carrier;
- if (lockedToken == Actor.InvalidConditionToken && !string.IsNullOrEmpty(Info.LockedCondition))
+ if (lockedToken == Actor.InvalidConditionToken)
lockedToken = self.GrantCondition(Info.LockedCondition);
}
diff --git a/OpenRA.Mods.Common/Traits/Cloak.cs b/OpenRA.Mods.Common/Traits/Cloak.cs
index 61b847b27e..2d5cd05fe0 100644
--- a/OpenRA.Mods.Common/Traits/Cloak.cs
+++ b/OpenRA.Mods.Common/Traits/Cloak.cs
@@ -95,7 +95,7 @@ namespace OpenRA.Mods.Common.Traits
if (Cloaked)
{
wasCloaked = true;
- if (cloakedToken == Actor.InvalidConditionToken && !string.IsNullOrEmpty(Info.CloakedCondition))
+ if (cloakedToken == Actor.InvalidConditionToken)
cloakedToken = self.GrantCondition(Info.CloakedCondition);
}
@@ -163,7 +163,7 @@ namespace OpenRA.Mods.Common.Traits
var isCloaked = Cloaked;
if (isCloaked && !wasCloaked)
{
- if (cloakedToken == Actor.InvalidConditionToken && !string.IsNullOrEmpty(Info.CloakedCondition))
+ if (cloakedToken == Actor.InvalidConditionToken)
cloakedToken = self.GrantCondition(Info.CloakedCondition);
// Sounds shouldn't play if the actor starts cloaked
diff --git a/OpenRA.Mods.Common/Traits/Conditions/GrantConditionOnDeploy.cs b/OpenRA.Mods.Common/Traits/Conditions/GrantConditionOnDeploy.cs
index 658f3695fc..0b3a237e9b 100644
--- a/OpenRA.Mods.Common/Traits/Conditions/GrantConditionOnDeploy.cs
+++ b/OpenRA.Mods.Common/Traits/Conditions/GrantConditionOnDeploy.cs
@@ -323,7 +323,7 @@ namespace OpenRA.Mods.Common.Traits
void OnDeployCompleted()
{
- if (!string.IsNullOrEmpty(Info.DeployedCondition) && deployedToken == Actor.InvalidConditionToken)
+ if (deployedToken == Actor.InvalidConditionToken)
deployedToken = self.GrantCondition(Info.DeployedCondition);
deployState = DeployState.Deployed;
@@ -339,7 +339,7 @@ namespace OpenRA.Mods.Common.Traits
void OnUndeployCompleted()
{
- if (!string.IsNullOrEmpty(Info.UndeployedCondition) && undeployedToken == Actor.InvalidConditionToken)
+ if (undeployedToken == Actor.InvalidConditionToken)
undeployedToken = self.GrantCondition(Info.UndeployedCondition);
deployState = DeployState.Undeployed;
diff --git a/OpenRA.Mods.Common/Traits/Conditions/GrantConditionOnLineBuildDirection.cs b/OpenRA.Mods.Common/Traits/Conditions/GrantConditionOnLineBuildDirection.cs
index 954c5052f5..c38ed5d7cc 100644
--- a/OpenRA.Mods.Common/Traits/Conditions/GrantConditionOnLineBuildDirection.cs
+++ b/OpenRA.Mods.Common/Traits/Conditions/GrantConditionOnLineBuildDirection.cs
@@ -40,10 +40,7 @@ namespace OpenRA.Mods.Common.Traits
void INotifyCreated.Created(Actor self)
{
- if (direction != info.Direction)
- return;
-
- if (!string.IsNullOrEmpty(info.Condition))
+ if (direction == info.Direction)
self.GrantCondition(info.Condition);
}
}
diff --git a/OpenRA.Mods.Common/Traits/Demolishable.cs b/OpenRA.Mods.Common/Traits/Demolishable.cs
index d8ea6638dd..7bdf86362e 100644
--- a/OpenRA.Mods.Common/Traits/Demolishable.cs
+++ b/OpenRA.Mods.Common/Traits/Demolishable.cs
@@ -59,10 +59,7 @@ namespace OpenRA.Mods.Common.Traits
if (IsTraitDisabled)
return;
- var token = Actor.InvalidConditionToken;
- if (!string.IsNullOrEmpty(Info.Condition))
- token = self.GrantCondition(Info.Condition);
-
+ var token = self.GrantCondition(Info.Condition);
actions.Add(new DemolishAction(saboteur, delay, token));
}
diff --git a/OpenRA.Mods.Common/Traits/KillsSelf.cs b/OpenRA.Mods.Common/Traits/KillsSelf.cs
index 51bb7b11c0..68a235a75f 100644
--- a/OpenRA.Mods.Common/Traits/KillsSelf.cs
+++ b/OpenRA.Mods.Common/Traits/KillsSelf.cs
@@ -73,8 +73,7 @@ namespace OpenRA.Mods.Common.Traits
if (self.IsDead)
return;
- if (!string.IsNullOrEmpty(Info.GrantsCondition))
- self.GrantCondition(Info.GrantsCondition);
+ self.GrantCondition(Info.GrantsCondition);
if (Info.RemoveInstead || !self.Info.HasTraitInfo())
self.Dispose();
diff --git a/OpenRA.Mods.Common/Traits/Parachutable.cs b/OpenRA.Mods.Common/Traits/Parachutable.cs
index 5942ee7294..8fd46f35b8 100644
--- a/OpenRA.Mods.Common/Traits/Parachutable.cs
+++ b/OpenRA.Mods.Common/Traits/Parachutable.cs
@@ -78,7 +78,7 @@ namespace OpenRA.Mods.Common.Traits
{
IsInAir = true;
- if (parachutingToken == Actor.InvalidConditionToken && !string.IsNullOrEmpty(info.ParachutingCondition))
+ if (parachutingToken == Actor.InvalidConditionToken)
parachutingToken = self.GrantCondition(info.ParachutingCondition);
self.NotifyBlocker(self.Location);
diff --git a/OpenRA.Mods.Common/Traits/Passenger.cs b/OpenRA.Mods.Common/Traits/Passenger.cs
index 9b2c856213..8fd03c32be 100644
--- a/OpenRA.Mods.Common/Traits/Passenger.cs
+++ b/OpenRA.Mods.Common/Traits/Passenger.cs
@@ -121,7 +121,7 @@ namespace OpenRA.Mods.Common.Traits
{
string specificCargoCondition;
- if (anyCargoToken == Actor.InvalidConditionToken && !string.IsNullOrEmpty(Info.CargoCondition))
+ if (anyCargoToken == Actor.InvalidConditionToken)
anyCargoToken = self.GrantCondition(Info.CargoCondition);
if (specificCargoToken == Actor.InvalidConditionToken && Info.CargoConditions.TryGetValue(cargo.Info.Name, out specificCargoCondition))
diff --git a/OpenRA.Mods.Common/Traits/Render/WithMakeAnimation.cs b/OpenRA.Mods.Common/Traits/Render/WithMakeAnimation.cs
index f0a492c071..d754a29c43 100644
--- a/OpenRA.Mods.Common/Traits/Render/WithMakeAnimation.cs
+++ b/OpenRA.Mods.Common/Traits/Render/WithMakeAnimation.cs
@@ -57,7 +57,7 @@ namespace OpenRA.Mods.Common.Traits.Render
public void Forward(Actor self, Action onComplete)
{
- if (!string.IsNullOrEmpty(info.Condition) && token == Actor.InvalidConditionToken)
+ if (token == Actor.InvalidConditionToken)
token = self.GrantCondition(info.Condition);
var wsb = wsbs.FirstEnabledTraitOrDefault();
@@ -80,7 +80,7 @@ namespace OpenRA.Mods.Common.Traits.Render
public void Reverse(Actor self, Action onComplete)
{
- if (!string.IsNullOrEmpty(info.Condition) && token == Actor.InvalidConditionToken)
+ if (token == Actor.InvalidConditionToken)
token = self.GrantCondition(info.Condition);
var wsb = wsbs.FirstEnabledTraitOrDefault();
@@ -114,8 +114,7 @@ namespace OpenRA.Mods.Common.Traits.Render
if (wsb != null)
wsb.DefaultAnimation.PlayFetchIndex(info.Sequence, () => 0);
- if (!string.IsNullOrEmpty(info.Condition))
- token = self.GrantCondition(info.Condition);
+ token = self.GrantCondition(info.Condition);
self.QueueActivity(queued, activity);
});
diff --git a/OpenRA.Mods.D2k/Activities/SwallowActor.cs b/OpenRA.Mods.D2k/Activities/SwallowActor.cs
index dd6ed8e6e0..83cef0b1cc 100644
--- a/OpenRA.Mods.D2k/Activities/SwallowActor.cs
+++ b/OpenRA.Mods.D2k/Activities/SwallowActor.cs
@@ -101,8 +101,9 @@ namespace OpenRA.Mods.D2k.Activities
stance = AttackState.Burrowed;
countdown = swallow.Info.AttackDelay;
burrowLocation = self.Location;
- if (attackingToken == Actor.InvalidConditionToken && !string.IsNullOrEmpty(swallow.Info.AttackingCondition))
+ if (attackingToken == Actor.InvalidConditionToken)
attackingToken = self.GrantCondition(swallow.Info.AttackingCondition);
+
break;
case AttackState.Burrowed:
if (--countdown > 0)