Bläddra i källkod

Added scripting APIs for the previous convenience functions

Nick Royer 12 år sedan
förälder
incheckning
432b9d3645

+ 2 - 0
Source/Engine/LuaScript/pkgs/Math/Quaternion.pkg

@@ -30,6 +30,7 @@ class Quaternion
     void FromRotationTo(const Vector3& start, const Vector3& end);
     void FromAxes(const Vector3& xAxis, const Vector3& yAxis, const Vector3& zAxis);
     void FromRotationMatrix(const Matrix3& matrix);
+    void FromLookRotation(const Vector3& direction, const Vector3& up);
     
     void Normalize();
     
@@ -46,6 +47,7 @@ class Quaternion
     float RollAngle() const;
     Matrix3 RotationMatrix() const;
     Quaternion Slerp(Quaternion rhs, float t) const;
+    Quaternion Nlerp(Quaternion rhs, float t, bool shortestPath) const;
     String ToString() const;
 
     float w_ @ w;

+ 45 - 1
Source/Engine/LuaScript/pkgs/Scene/Node.pkg

@@ -122,7 +122,13 @@ class Node : public Serializable
     
     Vector3 GetDirection() const;
     tolua_outside void NodeGetDirectionXYZ @ GetDirectionXYZ(float* *x = 0.0f, float* *y = 0.0f, float* *z = 0.0f) const;
-    
+
+    Vector3 GetUp() const;
+    tolua_outside void NodeGetUpXYZ @ GetUpXYZ(float* *x = 0.0f, float* *y = 0.0f, float* *z = 0.0f) const;
+  
+    Vector3 GetRight() const;
+    tolua_outside void NodeGetRightXYZ @ GetRightXYZ(float* *x = 0.0f, float* *y = 0.0f, float* *z = 0.0f) const;
+
     const Vector3& GetScale() const;
     tolua_outside void NodeGetScaleXYZ @ GetScaleXYZ(float* *x = 0.0f, float* *y = 0.0f, float* *z = 0.0f) const;
     
@@ -137,7 +143,13 @@ class Node : public Serializable
     
     Vector3 GetWorldDirection() const;
     tolua_outside void NodeGetWorldDirectionXYZ @ GetWorldDirectionXYZ(float* *x = 0.0f, float* *y = 0.0f, float* *z = 0.0f) const;
+
+    Vector3 GetWorldUp() const;    
+    tolua_outside void NodeGetWorldUpXYZ @ GetWorldUpXYZ(float* *x = 0.0f, float* *y = 0.0f, float* *z = 0.0f) const;
     
+    Vector3 GetWorldRight() const;
+    tolua_outside void NodeGetWorldRightXYZ @ GetWorldRightXYZ(float* *x = 0.0f, float* *y = 0.0f, float* *z = 0.0f) const;
+
     Vector3 GetWorldScale() const;
     tolua_outside void NodeGetWorldScaleXYZ @ GetWorldScaleXYZ(float* *x = 0.0f, float* *y = 0.0f, float* *z = 0.0f) const;
     
@@ -301,6 +313,22 @@ static void NodeGetDirectionXYZ(const Node* node, float* x, float* y, float* z)
     *z =  direction.z_;
 }
 
