Jump to content

  • Log In with Google      Sign In   
  • Create Account

We're offering banner ads on our site from just $5!

1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


- - - - -

Passing types out?


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
1 reply to this topic

#1 BlackMoons   Members   -  Reputation: 441

Like
0Likes
Like

Posted 20 September 2013 - 02:52 AM

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


Sponsor:

#2 Andreas Jonsson   Moderators   -  Reputation: 3417

Like
0Likes
Like

Posted 20 September 2013 - 11:34 AM

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




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS