#ifndef BLUECORE_SCRIPTING_MATH_H #define BLUECORE_SCRIPTING_MATH_H #include "ScriptSystem.h" namespace BlueCore { //------------------------------------------------------------------------------ inline void _setvectorvalues(HSQUIRRELVM &v, const SQInteger &idx, const SQFloat &x, const SQFloat &y, const SQFloat &z) { sq_pushstring (v, "x", 1); sq_pushfloat (v, x ); sq_rawset (v, idx ); sq_pushstring (v, "y", 1); sq_pushfloat (v, y ); sq_rawset (v, idx ); sq_pushstring (v, "z", 1); sq_pushfloat (v, z ); sq_rawset (v, idx ); } //------------------------------------------------------------------------------ inline void _getvectorvalues(HSQUIRRELVM &v, const SQInteger &idx, SQFloat &x, SQFloat &y, SQFloat &z) { sq_pushstring (v, "x", 1); sq_rawget (v, idx ); sq_getfloat (v, -1, &x ); sq_pushstring (v, "y", 1); sq_rawget (v, idx ); sq_getfloat (v, -1, &y ); sq_pushstring (v, "z", 1); sq_rawget (v, idx ); sq_getfloat (v, -1, &z ); sq_pop (v, 3); } //------------------------------------------------------------------------------ inline void _pushvector(HSQUIRRELVM &v, const SQFloat &x, const SQFloat &y, const SQFloat &z) { // get closure/class // TODO: use SQObject rfom creation sq_pushroottable (v ); sq_pushstring (v, "Vector", -1); sq_get (v, -2); sq_remove (v, -2); // call constructor sq_pushroottable (v ); sq_pushfloat (v, x ); sq_pushfloat (v, y ); sq_pushfloat (v, z ); sq_call (v, 4, SQTrue, SQTrue ); // remove class, leave instance sq_remove (v, -2); } //------------------------------------------------------------------------------ inline void _pushquaternion(HSQUIRRELVM &v, const SQFloat &w, const SQFloat &x, const SQFloat &y, const SQFloat &z) { // get closure/class // TODO: use SQObject rfom creation!!!!!! sq_pushroottable (v ); sq_pushstring (v, "Quaternion", -1); sq_get (v, -2); sq_remove (v, -2); // call constructor sq_pushroottable (v ); sq_pushfloat (v, w ); sq_pushfloat (v, x ); sq_pushfloat (v, y ); sq_pushfloat (v, z ); sq_call (v, 5, SQTrue, SQTrue ); // remove class, leave instance sq_remove (v, -2); } //------------------------------------------------------------------------------ inline void _setquaternionvalues(HSQUIRRELVM &v, const SQInteger &idx, const SQFloat &w, const SQFloat &x, const SQFloat &y, const SQFloat &z) { sq_pushstring (v, "w", -1); sq_pushfloat (v, w ); sq_rawset (v, idx ); sq_pushstring (v, "x", -1); sq_pushfloat (v, x ); sq_rawset (v, idx ); sq_pushstring (v, "y", -1); sq_pushfloat (v, y ); sq_rawset (v, idx ); sq_pushstring (v, "z", -1); sq_pushfloat (v, z ); sq_rawset (v, idx ); } //------------------------------------------------------------------------------ inline void _getquaternionvalues(HSQUIRRELVM &v, const SQInteger &idx, SQFloat &w, SQFloat &x, SQFloat &y, SQFloat &z) { sq_pushstring (v, "w", -1); sq_get (v, idx ); sq_getfloat (v, -1, &w ); sq_pushstring (v, "x", -1); sq_get (v, idx ); sq_getfloat (v, -1, &x ); sq_pushstring (v, "y", -1); sq_get (v, idx ); sq_getfloat (v, -1, &y ); sq_pushstring (v, "z", -1); sq_get (v, idx ); sq_getfloat (v, -1, &z ); sq_pop (v, 3); } void setupScriptSystem_Math(ScriptSystem* scriptsystem); } // namespace BlueCore #endif