+static void NodeGetUpXYZ(const Node* node, float* x, float* y, float* z)
+{
+    const Vector3& up = node->GetUp();
+    *x =  up.x_;
+    *y =  up.y_;
+    *z =  up.z_;
+}
+
+static void NodeGetRightXYZ(const Node* node, float* x, float* y, float* z)
+{
+    const Vector3& right = node->GetRight();
+    *x =  right.x_;
+    *y =  right.y_;
+    *z =  right.z_;
+}
+
 static void NodeGetScaleXYZ(const Node* node, float* x, float* y, float* z)
 {
     const Vector3& scale = node->GetScale();
@@ -342,6 +370,22 @@ static void NodeGetWorldDirectionXYZ(const Node* node, float* x, float* y, float
     *z =  worldDirection.z_;
 }
 
+static void NodeGetWorldUpXYZ(const Node* node, float* x, float* y, float* z)
+{
+    Vector3 worldUp = node->GetWorldUp();
+    *x =  worldUp.x_;
+    *y =  worldUp.y_;
+    *z =  worldUp.z_;
+}
+
+static void NodeGetWorldRightXYZ(const Node* node, float* x, float* y, float* z)
+{
+    Vector3 worldRight = node->GetWorldRight();
+    *x =  worldRight.x_;
+    *y =  worldRight.y_;
+    *z =  worldRight.z_;
+}
+
 static void NodeGetWorldScaleXYZ(const Node* node, float* x, float* y, float* z)
 {
     Vector3 worldScale = node->GetWorldScale();

+ 4 - 0
Source/Engine/Script/APITemplates.h

@@ -611,6 +611,8 @@ template <class T> void RegisterNode(asIScriptEngine* engine, const char* classN
     engine->RegisterObjectMethod(className, "const Quaternion& get_rotation() const", asMETHOD(T, GetRotation), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "void set_direction(const Vector3&in)", asMETHOD(T, SetDirection), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "Vector3 get_direction() const", asMETHOD(T, GetDirection), asCALL_THISCALL);
+    engine->RegisterObjectMethod(className, "Vector3 get_up() const", asMETHOD(T, GetUp), asCALL_THISCALL);
+    engine->RegisterObjectMethod(className, "Vector3 get_right() const", asMETHOD(T, GetRight), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "void set_scale(const Vector3&in)", asMETHODPR(T, SetScale, (const Vector3&), void), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "const Vector3& get_scale() const", asMETHOD(T, GetScale), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "void set_worldPosition(const Vector3&in)", asMETHOD(T, SetWorldPosition), asCALL_THISCALL);
@@ -619,6 +621,8 @@ template <class T> void RegisterNode(asIScriptEngine* engine, const char* classN
     engine->RegisterObjectMethod(className, "Quaternion get_worldRotation()", asMETHOD(T, GetWorldRotation), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "void set_worldDirection(const Vector3&in)", asMETHOD(T, SetWorldDirection), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "Vector3 get_worldDirection()", asMETHOD(T, GetWorldDirection), asCALL_THISCALL);
+    engine->RegisterObjectMethod(className, "Vector3 get_worldUp()", asMETHOD(T, GetWorldUp), asCALL_THISCALL);
+    engine->RegisterObjectMethod(className, "Vector3 get_worldRight()", asMETHOD(T, GetWorldRight), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "void set_worldScale(const Vector3&in)", asMETHODPR(T, SetWorldScale, (const Vector3&), void), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "Vector3 get_worldScale()", asMETHOD(T, GetWorldScale), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "Matrix3x4 get_transform() const", asMETHOD(T, GetTransform), asCALL_THISCALL);

+ 3 - 0
Source/Engine/Script/MathAPI.cpp

@@ -47,6 +47,7 @@ static void RegisterMathFunctions(asIScriptEngine* engine)
     engine->RegisterGlobalProperty("const float M_DEGTORAD_2", (void*)&M_DEGTORAD_2);
     engine->RegisterGlobalProperty("const float M_RADTODEG", (void*)&M_RADTODEG);
     engine->RegisterGlobalProperty("const float M_PI", (void*)&M_PI);
+    engine->RegisterGlobalProperty("const float M_HALF_PI", (void*)&M_HALF_PI);
     engine->RegisterGlobalProperty("const int M_MIN_INT", (void*)&M_MIN_INT);
     engine->RegisterGlobalProperty("const int M_MAX_INT", (void*)&M_MAX_INT);
     engine->RegisterGlobalProperty("const uint M_MIN_UNSIGNED", (void*)&M_MIN_UNSIGNED);
@@ -436,11 +437,13 @@ static void RegisterQuaternion(asIScriptEngine* engine)
     engine->RegisterObjectMethod("Quaternion", "void FromEulerAngles(float, float, float)", asMETHOD(Quaternion, FromEulerAngles), asCALL_THISCALL);
     engine->RegisterObjectMethod("Quaternion", "void FromRotationTo(const Vector3&in, const Vector3&in)", asMETHOD(Quaternion, FromRotationTo), asCALL_THISCALL);
     engine->RegisterObjectMethod("Quaternion", "void FromAxes(const Vector3&in, const Vector3&in, const Vector3&in)", asMETHOD(Quaternion, FromAxes), asCALL_THISCALL);
+    engine->RegisterObjectMethod("Quaternion", "void FromLookRotation(const Vector3&in, const Vector3&in)", asMETHOD(Quaternion, FromLookRotation), asCALL_THISCALL);
     engine->RegisterObjectMethod("Quaternion", "void Normalize()", asMETHOD(Quaternion, Normalize), asCALL_THISCALL);
     engine->RegisterObjectMethod("Quaternion", "Quaternion Normalized() const", asMETHOD(Quaternion, Normalized), asCALL_THISCALL);
     engine->RegisterObjectMethod("Quaternion", "Quaternion Inverse() const", asMETHOD(Quaternion, Inverse), asCALL_THISCALL);
     engine->RegisterObjectMethod("Quaternion", "float DotProduct(const Quaternion&in) const", asMETHOD(Quaternion, DotProduct), asCALL_THISCALL);
     engine->RegisterObjectMethod("Quaternion", "Quaternion Slerp(Quaternion, float) const", asMETHOD(Quaternion, Slerp), asCALL_THISCALL);
+    engine->RegisterObjectMethod("Quaternion", "Quaternion Nlerp(Quaternion, float, bool) const", asMETHOD(Quaternion, Nlerp), asCALL_THISCALL);
     engine->RegisterObjectMethod("Quaternion", "bool Equals(const Quaternion&in) const", asMETHOD(Quaternion, Equals), asCALL_THISCALL);
     engine->RegisterObjectMethod("Quaternion", "String ToString() const", asMETHOD(Quaternion, ToString), asCALL_THISCALL);
     engine->RegisterObjectMethod("Quaternion", "Vector3 get_eulerAngles() const", asMETHOD(Quaternion, EulerAngles), asCALL_THISCALL);