Jump to content
  • Advertisement
Sign in to follow this  
BlackMoons

Passing types out?

This topic is 2130 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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
Advertisement

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
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!