Skip to content

Commit

Permalink
Make ClonesProducedUnits Conditional.
Browse files Browse the repository at this point in the history
  • Loading branch information
MustaphaTR authored and reaperrr committed May 25, 2019
1 parent 1ed36da commit e007568
Showing 1 changed file with 8 additions and 6 deletions.
14 changes: 8 additions & 6 deletions OpenRA.Mods.Cnc/Traits/Buildings/ClonesProducedUnits.cs
Expand Up @@ -18,34 +18,36 @@
namespace OpenRA.Mods.Cnc.Traits
{
[Desc("Creates a free duplicate of produced units.")]
public class ClonesProducedUnitsInfo : ITraitInfo, Requires<ProductionInfo>, Requires<ExitInfo>
public class ClonesProducedUnitsInfo : ConditionalTraitInfo, Requires<ProductionInfo>, Requires<ExitInfo>
{
[FieldLoader.Require]
[Desc("Uses the \"Cloneable\" trait to determine whether or not we should clone a produced unit.")]
public readonly BitSet<CloneableType> CloneableTypes = default(BitSet<CloneableType>);

public object Create(ActorInitializer init) { return new ClonesProducedUnits(init, this); }
public override object Create(ActorInitializer init) { return new ClonesProducedUnits(init, this); }
}

public class ClonesProducedUnits : INotifyOtherProduction
public class ClonesProducedUnits : ConditionalTrait<ClonesProducedUnitsInfo>, INotifyOtherProduction
{
readonly ClonesProducedUnitsInfo info;
readonly Production[] productionTraits;

public ClonesProducedUnits(ActorInitializer init, ClonesProducedUnitsInfo info)
: base(info)
{
this.info = info;
productionTraits = init.Self.TraitsImplementing<Production>().ToArray();
}

public void UnitProducedByOther(Actor self, Actor producer, Actor produced, string productionType, TypeDictionary init)
{
if (IsTraitDisabled)
return;

// No recursive cloning!
if (producer.Owner != self.Owner || producer.Info.HasTraitInfo<ClonesProducedUnitsInfo>())
return;

var ci = produced.Info.TraitInfoOrDefault<CloneableInfo>();
if (ci == null || !info.CloneableTypes.Overlaps(ci.Types))
if (ci == null || !Info.CloneableTypes.Overlaps(ci.Types))
return;

var factionInit = init.GetOrDefault<FactionInit>();
Expand Down

0 comments on commit e007568

Please sign in to comment.