ScriptActorInterfaces, unbind on actor destroy.

This commit is contained in:
Vapre
2022-07-26 08:00:00 +02:00
committed by Matthias Mailänder
parent fc1d8d2355
commit 215898c7ec
5 changed files with 63 additions and 54 deletions

View File

@@ -9,6 +9,7 @@
*/
#endregion
using System;
using System.Collections.Generic;
using Eluant;
using Eluant.ObjectBinding;
@@ -21,16 +22,32 @@ namespace OpenRA.Scripting
protected abstract string MemberNotFoundError(string memberName);
protected readonly ScriptContext Context;
Dictionary<string, ScriptMemberWrapper> members;
readonly Dictionary<string, ScriptMemberWrapper> members = new Dictionary<string, ScriptMemberWrapper>();
public ScriptObjectWrapper(ScriptContext context)
{
Context = context;
}
protected void Bind(IEnumerable<object> clrObjects)
protected static object[] CreateObjects(Type[] types, object[] constructorArgs)
{
members = new Dictionary<string, ScriptMemberWrapper>();
var i = 0;
var argTypes = new Type[constructorArgs.Length];
foreach (var ca in constructorArgs)
argTypes[i++] = ca.GetType();
var objects = new object[types.Length];
i = 0;
foreach (var type in types)
objects[i++] = type.GetConstructor(argTypes).Invoke(constructorArgs);
return objects;
}
protected void Bind(object[] clrObjects)
{
members.Clear();
foreach (var obj in clrObjects)
{
var wrappable = ScriptMemberWrapper.WrappableMembers(obj.GetType());
@@ -44,6 +61,13 @@ namespace OpenRA.Scripting
}
}
protected void Unbind(Type targetType)
{
foreach (var m in members)
if (targetType == m.Value.Target.GetType())
members.Remove(m.Key);
}
public bool ContainsKey(string key) { return members.ContainsKey(key); }
public LuaValue this[LuaRuntime runtime, LuaValue keyValue]