Post-merge tweaks for #1312

This commit is contained in:
Wojtek Figat
2023-09-28 19:21:06 +02:00
parent 30482f62e2
commit 82b2f46b48
7 changed files with 39 additions and 62 deletions

View File

@@ -2127,13 +2127,42 @@ const Array<MObject*>& MProperty::GetAttributes() const
return _attributes;
}
void MCore::ScriptingObject::SetInternalValues(MObject* object, void* unmanagedPtr, const Guid* id)
void MCore::ScriptingObject::SetInternalValues(MClass* klass, MObject* object, void* unmanagedPtr, const Guid* id)
{
// Set handle to unmanaged object
const MField* monoUnmanagedPtrField = klass->GetField("__unmanagedPtr");
if (monoUnmanagedPtrField)
{
const void* param = unmanagedPtr;
monoUnmanagedPtrField->SetValue(managedInstance, &param);
}
if (id != nullptr)
{
// Set object id
const MField* monoIdField = klass->GetField("__internalId");
if (monoIdField)
{
monoIdField->SetValue(managedInstance, (void*)id);
}
}
}
MObject* MCore::ScriptingObject::CreateScriptingObject(MClass* klass, void* unmanagedPtr, const Guid* id)
{
return nullptr;
// Ensure to have managed domain attached (this can be called from custom native thread, eg. content loader)
MCore::Thread::Attach();
// Allocate managed instance
MObject* managedInstance = MCore::Object::New(klass);
if (managedInstance)
{
// Set unmanaged object handle and id
MCore::ScriptingObject::SetInternalValues(klass, managedInstance, unmanagedPtr, _id);
// Initialize managed instance (calls constructor)
MCore::Object::Init(managedInstance);
}
return managedInstance;
}
#endif