From 3c60a515f7fcee50eeab6fa62cdb227cb74a984d Mon Sep 17 00:00:00 2001 From: Mustafa Alperen Seki Date: Sat, 11 Dec 2021 20:48:39 +0300 Subject: [PATCH] Add CarryableConditions to Carryall. --- OpenRA.Mods.Common/Traits/Carryall.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/OpenRA.Mods.Common/Traits/Carryall.cs b/OpenRA.Mods.Common/Traits/Carryall.cs index 367bcf0e8e..18116875f6 100644 --- a/OpenRA.Mods.Common/Traits/Carryall.cs +++ b/OpenRA.Mods.Common/Traits/Carryall.cs @@ -66,12 +66,20 @@ namespace OpenRA.Mods.Common.Traits [Desc("Condition to grant to the Carryall while it is carrying something.")] public readonly string CarryCondition = null; + [ActorReference(dictionaryReference: LintDictionaryReference.Keys)] + [Desc("Conditions to grant when a specified actor is being carried.", + "A dictionary of [actor id]: [condition].")] + public readonly Dictionary CarryableConditions = new Dictionary(); + [VoiceReference] public readonly string Voice = "Action"; [Desc("Color to use for the target line.")] public readonly Color TargetLineColor = Color.Yellow; + [GrantedConditionReference] + public IEnumerable LinterCarryableConditions => CarryableConditions.Values; + public override object Create(ActorInitializer init) { return new Carryall(init.Self, this); } } @@ -102,6 +110,7 @@ namespace OpenRA.Mods.Common.Traits IActorPreview[] carryablePreview; HashSet landableTerrainTypes; int carryConditionToken = Actor.InvalidConditionToken; + int carryableConditionToken = Actor.InvalidConditionToken; /// Offset between the carryall's and the carried actor's CenterPositions public WVec CarryableOffset { get; private set; } @@ -209,6 +218,9 @@ namespace OpenRA.Mods.Common.Traits if (carryConditionToken == Actor.InvalidConditionToken) carryConditionToken = self.GrantCondition(Info.CarryCondition); + if (Info.CarryableConditions.TryGetValue(carryable.Info.Name, out var carryableCondition)) + carryableConditionToken = self.GrantCondition(carryableCondition); + CarryableOffset = OffsetForCarryable(self, carryable); landableTerrainTypes = Carryable.Trait().Info.LocomotorInfo.TerrainSpeeds.Keys.ToHashSet(); @@ -222,6 +234,9 @@ namespace OpenRA.Mods.Common.Traits if (carryConditionToken != Actor.InvalidConditionToken) carryConditionToken = self.RevokeCondition(carryConditionToken); + if (carryableConditionToken != Actor.InvalidConditionToken) + carryableConditionToken = self.RevokeCondition(carryableConditionToken); + carryablePreview = null; landableTerrainTypes = null; CarryableOffset = WVec.Zero;