Manual_Math.h 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. // Copyright (c) 2008-2023 the Urho3D project
  2. // License: MIT
  3. #pragma once
  4. #include "../Math/Polyhedron.h"
  5. #include "../Math/Ray.h"
  6. namespace Urho3D
  7. {
  8. // explicit IntVector2::IntVector2(const int* data) noexcept | File: ../Math/Vector2.h
  9. static void IntVector2_IntVector2_Data(CScriptArray* data, IntVector2* ptr)
  10. {
  11. new(ptr) IntVector2(static_cast<int*>(data->At(0)));
  12. }
  13. #define REGISTER_CLASS_MANUAL_PART_IntVector2() \
  14. /* explicit IntVector2::IntVector2(const int* data) noexcept | File: ../Math/Vector2.h */ \
  15. engine->RegisterObjectBehaviour("IntVector2", asBEHAVE_CONSTRUCT, "void f(int[]&)", AS_FUNCTION_OBJLAST(IntVector2_IntVector2_Data), AS_CALL_CDECL_OBJLAST);
  16. // const int* IntVector2::Data() const | File: ../Math/Vector2.h
  17. template <class T> CScriptArray* IntVector2_Data(T* ptr)
  18. {
  19. return BufferToArray<int>(ptr->Data(), 2, "int[]");
  20. }
  21. #define REGISTER_MEMBERS_MANUAL_PART_IntVector2() \
  22. /* const int* IntVector2::Data() const | File: ../Math/Vector2.h */ \
  23. engine->RegisterObjectMethod(className, "int[]& get_data() const", AS_FUNCTION_OBJLAST(IntVector2_Data<T>), AS_CALL_CDECL_OBJLAST);
  24. // ========================================================================================
  25. // explicit Vector2::Vector2(const float* data) noexcept | File: ../Math/Vector2.h
  26. static void Vector2_Vector2_Data(CScriptArray* data, Vector2* ptr)
  27. {
  28. new(ptr) Vector2(static_cast<float*>(data->At(0)));
  29. }
  30. #define REGISTER_CLASS_MANUAL_PART_Vector2() \
  31. /* explicit Vector2::Vector2(const float* data) noexcept | File: ../Math/Vector2.h */ \
  32. engine->RegisterObjectBehaviour("Vector2", asBEHAVE_CONSTRUCT, "void f(float[]&)", AS_FUNCTION_OBJLAST(Vector2_Vector2_Data), AS_CALL_CDECL_OBJLAST);
  33. // const float* Vector2::Data() const | File: ../Math/Vector2.h
  34. template <class T> CScriptArray* Vector2_Data(T* ptr)
  35. {
  36. return BufferToArray<float>(ptr->Data(), 2, "float[]");
  37. }
  38. #define REGISTER_MEMBERS_MANUAL_PART_Vector2() \
  39. /* const float* Vector2::Data() const | File: ../Math/Vector2.h */ \
  40. engine->RegisterObjectMethod(className, "float[]& get_data() const", AS_FUNCTION_OBJLAST(Vector2_Data<T>), AS_CALL_CDECL_OBJLAST);
  41. // ========================================================================================
  42. // explicit IntVector3::IntVector3(const int* data) noexcept | File: ../Math/Vector3.h
  43. static void IntVector3_IntVector3_Data(CScriptArray* data, IntVector3* ptr)
  44. {
  45. new(ptr) IntVector3(static_cast<int*>(data->At(0)));
  46. }
  47. #define REGISTER_CLASS_MANUAL_PART_IntVector3() \
  48. /* explicit IntVector3::IntVector3(const int* data) noexcept | File: ../Math/Vector3.h */ \
  49. engine->RegisterObjectBehaviour("IntVector3", asBEHAVE_CONSTRUCT, "void f(int[]&)", AS_FUNCTION_OBJLAST(IntVector3_IntVector3_Data), AS_CALL_CDECL_OBJLAST);
  50. // const int* IntVector3::Data() const | File: ../Math/Vector3.h
  51. template <class T> CScriptArray* IntVector3_Data(IntVector3* ptr)
  52. {
  53. return BufferToArray<int>(ptr->Data(), 3, "int[]");
  54. }
  55. #define REGISTER_MEMBERS_MANUAL_PART_IntVector3() \
  56. /* const int* IntVector3::Data() const | File: ../Math/Vector3.h */ \
  57. engine->RegisterObjectMethod(className, "int[]& get_data() const", AS_FUNCTION_OBJLAST(IntVector3_Data<T>), AS_CALL_CDECL_OBJLAST);
  58. // ========================================================================================
  59. // explicit Vector3::Vector3(const float* data) noexcept | File: ../Math/Vector3.h
  60. static void Vector3_Vector3_Data(CScriptArray* data, Vector3* ptr)
  61. {
  62. new(ptr) Vector3(static_cast<float*>(data->At(0)));
  63. }
  64. #define REGISTER_CLASS_MANUAL_PART_Vector3() \
  65. /* explicit Vector3::Vector3(const float* data) noexcept | File: ../Math/Vector3.h */ \
  66. engine->RegisterObjectBehaviour("Vector3", asBEHAVE_CONSTRUCT, "void f(float[]&)", AS_FUNCTION_OBJLAST(Vector3_Vector3_Data), AS_CALL_CDECL_OBJLAST);
  67. // const float* Vector3::Data() const | File: ../Math/Vector3.h
  68. template <class T> CScriptArray* Vector3_Data(T* ptr)
  69. {
  70. return BufferToArray<float>(ptr->Data(), 3, "float[]");
  71. }
  72. #define REGISTER_MEMBERS_MANUAL_PART_Vector3() \
  73. /* const float* Vector3::Data() const | File: ../Math/Vector3.h */ \
  74. engine->RegisterObjectMethod(className, "float[]& get_data() const", AS_FUNCTION_OBJLAST(Vector3_Data<T>), AS_CALL_CDECL_OBJLAST);
  75. // ========================================================================================
  76. // explicit Vector4::Vector4(const float* data) noexcept | File: ../Math/Vector4.h
  77. static void Vector4_Vector4_Data(CScriptArray* data, Vector4* ptr)
  78. {
  79. new(ptr) Vector4(static_cast<float*>(data->At(0)));
  80. }
  81. #define REGISTER_CLASS_MANUAL_PART_Vector4() \
  82. /* explicit Vector4::Vector4(const float* data) noexcept | File: ../Math/Vector4.h */ \
  83. engine->RegisterObjectBehaviour("Vector4", asBEHAVE_CONSTRUCT, "void f(float[]&)", AS_FUNCTION_OBJLAST(Vector4_Vector4_Data), AS_CALL_CDECL_OBJLAST);
  84. // const float* Vector4::Data() const | File: ../Math/Vector4.h
  85. template <class T> CScriptArray* Vector4_Data(T* ptr)
  86. {
  87. return BufferToArray<float>(ptr->Data(), 4, "float[]");
  88. }
  89. #define REGISTER_MEMBERS_MANUAL_PART_Vector4() \
  90. /* const float* Vector4::Data() const | File: ../Math/Vector4.h */ \
  91. engine->RegisterObjectMethod(className, "float[]& get_data() const", AS_FUNCTION_OBJLAST(Vector4_Data<T>), AS_CALL_CDECL_OBJLAST);
  92. // ========================================================================================
  93. // explicit IntRect::IntRect(const int* data) noexcept | File: ../Math/Rect.h
  94. static void IntRect_IntRect_Data(CScriptArray* data, IntRect* ptr)
  95. {
  96. new(ptr) IntRect(static_cast<int*>(data->At(0)));
  97. }
  98. #define REGISTER_CLASS_MANUAL_PART_IntRect() \
  99. /* explicit IntRect::IntRect(const int* data) noexcept | File: ../Math/Rect.h */ \
  100. engine->RegisterObjectBehaviour("IntRect", asBEHAVE_CONSTRUCT, "void f(int[]&)", AS_FUNCTION_OBJLAST(IntRect_IntRect_Data), AS_CALL_CDECL_OBJLAST);
  101. // const int* IntRect::Data() const | File: ../Math/Rect.h
  102. template <class T> CScriptArray* IntRect_Data(T* ptr)
  103. {
  104. return BufferToArray<int>(ptr->Data(), 4, "int[]");
  105. }
  106. #define REGISTER_MEMBERS_MANUAL_PART_IntRect() \
  107. /* const int* IntRect::Data() const | File: ../Math/Rect.h */ \
  108. engine->RegisterObjectMethod(className, "int[]& get_data() const", AS_FUNCTION_OBJLAST(IntRect_Data<T>), AS_CALL_CDECL_OBJLAST);
  109. // ========================================================================================
  110. // explicit Color::Color(const float* data) noexcept | File: ../Math/Color.h
  111. static void Color_Color_Data(CScriptArray* data, Color* ptr)
  112. {
  113. new(ptr) Color(static_cast<float*>(data->At(0)));
  114. }
  115. #define REGISTER_CLASS_MANUAL_PART_Color() \
  116. /* explicit Color::Color(const float* data) noexcept | File: ../Math/Color.h */ \
  117. engine->RegisterObjectBehaviour("Color", asBEHAVE_CONSTRUCT, "void f(float[]&)", AS_FUNCTION_OBJLAST(Color_Color_Data), AS_CALL_CDECL_OBJLAST);
  118. // const float* Color::Data() const | File: ../Math/Color.h
  119. template <class T> CScriptArray* Color_Data(T* ptr)
  120. {
  121. return BufferToArray<float>(ptr->Data(), 4, "float[]");
  122. }
  123. #define REGISTER_MEMBERS_MANUAL_PART_Color() \
  124. /* const float* Color::Data() const | File: ../Math/Color.h */ \
  125. engine->RegisterObjectMethod(className, "float[]& get_data() const", AS_FUNCTION_OBJLAST(Color_Data<T>), AS_CALL_CDECL_OBJLAST);
  126. // ========================================================================================
  127. // float Ray::HitDistance(const Vector3& v0, const Vector3& v1, const Vector3& v2, Vector3* outNormal = nullptr, Vector3* outBary = nullptr) const | File: ../Math/Ray.h
  128. template <class T> float Ray_HitDistance(const Vector3& v0, const Vector3& v1, const Vector3& v2, T* ptr)
  129. {
  130. return ptr->HitDistance(v0, v1, v2);
  131. }
  132. #define REGISTER_MEMBERS_MANUAL_PART_Ray() \
  133. /* float Ray::HitDistance(const Vector3& v0, const Vector3& v1, const Vector3& v2, Vector3* outNormal = nullptr, Vector3* outBary = nullptr) const | File: ../Math/Ray.h */ \
  134. engine->RegisterObjectMethod(className, "float HitDistance(const Vector3&in, const Vector3&in, const Vector3&in) const", AS_FUNCTION_OBJLAST(Ray_HitDistance<T>), AS_CALL_CDECL_OBJLAST);
  135. // ========================================================================================
  136. // Vector3 Frustum::vertices_[NUM_FRUSTUM_VERTICES] | File: ../Math/Frustum.h
  137. template <class T> Vector3 Frustum_GetVertex(i32 index, T* ptr)
  138. {
  139. if (index < 0 || index >= NUM_FRUSTUM_VERTICES)
  140. return Vector3::ZERO;
  141. return ptr->vertices_[index];
  142. }
  143. #define REGISTER_MEMBERS_MANUAL_PART_Frustum() \
  144. /* Vector3 Frustum::vertices_[NUM_FRUSTUM_VERTICES] | File: ../Math/Frustum.h */ \
  145. engine->RegisterObjectMethod(className, "Vector3 get_vertices(int) const", AS_FUNCTION_OBJLAST(Frustum_GetVertex<T>), AS_CALL_CDECL_OBJLAST);
  146. // ========================================================================================
  147. // Vector<Vector<Vector3>> Polyhedron::faces_ | File: ../Math/Polyhedron.h
  148. template <class T> i32 Polyhedron_GetNumFaces(T* ptr)
  149. {
  150. return ptr->faces_.Size();
  151. }
  152. // Vector<Vector<Vector3>> Polyhedron::faces_ | File: ../Math/Polyhedron.h
  153. template <class T> CScriptArray* Polyhedron_GetFace(i32 index, T* ptr)
  154. {
  155. Vector<Vector3> face;
  156. if (index >= 0 && index < ptr->faces_.Size())
  157. face = ptr->faces_[index];
  158. return VectorToArray<Vector3>(face, "Array<Vector3>");
  159. }
  160. #define REGISTER_MEMBERS_MANUAL_PART_Polyhedron() \
  161. /* Vector<Vector<Vector3>> Polyhedron::faces_ | File: ../Math/Polyhedron.h */ \
  162. engine->RegisterObjectMethod(className, "int get_numFaces() const", AS_FUNCTION_OBJLAST(Polyhedron_GetNumFaces<T>), AS_CALL_CDECL_OBJLAST); \
  163. engine->RegisterObjectMethod(className, "Array<Vector3>@ get_face(int) const", AS_FUNCTION_OBJLAST(Polyhedron_GetFace<T>), AS_CALL_CDECL_OBJLAST);
  164. }