diff --git a/src/osgPlugins/lua/LuaScriptEngine.cpp b/src/osgPlugins/lua/LuaScriptEngine.cpp index 46b8bfc9b..f906f8c19 100644 --- a/src/osgPlugins/lua/LuaScriptEngine.cpp +++ b/src/osgPlugins/lua/LuaScriptEngine.cpp @@ -2333,66 +2333,39 @@ int LuaScriptEngine::pushPropertyToStack(osg::Object* object, const std::string& } break; } - case(osgDB::BaseSerializer::RW_VEC2F): - { - osg::Vec2f value; - if (_ci.getProperty(object, propertyName, value)) - { - pushValue(value); - return 1; - } - break; - } - case(osgDB::BaseSerializer::RW_VEC3F): - { - osg::Vec3f value; - if (_ci.getProperty(object, propertyName, value)) - { - pushValue(value); - return 1; - } - break; - } - case(osgDB::BaseSerializer::RW_VEC4F): - { - osg::Vec4f value; - if (_ci.getProperty(object, propertyName, value)) - { - pushValue(value); - return 1; - } - break; - } - case(osgDB::BaseSerializer::RW_VEC2D): - { - osg::Vec2d value; - if (_ci.getProperty(object, propertyName, value)) - { - pushValue(value); - return 1; - } - break; - } - case(osgDB::BaseSerializer::RW_VEC3D): - { - osg::Vec3d value; - if (_ci.getProperty(object, propertyName, value)) - { - pushValue(value); - return 1; - } - break; - } - case(osgDB::BaseSerializer::RW_VEC4D): - { - osg::Vec4d value; - if (_ci.getProperty(object, propertyName, value)) - { - pushValue(value); - return 1; - } - break; - } + + case(osgDB::BaseSerializer::RW_VEC2B): if (getPropertyAndPushValue(object, propertyName)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC3B): if (getPropertyAndPushValue(object, propertyName)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC4B): if (getPropertyAndPushValue(object, propertyName)) return 1; break; + + case(osgDB::BaseSerializer::RW_VEC2UB): if (getPropertyAndPushValue(object, propertyName)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC3UB): if (getPropertyAndPushValue(object, propertyName)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC4UB): if (getPropertyAndPushValue(object, propertyName)) return 1; break; + + case(osgDB::BaseSerializer::RW_VEC2S): if (getPropertyAndPushValue(object, propertyName)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC3S): if (getPropertyAndPushValue(object, propertyName)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC4S): if (getPropertyAndPushValue(object, propertyName)) return 1; break; + + case(osgDB::BaseSerializer::RW_VEC2US): if (getPropertyAndPushValue(object, propertyName)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC3US): if (getPropertyAndPushValue(object, propertyName)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC4US): if (getPropertyAndPushValue(object, propertyName)) return 1; break; + + case(osgDB::BaseSerializer::RW_VEC2I): if (getPropertyAndPushValue(object, propertyName)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC3I): if (getPropertyAndPushValue(object, propertyName)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC4I): if (getPropertyAndPushValue(object, propertyName)) return 1; break; + + case(osgDB::BaseSerializer::RW_VEC2UI): if (getPropertyAndPushValue(object, propertyName)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC3UI): if (getPropertyAndPushValue(object, propertyName)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC4UI): if (getPropertyAndPushValue(object, propertyName)) return 1; break; + + case(osgDB::BaseSerializer::RW_VEC2F): if (getPropertyAndPushValue(object, propertyName)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC3F): if (getPropertyAndPushValue(object, propertyName)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC4F): if (getPropertyAndPushValue(object, propertyName)) return 1; break; + + case(osgDB::BaseSerializer::RW_VEC2D): if (getPropertyAndPushValue(object, propertyName)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC3D): if (getPropertyAndPushValue(object, propertyName)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC4D): if (getPropertyAndPushValue(object, propertyName)) return 1; break; + #ifdef OSG_USE_FLOAT_MATRIX case(osgDB::BaseSerializer::RW_MATRIX): #endif @@ -2641,66 +2614,42 @@ int LuaScriptEngine::pushDataToStack(SerializerScratchPad* ssp) const } break; } - case(osgDB::BaseSerializer::RW_VEC2F): - { - osg::Vec2f value; - if (ssp->get(value)) - { - pushValue(value); - return 1; - } - break; - } - case(osgDB::BaseSerializer::RW_VEC3F): - { - osg::Vec3f value; - if (ssp->get(value)) - { - pushValue(value); - return 1; - } - break; - } - case(osgDB::BaseSerializer::RW_VEC4F): - { - osg::Vec4f value; - if (ssp->get(value)) - { - pushValue(value); - return 1; - } - break; - } - case(osgDB::BaseSerializer::RW_VEC2D): - { - osg::Vec2d value; - if (ssp->get(value)) - { - pushValue(value); - return 1; - } - break; - } - case(osgDB::BaseSerializer::RW_VEC3D): - { - osg::Vec3d value; - if (ssp->get(value)) - { - pushValue(value); - return 1; - } - break; - } - case(osgDB::BaseSerializer::RW_VEC4D): - { - osg::Vec4d value; - if (ssp->get(value)) - { - pushValue(value); - return 1; - } - break; - } + + case(osgDB::BaseSerializer::RW_VEC2B): if (pushValueToStack(ssp)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC3B): if (pushValueToStack(ssp)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC4B): if (pushValueToStack(ssp)) return 1; break; + + case(osgDB::BaseSerializer::RW_VEC2UB): if (pushValueToStack(ssp)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC3UB): if (pushValueToStack(ssp)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC4UB): if (pushValueToStack(ssp)) return 1; break; + + case(osgDB::BaseSerializer::RW_VEC2S): if (pushValueToStack(ssp)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC3S): if (pushValueToStack(ssp)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC4S): if (pushValueToStack(ssp)) return 1; break; + + case(osgDB::BaseSerializer::RW_VEC2US): if (pushValueToStack(ssp)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC3US): if (pushValueToStack(ssp)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC4US): if (pushValueToStack(ssp)) return 1; break; + + case(osgDB::BaseSerializer::RW_VEC2I): if (pushValueToStack(ssp)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC3I): if (pushValueToStack(ssp)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC4I): if (pushValueToStack(ssp)) return 1; break; + + case(osgDB::BaseSerializer::RW_VEC2UI): if (pushValueToStack(ssp)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC3UI): if (pushValueToStack(ssp)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC4UI): if (pushValueToStack(ssp)) return 1; break; + + case(osgDB::BaseSerializer::RW_VEC2F): if (pushValueToStack(ssp)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC3F): if (pushValueToStack(ssp)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC4F): if (pushValueToStack(ssp)) return 1; break; + + case(osgDB::BaseSerializer::RW_VEC2D): if (pushValueToStack(ssp)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC3D): if (pushValueToStack(ssp)) return 1; break; + case(osgDB::BaseSerializer::RW_VEC4D): if (pushValueToStack(ssp)) return 1; break; + + case(osgDB::BaseSerializer::RW_PLANE): if (pushValueToStack(ssp)) return 1; break; + case(osgDB::BaseSerializer::RW_QUAT): if (pushValueToStack(ssp)) return 1; break; + #ifdef OSG_USE_FLOAT_MATRIX case(osgDB::BaseSerializer::RW_MATRIX): #endif @@ -2911,87 +2860,44 @@ int LuaScriptEngine::getDataFromStack(SerializerScratchPad* ssp, osgDB::BaseSeri } break; } - case(osgDB::BaseSerializer::RW_VEC2F): - { - osg::Vec2f value; - if (getValue(pos, value)) - { - ssp->set(value); - return 0; - } - break; - } - case(osgDB::BaseSerializer::RW_VEC3F): - { - osg::Vec3f value; - if (getValue(pos, value)) - { - ssp->set(value); - return 0; - } - break; - } - case(osgDB::BaseSerializer::RW_VEC4F): - { - osg::Vec4f value; - if (getValue(pos, value)) - { - ssp->set(value); - return 0; - } - break; - } - case(osgDB::BaseSerializer::RW_VEC2D): - { - osg::Vec2d value; - if (getValue(pos, value)) - { - ssp->set(value); - return 0; - } - break; - } - case(osgDB::BaseSerializer::RW_VEC3D): - { - osg::Vec3d value; - if (getValue(pos, value)) - { - ssp->set(value); - return 0; - } - break; - } - case(osgDB::BaseSerializer::RW_VEC4D): - { - osg::Vec4d value; - if (getValue(pos, value)) - { - ssp->set(value); - return 0; - } - break; - } - case(osgDB::BaseSerializer::RW_QUAT): - { - osg::Quat value; - if (getValue(pos, value)) - { - ssp->set(value); - return 0; - } - break; - } - case(osgDB::BaseSerializer::RW_PLANE): - { - osg::Plane value; - if (getValue(pos, value)) - { - ssp->set(value); - return 0; - } - break; - } -#ifdef OSG_USE_FLOAT_MATRIX + + case(osgDB::BaseSerializer::RW_VEC2B): if (getDataFromStack(ssp, pos)) return 0; break; + case(osgDB::BaseSerializer::RW_VEC3B): if (getDataFromStack(ssp, pos)) return 0; break; + case(osgDB::BaseSerializer::RW_VEC4B): if (getDataFromStack(ssp, pos)) return 0; break; + + case(osgDB::BaseSerializer::RW_VEC2UB): if (getDataFromStack(ssp, pos)) return 0; break; + case(osgDB::BaseSerializer::RW_VEC3UB): if (getDataFromStack(ssp, pos)) return 0; break; + case(osgDB::BaseSerializer::RW_VEC4UB): if (getDataFromStack(ssp, pos)) return 0; break; + + case(osgDB::BaseSerializer::RW_VEC2S): if (getDataFromStack(ssp, pos)) return 0; break; + case(osgDB::BaseSerializer::RW_VEC3S): if (getDataFromStack(ssp, pos)) return 0; break; + case(osgDB::BaseSerializer::RW_VEC4S): if (getDataFromStack(ssp, pos)) return 0; break; + + case(osgDB::BaseSerializer::RW_VEC2US): if (getDataFromStack(ssp, pos)) return 0; break; + case(osgDB::BaseSerializer::RW_VEC3US): if (getDataFromStack(ssp, pos)) return 0; break; + case(osgDB::BaseSerializer::RW_VEC4US): if (getDataFromStack(ssp, pos)) return 0; break; + + case(osgDB::BaseSerializer::RW_VEC2I): if (getDataFromStack(ssp, pos)) return 0; break; + case(osgDB::BaseSerializer::RW_VEC3I): if (getDataFromStack(ssp, pos)) return 0; break; + case(osgDB::BaseSerializer::RW_VEC4I): if (getDataFromStack(ssp, pos)) return 0; break; + + case(osgDB::BaseSerializer::RW_VEC2UI): if (getDataFromStack(ssp, pos)) return 0; break; + case(osgDB::BaseSerializer::RW_VEC3UI): if (getDataFromStack(ssp, pos)) return 0; break; + case(osgDB::BaseSerializer::RW_VEC4UI): if (getDataFromStack(ssp, pos)) return 0; break; + + case(osgDB::BaseSerializer::RW_VEC2F): if (getDataFromStack(ssp, pos)) return 0; break; + case(osgDB::BaseSerializer::RW_VEC3F): if (getDataFromStack(ssp, pos)) return 0; break; + case(osgDB::BaseSerializer::RW_VEC4F): if (getDataFromStack(ssp, pos)) return 0; break; + + case(osgDB::BaseSerializer::RW_VEC2D): if (getDataFromStack(ssp, pos)) return 0; break; + case(osgDB::BaseSerializer::RW_VEC3D): if (getDataFromStack(ssp, pos)) return 0; break; + case(osgDB::BaseSerializer::RW_VEC4D): if (getDataFromStack(ssp, pos)) return 0; break; + + case(osgDB::BaseSerializer::RW_QUAT): if (getDataFromStack(ssp, pos)) return 0; break; + + case(osgDB::BaseSerializer::RW_PLANE): if (getDataFromStack(ssp, pos)) return 0; break; + + #ifdef OSG_USE_FLOAT_MATRIX case(osgDB::BaseSerializer::RW_MATRIX): #endif case(osgDB::BaseSerializer::RW_MATRIXF): @@ -3257,6 +3163,14 @@ int LuaScriptEngine::setPropertyFromStack(osg::Object* object, const std::string break; } + case(osgDB::BaseSerializer::RW_VEC2B): if (getValueAndSetProperty(object, propertyName)) return 0; break; + case(osgDB::BaseSerializer::RW_VEC3B): if (getValueAndSetProperty(object, propertyName)) return 0; break; + case(osgDB::BaseSerializer::RW_VEC4B): if (getValueAndSetProperty(object, propertyName)) return 0; break; + + case(osgDB::BaseSerializer::RW_VEC2UB): if (getValueAndSetProperty(object, propertyName)) return 0; break; + case(osgDB::BaseSerializer::RW_VEC3UB): if (getValueAndSetProperty(object, propertyName)) return 0; break; + case(osgDB::BaseSerializer::RW_VEC4UB): if (getValueAndSetProperty(object, propertyName)) return 0; break; + case(osgDB::BaseSerializer::RW_VEC2F): if (getValueAndSetProperty(object, propertyName)) return 0; break; case(osgDB::BaseSerializer::RW_VEC3F): if (getValueAndSetProperty(object, propertyName)) return 0; break; case(osgDB::BaseSerializer::RW_VEC4F): if (getValueAndSetProperty(object, propertyName)) return 0; break; @@ -3266,6 +3180,7 @@ int LuaScriptEngine::setPropertyFromStack(osg::Object* object, const std::string case(osgDB::BaseSerializer::RW_VEC4D): if (getValueAndSetProperty(object, propertyName)) return 0; break; case(osgDB::BaseSerializer::RW_QUAT): if (getValueAndSetProperty(object, propertyName)) return 0; break; + case(osgDB::BaseSerializer::RW_PLANE): if (getValueAndSetProperty(object, propertyName)) return 0; break; #ifdef OSG_USE_FLOAT_MATRIX @@ -3817,24 +3732,35 @@ osg::Object* LuaScriptEngine::popParameterObject() const if (lua_isnumber(_lua, -1)) object = new osg::DoubleValueObject("", static_cast(lua_tonumber(_lua, -1))); break; } - case(osgDB::BaseSerializer::RW_VEC2F): - { - osg::Vec2f value; - if (getValue(-1, value)) object = new osg::Vec2fValueObject("", value); - break; - } - case(osgDB::BaseSerializer::RW_VEC3F): - { - osg::Vec3f value; - if (getValue(-1, value)) object = new osg::Vec3fValueObject("", value); - break; - } - case(osgDB::BaseSerializer::RW_VEC4F): - { - osg::Vec4f value; - if (getValue(-1, value)) object = new osg::Vec4fValueObject("", value); - break; - } + + case(osgDB::BaseSerializer::RW_VEC2B): object = getValueObject(-1); break; + case(osgDB::BaseSerializer::RW_VEC3B): object = getValueObject(-1); break; + case(osgDB::BaseSerializer::RW_VEC4B): object = getValueObject(-1); break; + + case(osgDB::BaseSerializer::RW_VEC2UB): object = getValueObject(-1); break; + case(osgDB::BaseSerializer::RW_VEC3UB): object = getValueObject(-1); break; + case(osgDB::BaseSerializer::RW_VEC4UB): object = getValueObject(-1); break; + + case(osgDB::BaseSerializer::RW_VEC2S): object = getValueObject(-1); break; + case(osgDB::BaseSerializer::RW_VEC3S): object = getValueObject(-1); break; + case(osgDB::BaseSerializer::RW_VEC4S): object = getValueObject(-1); break; + + case(osgDB::BaseSerializer::RW_VEC2US): object = getValueObject(-1); break; + case(osgDB::BaseSerializer::RW_VEC3US): object = getValueObject(-1); break; + case(osgDB::BaseSerializer::RW_VEC4US): object = getValueObject(-1); break; + + case(osgDB::BaseSerializer::RW_VEC2I): object = getValueObject(-1); break; + case(osgDB::BaseSerializer::RW_VEC3I): object = getValueObject(-1); break; + case(osgDB::BaseSerializer::RW_VEC4I): object = getValueObject(-1); break; + + case(osgDB::BaseSerializer::RW_VEC2UI): object = getValueObject(-1); break; + case(osgDB::BaseSerializer::RW_VEC3UI): object = getValueObject(-1); break; + case(osgDB::BaseSerializer::RW_VEC4UI): object = getValueObject(-1); break; + + case(osgDB::BaseSerializer::RW_VEC2F): object = getValueObject(-1); break; + case(osgDB::BaseSerializer::RW_VEC3F): object = getValueObject(-1); break; + case(osgDB::BaseSerializer::RW_VEC4F): object = getValueObject(-1); break; + #ifdef OSG_USE_FLOAT_MATRIX case(osgDB::BaseSerializer::RW_MATRIX): #endif @@ -3844,37 +3770,15 @@ osg::Object* LuaScriptEngine::popParameterObject() const if (getValue(-1, value)) object = new osg::MatrixfValueObject("", value); break; } - case(osgDB::BaseSerializer::RW_VEC2D): - { - osg::Vec2d value; - if (getValue(-1, value)) object = new osg::Vec2dValueObject("", value); - break; - } - case(osgDB::BaseSerializer::RW_VEC3D): - { - osg::Vec3d value; - if (getValue(-1, value)) object = new osg::Vec3dValueObject("", value); - break; - } - case(osgDB::BaseSerializer::RW_VEC4D): - { - osg::Vec4d value; - if (getValue(-1, value)) object = new osg::Vec4dValueObject("", value); - break; - } - case(osgDB::BaseSerializer::RW_QUAT): - { - osg::Quat value; - if (getValue(-1, value)) object = new osg::QuatValueObject("", value); - break; - } - case(osgDB::BaseSerializer::RW_PLANE): - { - osg::Plane value; - if (getValue(-1, value)) object = new osg::PlaneValueObject("", value); - break; - } -#ifndef OSG_USE_FLOAT_MATRIX + + case(osgDB::BaseSerializer::RW_VEC2D): object = getValueObject(-1); break; + case(osgDB::BaseSerializer::RW_VEC3D): object = getValueObject(-1); break; + case(osgDB::BaseSerializer::RW_VEC4D): object = getValueObject(-1); break; + + case(osgDB::BaseSerializer::RW_PLANE): object = getValueObject(-1); break; + case(osgDB::BaseSerializer::RW_QUAT): object = getValueObject(-1); break; + + #ifndef OSG_USE_FLOAT_MATRIX case(osgDB::BaseSerializer::RW_MATRIX): #endif case(osgDB::BaseSerializer::RW_MATRIXD): diff --git a/src/osgPlugins/lua/LuaScriptEngine.h b/src/osgPlugins/lua/LuaScriptEngine.h index 81fdfe5ed..15e02a381 100644 --- a/src/osgPlugins/lua/LuaScriptEngine.h +++ b/src/osgPlugins/lua/LuaScriptEngine.h @@ -101,8 +101,33 @@ class LuaScriptEngine : public osg::ScriptEngine osgDB::ClassInterface& getClassInterface() const { return _ci; } int pushDataToStack(SerializerScratchPad* ssp) const; + + template + bool pushValueToStack(SerializerScratchPad* ssp) const + { + T value; + if (ssp->get(value)) + { + pushValue(value); + return true; + } + return false; + } + int getDataFromStack(SerializerScratchPad* ssp, osgDB::BaseSerializer::Type type, int pos) const; + template + bool getDataFromStack(SerializerScratchPad* ssp, int pos) const + { + T value; + if (getValue(pos, value)) + { + ssp->set(value); + return true; + } + return false; + } + int pushPropertyToStack(osg::Object* object, const std::string& propertyName) const; int setPropertyFromStack(osg::Object* object, const std::string& propertyName) const; int setPropertyFromStack(osg::Object* object, const std::string& propertyName, osgDB::BaseSerializer::Type type) const; @@ -126,6 +151,9 @@ class LuaScriptEngine : public osg::ScriptEngine bool getboundingbox(int pos) const; bool getboundingsphere(int pos) const; + + + template bool getVec2(int pos, T& value) const { @@ -212,6 +240,27 @@ class LuaScriptEngine : public osg::ScriptEngine return false; } + template + osg::Object* getValueObject(int pos) const + { + T value; + if (getValue(pos, value)) return new osg::TemplateValueObject("", value); + else return 0; + } + + + template + bool getPropertyAndPushValue(const osg::Object* object, const std::string& propertyName) const + { + T value; + if (_ci.getProperty(object, propertyName, value)) + { + pushValue(value); + return true; + } + return false; + } + void pushValue(osgDB::BaseSerializer::Type type, const void* ptr) const;