Просмотр исходного кода

Merge branch 'master' of https://github.com/taylor001/crown

Daniele Bartolini 12 лет назад
Родитель
Сommit
174659e95c
2 измененных файлов с 30 добавлено и 18 удалено
  1. 14 0
      engine/lua/LuaQuaternion.cpp
  2. 16 18
      engine/lua/LuaQuaternionBox.cpp

+ 14 - 0
engine/lua/LuaQuaternion.cpp

@@ -150,6 +150,19 @@ static int quaternion_power(lua_State* L)
 	return 1;
 }
 
+//-----------------------------------------------------------------------------
+static int quaternion_elements(lua_State* L)
+{
+	LuaStack stack(L);
+	const Quaternion& q = stack.get_quaternion(1);
+
+	stack.push_float(q.x);
+	stack.push_float(q.y);
+	stack.push_float(q.z);
+	stack.push_float(q.w);
+	return 4;
+}
+
 //-----------------------------------------------------------------------------
 void load_quaternion(LuaEnvironment& env)
 {
@@ -162,6 +175,7 @@ void load_quaternion(LuaEnvironment& env)
 	env.load_module_function("Quaternion", "conjugate",				quaternion_conjugate);
 	env.load_module_function("Quaternion", "inverse",				quaternion_inverse);
 	env.load_module_function("Quaternion", "power",					quaternion_power);
+	env.load_module_function("Quaternion", "elements",				quaternion_elements);
 
 	env.load_module_constructor("Quaternion",						quaternion_ctor);
 }

+ 16 - 18
engine/lua/LuaQuaternionBox.cpp

@@ -38,20 +38,19 @@ static int quaternionbox_new(lua_State* L)
 	LuaStack stack(L);
 
 	Quaternion q;
+	if (stack.num_args() == 1)
+	{
+		q = stack.get_quaternion(1);
+	}
 	if (stack.num_args() == 2)
 	{
-		const Vector3& v = stack.get_vector3(1);
-		q.x = v.x;
-		q.y = v.y;
-		q.z = v.z;
-		q.w = stack.get_float(2);
+		Quaternion quat(stack.get_vector3(1), stack.get_float(2));
+		q = quat;
 	}
 	else if (stack.num_args() == 4)
 	{
-		q.x = stack.get_float(1);
-		q.y = stack.get_float(2);
-		q.z = stack.get_float(3);
-		q.w = stack.get_float(4);
+		Quaternion quat(stack.get_float(1), stack.get_float(2),	stack.get_float(3),	stack.get_float(4));
+		q = quat;
 	}
 
 	stack.push_quaternionbox(q);
@@ -73,20 +72,19 @@ static int quaternionbox_store(lua_State* L)
 
 	Quaternion& q = stack.get_quaternionbox(1);
 	
+	if (stack.num_args() == 2)
+	{
+		q = stack.get_quaternion(2);
+	}
 	if (stack.num_args() == 3)
 	{
-		const Vector3& v = stack.get_vector3(1);
-		q.x = v.x;
-		q.y = v.y;
-		q.z = v.z;
-		q.w = stack.get_float(2);
+		Quaternion quat(stack.get_vector3(2), stack.get_float(3));
+		q = quat;
 	}
 	else if (stack.num_args() == 5)
 	{
-		q.x = stack.get_float(1);
-		q.y = stack.get_float(2);
-		q.z = stack.get_float(3);
-		q.w = stack.get_float(4);
+		Quaternion quat(stack.get_float(2), stack.get_float(3),	stack.get_float(4),	stack.get_float(5));
+		q = quat;
 	}
 	return 0;
 }