Fix OnAllRemovedFromWorld only triggering once

This commit is contained in:
abcdefg30
2018-10-05 01:10:58 +02:00
committed by Paul Chote
parent d379555784
commit 3e93242929
2 changed files with 28 additions and 2 deletions

View File

@@ -211,8 +211,27 @@ namespace OpenRA.Mods.Common.Scripting
return;
if (!group.Any())
using (f)
f.Call().Dispose();
{
// Functions can only be .Call()ed once, so operate on a copy so we can reuse it later
var temp = (LuaFunction)f.CopyReference();
using (temp)
temp.Call().Dispose();
}
}
catch (Exception e)
{
Context.FatalError(e.Message);
}
};
Action<Actor> onMemberAdded = m =>
{
try
{
if (!actors.Contains(m) || group.Contains(m))
return;
group.Add(m);
}
catch (Exception e)
{
@@ -221,7 +240,10 @@ namespace OpenRA.Mods.Common.Scripting
};
foreach (var a in group)
{
GetScriptTriggers(a).OnRemovedInternal += onMemberRemoved;
GetScriptTriggers(a).OnAddedInternal += onMemberAdded;
}
}
[Desc("Call a function when this actor is captured. The callback function " +

View File

@@ -43,6 +43,7 @@ namespace OpenRA.Mods.Common.Scripting
public event Action<Actor> OnKilledInternal = _ => { };
public event Action<Actor> OnCapturedInternal = _ => { };
public event Action<Actor> OnRemovedInternal = _ => { };
public event Action<Actor> OnAddedInternal = _ => { };
public event Action<Actor, Actor> OnProducedInternal = (a, b) => { };
public event Action<Actor, Actor> OnOtherProducedInternal = (a, b) => { };
@@ -340,6 +341,9 @@ namespace OpenRA.Mods.Common.Scripting
return;
}
}
// Run any internally bound callbacks
OnAddedInternal(self);
}
void INotifyRemovedFromWorld.RemovedFromWorld(Actor self)