Add ScriptingObject::NewObject utility for scripting objects spawning in C++
This commit is contained in:
@@ -82,6 +82,17 @@ MClass* ScriptingObject::GetClass() const
|
|||||||
return _type ? _type.GetType().ManagedClass : nullptr;
|
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)
|
ScriptingObject* ScriptingObject::FromInterface(void* interfaceObj, const ScriptingTypeHandle& interfaceType)
|
||||||
{
|
{
|
||||||
if (!interfaceObj || !interfaceType)
|
if (!interfaceObj || !interfaceType)
|
||||||
|
|||||||
@@ -108,6 +108,13 @@ public:
|
|||||||
|
|
||||||
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.
|
// Tries to cast native interface object to scripting object instance. Returns null if fails.
|
||||||
static ScriptingObject* FromInterface(void* interfaceObj, const ScriptingTypeHandle& interfaceType);
|
static ScriptingObject* FromInterface(void* interfaceObj, const ScriptingTypeHandle& interfaceType);
|
||||||
static void* ToInterface(ScriptingObject* obj, const ScriptingTypeHandle& interfaceType);
|
static void* ToInterface(ScriptingObject* obj, const ScriptingTypeHandle& interfaceType);
|
||||||
|
|||||||
Reference in New Issue
Block a user