瀏覽代碼

Add lua bindins for accessing settings

Daniele Bartolini 12 年之前
父節點
當前提交
e47353a7cc
共有 6 個文件被更改,包括 408 次插入3 次删除
  1. 3 0
      src/CMakeLists.txt
  2. 147 0
      src/lua/FloatSettingBinds.cpp
  3. 147 0
      src/lua/IntSettingBinds.cpp
  4. 4 3
      src/lua/LuaEnvironment.cpp
  5. 4 0
      src/lua/LuaEnvironment.h
  6. 103 0
      src/lua/StringSettingBinds.cpp

+ 3 - 0
src/CMakeLists.txt

@@ -265,6 +265,9 @@ set (OS_HEADERS
 set(LUA_SRC
 	lua/LuaStack.cpp
 	lua/LuaEnvironment.cpp
+	lua/IntSettingBinds.cpp
+	lua/FloatSettingBinds.cpp
+	lua/StringSettingBinds.cpp
 	lua/Vec2Binds.cpp
 	lua/Vec3Binds.cpp
 	lua/Mat4Binds.cpp

+ 147 - 0
src/lua/FloatSettingBinds.cpp

@@ -0,0 +1,147 @@
+/*
+Copyright (c) 2013 Daniele Bartolini, Michele Rossi
+Copyright (c) 2012 Daniele Bartolini, Simone Boscaratto
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#include "FloatSetting.h"
+#include "LuaStack.h"
+#include "LuaEnvironment.h"
+#include "StringUtils.h"
+
+namespace crown
+{
+
+//-----------------------------------------------------------------------------
+CE_EXPORT int32_t float_setting_value(lua_State* L)
+{
+	LuaStack stack(L);
+
+	const char* setting_name = stack.get_string(1);
+
+	FloatSetting* setting = FloatSetting::find_setting(setting_name);
+
+	if (setting != NULL)
+	{
+		stack.push_float(setting->value());
+	}
+	else
+	{
+		stack.push_float(0.0f);
+	}
+
+	return 1;
+}
+
+//-----------------------------------------------------------------------------
+CE_EXPORT int32_t float_setting_synopsis(lua_State* L)
+{
+	LuaStack stack(L);
+
+	const char* setting_name = stack.get_string(1);
+
+	FloatSetting* setting = FloatSetting::find_setting(setting_name);
+
+	if (setting != NULL)
+	{
+		stack.push_string(setting->synopsis(), string::strlen(setting->synopsis()));
+	}
+	else
+	{
+		stack.push_string("", string::strlen(""));
+	}
+
+	return 1;
+}
+
+//-----------------------------------------------------------------------------
+CE_EXPORT int32_t float_setting_min(lua_State* L)
+{
+	LuaStack stack(L);
+
+	const char* setting_name = stack.get_string(1);
+
+	FloatSetting* setting = FloatSetting::find_setting(setting_name);
+
+	if (setting != NULL)
+	{
+		stack.push_float(setting->min());
+	}
+	else
+	{
+		stack.push_float(0);
+	}
+
+	return 1;
+}
+
+//-----------------------------------------------------------------------------
+CE_EXPORT int32_t float_setting_max(lua_State* L)
+{
+	LuaStack stack(L);
+
+	const char* setting_name = stack.get_string(1);
+
+	FloatSetting* setting = FloatSetting::find_setting(setting_name);
+
+	if (setting != NULL)
+	{
+		stack.push_float(setting->max());
+	}
+	else
+	{
+		stack.push_float(0);
+	}
+
+	return 1;
+}
+
+//-----------------------------------------------------------------------------
+CE_EXPORT int32_t float_setting_update(lua_State* L)
+{
+	LuaStack stack(L);
+
+	const char* setting_name = stack.get_string(1);
+	const float setting_value = stack.get_float(2);
+
+	FloatSetting* setting = FloatSetting::find_setting(setting_name);
+
+	if (setting != NULL)
+	{
+		(*setting) = setting_value;
+	}
+
+	return 0;
+}
+
+//-----------------------------------------------------------------------------
+void load_float_setting(LuaEnvironment& env)
+{
+	env.load_module_function("FloatSetting", "value",		float_setting_value);
+	env.load_module_function("FloatSetting", "synopsis",	float_setting_synopsis);
+	env.load_module_function("FloatSetting", "min",			float_setting_min);
+	env.load_module_function("FloatSetting", "max",			float_setting_max);
+	env.load_module_function("FloatSetting", "update",		float_setting_update);
+}
+
+} // namespace crown

+ 147 - 0
src/lua/IntSettingBinds.cpp

@@ -0,0 +1,147 @@
+/*
+Copyright (c) 2013 Daniele Bartolini, Michele Rossi
+Copyright (c) 2012 Daniele Bartolini, Simone Boscaratto
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#include "IntSetting.h"
+#include "LuaStack.h"
+#include "LuaEnvironment.h"
+#include "StringUtils.h"
+
+namespace crown
+{
+
+//-----------------------------------------------------------------------------
+CE_EXPORT int32_t int_setting_query_value(lua_State* L)
+{
+	LuaStack stack(L);
+
+	const char* setting_name = stack.get_string(1);
+
+	IntSetting* setting = IntSetting::find_setting(setting_name);
+
+	if (setting != NULL)
+	{
+		stack.push_int32(setting->value());
+	}
+	else
+	{
+		stack.push_int32(0);
+	}
+
+	return 1;
+}
+
+//-----------------------------------------------------------------------------
+CE_EXPORT int32_t int_setting_query_synopsis(lua_State* L)
+{
+	LuaStack stack(L);
+
+	const char* setting_name = stack.get_string(1);
+
+	IntSetting* setting = IntSetting::find_setting(setting_name);
+
+	if (setting != NULL)
+	{
+		stack.push_string(setting->synopsis(), string::strlen(setting->synopsis()));
+	}
+	else
+	{
+		stack.push_string("", string::strlen(""));
+	}
+
+	return 1;
+}
+
+//-----------------------------------------------------------------------------
+CE_EXPORT int32_t int_setting_query_min(lua_State* L)
+{
+	LuaStack stack(L);
+
+	const char* setting_name = stack.get_string(1);
+
+	IntSetting* setting = IntSetting::find_setting(setting_name);
+
+	if (setting != NULL)
+	{
+		stack.push_int32(setting->min());
+	}
+	else
+	{
+		stack.push_int32(0);
+	}
+
+	return 1;
+}
+
+//-----------------------------------------------------------------------------
+CE_EXPORT int32_t int_setting_query_max(lua_State* L)
+{
+	LuaStack stack(L);
+
+	const char* setting_name = stack.get_string(1);
+
+	IntSetting* setting = IntSetting::find_setting(setting_name);
+
+	if (setting != NULL)
+	{
+		stack.push_int32(setting->max());
+	}
+	else
+	{
+		stack.push_int32(0);
+	}
+
+	return 1;
+}
+
+//-----------------------------------------------------------------------------
+CE_EXPORT int32_t int_setting_update(lua_State* L)
+{
+	LuaStack stack(L);
+
+	const char* setting_name = stack.get_string(1);
+	const int32_t setting_value = stack.get_int(2);
+
+	IntSetting* setting = IntSetting::find_setting(setting_name);
+
+	if (setting != NULL)
+	{
+		(*setting) = setting_value;
+	}
+
+	return 0;
+}
+
+//-----------------------------------------------------------------------------
+void load_int_setting(LuaEnvironment& env)
+{
+	env.load_module_function("IntSetting", "value",		int_setting_query_value);
+	env.load_module_function("IntSetting", "synopsis",	int_setting_query_synopsis);
+	env.load_module_function("IntSetting", "min",		int_setting_query_min);
+	env.load_module_function("IntSetting", "max",		int_setting_query_max);
+	env.load_module_function("IntSetting", "update",	int_setting_update);
+}
+
+} // namespace crown

+ 4 - 3
src/lua/LuaEnvironment.cpp

@@ -53,6 +53,10 @@ CE_EXPORT int32_t luaopen_libcrown(lua_State* L)
 {
 	LuaEnvironment env(L);
 
+	load_int_setting(env);
+	load_float_setting(env);
+	load_string_setting(env);
+
 	load_vec2(env);
 	load_vec3(env);
 	load_mat4(env);
@@ -70,7 +74,4 @@ CE_EXPORT int32_t luaopen_libcrown(lua_State* L)
 	return 1;
 }
 
-
-
-
 } // namespace crown

+ 4 - 0
src/lua/LuaEnvironment.h

@@ -56,6 +56,10 @@ private:
 	lua_State*		m_state;
 };
 
+void load_int_setting(LuaEnvironment& env);
+void load_float_setting(LuaEnvironment& env);
+void load_string_setting(LuaEnvironment& env);
+
 void load_vec2(LuaEnvironment& env);
 void load_vec3(LuaEnvironment& env);
 void load_mat4(LuaEnvironment& env);

+ 103 - 0
src/lua/StringSettingBinds.cpp

@@ -0,0 +1,103 @@
+/*
+Copyright (c) 2013 Daniele Bartolini, Michele Rossi
+Copyright (c) 2012 Daniele Bartolini, Simone Boscaratto
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#include "StringSetting.h"
+#include "LuaStack.h"
+#include "LuaEnvironment.h"
+#include "StringUtils.h"
+
+namespace crown
+{
+
+//-----------------------------------------------------------------------------
+CE_EXPORT int32_t string_setting_value(lua_State* L)
+{
+	LuaStack stack(L);
+
+	const char* setting_name = stack.get_string(1);
+
+	StringSetting* setting = StringSetting::find_setting(setting_name);
+
+	if (setting != NULL)
+	{
+		stack.push_string(setting->value(), string::strlen(setting->value()));
+	}
+	else
+	{
+		stack.push_string("", string::strlen(""));
+	}
+
+	return 1;
+}
+
+//-----------------------------------------------------------------------------
+CE_EXPORT int32_t string_setting_synopsis(lua_State* L)
+{
+	LuaStack stack(L);
+
+	const char* setting_name = stack.get_string(1);
+
+	StringSetting* setting = StringSetting::find_setting(setting_name);
+
+	if (setting != NULL)
+	{
+		stack.push_string(setting->synopsis(), string::strlen(setting->synopsis()));
+	}
+	else
+	{
+		stack.push_string("", string::strlen(""));
+	}
+
+	return 1;
+}
+
+//-----------------------------------------------------------------------------
+CE_EXPORT int32_t string_setting_update(lua_State* L)
+{
+	LuaStack stack(L);
+
+	const char* setting_name = stack.get_string(1);
+	const char* setting_value = stack.get_string(2);
+
+	StringSetting* setting = StringSetting::find_setting(setting_name);
+
+	if (setting != NULL)
+	{
+		(*setting) = setting_value;
+	}
+
+	return 0;
+}
+
+//-----------------------------------------------------------------------------
+void load_string_setting(LuaEnvironment& env)
+{
+	env.load_module_function("StringSetting", "value",		string_setting_value);
+	env.load_module_function("StringSetting", "synopsis",	string_setting_synopsis);
+	env.load_module_function("StringSetting", "update",		string_setting_update);
+}
+
+} // namespace crown