Expose a Attack method to lua

This commit is contained in:
abcdefg30
2015-05-28 23:56:44 +02:00
parent 87c2e68973
commit 6527d7751b
2 changed files with 15 additions and 13 deletions

View File

@@ -23,11 +23,13 @@ namespace OpenRA.Mods.Common.Scripting
public class CombatProperties : ScriptActorProperties, Requires<AttackBaseInfo>, Requires<IMoveInfo> public class CombatProperties : ScriptActorProperties, Requires<AttackBaseInfo>, Requires<IMoveInfo>
{ {
readonly IMove move; readonly IMove move;
readonly AttackBase attackBase;
public CombatProperties(ScriptContext context, Actor self) public CombatProperties(ScriptContext context, Actor self)
: base(context, self) : base(context, self)
{ {
move = self.Trait<IMove>(); move = self.Trait<IMove>();
attackBase = self.Trait<AttackBase>();
} }
[ScriptActorPropertyActivity] [ScriptActorPropertyActivity]
@@ -73,5 +75,18 @@ namespace OpenRA.Mods.Common.Scripting
using (var f = func.CopyReference() as LuaFunction) using (var f = func.CopyReference() as LuaFunction)
Self.QueueActivity(new CallFunc(() => PatrolUntil(waypoints, f, wait))); Self.QueueActivity(new CallFunc(() => PatrolUntil(waypoints, f, wait)));
} }
[Desc("Attack the target actor. The target actor needs to be visible.")]
public void Attack(Actor targetActor, bool allowMove = true)
{
var target = Target.FromActor(targetActor);
if (!target.IsValidFor(Self) || target.Type == TargetType.FrozenActor)
Log.Write("lua", "{1} is an invalid target for {0}!", Self, targetActor);
if (!targetActor.HasTrait<FrozenUnderFog>() && !Self.Owner.CanTargetActor(targetActor))
Log.Write("lua", "{1} is not revealed for player {0}!", Self.Owner, targetActor);
attackBase.AttackTarget(target, true, allowMove);
}
} }
} }

View File

@@ -35,17 +35,4 @@ namespace OpenRA.Mods.Common.Scripting
Self.QueueActivity(new ReturnToBase(Self, airfield)); Self.QueueActivity(new ReturnToBase(Self, airfield));
} }
} }
[ScriptPropertyGroup("Combat")]
public class PlaneCombatProperties : ScriptActorProperties, Requires<AttackPlaneInfo>
{
public PlaneCombatProperties(ScriptContext context, Actor self)
: base(context, self) { }
[Desc("Fly an attack against the target actor.")]
public void Attack(Actor target)
{
Self.QueueActivity(new FlyAttack(Self, Target.FromActor(target)));
}
}
} }