Scripting: FindEntityWithName and get script instance

+ Some C# UUID stuff
+ Added some Mono functions
+ ScriptEngine:
  + ID -> ScriptInstance map in ScriptEngine
  + GetManagedInstance

+ Fixed Scene not visible after loading a new scene
  + Renamed OnViewportResize to SetViewportSize for Scene and SceneRenderer
This commit is contained in:
Simon Lübeß
2023-07-17 20:27:18 +02:00
parent 66d66d3308
commit e8505f6bdb
16 changed files with 492 additions and 61 deletions
+12 -6
View File
@@ -151,13 +151,13 @@ static class ScriptEngine
private static Dictionary<StringView, ScriptClass> _entityScripts = new .() ~ DeleteDictionaryAndReleaseValues!(_);
/*private static Dictionary<UUID, ScriptInstance> _entityScriptInstances = new .() ~ {
private static Dictionary<UUID, ScriptInstance> _entityScriptInstances = new .() ~ {
for (var entry in _)
{
entry.value?.ReleaseRef();
}
delete _;
};*/
}
public static Dictionary<StringView, ScriptClass> EntityClasses => _entityScripts;
@@ -197,18 +197,18 @@ static class ScriptEngine
public static void OnRuntimeStop()
{
/*for (var entry in _entityScriptInstances)
for (var entry in _entityScriptInstances)
{
entry.value.ReleaseRef();
}
_entityScriptInstances.Clear();*/
_entityScriptInstances.Clear();
SetContext(null);
}
public static void InitializeInstance(Entity entity, ScriptComponent* script)
{
//_entityScriptInstances[entity.UUID] = script.Instance..AddRef();
_entityScriptInstances[entity.UUID] = script.Instance..AddRef();
script.Instance.Instantiate(entity.UUID);
@@ -403,7 +403,13 @@ static class ScriptEngine
return _entityFields[uuid];
}
public static MonoObject* GetManagedInstance(UUID entityId)
{
if (_entityScriptInstances.TryGetValue(entityId, let scriptInstance))
return scriptInstance.MonoInstance;
return null;
}