Fixed calling engine functions from scripts

- Removed mono references in generator
- Implemented StringView type in C#
This commit is contained in:
Simon Lübeß
2025-08-08 19:03:09 +02:00
parent 042ae83a0f
commit d156618453
10 changed files with 330 additions and 277 deletions
@@ -1,5 +1,6 @@
using System;
using GlitchyEngine.Core;
using GlitchyEngine.Scripting.Classes;
using static GlitchyEngine.Scripting.ScriptEngine;
@@ -16,7 +17,8 @@ class NewScriptClass
public this(StringView fullName, Guid guid, ScriptMethods methods, bool runInEditMode = false)
{
FullName = new String(fullName);
// TODO: Remove the need for null termination
FullName = new String(fullName)..EnsureNullTerminator();
Guid = guid;
int lastDotIndex = FullName.LastIndexOf('.');
+2 -14
View File
@@ -302,7 +302,7 @@ static class ScriptEngine
//ScriptGlue.RegisterManagedComponents();
}
//InitAssemblyWatcher();
InitAssemblyWatcher();
}
/// Starts the script runtime and sets the context scene.
@@ -343,8 +343,6 @@ static class ScriptEngine
/// Disposes of and replaces the old instance, if one exists.
public static bool InitializeInstance(Entity entity, ScriptComponent* script)
{
Log.EngineLogger.Error($"{Compiler.CallerMemberName} not updated yet.");
NewScriptClass scriptClass = GetScriptClass(script.ScriptClassName);
if (scriptClass == null)
@@ -480,16 +478,6 @@ static class ScriptEngine
s_RootDomain = null;*/
}
// TODO: Do we still need this? It was only called by ScriptGlue
/// Returns the script instance or null.
public static void* GetManagedInstance(UUID entityId)
{
//if (_entityScriptInstances.TryGetValue(entityId, let scriptInstance))
// return scriptInstance.MonoInstance;
return null;
}
public static NewScriptClass GetScriptClass(StringView name)
{
EntityClasses.TryGetValue(name, let scriptClass);
@@ -501,7 +489,7 @@ static class ScriptEngine
{
String entityInfo = scope .();
if (entityId != .Zero)
if (entityId != .Zero && Context != null)
{
exception.EntityId = entityId;
File diff suppressed because it is too large Load Diff
+4 -5
View File
@@ -407,9 +407,8 @@ namespace GlitchyEngine.World
collision.Rigidbody = rigidbodyEntityA.UUID;
collision.OtherRigidbody = rigidbodyEntityB.UUID;
// TODO:
//scriptOfColliderA?.Instance?.InvokeOnCollisionEnter2D(collision);
//scriptOfRigidbodyA?.Instance?.InvokeOnCollisionEnter2D(collision);
scriptOfColliderA?.Instance?.InvokeOnCollisionEnter2D(collision);
scriptOfRigidbodyA?.Instance?.InvokeOnCollisionEnter2D(collision);
}
bool fireEventB = colliderEntityB.TryGetComponent<ScriptComponent>(let scriptOfColliderB);
@@ -423,8 +422,8 @@ namespace GlitchyEngine.World
collision.Rigidbody = rigidbodyEntityB.UUID;
collision.OtherRigidbody = rigidbodyEntityA.UUID;
//scriptOfColliderB?.Instance?.InvokeOnCollisionEnter2D(collision);
//scriptOfRigidbodyB?.Instance?.InvokeOnCollisionEnter2D(collision);
scriptOfColliderB?.Instance?.InvokeOnCollisionEnter2D(collision);
scriptOfRigidbodyB?.Instance?.InvokeOnCollisionEnter2D(collision);
}
};
_contactListener.endContactCallback = (contact, userData) => {