Constant Export
Constants are variables, the value of which does not change no matter what happens in C++ code. To be available in Unigine scripts, they need to be exported on C++ side.
- External constants are read-only.
- If a value of a registered constant is changed in the C++ code, on script side it will remain the same (unlike variables).
Constant Export Example
Constants are exported in the similar way as variables:
- Create a pointer to an external constant via MakeExternConstant() .
- Register the constant via Unigine::Interpreter::addExternVariable() .
- All variables are exported into a global namespace. To limit the scope of variable, use library namespace.
#include <UnigineEngine.h>
#include <UnigineInterpreter.h>
using namespace Unigine;
int main(int argc,char **argv) {
int i = 0;
float f = 0.0f;
// export a variable and specify a name to access it from Unigine scripts
Interpreter::addExternVariable("int_constant",MakeExternConstant(i));
// you can also specify a template parameter to make sure the proper type is passed
Interpreter::addExternVariable("float_constant",MakeExternConstant<float>(f));
Engine *engine = Engine::init(UNIGINE_VERSION,argc,argv);
// enter the main loop
while(engine->isDone() == 0) {
engine->update();
engine->render();
engine->swap();
// if a variable value is changed after it was registered, the value in scripts will not be changed
i = 42;
f = 57.55f;
}
// engine shutdown
Engine::shutdown();
}
Access from Scripts
After the registration, you can access constants from a script by their registered names:
// my_world.usc
log.message("Integer: %d\nFloat: %f\n",int_constant,float_constant);
Output
The following results will be printed into the console:
Integer: 0
Float: 0.000000
If you reload the world, the values of the constants that have been changed on the C++ side will remain the same.
Last update: 2018-08-10
Help improve this article
Was this article helpful?
(or select a word/phrase and press Ctrl+Enter)