Sign in to follow this  
BlackMoons

Passing types out?

Recommended Posts

BlackMoons    460

Can one pass type names out of angelscript?

 

For example, I have the following C++ function that takes a typename by string and attempts to find it..

void ObjectData::SetObjectClass(const std::wstring & moduleName, const std::wstring & classname)
{
    asIScriptEngine *scriptEngine = Engine::mScript->mScriptEngine;
    std::string modulenameAscii = WStringToString(moduleName);
    std::string classnameAscii = WStringToString(classname);
    asIScriptModule *module = scriptEngine->GetModule(modulenameAscii.c_str());
    if (module)
    {
        mScript.mUserDataType = scriptEngine->GetObjectTypeById(module->GetTypeIdByDecl(classnameAscii.c_str()));
        if (mScript.mUserDataType)
        {
            std::string factoryName = classnameAscii + " @" + classnameAscii + "()";
            mScript.mUserDataFactory = mScript.mUserDataType->GetFactoryByDecl(factoryName.c_str());
        }
    }
}

And I call it in anglescript like:

class LightSource{...};
obj.SetObjectClass("Objects","LightSource");

Of course, now my code needs to know its module name and that is a little weird. Being able to access other modules (non shared) classes is also kind of strange (But maybe useful?).

 

But I was wondering if there was maybe a way to define a register a function prototype such that:

obj.SetObjectClass(LightSource);

Was the angelscript call side and this was the C++ side:

void ObjectData::SetObjectClass(asIObjectType* classname){...}

 

Because doing it by string lookup of module and typename seems like the long way to get a asIObjectType.

 

It sorta looks like I might be able to do it via templates if I can't pass types directly. Do template functions work?

obj.SetObjectClass<LightSource>(); maybe?

But I am a little uncertain how/when aslObjectType is passed after reading scriptarray.cpp.. though that is a template object, not template function.

 

Is there any included samples with template functions?

Share this post


Link to post
Share on other sites
WitchLord    4677

Template functions is not yet a functionality that is implemented in AngelScript. But you could definitely create a template type that would allow you to get information on types. From the script it could look like this:

 

obj.SetObjectClass(typeInfo<LightSource>());

 

You could use the script array add-on as an example for creating this template type class.

 

You may even be able to reuse the code that InvalidPointer posted here: http://www.gamedev.net/topic/629338-template-methods/

 

Regards,

Andreas

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this