mirror of
https://github.com/aharabada/glitchy-engine-beef.git
synced 2026-09-05 21:01:52 +00:00
Fixed ScriptClass leaking
This commit is contained in:
@@ -4,7 +4,7 @@ using GlitchyEngine.Core;
|
||||
|
||||
namespace GlitchyEngine.Scripting;
|
||||
|
||||
class ScriptClass
|
||||
class ScriptClass : RefCounter
|
||||
{
|
||||
private String _namespace ~ delete _;
|
||||
private String _className ~ delete _;
|
||||
|
||||
@@ -18,13 +18,13 @@ static class ScriptEngine
|
||||
|
||||
private static Scene s_Context ~ _?.ReleaseRef();
|
||||
|
||||
private static ScriptClass s_EntityRoot ~ delete _;
|
||||
private static ScriptClass s_EngineObject ~ delete _;
|
||||
private static ScriptClass s_EntityRoot ~ _?.ReleaseRef();
|
||||
private static ScriptClass s_EngineObject ~ _?.ReleaseRef();
|
||||
|
||||
private static Dictionary<StringView, ScriptClass> _entityScripts = new .() ~ {
|
||||
for (var entry in _)
|
||||
{
|
||||
delete entry.value;
|
||||
entry.value.ReleaseRef();
|
||||
}
|
||||
delete _entityScripts;
|
||||
};
|
||||
@@ -62,12 +62,22 @@ static class ScriptEngine
|
||||
SetReference!(s_Context, scene);
|
||||
}
|
||||
|
||||
public static void OnRuntimeStop()
|
||||
{
|
||||
for (var entry in _entityScriptInstances)
|
||||
{
|
||||
entry.value.ReleaseRef();
|
||||
}
|
||||
_entityScriptInstances.Clear();
|
||||
|
||||
SetContext(null);
|
||||
}
|
||||
|
||||
public static void InitializeInstance(Entity entity, ScriptComponent* script)
|
||||
{
|
||||
_entityScriptInstances[entity.UUID] = script.Instance..AddRef();
|
||||
|
||||
script.Instance.Instantiate(entity.UUID);
|
||||
script.Instance.InvokeOnCreate();
|
||||
}
|
||||
|
||||
private static MonoAssembly* LoadCSharpAssembly(StringView assemblyPath)
|
||||
@@ -111,7 +121,7 @@ static class ScriptEngine
|
||||
{
|
||||
for (var entry in _entityScripts)
|
||||
{
|
||||
delete entry.value;
|
||||
entry.value.ReleaseRef();
|
||||
}
|
||||
_entityScripts.Clear();
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ class ScriptInstance : RefCounter
|
||||
public this(ScriptClass scriptClass)
|
||||
{
|
||||
Log.EngineLogger.AssertDebug(scriptClass != null);
|
||||
_scriptClass = scriptClass;
|
||||
_scriptClass = scriptClass..AddRef();
|
||||
}
|
||||
|
||||
private ~this()
|
||||
@@ -27,6 +27,7 @@ class ScriptInstance : RefCounter
|
||||
_scriptClass.OnDestroy(_instance);
|
||||
Mono.mono_gchandle_free(_gcHandle);
|
||||
}
|
||||
_scriptClass?.ReleaseRef();
|
||||
}
|
||||
|
||||
public void Instantiate(UUID uuid)
|
||||
|
||||
Reference in New Issue
Block a user