Add condition support to Infiltrates.

This commit is contained in:
Mustafa Alperen Seki
2017-02-02 09:34:12 +02:00
committed by Paul Chote
parent 2e605bb6cb
commit fd595660ec
3 changed files with 48 additions and 29 deletions

View File

@@ -9,6 +9,9 @@
*/
#endregion
using System.Collections.Generic;
using System.Linq;
using Eluant;
using OpenRA.Mods.Cnc.Activities;
using OpenRA.Mods.Cnc.Traits;
using OpenRA.Scripting;
@@ -19,18 +22,23 @@ namespace OpenRA.Mods.Cnc.Scripting
[ScriptPropertyGroup("Ability")]
public class InfiltrateProperties : ScriptActorProperties, Requires<InfiltratesInfo>
{
readonly InfiltratesInfo info;
readonly Infiltrates[] infiltratesTraits;
public InfiltrateProperties(ScriptContext context, Actor self)
: base(context, self)
{
info = Self.Info.TraitInfo<InfiltratesInfo>();
infiltratesTraits = Self.TraitsImplementing<Infiltrates>().ToArray();
}
[Desc("Infiltrate the target actor.")]
public void Infiltrate(Actor target)
{
Self.QueueActivity(new Infiltrate(Self, target, info.EnterBehaviour, info.ValidStances, info.Notification, info.PlayerExperience));
var infiltrates = infiltratesTraits.FirstOrDefault(x => !x.IsTraitDisabled && x.Info.Types.Overlaps(target.GetEnabledTargetTypes()));
if (infiltrates == null)
throw new LuaException("{0} tried to infiltrate invalid target {1}!".F(Self, target));
Self.QueueActivity(new Infiltrate(Self, target, infiltrates));
}
}
}