浏览代码

Add Color4 to lua

Daniele Bartolini 11 年之前
父节点
当前提交
4194eeee68
共有 5 个文件被更改,包括 76 次插入0 次删除
  1. 1 0
      engine/Android.mk
  2. 1 0
      engine/CMakeLists.txt
  3. 63 0
      engine/lua/LuaColor4.cpp
  4. 9 0
      engine/lua/LuaStack.h
  5. 2 0
      engine/lua/LuaSystem.cpp

+ 1 - 0
engine/Android.mk

@@ -161,6 +161,7 @@ LOCAL_SRC_FILES :=\
 	lua/LuaAccelerometer.cpp\
 	lua/LuaActor.cpp\
 	lua/LuaCamera.cpp\
+	lua/LuaColor4.cpp\
 	lua/LuaController.cpp\
 	lua/LuaDebugLine.cpp\
 	lua/LuaDevice.cpp\

+ 1 - 0
engine/CMakeLists.txt

@@ -328,6 +328,7 @@ set (LUA_SRC
 	lua/LuaAccelerometer.cpp
 	lua/LuaActor.cpp
 	lua/LuaCamera.cpp
+	lua/LuaColor4.cpp
 	lua/LuaController.cpp
 	lua/LuaDebugLine.cpp
 	lua/LuaDevice.cpp

+ 63 - 0
engine/lua/LuaColor4.cpp

@@ -0,0 +1,63 @@
+/*
+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 "Quaternion.h"
+#include "LuaStack.h"
+#include "LuaEnvironment.h"
+
+namespace crown
+{
+
+//-----------------------------------------------------------------------------
+static int color4_new(lua_State* L)
+{
+	LuaStack stack(L);
+
+	const float r = stack.get_float(1);
+	const float g = stack.get_float(2);
+	const float b = stack.get_float(3);
+	const float a = stack.get_float(4);
+
+	stack.push_quaternion(Quaternion(r, g, b, a));
+	return 1;
+}
+
+//-----------------------------------------------------------------------------
+static int color4_ctor(lua_State* L)
+{
+	LuaStack stack(L);
+	stack.remove(1); // Remove table
+	return color4_new(L);
+}
+
+//-----------------------------------------------------------------------------
+void load_color4(LuaEnvironment& env)
+{
+	env.load_module_function("Color4", "new", color4_new);
+	env.load_module_constructor("Color4", color4_ctor);
+}
+
+} // namespace crown

+ 9 - 0
engine/lua/LuaStack.h

@@ -34,6 +34,7 @@ OTHER DEALINGS IN THE SOFTWARE.
 #include "Quaternion.h"
 #include "Matrix4x4.h"
 #include "StringUtils.h"
+#include "Color4.h"
 
 //-----------------------------------------------------------------------------
 #if defined(CROWN_DEBUG) || defined(CROWN_DEVELOPMENT)
@@ -489,6 +490,14 @@ public:
 		return *(Quaternion*)q;
 	}
 
+	Color4 get_color4(int32_t index)
+	{
+		// Color4 represented as Quaternion
+		void* c = CHECKLIGHTDATA(m_L, index, lua_system::is_quaternion, "Color4");
+		Quaternion& q = *(Quaternion*)c;
+		return Color4(q.x, q.y, q.z, q.w);
+	}
+
 	//-----------------------------------------------------------------------------
 	void push_vector2(const Vector2& v)
 	{

+ 2 - 0
engine/lua/LuaSystem.cpp

@@ -74,6 +74,7 @@ extern void load_vector3(LuaEnvironment& env);
 extern void load_vector3box(LuaEnvironment& env);
 extern void load_window(LuaEnvironment& env);
 extern void load_world(LuaEnvironment& env);
+extern void load_color4(LuaEnvironment& env);
 
 namespace lua_system
 {
@@ -340,6 +341,7 @@ namespace lua_system
 		load_vector3box(env);
 		load_window(env);
 		load_world(env);
+		load_color4(env);
 
 		// Register custom loader
 		lua_getfield(s_L, LUA_GLOBALSINDEX, "package");