Make EngineerRepairable conditional.

This commit is contained in:
Mustafa Alperen Seki
2020-03-10 22:25:24 +03:00
committed by atlimit8
parent 9e534f3804
commit 101843fbb7
3 changed files with 21 additions and 6 deletions

View File

@@ -21,6 +21,7 @@ namespace OpenRA.Mods.Common.Activities
Actor enterActor;
IHealth enterHealth;
EngineerRepairable enterEngineerRepariable;
public RepairBuilding(Actor self, Target target, EngineerRepairInfo info)
: base(self, target, Color.Yellow)
@@ -32,11 +33,12 @@ namespace OpenRA.Mods.Common.Activities
{
enterActor = targetActor;
enterHealth = targetActor.TraitOrDefault<IHealth>();
enterEngineerRepariable = targetActor.TraitOrDefault<EngineerRepairable>();
// Make sure we can still repair the target before entering
// (but not before, because this may stop the actor in the middle of nowhere)
var stance = self.Owner.Stances[enterActor.Owner];
if (enterHealth == null || enterHealth.DamageState == DamageState.Undamaged || !info.ValidStances.HasStance(stance))
if (enterHealth == null || enterHealth.DamageState == DamageState.Undamaged || enterEngineerRepariable == null || enterEngineerRepariable.IsTraitDisabled || !info.ValidStances.HasStance(stance))
{
Cancel(self, true);
return false;
@@ -52,6 +54,9 @@ namespace OpenRA.Mods.Common.Activities
if (targetActor != enterActor)
return;
if (enterEngineerRepariable.IsTraitDisabled)
return;
if (enterHealth.DamageState == DamageState.Undamaged)
return;