PhysicsWorld.pkg 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. $#include "Physics/PhysicsWorld.h"
  2. struct PhysicsRaycastResult
  3. {
  4. PhysicsRaycastResult();
  5. ~PhysicsRaycastResult();
  6. Vector3 position_ @ position;
  7. Vector3 normal_ @ normal;
  8. float distance_ @ distance;
  9. float hitFraction_ @ hitFraction;
  10. RigidBody* body_ @ body;
  11. };
  12. class PhysicsWorld : public Component
  13. {
  14. void Update(float timeStep);
  15. void UpdateCollisions();
  16. void SetFps(int fps);
  17. void SetGravity(const Vector3& gravity);
  18. void SetMaxSubSteps(int num);
  19. void SetNumIterations(int num);
  20. void SetUpdateEnabled(bool enable);
  21. void SetInterpolation(bool enable);
  22. void SetInternalEdge(bool enable);
  23. void SetSplitImpulse(bool enable);
  24. void SetMaxNetworkAngularVelocity(float velocity);
  25. // void Raycast(const Ray& ray, float maxDistance, unsigned collisionMask = M_MAX_UNSIGNED);
  26. tolua_outside const PODVector<PhysicsRaycastResult>& PhysicsWorldRaycast @ Raycast(const Ray& ray, float maxDistance, unsigned collisionMask = M_MAX_UNSIGNED);
  27. // void RaycastSingle(PhysicsRaycastResult& result, const Ray& ray, float maxDistance, unsigned collisionMask = M_MAX_UNSIGNED);
  28. tolua_outside PhysicsRaycastResult PhysicsWorldRaycastSingle @ RaycastSingle(const Ray& ray, float maxDistance, unsigned collisionMask = M_MAX_UNSIGNED);
  29. // void RaycastSingleSegmented(PhysicsRaycastResult& result, const Ray& ray, float maxDistance, float segmentDistance, unsigned collisionMask = M_MAX_UNSIGNED);
  30. tolua_outside PhysicsRaycastResult PhysicsWorldRaycastSingleSegmented @ RaycastSingleSegmented(const Ray& ray, float maxDistance, float segmentDistance, unsigned collisionMask = M_MAX_UNSIGNED);
  31. // void SphereCast(PhysicsRaycastResult& result, const Ray& ray, float radius, float maxDistance, unsigned collisionMask = M_MAX_UNSIGNED);
  32. tolua_outside PhysicsRaycastResult PhysicsWorldSphereCast @ SphereCast(const Ray& ray, float radius, float maxDistance, unsigned collisionMask = M_MAX_UNSIGNED);
  33. // void ConvexCast(PhysicsRaycastResult& result, CollisionShape* shape, const Vector3& startPos, const Quaternion& startRot, const Vector3& endPos, const Quaternion& endRot, unsigned collisionMask = M_MAX_UNSIGNED);
  34. tolua_outside PhysicsRaycastResult PhysicsWorldConvexCast @ ConvexCast(CollisionShape* shape, const Vector3& startPos, const Quaternion& startRot, const Vector3& endPos, const Quaternion& endRot, unsigned collisionMask = M_MAX_UNSIGNED);
  35. // void GetRigidBodies(PODVector<RigidBody*>& result, const Sphere& sphere, unsigned collisionMask = M_MAX_UNSIGNED);
  36. tolua_outside const PODVector<RigidBody*>& PhysicsWorldGetRigidBodiesSphere @ GetRigidBodies(const Sphere& sphere, unsigned collisionMask = M_MAX_UNSIGNED);
  37. // void GetRigidBodies(PODVector<RigidBody*>& result, const BoundingBox& box, unsigned collisionMask = M_MAX_UNSIGNED);
  38. tolua_outside const PODVector<RigidBody*>& PhysicsWorldGetRigidBodiesBox @ GetRigidBodies(const BoundingBox& box, unsigned collisionMask = M_MAX_UNSIGNED);
  39. // void GetRigidBodies(PODVector<RigidBody*>& result, const RigidBody* body);
  40. tolua_outside const PODVector<RigidBody*>& PhysicsWorldGetRigidBodiesBody @ GetRigidBodies(const RigidBody* body);
  41. // void GetCollidingBodies(PODVector<RigidBody*>& result, const RigidBody* body);
  42. tolua_outside const PODVector<RigidBody*>& PhysicsWorldGetCollidingBodies @ GetCollidingBodies(const RigidBody* body);
  43. void DrawDebugGeometry(bool depthTest);
  44. void RemoveCachedGeometry(Model* model);
  45. Vector3 GetGravity() const;
  46. int GetMaxSubSteps() const;
  47. int GetNumIterations() const;
  48. bool IsUpdateEnabled() const;
  49. bool GetInterpolation() const;
  50. bool GetInternalEdge() const;
  51. bool GetSplitImpulse() const;
  52. int GetFps() const;
  53. float GetMaxNetworkAngularVelocity() const;
  54. tolua_property__get_set Vector3 gravity;
  55. tolua_property__get_set int maxSubSteps;
  56. tolua_property__get_set int numIterations;
  57. tolua_property__is_set bool updateEnabled;
  58. tolua_property__get_set bool interpolation;
  59. tolua_property__get_set bool internalEdge;
  60. tolua_property__get_set bool splitImpulse;
  61. tolua_property__get_set int fps;
  62. tolua_property__get_set float maxNetworkAngularVelocity;
  63. };
  64. ${
  65. static const PODVector<PhysicsRaycastResult>& PhysicsWorldRaycast(PhysicsWorld* physicsWorld, const Ray& ray, float maxDistance, unsigned collisionMask = M_MAX_UNSIGNED)
  66. {
  67. static PODVector<PhysicsRaycastResult> result;
  68. result.Clear();
  69. physicsWorld->Raycast(result, ray, maxDistance, collisionMask);
  70. return result;
  71. }
  72. static PhysicsRaycastResult PhysicsWorldRaycastSingle(PhysicsWorld* physicsWorld, const Ray& ray, float maxDistance, unsigned collisionMask = M_MAX_UNSIGNED)
  73. {
  74. PhysicsRaycastResult result;
  75. physicsWorld->RaycastSingle(result, ray, maxDistance, collisionMask);
  76. return result;
  77. }
  78. static PhysicsRaycastResult PhysicsWorldRaycastSingleSegmented(PhysicsWorld* physicsWorld, const Ray& ray, float maxDistance, float segmentDistance, unsigned collisionMask = M_MAX_UNSIGNED)
  79. {
  80. PhysicsRaycastResult result;
  81. physicsWorld->RaycastSingleSegmented(result, ray, maxDistance, segmentDistance, collisionMask);
  82. return result;
  83. }
  84. PhysicsRaycastResult PhysicsWorldSphereCast(PhysicsWorld* physicsWorld, const Ray& ray, float radius, float maxDistance, unsigned collisionMask = M_MAX_UNSIGNED)
  85. {
  86. PhysicsRaycastResult result;
  87. physicsWorld->SphereCast(result, ray, radius, maxDistance, collisionMask);
  88. return result;
  89. }
  90. PhysicsRaycastResult PhysicsWorldConvexCast(PhysicsWorld* physicsWorld, CollisionShape* shape, const Vector3& startPos, const Quaternion& startRot, const Vector3& endPos, const Quaternion& endRot, unsigned collisionMask = M_MAX_UNSIGNED)
  91. {
  92. PhysicsRaycastResult result;
  93. physicsWorld->ConvexCast(result, shape, startPos, startRot, endPos, endRot, collisionMask);
  94. return result;
  95. }
  96. static const PODVector<RigidBody*>& PhysicsWorldGetRigidBodiesSphere(PhysicsWorld* physicsWorld, const Sphere& sphere, unsigned collisionMask = M_MAX_UNSIGNED)
  97. {
  98. static PODVector<RigidBody*> result;
  99. result.Clear();
  100. physicsWorld->GetRigidBodies(result, sphere, collisionMask);
  101. return result;
  102. }
  103. static const PODVector<RigidBody*>& PhysicsWorldGetRigidBodiesBox(PhysicsWorld* physicsWorld, const BoundingBox& box, unsigned collisionMask = M_MAX_UNSIGNED)
  104. {
  105. static PODVector<RigidBody*> result;
  106. result.Clear();
  107. physicsWorld->GetRigidBodies(result, box, collisionMask);
  108. return result;
  109. }
  110. static const PODVector<RigidBody*>& PhysicsWorldGetRigidBodiesBody(PhysicsWorld* physicsWorld, const RigidBody* body)
  111. {
  112. static PODVector<RigidBody*> result;
  113. result.Clear();
  114. physicsWorld->GetRigidBodies(result, body);
  115. return result;
  116. }
  117. static const PODVector<RigidBody*>& PhysicsWorldGetCollidingBodies(PhysicsWorld* physicsWorld, const RigidBody* body)
  118. {
  119. static PODVector<RigidBody*> result;
  120. result.Clear();
  121. physicsWorld->GetCollidingBodies(result, body);
  122. return result;
  123. }
  124. $}