🎉 Celebrating 25 Years of GameDev.net! 🎉

Not many can claim 25 years on the Internet! Join us in celebrating this milestone. Learn more about our history, and thank you for being a part of our community!

Passing types out?

Started by
0 comments, last by WitchLord 10 years, 9 months ago

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?

Lead Coder/Game Designer for Brutal Nature: http://BrutalNature.com

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

AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game

This topic is closed to new replies.

Advertisement