From 2ebe4813d6484416423f76994ab81d8642e352a5 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Mon, 4 Jul 2016 11:02:58 +0100 Subject: [PATCH] Replaced seperate implementations with template implementations --- src/osgPlugins/lua/LuaScriptEngine.cpp | 92 ++++---------------------- src/osgPlugins/lua/LuaScriptEngine.h | 38 +++++++++++ 2 files changed, 50 insertions(+), 80 deletions(-) diff --git a/src/osgPlugins/lua/LuaScriptEngine.cpp b/src/osgPlugins/lua/LuaScriptEngine.cpp index f0e90b82d..46b8bfc9b 100644 --- a/src/osgPlugins/lua/LuaScriptEngine.cpp +++ b/src/osgPlugins/lua/LuaScriptEngine.cpp @@ -3256,86 +3256,18 @@ int LuaScriptEngine::setPropertyFromStack(osg::Object* object, const std::string } break; } - case(osgDB::BaseSerializer::RW_VEC2F): - { - osg::Vec2f value; - if (getValue(-1, value)) - { - _ci.setProperty(object, propertyName, value); - return 0; - } - break; - } - case(osgDB::BaseSerializer::RW_VEC3F): - { - osg::Vec3f value; - if (getValue(-1, value)) - { - _ci.setProperty(object, propertyName, value); - return 0; - } - break; - } - case(osgDB::BaseSerializer::RW_VEC4F): - { - osg::Vec4f value; - if (getValue(-1, value)) - { - _ci.setProperty(object, propertyName, value); - return 0; - } - break; - } - case(osgDB::BaseSerializer::RW_VEC2D): - { - osg::Vec2d value; - if (getValue(-1, value)) - { - _ci.setProperty(object, propertyName, value); - return 0; - } - break; - } - case(osgDB::BaseSerializer::RW_VEC3D): - { - osg::Vec3d value; - if (getValue(-1, value)) - { - _ci.setProperty(object, propertyName, value); - return 0; - } - break; - } - case(osgDB::BaseSerializer::RW_VEC4D): - { - osg::Vec4d value; - if (getValue(-1, value)) - { - _ci.setProperty(object, propertyName, value); - return 0; - } - break; - } - case(osgDB::BaseSerializer::RW_QUAT): - { - osg::Quat value; - if (getValue(-1, value)) - { - _ci.setProperty(object, propertyName, value); - return 0; - } - break; - } - case(osgDB::BaseSerializer::RW_PLANE): - { - osg::Plane value; - if (getValue(-1, value)) - { - _ci.setProperty(object, propertyName, value); - 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; + + case(osgDB::BaseSerializer::RW_VEC2D): if (getValueAndSetProperty(object, propertyName)) return 0; break; + case(osgDB::BaseSerializer::RW_VEC3D): if (getValueAndSetProperty(object, propertyName)) return 0; break; + 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 case(osgDB::BaseSerializer::RW_MATRIX): #endif diff --git a/src/osgPlugins/lua/LuaScriptEngine.h b/src/osgPlugins/lua/LuaScriptEngine.h index 091e42880..81fdfe5ed 100644 --- a/src/osgPlugins/lua/LuaScriptEngine.h +++ b/src/osgPlugins/lua/LuaScriptEngine.h @@ -155,6 +155,30 @@ class LuaScriptEngine : public osg::ScriptEngine return true; } + bool getValue(int pos, osg::Vec2b& value) const { return getVec2(pos, value); } + bool getValue(int pos, osg::Vec3b& value) const { return getVec3(pos, value); } + bool getValue(int pos, osg::Vec4b& value) const { return getVec4(pos, value); } + + bool getValue(int pos, osg::Vec2ub& value) const { return getVec2(pos, value); } + bool getValue(int pos, osg::Vec3ub& value) const { return getVec3(pos, value); } + bool getValue(int pos, osg::Vec4ub& value) const { return getVec4(pos, value); } + + bool getValue(int pos, osg::Vec2s& value) const { return getVec2(pos, value); } + bool getValue(int pos, osg::Vec3s& value) const { return getVec3(pos, value); } + bool getValue(int pos, osg::Vec4s& value) const { return getVec4(pos, value); } + + bool getValue(int pos, osg::Vec2us& value) const { return getVec2(pos, value); } + bool getValue(int pos, osg::Vec3us& value) const { return getVec3(pos, value); } + bool getValue(int pos, osg::Vec4us& value) const { return getVec4(pos, value); } + + bool getValue(int pos, osg::Vec2i& value) const { return getVec2(pos, value); } + bool getValue(int pos, osg::Vec3i& value) const { return getVec3(pos, value); } + bool getValue(int pos, osg::Vec4i& value) const { return getVec4(pos, value); } + + bool getValue(int pos, osg::Vec2ui& value) const { return getVec2(pos, value); } + bool getValue(int pos, osg::Vec3ui& value) const { return getVec3(pos, value); } + bool getValue(int pos, osg::Vec4ui& value) const { return getVec4(pos, value); } + bool getValue(int pos, osg::Vec2f& value) const { return getVec2(pos, value); } bool getValue(int pos, osg::Vec3f& value) const { return getVec3(pos, value); } bool getValue(int pos, osg::Vec4f& value) const { return getVec4(pos, value); } @@ -175,6 +199,20 @@ class LuaScriptEngine : public osg::ScriptEngine bool getValue(int pos, osg::BoundingSpheref& value) const; bool getValue(int pos, osg::BoundingSphered& value) const; + + template + bool getValueAndSetProperty(osg::Object* object, const std::string& propertyName) const + { + T value; + if (getValue(-1, value)) + { + _ci.setProperty(object, propertyName, value); + return true; + } + return false; + } + + void pushValue(osgDB::BaseSerializer::Type type, const void* ptr) const; template