Add ScriptingObject::NewObject utility for scripting objects spawning in C++

This commit is contained in:
Wojtek Figat
2022-01-04 23:58:39 +01:00
parent fa83869430
commit ff9b116522
2 changed files with 18 additions and 0 deletions

View File

@@ -82,6 +82,17 @@ MClass* ScriptingObject::GetClass() const
return _type ? _type.GetType().ManagedClass : nullptr;
}
ScriptingObject* ScriptingObject::NewObject(const ScriptingTypeHandle& typeHandle)
{
if (!typeHandle)
return nullptr;
auto& type = typeHandle.GetType();
if (type.Type != ScriptingTypes::Script)
return nullptr;
const ScriptingObjectSpawnParams params(Guid::New(), typeHandle);
return type.Script.Spawn(params);
}
ScriptingObject* ScriptingObject::FromInterface(void* interfaceObj, const ScriptingTypeHandle& interfaceType)
{
if (!interfaceObj || !interfaceType)

View File

@@ -108,6 +108,13 @@ public:
public:
static ScriptingObject* NewObject(const ScriptingTypeHandle& typeHandle);
template<typename T>
static T* NewObject()
{
return (T*)NewObject(T::TypeInitializer);
}
// Tries to cast native interface object to scripting object instance. Returns null if fails.
static ScriptingObject* FromInterface(void* interfaceObj, const ScriptingTypeHandle& interfaceType);
static void* ToInterface(ScriptingObject* obj, const ScriptingTypeHandle& interfaceType);