Added handling of return values

This commit is contained in:
Robert Osfield
2016-06-27 15:59:04 +01:00
parent 20866b8faa
commit d28e7588fa

View File

@@ -2131,34 +2131,35 @@ public:
lua_State* _lua;
int _index;
int _numberToPop;
bool _success;
GetStackValueVisitor(const LuaScriptEngine* lse, int index) : _lse(lse), _lua(0), _index(index), _numberToPop(0) { _lua = const_cast<LuaScriptEngine*>(lse )->getLuaState(); }
GetStackValueVisitor(const LuaScriptEngine* lse, int index) : _lse(lse), _lua(0), _index(index), _numberToPop(0), _success(false) { _lua = const_cast<LuaScriptEngine*>(lse )->getLuaState(); }
virtual void apply(bool& value) { if (lua_isboolean(_lua, _index)) { value = (lua_toboolean(_lua, _index)!=0); _numberToPop = 1; } }
virtual void apply(char& value) { if (lua_isnumber(_lua, _index)) { value = lua_tonumber(_lua, _index)!=0; _numberToPop = 1; } }
virtual void apply(unsigned char& value) { if (lua_isnumber(_lua, _index)) { value = lua_tonumber(_lua, _index)!=0; _numberToPop = 1; } }
virtual void apply(short& value) { if (lua_isnumber(_lua, _index)) { value = lua_tonumber(_lua, _index)!=0; _numberToPop = 1; } }
virtual void apply(unsigned short& value) { if (lua_isnumber(_lua, _index)) { value = lua_tonumber(_lua, _index)!=0; _numberToPop = 1; } }
virtual void apply(int& value) { if (lua_isnumber(_lua, _index)) { value = lua_tonumber(_lua, _index)!=0; _numberToPop = 1; } }
virtual void apply(unsigned int& value) { if (lua_isnumber(_lua, _index)) { value = lua_tonumber(_lua, _index)!=0; _numberToPop = 1; } }
virtual void apply(float& value) { if (lua_isnumber(_lua, _index)) { value = lua_tonumber(_lua, _index)!=0; _numberToPop = 1; } }
virtual void apply(double& value) { if (lua_isnumber(_lua, _index)) { value = lua_tonumber(_lua, _index)!=0; _numberToPop = 1; } }
virtual void apply(bool& value) { if (lua_isboolean(_lua, _index)) { value = (lua_toboolean(_lua, _index)!=0); _success=true; _numberToPop = 1; } }
virtual void apply(char& value) { if (lua_isnumber(_lua, _index)) { value = lua_tonumber(_lua, _index)!=0; _success=true; _numberToPop = 1; } }
virtual void apply(unsigned char& value) { if (lua_isnumber(_lua, _index)) { value = lua_tonumber(_lua, _index)!=0; _success=true; _numberToPop = 1; } }
virtual void apply(short& value) { if (lua_isnumber(_lua, _index)) { value = lua_tonumber(_lua, _index)!=0; _success=true; _numberToPop = 1; } }
virtual void apply(unsigned short& value) { if (lua_isnumber(_lua, _index)) { value = lua_tonumber(_lua, _index)!=0; _success=true; _numberToPop = 1; } }
virtual void apply(int& value) { if (lua_isnumber(_lua, _index)) { value = lua_tonumber(_lua, _index)!=0; _success=true; _numberToPop = 1; } }
virtual void apply(unsigned int& value) { if (lua_isnumber(_lua, _index)) { value = lua_tonumber(_lua, _index)!=0; _success=true; _numberToPop = 1; } }
virtual void apply(float& value) { if (lua_isnumber(_lua, _index)) { value = lua_tonumber(_lua, _index)!=0; _success=true; _numberToPop = 1; } }
virtual void apply(double& value) { if (lua_isnumber(_lua, _index)) { value = lua_tonumber(_lua, _index)!=0; _success=true; _numberToPop = 1; } }
virtual void apply(std::string& value) { if (lua_isstring(_lua, _index)) { value = std::string(lua_tostring(_lua, _index), lua_rawlen(_lua, _index)); _numberToPop = 1; } }
virtual void apply(osg::Vec2f& value) { _lse->getValue(_index, value); _numberToPop = 2;}
virtual void apply(osg::Vec3f& value) { _lse->getValue(_index, value); _numberToPop = 2; }
virtual void apply(osg::Vec4f& value) { _lse->getValue(_index, value); _numberToPop = 4; }
virtual void apply(osg::Vec2d& value) { _lse->getValue(_index, value); _numberToPop = 2; }
virtual void apply(osg::Vec3d& value) { _lse->getValue(_index, value); _numberToPop = 3; }
virtual void apply(osg::Vec4d& value) { _lse->getValue(_index, value); _numberToPop = 4; }
virtual void apply(osg::Quat& value) { _lse->getValue(_index, value); _numberToPop = 4; }
virtual void apply(osg::Plane& value) { _lse->getValue(_index, value); _numberToPop = 4; }
virtual void apply(osg::Matrixf& value) { _lse->getValue(_index, value); }
virtual void apply(osg::Matrixd& value) { _lse->getValue(_index, value); }
virtual void apply(osg::BoundingBoxf& value) { _lse->getValue(_index, value); }
virtual void apply(osg::BoundingBoxd& value) { _lse->getValue(_index, value); }
virtual void apply(osg::BoundingSpheref& value) { _lse->getValue(_index, value); }
virtual void apply(osg::BoundingSphered& value) { _lse->getValue(_index, value); }
virtual void apply(osg::Vec2f& value) { if (_lse->getValue(_index, value)) { _success=true; _numberToPop = 2;} }
virtual void apply(osg::Vec3f& value) { if (_lse->getValue(_index, value)) { _success=true; _numberToPop = 2; } }
virtual void apply(osg::Vec4f& value) { if (_lse->getValue(_index, value)) { _success=true; _numberToPop = 4; } }
virtual void apply(osg::Vec2d& value) { if (_lse->getValue(_index, value)) { _success=true; _numberToPop = 2; } }
virtual void apply(osg::Vec3d& value) { if (_lse->getValue(_index, value)) { _success=true; _numberToPop = 3; } }
virtual void apply(osg::Vec4d& value) { if (_lse->getValue(_index, value)) { _success=true; _numberToPop = 4; } }
virtual void apply(osg::Quat& value) { if (_lse->getValue(_index, value)) { _success=true; _numberToPop = 4; } }
virtual void apply(osg::Plane& value) { if (_lse->getValue(_index, value)) { _success=true; _numberToPop = 4; } }
virtual void apply(osg::Matrixf& value) { if (_lse->getValue(_index, value)) { _success=true; } }
virtual void apply(osg::Matrixd& value) { if (_lse->getValue(_index, value)) { _success=true; } }
virtual void apply(osg::BoundingBoxf& value) { if (_lse->getValue(_index, value)) { _success=true; } }
virtual void apply(osg::BoundingBoxd& value) { if (_lse->getValue(_index, value)) { _success=true; } }
virtual void apply(osg::BoundingSpheref& value) { if (_lse->getValue(_index, value)) { _success=true; } }
virtual void apply(osg::BoundingSphered& value) { if (_lse->getValue(_index, value)) { _success=true; } }
};
int LuaScriptEngine::pushPropertyToStack(osg::Object* object, const std::string& propertyName) const