Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ported Allies 01 to the New Lua API #6377

Merged
merged 1 commit into from
Sep 28, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 3 additions & 0 deletions OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -561,6 +561,9 @@
<Compile Include="Warheads\SpreadDamageWarhead.cs" />
<Compile Include="Scripting\Global\ReinforcementsGlobal.cs" />
<Compile Include="Scripting\Global\DateGlobal.cs" />
<Compile Include="Scripting\Properties\HarvesterProperties.cs" />
<Compile Include="Scripting\Properties\HelicopterProperties.cs" />
<Compile Include="Scripting\Properties\PlaneProperties.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\OpenRA.Game\OpenRA.Game.csproj">
Expand Down
32 changes: 32 additions & 0 deletions OpenRA.Mods.RA/Scripting/Global/TriggerGlobal.cs
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,38 @@ public void OnAllKilled(LuaTable actors, LuaFunction func)
GetScriptTriggers(a).OnKilledInternal += OnMemberKilled;
}

[Desc("Call a function when one of the actors in a group is killed. The callback " +
"function will be called as func(Actor killed).")]
public void OnAnyKilled(LuaTable actors, LuaFunction func)
{
var group = new List<Actor>();
foreach (var kv in actors)
{
Actor actor;
if (!kv.Value.TryGetClrValue<Actor>(out actor))
throw new LuaException("OnAnyKilled requires a table of int,Actor pairs. Recieved {0},{1}".F(kv.Key.GetType().Name, kv.Value.GetType().Name));

group.Add(actor);
}

var called = false;
var copy = (LuaFunction)func.CopyReference();
Action<Actor> OnMemberKilled = m =>
{
if (called)
return;

using (var killed = m.ToLuaValue(context))
copy.Call(killed).Dispose();

copy.Dispose();
called = true;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You will also need to dispose copy here.

};

foreach (var a in group)
GetScriptTriggers(a).OnKilledInternal += OnMemberKilled;
}

[Desc("Call a function when this actor produces another actor. " +
"The callback function will be called as func(Actor producer, Actor produced).")]
public void OnProduction(Actor a, LuaFunction func)
Expand Down
34 changes: 34 additions & 0 deletions OpenRA.Mods.RA/Scripting/Properties/HarvesterProperties.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#region Copyright & License Information
/*
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation. For more information,
* see COPYING.
*/
#endregion

using OpenRA.Scripting;
using OpenRA.Traits;

namespace OpenRA.Mods.RA.Scripting
{
[ScriptPropertyGroup("Harvester")]
public class HarvesterProperties : ScriptActorProperties, Requires<HarvesterInfo>
{
readonly Harvester harvester;

public HarvesterProperties(ScriptContext context, Actor self)
: base(context, self)
{
harvester = self.Trait<Harvester>();
}

[ScriptActorPropertyActivity]
[Desc("Search for nearby resources and begin harvesting.")]
public void FindResources()
{
harvester.ContinueHarvesting(self);
}
}
}
30 changes: 30 additions & 0 deletions OpenRA.Mods.RA/Scripting/Properties/HelicopterProperties.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#region Copyright & License Information
/*
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation. For more information,
* see COPYING.
*/
#endregion

using OpenRA.Mods.RA.Air;
using OpenRA.Scripting;
using OpenRA.Traits;

namespace OpenRA.Mods.RA.Scripting
{
[ScriptPropertyGroup("Movement")]
public class HelicopterProperties : ScriptActorProperties, Requires<HelicopterInfo>
{
public HelicopterProperties(ScriptContext context, Actor self)
: base(context, self) { }

[ScriptActorPropertyActivity]
[Desc("Fly within the cell grid.")]
public void Move(CPos cell)
{
self.QueueActivity(new HeliFly(self, Target.FromCell(self.World, cell)));
}
}
}
7 changes: 7 additions & 0 deletions OpenRA.Mods.RA/Scripting/Properties/MobileProperties.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,5 +34,12 @@ public void ScriptedMove(CPos cell)
{
self.QueueActivity(new Move.Move(cell));
}

[ScriptActorPropertyActivity]
[Desc("Leave the current position in a random direction.")]
public void Scatter()
{
self.Trait<Mobile>().Nudge(self, self, true);
}
}
}
30 changes: 30 additions & 0 deletions OpenRA.Mods.RA/Scripting/Properties/PlaneProperties.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#region Copyright & License Information
/*
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation. For more information,
* see COPYING.
*/
#endregion

using OpenRA.Mods.RA.Air;
using OpenRA.Scripting;
using OpenRA.Traits;

namespace OpenRA.Mods.RA.Scripting
{
[ScriptPropertyGroup("Movement")]
public class PlaneProperties : ScriptActorProperties, Requires<PlaneInfo>
{
public PlaneProperties(ScriptContext context, Actor self)
: base(context, self) { }

[ScriptActorPropertyActivity]
[Desc("Fly within the cell grid.")]
public void Move(CPos cell)
{
self.QueueActivity(new Fly(self, Target.FromCell(self.World, cell)));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,6 @@ void PopulateObjectivesList(MissionObjectives mo, ScrollPanelWidget parent, Cont

parent.AddChild(widget);
}
}
}
}
}