Hello!
I recently started a small game project and decided to take a look at AngelScript to implement a simple in-game console and later maybe also scripting-support.
The first I want to do is exposing my Lightsource class to the script engine.
My class has several methods like this:
class Light
{
SetDiffuse(const Color &color);
}
which would be used like this in C++:
light0.SetDiffuse(Color(1.0f, 0, 0));
From what I figured out, the best way to make this usable in Angelscript is to register my Color class as a value type in AngelScript, so what I did is this:
static void DefineScriptInterface(asIScriptEngine* engine)
{
int error = 0;
//register class name
error = engine->RegisterObjectType("Color", sizeof(Color), asOBJ_VALUE
| asOBJ_POD
| asOBJ_APP_CLASS_ASSIGNMENT
| asOBJ_APP_CLASS_CONSTRUCTOR
);
assert(error >= 0);
//register data members
error = engine->RegisterObjectProperty("Color", "float r", offsetof(Color, r));
assert(error >= 0);
error = engine->RegisterObjectProperty("Color", "float g", offsetof(Color, g));
assert(error >= 0);
error = engine->RegisterObjectProperty("Color", "float b", offsetof(Color, b));
assert(error >= 0);
error = engine->RegisterObjectBehaviour("Color", asBEHAVE_CONSTRUCT, "void f(float r, float g, float b)",
asFUNCTION(&Color::ScriptConstructor), asCALL_CDECL);
assert(error >= 0);
}
static void ScriptConstructor(void *memory, float r, float g, float b)
{
//placement-new and explicit initialisation
new (memory) Color(r, g, b);
}
My problem is, that I'm not quite able to figure out how to expose the non-default constructor to the script engine, everything I've tried results in an asNOT_SUPPORTED error :( . Your help would be appreciated...
Greetings
Martin
Edit: sorry, can't get my code formated right here