mirror of
https://github.com/aharabada/glitchy-engine-beef.git
synced 2026-09-05 21:01:52 +00:00
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:
@@ -90,6 +90,11 @@ class SharpClass : SharpType
|
||||
ExtractFields();
|
||||
}
|
||||
|
||||
internal bool IsType(MonoType* type)
|
||||
{
|
||||
return Mono.mono_class_get_type(_monoClass) == type;
|
||||
}
|
||||
|
||||
private void ExtractFields()
|
||||
{
|
||||
//_monoFields = new List<MonoClassField*>();´
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -11,6 +11,8 @@ using Box2D;
|
||||
|
||||
namespace GlitchyEngine.Scripting;
|
||||
|
||||
using internal GlitchyEngine.Scripting;
|
||||
|
||||
static class ScriptGlue
|
||||
{
|
||||
private static Dictionary<MonoType*, function void(Entity entityId)> s_AddComponentMethods = new .() ~ delete _;
|
||||
@@ -176,11 +178,29 @@ static class ScriptGlue
|
||||
else
|
||||
Log.EngineLogger.AssertDebug(false, "No managed component with the given type registered.");
|
||||
}
|
||||
/*[RegisterCall("Input::IsMouseButtonReleasing")]
|
||||
static void Destroy()
|
||||
|
||||
[RegisterCall("ScriptGlue::Entity_FindEntityWithName")]
|
||||
static void Entity_FindEntityWithName(MonoString* monoName, UUID* outUuid)
|
||||
{
|
||||
// TODO:
|
||||
}*/
|
||||
*outUuid = UUID(0);
|
||||
|
||||
char8* entityName = Mono.mono_string_to_utf8(monoName);
|
||||
|
||||
StringView nameString = StringView(entityName);
|
||||
|
||||
Result<Entity> entityResult = ScriptEngine.Context.GetEntityByName(nameString);
|
||||
|
||||
Mono.mono_free(entityName);
|
||||
|
||||
if (entityResult case .Ok(let entity))
|
||||
*outUuid = entity.UUID;
|
||||
}
|
||||
|
||||
[RegisterCall("ScriptGlue::Entity_GetScriptInstance")]
|
||||
static MonoObject* Entity_GetScriptInstance(UUID entityId)
|
||||
{
|
||||
return ScriptEngine.GetManagedInstance(entityId);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -37,6 +37,8 @@ class ScriptInstance : RefCounter
|
||||
_scriptClass?.ReleaseRef();
|
||||
}
|
||||
|
||||
internal MonoObject* MonoInstance => _instance;
|
||||
|
||||
public void Instantiate(UUID uuid)
|
||||
{
|
||||
_instance = _scriptClass.CreateInstance(uuid);
|
||||
|
||||
Reference in New Issue
Block a user